SepConv-Video Frame Interpolation via Adaptive Separable Convolution

SepConv视频插帧-通过自适应可分离卷积进行视频插帧

一.简介

标准的视频插帧方法首先估计两帧之间的光流,然后在运动的指导下生成中间帧,就是不是端到端的方法,而作者提出的方法是end-to-end的。而且光流的方法对遮挡,模糊,亮度突变情况处理的并不好。所以最近的方法(其实就是本篇论文作者自己提出的方法AdaConv-之后会在下一篇文章介绍)用空间自适应卷积核估计中间帧,但是这种方法需要比较大的核,因为要处理幅度比较大的运动,而且要为每个像素生成一个卷积核,因此计算量是十分的大的。那么本文提出了自适应可分离的卷积,大大减小了运算量,用一对1D卷积核替代原先的2D卷积核。大大减小了参数量,由 n 2 n^2 n2减小到 2 n 2n 2n,并且加入了感知损失(perceptual loss)。

二.网络结构

下图即为本文的网络结构,是一个encoder-decoder的结构。(图与代码并不是完全一样,建议看一下源代码)
github链接:https://github.com/sniklaus/sepconv-slomo
在这里插入图片描述
对网络结构简单做一个介绍,前面是encoder的结构,之后经过decoder并通过skip connection链接,提取较为丰富的语义信息。之后通过四个子网络得到两对儿插帧要用的卷积核。原先的单像素生成公式为: I ^ ( x , y ) = K 1 ( x , y ) ∗ P 1 ( x , y ) + K 2 ( x , y ) ∗ P 2 ( x , y ) \hat I(x,y)=K_1(x,y)*P_1(x,y)+K_2(x,y)*P_2(x,y) I^(x,y)=K1(x,y)P1(x,y)+K2(x,y)P2(x,y)
关于P1,P2只是在原始帧上采的一小块区域(要生成的像素点(x,y)位于中间位置)。作者使用两个1D卷积核近似2D的卷积核,关于此处的参数问题,最好参考源代码,也就是由5151640384变成2151384640最好对照代码进行理解。每个151对应一个像素点。

三.损失函数

作者采用两个损失函数结合,L1 loss和perceptual loss:
L 1 = ∥ I ^ − I g t ∥ 1 L_1=\| \hat I-I_{gt} \|_1 L1=I^Igt1
L F = ∥ ϕ ( I ^ ) − ϕ ( I g t ) ∥ 2 2 L_F=\| \phi(\hat I)-\phi(I_{gt}) \|_2^2 LF=ϕ(I^)ϕ(Igt)22
ϕ \phi ϕ也就是从图像中提取的特征

四.实验细节补充

为了加速,作者稍微修改了一下CUDA的代码,感兴趣的小伙伴可以了解一下CUDA编程。
关于边界问题,作者尝试了zero padding,reflective padding,repetition padding,最后发现repetition padding效果比较好。
超参数的选择,大多是根据实验结果进行选择。

五.结果对比以及不足

在这里插入图片描述
在这里插入图片描述
)
可以看到作者的结果还是不错的,之后作者做了定量评价:
在这里插入图片描述
在这里插入图片描述

在对视频进行处理的时候,运动的物体旁边还是会有鬼影出现,不过对比之前的已经很好了。
还有就是池化层太多有更大的感受野是没错,就是可能会丢失更多的语义信息,可以考虑采用下今年的soft pooling。

之后我将会讲一下本文的代码以及之前的文章。
注意:跑代码过程中要用到moviepy库,可以参考https://zhuanlan.zhihu.com/p/161530919

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值