论文连接:https://arxiv.org/pdf/2106.06847.pdf
代码链接:https://github.com/caojiezhang/VSR-Transformer
译者言:ETHz出品,第一篇在VSR中使用的Transformer模型,方法与思想值得学习。模型与实验没有文章中大批量的数学公式那样惊艳,有数学推理癖好的读者建议直接阅读原文。
看点
Transformer应用在VSR中有两大问题:
- 全连接的自注意层由于依赖线性层来计算注意图而忽略了对局部信息的利用。
- 由于词前馈层独立的处理每个输入,导致其缺乏特征对齐的能力。
为了解决第一个问题,本文提出了一个时空卷积自注意层以利用局部信息。对于第二个问题,本文设计了一个双向光流的前馈层来挖掘不同帧之间的相关性并对齐特征。本文是第一个在VSR中应用Transformer的模型。
方法
overview
本文提出的VSR-Transformer由特征提取器、Transformer编码器和重建网络组成。其中特征提取器由堆叠的残差块组成。
时空卷积自注意层
由于全连接的自注意层不能使用每个帧的空间信息,本文提出了一个新的时空卷积自注意层(STCSA)。给定特征图X,使用三个独立的CNN
W
q
,
W
k
,
W
v
W_q,W_k,W_v
Wq,Wk,Wv来捕捉每一帧的空间信息。Q,K,V的生成通过如下公式:
Q
=
k
1
(
W
q
∗
X
)
,
K
=
k
1
(
W
k
∗
X
)
,
V
=
k
1
(
W
v
∗
X
)
Q=k_1(W_q * X),K=k_1(W_k * X),V=k_1(W_v * X)
Q=k1(Wq∗X),K=k1(Wk∗X),V=k1(Wv∗X)其中,
k
1
(
⋅
)
k_1(·)
k1(⋅)是展开操作,然后计算相似度矩阵
σ
1
(
Q
T
K
)
σ_1(Q^TK)
σ1(QTK)并与值V聚合以获得特征图。最后,采用折叠操作
k
2
(
⋅
)
k_2(·)
k2(⋅)将这些滑动局部patches组合起来,并使用输出层
W
o
W_o
Wo来输出最终特征图,公式如下:
f
1
(
X
)
=
ϕ
(
X
+
∑
i
=
1
h
W
o
i
∗
κ
2
(
κ
1
(
W
v
i
∗
X
)
⏟
V
σ
1
(
κ
1
τ
(
W
k
i
∗
X
)
⏟
K
⊤
κ
1
τ
(
W
q
i
∗
X
)
⏟
Q
)
)
)
f_{1}(\mathcal{X})=\phi\left(\mathcal{X}+\sum_{i=1}^{h} \mathcal{W}_{o}^{i} * \kappa_{2}(\underbrace{\kappa_{1}\left(\mathcal{W}_{v}^{i} * \mathcal{X}\right)}_{\mathcal{V}} \sigma_{1}(\underbrace{\kappa_{1}^{\tau}\left(\mathcal{W}_{k}^{i} * \mathcal{X}\right)}_{\mathcal{K}}^{\top} \underbrace{\kappa_{1}^{\tau}\left(\mathcal{W}_{q}^{i} * \mathcal{X}\right)}_{\mathcal{Q}}))\right)
f1(X)=ϕ⎝⎜⎛X+i=1∑hWoi∗κ2(V
κ1(Wvi∗X)σ1(⊤
κ1τ(Wki∗X)Q
κ1τ(Wqi∗X)))⎠⎟⎞其中,
k
1
T
(
⋅
)
=
τ
◦
k
1
(
⋅
)
k_1^T(·)=τ◦k_1(·)
k1T(⋅)=τ◦k1(⋅)是reshape操作τ和展开操作
k
−
1
k-1
k−1的组合。本文中使用单头(h=1)获得了良好的性能。
时空位置编码 :VSR-Transformer的结构是置换不变的,而VSR任务需要精确的时空位置信息。为了解决这个问题,本文使用3D固定位置编码将其添加到注意层的输入中。具体地,位置编码包含两个空间位置信息(水平和垂直)和一个时间位置信息,表述如下:
P
E
(
pos
,
i
)
=
{
sin
(
pos
⋅
α
k
)
,
for
i
=
2
k
cos
(
pos
⋅
α
k
)
,
for
i
=
2
k
+
1
\mathrm{PE}(\text { pos }, i)=\left\{\begin{array}{ll} \sin \left(\operatorname{pos} \cdot \alpha_{k}\right), & \text { for } i=2 k \\ \cos \left(\operatorname{pos} \cdot \alpha_{k}\right), & \text { for } i=2 k+1 \end{array}\right.
PE( pos ,i)={sin(pos⋅αk),cos(pos⋅αk), for i=2k for i=2k+1其中,
α
k
=
1
/
1000
0
2
k
/
d
3
\alpha_{k}=1 / 10000^{2 k / \frac{d}{3}}
αk=1/100002k/3d,k是[0,d/6)中的一个整数,‘pos’表示维度位置,d是通道维度。
双向光流前馈层
传统Transformer中的全连接前馈层忽略了利用不同帧的相关性,为了解决这个问题,本文通过使用光流进行空间对齐,提出了双向光流前馈层,如下图左所示。
具体地说,给定时空卷积自注意层输出的特征映射X,首先学习相邻帧之间的双向光流
O
←
,
O
→
\overleftarrow{\mathcal{O}}, \overrightarrow{\mathcal{O}}
O
,O
。然后通过翘曲得到后向特征
X
←
\overleftarrow{\mathcal{X}}
X
和前向特征
X
→
\overrightarrow{\mathcal{X}}
X
。在本文的实验中使用SPyNet来进行光流估计。然后将视频帧和扭曲的特征图进行聚合。作者修改了全连接的前馈层为:
f
2
(
X
)
=
ϕ
(
f
1
(
X
)
+
ρ
(
W
ˇ
1
∗
σ
2
(
W
ˇ
2
∗
[
V
,
X
‾
]
)
⏟
backward propagation
+
W
→
1
∗
σ
2
(
W
→
2
∗
[
V
,
X
→
]
)
⏟
forward propagation
)
)
f_{2}(\mathcal{X})=\phi\left(f_{1}(\mathcal{X})+\rho(\underbrace{\check{\boldsymbol{W}}_{1} * \sigma_{2}\left(\check{\boldsymbol{W}}_{2} *[\mathcal{V}, \overline{\mathcal{X}}]\right)}_{\text {backward propagation }}+\underbrace{\overrightarrow{\boldsymbol{W}}_{1} * \sigma_{2}\left(\overrightarrow{\boldsymbol{W}}_{2} *[\mathcal{V}, \overrightarrow{\mathcal{X}}]\right)}_{\text {forward propagation }})\right)
f2(X)=ϕ⎝⎜⎜⎛f1(X)+ρ(backward propagation
Wˇ1∗σ2(Wˇ2∗[V,X])+forward propagation
W
1∗σ2(W
2∗[V,X
]))⎠⎟⎟⎞其中,
p
(
⋅
)
p(·)
p(⋅)是一个融合模块。在实验中将两层网络的情形推广到由残差ReLU网络组成的多层神经网络
R
1
R_1
R1和
R
2
R_2
R2,公式如下:
f
2
(
X
)
=
ϕ
(
f
1
(
X
)
+
ρ
(
R
1
(
V
,
X
←
)
+
R
2
(
V
,
X
→
)
)
)
f_{2}(\mathcal{X})=\phi\left(f_{1}(\mathcal{X})+\rho\left(R_{1}(\mathcal{V}, \overleftarrow{\mathcal{X}})+R_{2}(\mathcal{V}, \overrightarrow{\mathcal{X}})\right)\right)
f2(X)=ϕ(f1(X)+ρ(R1(V,X
)+R2(V,X
)))与ViT相比,本文能够捕获不同帧之间的相关性。相比BasicVSR,本文避免了对光流和特征的递归,因此允许并行计算。
实验
REDS上的测试
在都用5帧来训练的模型上,VSR-Transformer拥有较好的性能,这是因为BasicVSR和IconVSR更加适应长期的视频序列,但是VSR-Transformer的参数量缺惊人的高,这是一大待处理的弊端。
Vid4上的测试
在Vid4上的BI降采样的定量结果,作者分析不如BasicVSR的原因可能是BasicVSR和IconVSR在Vid4的所有帧上测试,而VSR-Transformer只在7帧上测试,亦或是Vimeo-90K-T和Vid4之间可能存在分布偏差。
在只有7帧的Vid4上进行测试。(这个实验有点牵强,自己模型处理长期视频效果不好就得把测试集剪切来证明自己的优越性,建议作者直接改成一帧的然后和单图超分去比)
消融实验
使用定性的方式来进行光流的消融实验。
在REDS上进行其他组件的消融实验。