720p实时视频插帧!旷视科技&北大提出RIFE

2020 年 11 月 17 日 CVer

点击上方“CVer”,选择加"星标"置顶

重磅干货,第一时间送达

本文转载自:AIWalker
标题&作者团队

Paper: https://arxiv.org/abs/2011.06294

Code: https://github.com/hzwer/RIFE

该文是旷视科技&北大提出的一种实频插帧方案,相比已有基于光流的方案,该文所提方法具有好的性能与推理速度,针对720p视频可以实时进行2x插帧。值得各位同学了解一下。

Abstract

该文提出一种实时中间流估计(Intermediate Flow Estimation)算法RIFE用于视频插帧。现有视频插帧大多先估计双向光流,然后采用线性组合方式近似中间流,然而这种处理方式会在运动边界区域产生伪影问题。

作者设计一种中间流估计模型IFNet采用“Coarse-to-Fine”的方式直接预测中间流信息;然后按照所估计的中间流将输入图像进行仿射变换,最后采用另一个融合网络重建最终的结果。基于作者所提出的“leakage distillation”,RIFE可以通过端到端的方式进行训练并取得优异性能。

作者在几个公开数据集上进行了验证,所提RIFE具有更快的推理速度,同时取得了SOTA指标,见下图。

该文的主要贡献包含以下几点:

  • 提出了一种新颖而有效的IFNet直接估计中间流信息并用于视频插帧,同时IFNet可以从头开始训练,并可以通过连续两帧输入估计中间帧的光流信息。
  • 提出了一种有效的中间流的监督方案,可以取得更稳定的收敛与性能提升;
  • RIFE是首个基于光流的实时视频插帧方案,它能够以30fps对720p视频进行插帧。

Method

RIFE

上图给出了该文所提出的RIFE框架流程,它包含IFNet、Backward Warp以及Fusion Process三个模块,其中IFNet与Fusion部分是该文的核心创新点所在,所以在接下来的内容中我们将主要围绕这两个点进行介绍。

我们先简单介绍一下RIFE的大脉络。给定连续两帧RGB图像 ,视频插帧的目标是合成中间帧 。首先IFNet直接对输入帧估计中间流信息 ,然后采用线性运动假设估计 :

需要注意到:这就是IFNet的光流估计与双向光流估计的差异所在。IFNet只需进行一次光流估计,而双向光流估计则需要进行两次估计。在完成光流估计后,接下来就需要将连续两帧向中间帧进行warp变换,为消除变换帧的伪影问题,作者将输入帧、光流、变换帧同时送入到到FusionNet中进行重建。

从前面流程图可以看到:RIFE有两个关键单元号IFNet和FusionNet。IFNet用于估计中间流信息;FusionNet用于中间帧重建。

IFNet

image-20201114181757695

上图给出了IFNet的网络结构示意图,它的作用是根据两帧连续输入 预测中间流 。为更好处理大运动,IFNet采用了“Coarse-to-Fine”方式逐渐提升分辨率,也就是先在低分辨率上计算“粗糙”的光流,然后在高分辨率上计算“精细”光流。这也是目前光流估计中常用的一种处理方式。IFNet的这种光流估计方式可以描述如下:

其中 表示当前中间流的估计, 表示输入帧的仿射结果, 表示第i个IFBlock。IFNet包含3个IFBlock,每个IFBlock具有一个分辨率参数 ,以及上采样操作、6个ResBlock以及一个上采样模块。可以参考上图以及下面的code进行理解(注:ResBlock中包含SE模块,同时可以看到下面的code和上面的示意图存在细微的差别:上采样部分)。

# Note: 这里仅列出了核心code
class IFBlock(nn.Module):
    def __init__(self, in_planes, scale=1, c=64):
        super(IFBlock, self).__init__()
        self.scale = scale
        self.conv0 = conv(in_planes, c, 321)
        self.res0 = ResBlock(c, c)
        self.res1 = ResBlock(c, c)
        self.res2 = ResBlock(c, c)
        self.res3 = ResBlock(c, c)
        self.res4 = ResBlock(c, c)
        self.res5 = ResBlock(c, c)
        self.conv1 = nn.Conv2d(c, 8311)
        self.up = nn.PixelShuffle(2)

为更好说明IFNet的优势,看一下下图咯。这里对比了IFNet与LiteFlowNet的视觉效果对比,可以看到IFNet的光流更为清晰、锐利;同时线性组合后光流存在更少的重叠和模糊现象。

