一、super slomo介绍

本专题文章对super slomo进行一系列操作,降低训练时间、预测时间、导出训练模型、C++调用模型进行预测等。本章对其进行一个简单介绍,来自互联网。

2018年CVPR的论文《Super SloMo: High Quality Estimation of Multiple Intermediate Frames for Video Interpolation 》. 探讨了如何将普通设备录制的视频转换为高帧率慢动作视频。这项工作的原理是在临近的两帧之间补充额外的画面帧。让我们先来看一下效果:

原视频为 30FPS。看起来没毛病吧,那慢速播放之后呢?

 

看下图上方,原来流畅的甩尾变得像是一张张照片摆拍凑出来的定格动画(P 水花比甩尾简单多了吧),但经过算法补帧变成 240FPS 之后,下方的片段立刻有了 Fast & Furious 即视感。

遗憾的是,作者发布论文的时候并没有放出数据集和代码,让想要实现这一炫酷技术的 geek 们大失所望。GitHub 一位名为 avinashpaliwal 的用户开源了自己对 Super SloMo PyTorch 实现:

结果

使用作者提供的评估脚本在 UCF101 数据集上的结果。用的脚本是 et_results_bug_fixed.sh。它在计算 PSNRSSIM IE 时使用了运动掩码(motions mask)。

先决条件

该代码库是用 pytorch 0.4.1 CUDA 9.2 进行开发测试的。

训练

准备训练数据

要使用提供的代码训练模型,首先需要以某种方式格式化数据。

create_dataset.py 脚本使用 ffmpeg 从视频中提取帧。

至于 adobe240fps,下载下面这个数据集,解压并运行以下命令:

python datacreate_dataset.py --ffmpeg_dir pathtoffmpeg --videos_folder pathtoadobe240fpsvideoFolder --dataset_folder pathtodataset --dataset adobe240fps

数据集:http://www.cs.ubc.ca/labs/imager/tr/2017/DeepVideoDeblurring/DeepVideoDeblurring_Dataset_Original_High_FPS_Videos.zip

评估

预训练模型

你可以从以下地址下载在 adobe240fps 数据集上训练的预训练模型:

https://drive.google.com/open?id=1IvobLDbRiBgZr3ryCRrWL8xDbMZ-KnpF

摘要:给定两个连续的帧,视频插值旨在生成中间帧,以形成空间和时间相干的视频序列。大多已有的方法都集中于单帧插值上,本文提出了一种用于可变长度多帧视频插值的端到端卷积神经网络,其中运动解释(motion interpretation)和遮挡推理(occlusion reasoning)是联合建模的。该研究从使用 U-Net 架构计算输入图像之间的双向光流开始。随后,这些流在每个时间步被线性组合,以近似中间双向光流。然而,这些近似流仅在局部平滑区域有用,且在运动边界周围产生伪影。

为了解决这个不足,作者利用另一个 U-Net 来细化近似流并预测软可视图(soft visibility map)。最终,两个输入图像被变形并线性融合以形成每个中间帧。通过在融合之前把可视图应用于变形的图像上,作者排除了遮挡像素对插值中间帧的贡献,以避免伪影。由于所学到的网络参数都不依赖于时间,所以本文的方法能够根据需要产生很多中间帧。作者使用 1132 个每秒 240 帧的视频片段(包含 30 万个单独的视频帧)来训练其网络。在多个数据集上的实验(预测不同数量的插值帧)结果表明本文的方法比现有的方法性能更好。

方法

研究者使用了光流插值的方法来合成中间帧,基于两个关键要素:时间一致性和遮挡推断。

时间一致性是指:中间帧 I_t 可以通过初始帧 I_0 结合光流(optic flowF)的转换 g(·) 而成,也可以通过结束帧 I_1 结合光流 F 转换而成,一般形式是两者的线性组合。

http://5b0988e595225.cdn.sohucs.com/images/20181229/414e711c9dad44c7959f394814d7e1e4.png

一般而言,随着时间流动,I_t 的图像特征会从更接近 I_0 变得更接近 I_1,所以α_0 应该是 t 的线性函数(不考虑遮挡时)。当 t=0 时,α_0=1;当 t=1 时,α_0=0

如图 2 所示:

http://5b0988e595225.cdn.sohucs.com/images/20181229/ef357f02565641ad87e1325aa8d2dc40.jpeg

2:光流插值结果的示例,其中 t=0.5。完整的场景向左移动(摄像头平移),摩托车也向左移动。最后一行展示了光流插值 CNN 的微调主要在运动边界处进行(像素越白,微调程度越高)。

遮挡推断是指:在 I_0 中出现的像素(或物体),在 I_1 中可能不出现,反之亦然。那么就要考虑 I_t 在遮挡情况下对两个输入帧的权重,用可视图(visibility mapsV)表示。

所以,最终的中间帧合成等式为(Z 是归一化因子):

http://5b0988e595225.cdn.sohucs.com/images/20181229/a7b8579a8f7c4b8db8d0b61f87f4faae.png

如图 3 所示:

http://5b0988e595225.cdn.sohucs.com/images/20181229/2d769a9a2d174d3bb888cf0e5e8d60db.jpeg

http://5b0988e595225.cdn.sohucs.com/images/20181229/0f56e1a2789647cea4d49bad9463d45b.jpeg

3:预测可视图的样本,其中 t=0.5。运动员的手从 T=0 T=1 往上举。因此手臂右上方区域在 T=0 时是可见的,在 T=1 时是不可见的(被遮挡)。第四行的可视图清晰地展示了这个现象。V_t←0 中手臂周围的白色区域表示 I_0 中的这些像素对合成ˆI_t 的贡献最大,黑色区域表示这些像素对合成ˆI_t 的贡献最小。V_t←1 也是同样的道理。

由于中间帧本身是需要预测的,不是预先存在的,因此需要用 I_0 I_1 之间的光流对 I_t I_0I_1 之间的光流进行近似:

http://5b0988e595225.cdn.sohucs.com/images/20181229/29fdccce97ab4aab95ddd76a69296a29.jpeg

此外关于遮挡推断,同样很自然地假设:当 t 接近 0 的时候,I_t 更接近 I_0;当 t 接近 1 的时候,I_t 更接近 I_1

http://5b0988e595225.cdn.sohucs.com/images/20181229/afa030facdb741b69c02e1d65c3e3411.png

所以,最终的架构设计如下:其分为两个阶段,第一个阶段将 I_0I_1 输入到光流计算 CNN 中,得到两者之间正向和反向的光流;第二个阶段再以 I_0 I_1 之间的光流、I_0 I_1I_0 I_1 I_t 的变换函数、I_0 I_1 I_t 的近似光流为输入,得到可视图以及 I_0 I_1 I_t 的近似光流的增量。结合这些量,就可以直接算出最终的 I_t,如下图所示。

http://5b0988e595225.cdn.sohucs.com/images/20181229/40b56f45056c4c0384fe4cf4f796efa9.jpeg

损失函数分为四个项:重建损失(Reconstruction loss),合成帧和数据集中间帧的 L1 损失;感知损失(perceptual loss),减少图像模糊;转换损失(Warping loss.),图像帧和经其它帧光流变换输出之间的 L1 损失;平滑度损失(Smoothness loss),限制光流函数的梯度。

http://5b0988e595225.cdn.sohucs.com/images/20181229/8abe4d37d8e545d68da9d8bdf9bfb996.jpeg

9:主要 CNN 架构为 U-Net

 

 

 

转载:https://www.sohu.com/a/285435820_129720

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值