视频帧插学习(二):EMA-VFI:Extracting Motion and Appearance via Inter-Frame Attention for Efficient Video Frame Inter
前言
笔者在视频帧插方面做过一个统计,该表统计了目前不同测试集下的sota,按照测试集分类大概有8个sota如下表。
其中:
Name 表示网络名称。
becnh mark 表示在哪些bench mark 上都是sota。
win over 中数字表示都赢了多少个网络,也能反映这大家在这个数据集上的热度,括号中表示的 不如当前网络但是很有名甚至也出现在当前表格中。
starts 表示github 上有多少人关注,其实这样能鉴定论文的有效性和是否方便following因为有些文章代码有bug或者没公开。
统计时间:2023年12月(后来笔者跟进了一些,starts 没有剧烈变化基本大差不差)
统计link:https://paperswithcode.com/task/video-frame-interpolation
No | Name | bench marks | win over | starts |
---|---|---|---|---|
1 | BDVI(2022) | x4k10000 /SNU-FILM(extreme) /DAVIS /GoPro | 17 / 7(St-MFNet(close), EMA-VFI , CURE)/ 2(SR_MFNet) / 2 | 14 |
2 | EMA-VFI(2023) | vimeo90K(23/2) / UCF101 /X4K1000FPS-2k /Xiph-4k /Xciph-2k | 22(IFRNet , CURE )/18 | 243 |
3 | RIFE(2020) | MSUvideo frameinterpolation | 3(EMA-VFI ) | >3789 |
4 | ST-MFNet(2021) | SNU FILEM(easy)/ SNU FILEM(medium) /SNU FILEM(extreme) /VFITex | 7(DBVI , EMA VFI ) / 6(DBVI , EMA VFI ) / 7(DBVI , EMA VFI ) | 57 |
5 | IFRNet(2022) | Middlebury | 8 | 214 |
6 | VRT(2022) | Vid4-4x upscaling | 5 | 1147 |
7 | M2M-PWC(2022) | ATD-12k / Xiph-4k(Crop) | 1/1 | 73 |
8 | CURE(2022) | Nvidia Dynamic Scence / Xiph 4k | 1/1 | 11 |
从上表不难看出有两个明星网络RIFE和 VRT,VRT 是Video Restoration,我理解是视频超分。所以打算放在第三次学习编写。因此在视频帧插学习(一)中介绍了最有名气的RIFE。
为什么第二篇是EMA VFI,因为从表征不难看到EMA-VFI 赢了RIFE 但是RIFE又在有些测试集赢了EMA VFI ,甚至EMA VFI的作者用了RIFE作比较。所以我来看看这个“相爱相杀”的两个网络。
还有一点,其实MA-CSPA是sota,但是这个网络不开源,且两者十分接近,因此笔者就用EMA-VFI代替。
所以这里视频帧插我分享一篇EMA-VFI,该文章无论是数学属性还是代码都非常简单,而且运动估计借鉴的是 RIFE,refine 过程和 RIFE一样用的 unet,另一个核心是应用了transformer的self-attention。作者为了将文章显得高大上,语言赘述了很多,专业性、逻辑性、对已有问题的分类都在赘述。
因此我将其放到第二篇文章进行介绍,相当于transform如何应用在RIFE net上,也欢迎大家交流。
一、摘要
本文有效地提取帧间运动和外观信息(appearance information
)对于视频帧插值(VFI,后面的 VFI都用视频插帧翻译)至关重要。先前的工作要么以混合方式提取这两种类型的信息,要么为每种类型的信息精心设计单独的模块,这导致了表征的不确定性和低效率。在本文中,我们提出了一种新颖的模块,通过统一的操作来明确提取运动和外观信息。具体而言,我们重新思考了帧间关注力的信息处理,并重用其关注图,用于外观特征增强和运动信息提取。此外,为了实现高效的视频帧插,我们提出的模块可以无缝集成到混合CNN和Transformer架构中。这种混合流水线可以减轻帧间关注力的计算复杂度,并保留详细的低级结构信息。实验结果表明,无论是对于固定时间步长插值还是任意时间步长插值,我们的方法在各种数据集上都达到了最先进的性能。同时,我们的方法在性能相近的模型上享有更轻量级的计算开销。源代码和模型可供使用。
二、简介
作为一项基本的低级视觉任务,视频帧插值(VFI)的目标是在给定一对连续帧的情况下生成中间帧 [16, 31]。它在现实生活中有广泛的应用,如视频压缩 [52]、新视角渲染[13, 46]以及创建慢动[18]作视频等。总的来说,VFI可以被视为捕捉相邻帧之间的运动,然后混合相应的外观以合成中间帧的过程。从这个角度来看,输入帧之间的运动和外观信息对于在VFI中实现出色性能至关重要。
上面段作者说得挺好的,插帧在上述方面都有应用,且需求挺强,这也是本文我认为作者唯一说的不错的内容
关于运动和外观信息提取的方法,目前的视频插帧方法可以分为两类。第一类是以混合方式处理外观和运动信息,如图1(a)所示[2,11,14,16
,19,20,28,31
,35,36,43]。两个相邻帧直接连接并输入到一个由连续相似模块组成的主干网络中,以生成具有混合运动和外观信息的特征。尽管简单,这种方法需要对提取器模块进行精心设计并保证较高的容量(笔者认为是视频帧缓存信息,因为是两帧插一帧且要金字塔降采样有不同尺寸的特征图)
,因为它需要同时处理运动和外观信息。显式运动信息的缺失也导致了任意时间步长插值的限制(但是笔者已经跑了RIFE,其实效果还是可以的在两帧之间是任意倍数
)。第二类方法,如图1(b)所示,是为运动和外观信息分别设计单独的模块[9
,17,33,38-40,44,55]。这种方法需要额外的模块,如成本体积[17,38,39],来提取运动信息,这往往会带来较高的计算开销。此外,仅从单帧提取外观特征无法捕获帧间相同区域外观信息的对应关系,这是所有视频帧插工作的有效经验点[17]。
注意:RIFE 是 [16],VRT 是 [31]
[16]和[31]按照作者说的都属于下图方法:
其中,mixed 是指将两帧combine 一起得到中间插帧一帧的结果
。
ST-MFNet 是 [9]
笔者大概阅读了ST-MFNet,大体看起来还是光流+纹理(只不过ST-MFNet求的是双端光流,这个双端光流被rife诟病说不精确,产生了鬼影),对纹理对应文章作者增加了一个网络进行处理, 所以不明白appreance feature是否就是指纹理,ST-MFNet的阅读后续会补上。
(我们继续阅读)
为了解决上述两种提取问题的方法中存在的问题,在本文中,我们提出通过交叉帧注意力的统一操作来明确提取运动和外观信息。通过单个交叉帧注意力,如图1( c ) 所示,我们能够增强连续帧之间的外观特征,并同时通过重用注意力图获取运动特征。这种基本处理单元可以堆叠以获取层次化的运动和外观信息。具体而言,对于当前帧中的任何patch,我们将其作为query,将其时间邻居作为key和value,以推导代表它们时间相关性的注意力图。之后,利用注意力图来聚合邻居的appearance特征,以给当前区域表示提供上下文。此外,注意力图还用于加权邻居的位移,以获取从当前帧到邻居帧的补丁的近似运动矢量。最后,获取的特征与轻量级网络一起用于运动估计和外观细化,以合成中间帧。与先前的工作相比,我们的设计具有三个优点:
(1) 每帧的外观特征可以相互增强,但不会与运动特征混合,以保留详细的静态结构信息。
(2) 获得的运动特征可以按时间缩放,然后用作指导在输入帧之间的任何时刻生成帧的线索。(3) 我们只需要控制模块的复杂性和数量以平衡整体性能和推理速度。
注意: 这里的query、key、value概念和self attention中的概念一致,一个不错的链接推荐阅读,我这里就不赘述:https://blog.csdn.net/yangyehuisw/article/details/116207892
(我们继续阅读)
直接在原始分辨率上使用帧间注意力会导致巨大的内存使用量和计算开销。受一些最近的工作 [8, 12, 24, 48, 53, 54, 57] 的启发,这些工作将卷积神经网络(CNN)与Transformer [47] 结合起来,以提高模型的学习能力和鲁棒性,我们采用了一个简单但有效的架构:利用CNN提取高分辨率的低级特征,然后使用带有帧间注意力的Transformer块来提取低分辨率的动态特征和帧间外观特征。我们提出的模块可以无缝集成到这个混合流水线中,以有效地提取动态和外观特征,而不会丢失细粒度的信息。总之,我们的贡献包括:
1 我们提议利用帧间注意力同时提取视频帧插值中的动态和外观信息。
2 我们采用了混合的CNN和Transformer设计,以克服在高分辨率输入下帧间注意力的开销瓶颈,同时保留细粒度信息。
3 我们的模型在各种数据集上取得了最先进的性能,与性能相近的模型相比,效率更高。
注意
:这里用了CNN + transoformer,就是一个范例:如何将transformer应用到自己的课题。
三、本文方法
下面我将用理解的过程进行陈述,理解为王。因此顺序和原文有些差别,我会按照这个构架图的顺序进行分解,有误地方还请指正
3.2. Overall Pipeline
文中网络构架如下示意图
第一个部分:low-level 信息处理(对应论文3.2 overall Pipeline的第一段)
第1步:求第i帧的 low level 信息:
F
(
I
i
)
\mathscr F(I_i)
F(Ii)
F
(
I
i
)
=
L
i
0
L
i
1
L
i
2
\mathscr F(I_i)=L_{i}^{0}L_{i}^{1}L_{i}^{2}
F(Ii)=Li0Li1Li2,其中
F
\mathscr F
F是提取器,
I
i
I_i
Ii是真实图片前文有说
注意
:这里L 是用cnn,且用的是简单的cnn(如下图)来提取特征,其中
L
i
k
L_{i}^{k}
Lik 的入图为 (
H
2
k
\frac{H}{2^k}
2kH,
W
2
k
\frac{W}{2^k}
2kW,
2
k
2^k
2kC),C表示channel。
作者也说明了设计原因:这种方法如果直接将cnn和transformer结合会减少计算。但是这样也会造成transformer得不到细节信息,因此作者需要第二步。
第2步:得到第i帧的cross-scale information:
上述第一步过程得到三个维度的特征图送入multi-scale dilated convolution,
即
H
2
k
×
W
2
k
×
C
2
k
\frac{H}{2^k} × \frac{W}{2^k} ×C2^k
2kH×2kW×C2k 的数据对应stride为
2
3
−
k
2^{3-k}
23−k以及dilation对应为
2
2
−
k
2^{2-k}
22−k。也就是说不同尺寸对应不同反卷积,所以叫做multi-scale dilated convolutions。
第3步:fuse:
将第二步得到的所有结果先concatenate,然后送入一个 linear layer 得到一个 cross-scale 的 appearance feature,作者称之为
C
i
C_i
Ci
第2步和第3步作者在论文中将其通通归纳到了下图模块中
自此,得到当前帧的
C
0
C_0
C0和下一帧的
C
1
C_1
C1 送入motion-appearance feature extractor。
第二个部分:motion-appearance feature extractor (对应3.1. Extract Motion and Appearance Information)
注意:这里有点不严谨的地方,作者公式写的transform用的时候是原图I,但是3.2中说的是extract之后的C,后面我跑了代码会再更新文章
VFI方法难点:(1)捕获运动(2)将两帧融合
目标:生成 任意时刻的帧:
I
t
^
∈
R
H
×
W
×
3
,
t
∈
(
0
,
1
)
\hat{I_t} ∈ R^{H×W×3},t∈ (0, 1)
It^∈RH×W×3,t∈(0,1)
已有的帧:
I
0
、
I
1
∈
R
H
×
W
×
3
,
t
∈
(
0
,
1
)
\ I_0、\ I_1 ∈ R^{H×W×3},t∈ (0, 1)
I0、 I1∈RH×W×3,t∈(0,1)
图像
I
0
\ I_0
I0上的任意region:
A
0
i
,
j
∈
R
C
\ A_0^{i,j}∈ R^{C}
A0i,j∈RC
A
0
i
,
j
\ A_0^{i,j}
A0i,j 在
I
1
\ I_1
I1上的空域neighbour:
A
1
n
i
,
j
∈
R
N
×
N
×
C
\ A_1^{n_{i,j}}∈ R^{N×N×C}
A1ni,j∈RN×N×C 其中N表示一个neighbour 的窗口大小
transform的query:
Q
0
i
,
j
\ Q_0^{i,j}
Q0i,j 是本文的
A
0
i
,
j
\ A_0^{i,j}
A0i,j
transform的key:
K
1
i
,
j
\ K_1^{i,j}
K1i,j 是通过本文的
A
1
n
i
,
j
∈
R
N
×
N
×
C
\ A_1^{n_{i,j}}∈ R^{N×N×C}
A1ni,j∈RN×N×C得到,
K
1
n
i
,
j
=
A
1
n
i
,
j
W
K
K_1^{n_{i,j}} = A_1^{n_{i,j}}W_K
K1ni,j=A1ni,jWK
transform的value:
V
1
i
,
j
\ V_1^{i,j}
V1i,j 是本通过文的
A
1
n
i
,
j
∈
R
N
×
N
×
C
\ A_1^{n_{i,j}}∈ R^{N×N×C}
A1ni,j∈RN×N×C得到,
V
1
n
i
,
j
=
A
1
n
i
,
j
W
V
V_1^{n_{i,j}} = A_1^{n_{i,j}}W_V
V1ni,j=A1ni,jWV
transform中的不完全的atttention map
S
0
→
1
i
,
j
∈
R
N
×
N
\ S_{0→1}^{i,j} ∈ R^{N×N}
S0→1i,j∈RN×N ,按原文attenion=KQV/√k, 这里只是K*Q
transform 中的 V、Q、K数据来源如下图红框,所以有了第一步骤:抽取motion 和 appearance information
第1步 appearance fusion:
增强appearance feature:
A
^
0
i
,
j
=
A
0
i
,
j
+
S
0
→
1
i
,
j
V
1
n
i
,
j
\hat A _0^{i,j} = A _0^{i,j} +S_{0→1}^{i,j}V_1^{n_{i,j}}
A^0i,j=A0i,j+S0→1i,jV1ni,j ,
注意
:这里的 增强 appearance = attention+原图,按照作者说法这个加就是增加了两帧之前的相似区域的 apppearance feature。并且乘的这个 attention值可以为两帧融合出一帧提供信息。这里是我认为比较微妙的地方
第2步:求 motion 信息:
首先建立个coordinate map:
B
∈
R
H
^
×
W
^
×
2
B ∈R^{\hat H×\hat W× 2}
B∈RH^×W^×2
注意
:这里的 “×2” 是因为有两个channel 分别表示 x和y方向,B的内容如图就是33 的相对坐标,hat H 和 hat W 是因为选择的是一个地方周围33的范围,因此 B的宽和高要大于等于原图的H和W,作者为了表达精确用了hat。
于是可以得到motion vector:
M
0
→
1
i
,
j
=
S
0
→
1
i
,
j
B
n
i
,
j
−
B
i
,
j
M_{0→1}^{i,j} = S_{0→1}^{i,j} B^{n_{i,j}} - B^{i,j}
M0→1i,j=S0→1i,jBni,j−Bi,j 这里的s就是上面的 softmax结果。
于是我们可以用时间t ∈[0,1] 得到相邻两帧之间的任意插帧。同理,这里也是我认为比较微妙的地方
于是有:
M
0
→
t
i
,
j
=
t
×
M
0
→
1
i
,
j
∈
R
H
^
×
W
^
\ M_{0→t}^{i,j}=t× M_{0→1}^{i,j}∈ R^{\hat H×\hat W}
M0→ti,j=t×M0→1i,j∈RH^×W^
第三个部分:提取 bidirectional optical flows F(对应论文Appendix A. 1. Motion Estimation)
作者说了用的RIFE的方法,略。
第四个部分:refine (对应论文Appendix A. 2. RefineNet)
其实也和RIFE一样,略。
四、本文实验
其实这篇王章主要在和rife比
看起来再大运动和细节纹理本文方法要好。后面继续持续更新文档