image-20201114210101193

另外一点需要注意的是:IFNet仅需要进行一次光流估计。这也就导致了RIFE中的光流部分的推理耗时更快,对比见下表。可以看到:IFNet比其他视频插帧中的光流估计模块的速度快6-30倍。

image-20201114210351833

FusionNet

在得到了 后,我们就可以通过Backward Warp得到粗糙重建结果 。为降低仿射结果的伪影问题,作者提出了如下的调整与融合方式:

其中,M表示soft fusion map 表示重建残差。

类似SuperSlomo,DAIN等视频插帧方案,这里的FusionNet包含一个上下文特征提取模块和融合模块(UNet结构),注:上下文特征提取模块和融合模块的编码部分具有相似的结构,即包含4个stride=2的ResBlock;融合模块的解码模块包含4个反卷积进行特征分辨率上采样。最后,作者对融合结果通过sigmoid进行范围约束。大家可参考下面的核心code进行理解,ContextNet部分用于提取多尺度特征,FusionNet则是在ContextNet的基础上进行最终结果的重建。

# Note:ResBlock中的stride默认为2
class ContextNet(nn.Module):
    def __init__(self):
        super(ContextNet, self).__init__()
        self.conv1 = ResBlock(3, c)
        self.conv2 = ResBlock(c, 2*c)
        self.conv3 = ResBlock(2*c, 4*c)
        self.conv4 = ResBlock(4*c, 8*c)
......

class FusionNet(nn.Module):
    def __init__(self):
        super(FusionNet, self).__init__()
        self.down0 = ResBlock(82*c)
        self.down1 = ResBlock(4*c, 4*c)
        self.down2 = ResBlock(8*c, 8*c)
        self.down3 = ResBlock(16*c, 16*c)
        self.up0 = deconv(32*c, 8*c)
        self.up1 = deconv(16*c, 4*c)
        self.up2 = deconv(8*c, 2*c)
        self.up3 = deconv(4*c, c)
        self.conv = nn.Conv2d(c, 4311)
       def forward(self, img0, img1, flow, c0, c1, flow_gt):
        warped_img0 = warp(img0, flow)
        warped_img1 = warp(img1, -flow)
        if flow_gt == None:
            warped_img0_gt, warped_img1_gt = NoneNone
        else:
            warped_img0_gt = warp(img0, flow_gt[:, :2])
            warped_img1_gt = warp(img1, flow_gt[:, 2:4])
        s0 = self.down0(torch.cat((warped_img0, warped_img1, flow), 1))
        s1 = self.down1(torch.cat((s0, c0[0], c1[0]), 1))
        s2 = self.down2(torch.cat((s1, c0[1], c1[1]), 1))
        s3 = self.down3(torch.cat((s2, c0[2], c1[2]), 1))
        x = self.up0(torch.cat((s3, c0[3], c1[3]), 1))
        x = self.up1(torch.cat((x, s2), 1))
        x = self.up2(torch.cat((x, s1), 1))
        x = self.up3(torch.cat((x, s0), 1))
        x = self.conv(x)
        return x, warped_img0, warped_img1, warped_img0_gt, warped_img1_gt

Leakage Distillation

前面也提到了IFNet直接预测中间流信息,但是直接进行预测的难度是比较大的,因为这个信息是无法获取的且缺乏合理的监督信息。

为解决上述问题,在训练阶段,作者为IFNet添加了一个leakage distillation损失。此时需要一个预训练的光流模型提供额外的中间流信息,此时该损失定义如下:

除了上面提到的 外,损失函数海报常规的重建损失 (重建损失一般可选 等)与Census Loss。

Experiments

训练数据:Vimeo90K;测试数据:UCF101,Middlebury等。FlyingChairs数据集上预训练的LiteFlowNet,优化器为AdamW,batch=64,初始学习率 ,con形式衰减。

直接上最终结果咯,见下图。可以看到RIFE取得了更好的SOTA指标,同时具有更快的推理速度。

image-20201114213214667
image-20201114213324074

更多消融实验分析建议查看原文,这里略过。前面已经对该文的核心进行了比较硬核介绍,对此感兴趣的可以去看一下原文或者留言与笔者一起讨论。


论文和测试代码下载


在CVer公众号后台回复:RIFE,即可下载论文和测试代码


下载:CVPR /  ECCV 2020开源代码


