资讯动态

TOFlow 视频增强实战指南:基于任务导向光流实现视频插帧与超分辨率(MMagic)

发布时间:2026/9/29 2:36:55 来源:尧图企业网站定制
媒体生成计算机视觉深度学习人工智能大模型【免费下载链接】mmagicOpenMMLab Multimodal Advanced, Generative, and Intelligent Creation Toolbox. Unlock the magic : Generative-AI (AIGC), easy-to-use APIs, awsome model zoo, diffusion models, for text-to-image generation, image/video restoration/enhancement, etc.项目地址https://gitcode.com/gh_mirrors/mm/mmagic点击查看免费下载本文以 MMagic 仓库中 TOFlow 的官方配置与源码为基础系统讲解 Task-Oriented Flow任务导向光流这一 IJCV 2019 算法在视频插帧Video Frame Interpolation与视频超分辨率Video Super-Resolution两大任务上的落地实现。读完本文你将掌握 TOFlow 在 MMagic 中的预训练模型评测结果、训练与测试命令、插帧/超分两套配置文件的参数含义以及TOFlowVFINet与TOFlowVSRNet的前向计算链路和 SPyNet 光流金字塔的底层原理。TOFlow 算法背景与核心思想TOFlowTask-Oriented Flow出自论文Video Enhancement with Task-Oriented FlowIJCV 2019arXiv:1711.09078其核心观点是传统光流如 FlowNet、SPyNet以光流估计本身为优化目标而视频增强任务真正需要的是以任务为导向的运动表征——即通过学习得到的、专门服务于插帧与超分重建的运动场而非物理意义上最精确的光流。在 MMagic 中TOFlow 被注册为两个任务方向的模型视频插帧video interpolation基于相邻两帧如 Vimeo90k-triplet 的im1.png与im3.png估计中间帧im2.png视频超分辨率video super-resolution输入低分辨率连续帧输出对应的高分辨率参考帧。仓库对应的算法实现位于 mmagic/models/editors/tof/ 目录包含tof_vfi_net.py插帧网络与tof_vsr_net.py超分网络两个核心模块。预训练模型测试结果TOFlow 在 RGB 通道上评估评估指标为PSNR / SSIM测试集为 Vimeo90k-triplet。以下为仓库中 5 个插帧预训练模型对应不同预训练 SPyNet 初始化与 1 个超分模型的评测结果算法预训练 SPyNetVimeo90k-tripletGPU 信息下载tof_vfi_spynet_chair_nobn_1xb1_vimeo90kspynet_chairs_final33.3294 / 0.94651 (Tesla PG503-216)模型 | 日志tof_vfi_spynet_kitti_nobn_1xb1_vimeo90kspynet_chairs_final33.3339 / 0.94661 (Tesla PG503-216)模型 | 日志tof_vfi_spynet_sintel_clean_nobn_1xb1_vimeo90kspynet_chairs_final33.3170 / 0.94641 (Tesla PG503-216)模型 | 日志tof_vfi_spynet_sintel_final_nobn_1xb1_vimeo90kspynet_chairs_final33.3237 / 0.94651 (Tesla PG503-216)模型 | 日志tof_vfi_spynet_pytoflow_nobn_1xb1_vimeo90kspynet_chairs_final33.3426 / 0.94671 (Tesla PG503-216)模型 | 日志注意由于batch_size1预训练的 SPyNet 不包含 BN 层这与https://github.com/Coldog2333/pytoflow的实现保持一致即配置中flow_cfgdict(norm_cfgNone, ...)的原因。插帧各变体仅预训练 SPyNet 的权重来源不同插帧网络结构与评测流程完全一致最终指标也高度接近PSNR 均在 33.32 左右SSIM 在 0.946 上下可直接作为消融参考。超分模型对应配置 tof_x4_official_vimeo90k.py官方权重在 Vid4 测试集上为 PSNR 24.4377 / SSIM 0.7433数据登记于 metafile.yml。快速开始训练TOF 的训练仅支持视频插帧任务以插帧配置 tof_spynet-chair-wobn_1xb1_vimeo90k-triplet.py 为例# CPU 上训练 CUDA_VISIBLE_DEVICES-1 python tools/train.py configs/tof/tof_spynet-chair-wobn_1xb1_vimeo90k-triplet.py # 单个 GPU 上训练 python tools/train.py configs/tof/tof_spynet-chair-wobn_1xb1_vimeo90k-triplet.py # 多个 GPU 上训练示例为 8 卡 ./tools/dist_train.sh configs/tof/tof_spynet-chair-wobn_1xb1_vimeo90k-triplet.py 8更多训练细节可参考 train_test.md 中的Train a model部分。训练阶段的完整数据与优化器配置继承自 configs/base/models/base_tof.py关键参数如下数据BasicFramesDatasetdata_rootdata/vimeo_triplet训练/验证分别使用tri_trainlist.txt与tri_testlist.txt通过load_frames_listdict(img[im1.png, im3.png], gt[im2.png])指定以第 1、3 帧为输入、第 2 帧为监督训练循环IterBasedTrainLoop总迭代 1,000,000 次epoch_length5000即 5000 iters 相当于 1 epoch每 5000 iters 验证一次优化器Adamlr5e-5betas(0.9, 0.99)weight_decay1e-4学习率调度MultiStepLRby_epochFalsegamma0.5里程碑为[200000, 400000, 600000, 800000]HookCheckpoint 每 5000 iters 保存一次同时保存优化器状态Logger 每 100 iters 输出一次。快速开始测试TOF 的测试同时支持视频插帧与视频超分辨率两种任务两条测试链路分别使用不同的配置与预训练权重。任务 1视频插帧# CPU 上测试 CUDA_VISIBLE_DEVICES-1 python tools/test.py configs/tof/tof_spynet-chair-wobn_1xb1_vimeo90k-triplet.py https://download.openmmlab.com/mmediting/video_interpolators/toflow/pretrained_spynet_chair_20220321-4d82e91b.pth # 单个 GPU 上测试 python tools/test.py configs/tof/tof_spynet-chair-wobn_1xb1_vimeo90k-triplet.py https://download.openmmlab.com/mmediting/video_interpolators/toflow/pretrained_spynet_chair_20220321-4d82e91b.pth # 多个 GPU 上测试 ./tools/dist_test.sh configs/tof/tof_spynet-chair-wobn_1xb1_vimeo90k-triplet.py https://download.openmmlab.com/mmediting/video_interpolators/toflow/pretrained_spynet_chair_20220321-4d82e91b.pth 8注意插帧测试时传入的是预训练 SPyNet 权重而非整个插帧模型的权重因为配置中load_pretrained_spynet会将该权重加载进TOFlowVFINet.flow_cfg.pretrained。任务 2视频超分辨率# CPU 上测试 CUDA_VISIBLE_DEVICES-1 python tools/test.py configs/tof/tof_x4_official_vimeo90k.py https://download.openmmlab.com/mmediting/restorers/tof/tof_x4_vimeo90k_official-a569ff50.pth # 单个 GPU 上测试 python tools/test.py configs/tof/tof_x4_official_vimeo90k.py https://download.openmmlab.com/mmediting/restorers/tof/tof_x4_vimeo90k_official-a569ff50.pth # 多个 GPU 上测试 ./tools/dist_test.sh configs/tof/tof_x4_official_vimeo90k.py https://download.openmmlab.com/mmediting/restorers/tof/tof_x4_vimeo90k_official-a569ff50.pth 8更多测试细节可参考 train_test.md 中的Test a pre-trained model部分。配置文件逐项解析插帧配置tof_spynet-chair-wobn_1xb1_vimeo90k-triplet.py_base_ ../_base_/models/base_tof.py experiment_name tof_spynet-chair-wobn_1xb1_vimeo90k-triplet work_dir f./work_dirs/{experiment_name} save_dir ./work_dirs # pretrained SPyNet load_pretrained_spynet https://download.openmmlab.com/mmediting/ \ video_interpolators/toflow/pretrained_spynet_chair_20220321-4d82e91b.pth model dict( typeBasicInterpolator, generatordict( typeTOFlowVFINet, flow_cfgdict(norm_cfgNone, pretrainedload_pretrained_spynet)), pixel_lossdict(typeCharbonnierLoss, loss_weight1.0, reductionmean), train_cfgdict(), test_cfgdict(), required_frames2, step_frames1, init_cfgNone, data_preprocessordict( typeDataPreprocessor, mean[0.485 * 255, 0.456 * 255, 0.406 * 255], std[0.229 * 255, 0.224 * 255, 0.225 * 255], pad_size_divisor16, pad_modereflect, ))关键参数说明typeBasicInterpolator外层模型封装定义于 mmagic/models/base_models/basic_interpolator.py负责把生成器、像素损失与数据预处理器组装为可训练的插帧模型generator.typeTOFlowVFINet插帧生成器实现在 mmagic/models/editors/tof/tof_vfi_net.pyflow_cfg.norm_cfgNone预训练 SPyNet 不含 BatchNormwobn without BN是batch_size1训练的前提pixel_lossCharbonnierLossloss_weight1.0reductionmeanrequired_frames2, step_frames1每次推理输入相邻 2 帧、每次前进一步用于滑动窗口式连续插帧data_preprocessormean/std 按 ImageNet 均值方差 ×255 归一化pad_size_divisor16保证输入尺寸可被 16 整除SPyNet 金字塔下采样 4 次最小分辨率 1/16pad_modereflect反射填充。其余四个插帧变体kitti / sintel-clean / sintel-final / pytoflow与该配置结构完全一致仅load_pretrained_spynet指向不同的预训练 SPyNet 权重。超分配置tof_x4_official_vimeo90k.py# only testing the official model is supported _base_ ../_base_/default_runtime.py model dict( typeEDVR, # use the shared model with EDVR generatordict(typeTOFlowVSRNet, adapt_official_weightsTrue), pixel_lossdict(typeCharbonnierLoss, loss_weight1.0, reductionsum), data_preprocessordict( typeDataPreprocessor, mean[0.485 * 255, 0.456 * 255, 0.406 * 255], std[0.229 * 255, 0.224 * 255, 0.225 * 255], ))要点说明该配置只支持测试官方权重配置首行注释即声明only testing the official model is supported不用于从零训练typeEDVR复用 EDVR 的模型封装作为外层容器generator.typeTOFlowVSRNet, adapt_official_weightsTrueadapt_official_weights为 True 时网络会将第 0 帧重排为参考帧lrs[:, [3, 0, 1, 2, 4, 5, 6]]以对齐官方权重加载顺序若要从头训练则应设为 False参考帧变为中间第 3 帧数据侧val_pipeline使用GenerateFrameIndiceswithPadding(paddingreflection_circle)对边界做圆形反射补帧BasicFramesDataset配置data_rootdata/Vid4、num_input_frames7、data_prefixdict(imgBIx4up_direct, gtGT)即输入为 4 倍双三次上采样的低分辨率帧GT 为原始高清帧——TOFlow 的超分实现采用预上采样策略LR 与 GT 尺寸一致评估器Evaluator配置了MAE、PSNR、SSIM三个指标。源码级原理剖析插帧网络TOFlowVFINet双向半光流 残差重建从 tof_vfi_net.py 的forward可以看到插帧的完整计算链flow_10 self.spynet(imgs[:, 0], imgs[:, 1]).permute(0, 2, 3, 1) flow_01 self.spynet(imgs[:, 1], imgs[:, 0]).permute(0, 2, 3, 1) warp_frame0 flow_warp(imgs[:, 0], flow_01 / 2) warp_frame1 flow_warp(imgs[:, 1], flow_10 / 2) warp_frames torch.stack([warp_frame0, warp_frame1], dim1) output self.resnet(warp_frames)步骤拆解用 SPyNet 分别估计两帧之间的双向光流flow_10帧1→帧0与flow_01帧0→帧1假设中间时刻位于两帧正中将光流减半/2分别把帧0、帧1 warp 到中间时刻得到两帧的中间对齐版本将两个 warp 结果堆叠为 6 通道输入(b, 2, 3, h, w)送入三层的ToFResBlock重建网络ToFResBlock输出与两帧均值frames.mean(dim1)做残差相加得到最终插值帧见 tof_vfi_net.py。ToFResBlock本身是 3 层 ResNet 式结构Conv2d(6→64, k9)Conv2d(64→64, k1)Conv2d(64→3, k1)中间穿插 ReLU最终学习的是平均帧之上的残差。SPyNet4 级空间金字塔光流估计SPyNettof_vfi_net.py是 TOFlow 内部的光流估计器其特点与通用 SPyNet 的差异在注释中明确说明TOFlow 版本的基本模块可能包含 BN由norm_cfg控制且归一化/反归一化交由外层 TOFlow 处理。实现要点输入两帧后通过 3 次avg_pool2d核 2、步长 2构建 4 级图像金字塔1/2、1/4、1/8、1/16从最粗糙的 1/16 分辨率开始以零初始化光流逐级上采样bilinear插值并×2.0每级用BasicModule修正光流残差flow flow_up basic_modulei, flow_up]))BasicModule输入 8 通道 参考帧(3) 被 warp 后的支撑帧(3) 上一级光流(2)输出 2 通道光流增量卷积层通道为 32→64→32→16→2前 4 层 7×7 卷积 ReLU最后一层无激活。VSR 版本中的SPyNettof_vsr_net.py结构相同但每个BasicModule固定使用norm_cfgdict(typeBN)与官方超分实现一致。超分网络TOFlowVSRNet7 帧光流对齐 卷积重建tof_vsr_net.py 的forward展示了超分重建流程lr_ref lrs[:, self.ref_idx, :, :, :] lr_aligned [] for i in range(7): # 7 frames if i self.ref_idx: lr_aligned.append(lr_ref) else: lr_supp lrs[:, i, :, :, :] flow self.spynet(lr_ref, lr_supp) lr_aligned.append(flow_warp(lr_supp, flow.permute(0, 2, 3, 1)))输入为 7 帧预上采样 LR 序列(b, 7, 3, h, w)先选定参考帧官方权重模式下为第 0 帧训练模式下为第 3 帧对除参考帧外的每一帧用 SPyNet 估计其到参考帧的光流再 warp 到参考帧坐标系得到 7 个对齐帧对齐帧拼接为 21 通道3×7依次经过Conv2d(21→64, k9)、Conv2d(64→64, k9)、Conv2d(64→64, k1)、Conv2d(64→3, k1)四层卷积最终输出与lr_ref残差相加得到 HR 帧。这套先对齐、再重建的框架正是任务导向光流的体现光流被训练为最小化最终重建误差而非最小化光流本身的端点误差。测试验证与质量保障仓库为两个网络分别提供单元测试可从测试用例中验证上述前向逻辑的输入输出约定tests/test_models/test_editors/test_tof/test_tof_vfi_net.py验证TOFlowVFINet对(b, 2, 3, h, w)输入输出(b, 3, h, w)的插值帧tests/test_models/test_editors/test_tof/test_tof_vsr_net.py验证TOFlowVSRNet对(b, 7, 3, h, w)输入输出(b, 3, h, w)的 SR 帧。如需复现评测可下载对应权重后按上文快速开始测试中的命令执行插帧的验证/测试评估器为MAE / PSNR / SSIM定义于 base_tof.py超分配置在 Vid4 上的指标记录于 metafile.yml。引用若在研究中使用了 TOFlow建议按以下 BibTeX 引用article{xue2019video, title{Video enhancement with task-oriented flow}, author{Xue, Tianfan and Chen, Baian and Wu, Jiajun and Wei, Donglai and Freeman, William T}, journal{International Journal of Computer Vision}, volume{127}, number{8}, pages{1106--1125}, year{2019}, publisher{Springer} }小结TOFlow 是以任务为导向的光流思想的代表性工作在 MMagic 中通过 TOFlowVFINet 与 TOFlowVSRNet 两个生成器分别覆盖视频插帧与视频超分配套 5 个插帧变体配置与 1 个官方超分测试配置见 configs/tof/。本文从预训练结果、训练/测试命令、配置参数到源码计算链逐层展开可直接作为你在 MMagic 中使用或二次开发 TOFlow 的起点。赞分享媒体生成计算机视觉深度学习人工智能大模型【免费下载链接】mmagicOpenMMLab Multimodal Advanced, Generative, and Intelligent Creation Toolbox. Unlock the magic : Generative-AI (AIGC), easy-to-use APIs, awsome model zoo, diffusion models, for text-to-image generation, image/video restoration/enhancement, etc.项目地址https://gitcode.com/gh_mirrors/mm/mmagic点击查看免费下载相关推荐为什么Windows 10内置ClearType调节器失效BetterClearTypeTuner来拯救为什么Windows 10内置ClearType调节器失效BetterClearTypeTuner来拯救 在使用Windows 10的过程中你是否遇到过字体桌面应用视频增强与AI画质提升ComfyUI插件实现视频超分辨率全指南视频增强与AI画质提升ComfyUI插件实现视频超分辨率全指南 你是否遇到过这样的困扰珍藏的家庭视频模糊不清监控录像细节难以辨认或者下载的低清素材无法满人工智能大模型媒体生成RealESRGAN-GUI 动漫视频超分工具详解基于 Paper2GUI 的 AI 视频超分辨率实战指南RealESRGAN GUI 动漫视频超分工具详解基于 Paper2GUI 的 AI 视频超分辨率实战指南 本文以 Video Super Resolutio人工智能AI 应用桌面应用上一篇云端部署Generative_Deep_Learning_2nd_EditionGoogle Cloud GPU配置指南下一篇3行代码实现Android扫码功能从相机调用到结果解析的全流程创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