文章目录
一、论文相关介绍
1、论文相关地址
- 论文地址:https://arxiv.org/pdf/1712.00080.pdf
- 项目的主页地址:https://people.cs.umass.edu/~hzjiang/projects/superslomo/
- 项目的github代码实现:https://github.com/avinashpaliwal/Super-SloMo
- 相关介绍文章:https://mp.weixin.qq.com/s/ZX2Je2gfzvu5sKbLIWIwVA
2、高速视频实现慢放的方式
图片居中文字
这里所说的慢放是对高速视频
高速摄像机
慢速回放的前提,是摄像机一开始
就捕捉到了这些细节
。高速摄像机可以捕捉到更多的帧率,当然也就可以实现慢放。如今,一些大型体育赛事已经用上了工业高速摄像头,为的就是在裁判的裁决引发争议时,可以用慢镜头回放来判定结果。
但是,没有专业的高速摄像头怎么办?
- 通过
预测中间视频帧
,预测补全
(插帧)
这项被称为Super SloMo的工作,使用深度神经网络,对视频中缺失的帧
进行预测并补全
,从而生成连续慢速回放
的效果。
更赞的是,他们提出的方法,能够排除原视频帧当中被遮挡的像素
,从而避免在生成的内插中间帧里产生模糊的伪像(artifact)
。
感受一下Super-SloMo生成的“慢速回放”效果
注意,左右两边都是Super SloMo生成的视频。左边是原始慢速视频,右边是将这个结果再放慢4倍的效果,如果不告诉你中间的细节(帧)是神经网络生成的,你会不会把它们当做真的慢速回放?来源:Huaizu Jiang个人主页
实际用手机拍摄的画面是这样的,对比后,意识到Super SloMo补充多少细节了吗?
3、Super SloMo生成中间帧的时间消耗
根据Super SloMo项目主页,作者表示,使用他们未经优化的PyTorch代码,在单个NVIDIA GTX 1080Ti 和 Tesla V100 GPU上,生成7个分辨率为1280*720的中间帧,分别只需要0.97秒和0.79秒。(补充说明:从标准序列30-fps生成240-fps视频,一般需要在两个连续帧内插入7个中间帧。)
估算一下 :
显卡:1080Ti
时长:1 分钟
帧率:30fps
分辨率:1280*720(1080P的高清视频)
生成240帧需要的时间:
每秒从30fps插帧到240帧,插入210帧,210fps/7fp=30s
合成一分钟的视频需要的总时间 Time = 60*30 s = 1800 s = 30 min
二、Super SloMo实现原理
除了专业的高速摄像机尚未普及到每个人手里,人们用手机拍摄的视频 (一般为240FPS) 想要放慢的时刻是不可预测的,要实现这一点就不得不用标准帧速率来记录所有视频,但这样做需要的内存过大,对移动设备来说耗电量也花不起。
所以我们可以通过软件
的方式来解决这个问题,下面来看看Super SloMo实现原理
1、引言介绍
- 生成好的
中间视频帧
要实现两点
正确解释
两个输入图像之间的运动
(隐式或显式)要理
解遮挡
(occlusion)。 否则,就可能导致插值帧中产生严重的伪像
,尤其是在运动边界附近。
- 递归地应用单帧视频插值(当前方法的局限)
虽然递归地应用单帧视频插值方法生成多个中间帧是一个很不错的想法,但这种方法至少有两个限制:
- 递归单帧插值不能完全并行化,速度较慢,因为有些帧是在其他帧完成后才进行计算的(例如,在七帧插值中,帧2取决于0和4,而帧4取决于0和8)。
- 它只能生成2i-1个中间帧。因此,不能使用这种方法有效生地生成1008 - fps 24帧的视频,这需要生成41中间帧。
2、Super SloMo论文原理
论文 Super SloMo: High Quality Estimation of Multiple Intermediate Frames for Video Interpolation 提出了一种高质量的变长多帧插值
方法,该方法可以在两帧之间
的任意时间步长
进行插值。
Super SloMo效果展示:注意在放慢过渡区域对伪像的处理
其主要思想是,将输入的两幅图像扭曲到特定的时间步长,然后自适应地融合这两幅扭曲图像,生成中间图像,其中的运动解释和遮挡推理在单个端到端可训练网络中建模。
具体来说,首先使用流量计算CNN来估计两幅输入图像之间的双向光流,然后线性融合来近似所需的中间光流,从而使输入图像发生扭曲。这种近似方法适用于光滑区域,但不适用于运动边界。
因此,Super SloMo 论文作者使用另一个流量插值CNN来细化流近似并预测软可见性图。
通过在融合之前将可见性图应用于变形图像,排除了被遮挡像素对内插中间帧的贡献,从而减少了伪像。
Super SloMo网络架构
“我们的流计算和插值网络的参数都独立于被插值的具体时间步长,是流插值网络的输入。因此,我们的方法可以并行生成任意多的中间帧。”作者在论文中写道。
为了训练该网络,团队从YouTube和手持摄像机收集了240-fps的视频。总量有1.1K视频剪辑,由300K个独立视频帧组成,典型分辨率为1080×720。
然后,团队在其他几个需要不同插值数量的独立数据集上评估了训练模型,包括Middlebury 、 UCF101 、慢流(slowflow)数据集和高帧率(high-frame-rate) MPI Sintel。
实验结果表明,该方法明显优于所有数据集上的现有方法。 团队还在KITTI 2012光流基准上评估了无监督(自监督)光流结果,并获得了比现有最近方法更好的结果。
三、 代码实现
1、github上的开源实现
有人在 Github 上开源了他对 Super-SloMo 的 PyTorch 实现。这位ID为atplwl的Reddit用户,在作者提供的adobe24fps数据集上预训练的模型(下图中pretrained mine),实现了与论文描述相差无几的结果。
github的实现地址:https://github.com/avinashpaliwal/Super-SloMo
♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