在CVer公众号后台回复:CVPR2020,即可下载CVPR 2020代码开源的论文合集

在CVer公众号后台回复:ECCV2020,即可下载ECCV 2020代码开源的论文合集


重磅!CVer-论文写作与投稿交流群成立


扫码添加CVer助手,可申请加入CVer-论文写作与投稿 微信交流群,目前已满2400+人,旨在交流顶会(CVPR/ICCV/ECCV/NIPS/ICML/ICLR/AAAI等)、顶刊(IJCV/TPAMI/TIP等)、SCI、EI、中文核心等写作与投稿事宜。


同时也可申请加入CVer大群和细分方向技术群,细分方向已涵盖:目标检测、图像分割、目标跟踪、人脸检测&识别、OCR、姿态估计、超分辨率、SLAM、医疗影像、Re-ID、GAN、NAS、深度估计、自动驾驶、强化学习、车道线检测、模型剪枝&压缩、去噪、去雾、去雨、风格迁移、遥感图像、行为识别、视频理解、图像融合、图像检索、论文投稿&交流、PyTorch和TensorFlow等群。


一定要备注:研究方向+地点+学校/公司+昵称(如论文写作+上海+上交+卡卡),根据格式备注,可更快被通过且邀请进群


▲长按加微信群


▲长按关注CVer公众号

整理不易,请给CVer点赞和在看

登录查看更多
2

相关内容

【ACMMM2020】小规模行人检测的自模拟学习
专知会员服务
9+阅读 · 2020年9月25日
专知会员服务
12+阅读 · 2020年9月19日
【ECCV2020-Oral-谷歌】对抗生成语法的人体活动预测
专知会员服务
4+阅读 · 2020年8月12日
【CVPR2020】时序分组注意力视频超分
专知会员服务
30+阅读 · 2020年7月1日
CVPR2020 | 商汤-港中文等提出PV-RCNN:3D目标检测新网络
专知会员服务
43+阅读 · 2020年4月17日
【论文推荐】小样本视频合成,Few-shot Video-to-Video Synthesis
专知会员服务
23+阅读 · 2019年12月15日
超清还不够,插帧算法让视频顺滑如丝丨NeurIPS 2019
AI科技评论
4+阅读 · 2019年12月19日
视频理解 S3D,I3D-GCN,SlowFastNet, LFB
极市平台
7+阅读 · 2019年1月31日
基于视频的目标检测的发展【附PPT与视频资料】
人工智能前沿讲习班
19+阅读 · 2018年12月14日
ECCV 2018 | Bi-box行人检测:‘行人遮挡’为几何?
极市平台
13+阅读 · 2018年9月30日
ECCV 2018 | OR-CNN行人检测:为‘遮挡’而生
极市平台
6+阅读 · 2018年9月21日
深度学习之视频图像压缩
论智
13+阅读 · 2018年6月15日
干货|全景视频拼接的关键技术分析
全球人工智能
13+阅读 · 2017年7月15日
Arxiv
0+阅读 · 2021年1月31日
Arxiv
15+阅读 · 2019年9月11日
Few-shot Adaptive Faster R-CNN
Arxiv
3+阅读 · 2019年3月22日
Arxiv
7+阅读 · 2018年1月24日
VIP会员
相关VIP内容
相关资讯
超清还不够,插帧算法让视频顺滑如丝丨NeurIPS 2019
AI科技评论
4+阅读 · 2019年12月19日
视频理解 S3D,I3D-GCN,SlowFastNet, LFB
极市平台
7+阅读 · 2019年1月31日
基于视频的目标检测的发展【附PPT与视频资料】
人工智能前沿讲习班
19+阅读 · 2018年12月14日
ECCV 2018 | Bi-box行人检测:‘行人遮挡’为几何?
极市平台
13+阅读 · 2018年9月30日
ECCV 2018 | OR-CNN行人检测:为‘遮挡’而生
极市平台
6+阅读 · 2018年9月21日
深度学习之视频图像压缩
论智
13+阅读 · 2018年6月15日
干货|全景视频拼接的关键技术分析
全球人工智能
13+阅读 · 2017年7月15日
相关论文
Arxiv
0+阅读 · 2021年1月31日
Arxiv
15+阅读 · 2019年9月11日
Few-shot Adaptive Faster R-CNN
Arxiv
3+阅读 · 2019年3月22日
Arxiv
7+阅读 · 2018年1月24日
Top
微信扫码咨询专知VIP会员