论文笔记 - CVPR2018: Super SloMo,一种视频插值法

参考资料

原文:Super SloMo: High Quality Estimation of Multiple Intermediate Frames for Video Interpolation

代码:Github: avinashpaliwal/Super-SloMo

视频插值算法排行榜:Optical flow evaluation results

算法背景

传统视频插值算法虽然能够在两个视频帧之间,插入一帧,但如果需要插入多帧就很难做到了。

有人说可以通过多次的single-interpolation来解决多次插值问题,但该方法存在以下缺点:

  • 递归性的单次插值,不是并行计算的,有先后次序问题,所以算法很慢;
  • 在递归插值时,可能会出现错误,而错误会在递归的过程中不断积累;
  • 递归插值只能生成2^i-1个中间帧

所以例如从24-fps的视频生成1008-fps的视频,通过递归插值,是根本不可能的事情

另外在视频插值方面需要解决两个很重要的问题:

  • 解决遮挡问题
  • 解决伪影(artifact)问题

为了解决这两个问题,作者在论文中都提出了自己的方法。

所以主要思路(这里以要插值t时刻的图像为例)是扭曲(warp)两幅输入图像到t时刻,然后自适应(adaptively)融合这两张扭曲图像,从而生成中间帧。而运动预测和遮挡问题在一个简单的端到端网络中得到解决

详见原理

前置知识

光流法

光流法的前提假设

  • (1)相邻帧之间的亮度恒定;
  • (2)相邻视频帧的取帧时间连续,或者,相邻帧之间物体的运动比较“微小”;
  • (3)保持空间一致性;即,同一子图像的像素点具有相同的运动

U-Net

略。

原理

首先这是一个端到端的网络,原理简单来说就是输入两幅图像,通过计算双向光流(后面会提到),来通过某种算法合成出中间帧的图像。

所以整个网络思路分为两部分

  • 计算光流(flow computation)
  • 任意时刻的中间帧插值(arbitrary-time flow interpolation)

而在模型中,也的确是分为两个网络来训练的,这两个网络都是基于U-Net的。

模型

训练

输入输出

损失函数

实验

总结