(如需转载等事宜请联系"我爱计算机视觉")
作者单位:清华大学深研院、华为诺亚方舟Lab、ETHz
论文链接:https://arxiv.org/pdf/2205.10195
代码链接:https://github.com/linjing7/VR-Baseline
笔者言: 本文将Seq2Seq的架构引入到了视频超分中,其次针对光流不准的问题,之前的文章选择使用DCN进行替代,本文从另一个角度出发,通过知识蒸馏的方法来训练更准的光流,想法很好但是相比于DCN的效果还有待进一步的优化。
看点
如何正确建模视频序列中的帧间关系是视频恢复中一个重要但尚未解决的问题。本研究中提出一种无监督流对齐Seq2Seq模型来解决这个问题。本文首次探索了在自然语言处理领域已被证明具有序列建模能力的Seq2Seq模型。优化的序列化建模显示了捕获帧之间的远程依赖关系的潜力。另一方面,使用提出的无监督蒸馏损失训练流估计器,这可以缓解以前基于流的方法的数据差异和不准确的退化光流问题。通过可靠的光流,我们可以在多个帧之间建立精确的对应关系,提高序列对序列模型的潜力。以下笔者将以VSR的角度来对本文进行解析。
方法
Overview
S2SVR由编码器、解码器、局部注意和光流估计四个组件构成,如下图所示。
编解码器
首先,编码器按顺序读取LR帧并将其转换成一列潜在向量
Z
=
{
z
1
,
z
2
,
.
.
.
,
z
n
}
Z=\{z_1,z_2,...,z_n\}
Z={z1,z2,...,zn},其中
z
i
=
F
e
(
z
i
−
1
,
x
i
)
z_i = F_e(z_{i-1},x_i)
zi=Fe(zi−1,xi),
x
i
x_i
xi表示i时刻的LR帧,
F
e
F_e
Fe表示编码器,由堆叠的ResConvGRU构成。
给定潜在向量列表,解码器产生输出序列Y,其中
y
i
=
F
d
(
y
1
,
y
2
,
.
.
.
,
y
t
−
1
;
z
1
,
z
2
,
.
.
.
,
z
n
)
y_i=F_d(y_1,y_2,...,y_{t-1};z_1,z_2,...,z_n)
yi=Fd(y1,y2,...,yt−1;z1,z2,...,zn),
F
d
F_d
Fd表示解码器,由ResConvGRU和前馈网络组成。ResConvGRU为下一步预测生成隐藏状态
s
i
s_i
si,
s
i
s_i
si通过前馈网络生成输出帧,表示为:
s
i
=
F
r
(
s
i
−
1
,
y
i
−
1
,
c
i
)
,
y
i
=
F
f
(
s
i
)
s_i=F_r(s_{i-1},y_{i-1},c_i),y_i=F_f(s_i)
si=Fr(si−1,yi−1,ci),yi=Ff(si)其中
F
r
F_r
Fr表示ResConvGRU,
F
f
F_f
Ff表示前馈网络,
c
i
c_i
ci为潜在向量经过局部注意而生成的上下文向量。
局部注意
如上图(a)所示,注意模块允许解码器关注原始序列的不同区域,上下文向量被计算为潜在向量的加权和: c i = ∑ j = i − r i + r α i j z j , α i j = exp ( e i j ) ∑ k = i − r i + r exp ( e i k ) c_{i}=\sum_{j=i-r}^{i+r} \alpha_{i j} z_{j},\alpha_{i j}=\frac{\exp \left(e_{i j}\right)}{\sum_{k=i-r}^{i+r} \exp \left(e_{i k}\right)} ci=j=i−r∑i+rαijzj,αij=∑k=i−ri+rexp(eik)exp(eij)其中 e i j = F a ( s i − 1 , z j ) e_{ij}=F_a(s_{i-1},z_j) eij=Fa(si−1,zj)是一个对 j j j位置的输入与 i i i位置的输出的匹配程度进行评分的注意模块,采用一个隐含层的前馈网络: e i j = V a ⋅ tanh ( W a [ s i − 1 , z j ] ) e_{i j}=\mathbf{V}_{a} \cdot \tanh \left(\mathbf{W}_{a}\left[s_{i-1}, z_{j}\right]\right) eij=Va⋅tanh(Wa[si−1,zj])其中 V \mathbf{V} V和 W a \mathbf{W}_{a} Wa表示前馈网络的第一个和第二个卷积层。
ResConvGRU
编解码器中都使用了一个深度堆叠的ConvGRU,考虑到视频的特点对原有的ConvGRU做了两处修改。首先,在ConvGRU后将多个残差块拼接在一起。此外,引入栈中残差,如下所示: z t l = z t l − 1 + F b ( F g ( z t − 1 l , z t l − 1 ) ) z_{t}^{l}=z_{t}^{l-1}+F_{b}\left(F_{g}\left(z_{t-1}^{l}, z_{t}^{l-1}\right)\right) ztl=ztl−1+Fb(Fg(zt−1l,ztl−1)) F b F_b Fb表示残差块, F g F_g Fg为ConvGRU,这可以解决消失的梯度问题,允许对长期的时间依赖性建模。
运动补偿与无监督光流估计
为了提高性能,需要在多帧之间建立精确的空间对应关系。本文采用光流估计器进行运动补偿,如上图(b)所示。首先,采用一个流估计器来预测两个连续帧之间的运动。然后扭曲ResConvGRU中的输入隐藏状态
s
i
−
1
s_{i-1}
si−1至
s
^
t
−
1
\hat s_{t-1}
s^t−1,使其与当前步的输入空间对齐。
以前基于流的运动补偿方法受到合成数据集和真实数据集之间的数据差异以及不准确的LR流的影响。为此,本文提出了一种无监督方案,该方案配备了一种蒸馏损失,以在VSR数据集上训练流估计器,如下图所示:
目标是通过训练一个流网络
F
o
F_o
Fo预测两个连续帧
{
x
1
,
x
2
}
\{x_1, x_2\}
{x1,x2}的光流
F
x
12
F^x{12}
Fx12以估计出准确的运动信息。首先在HR视频上训练一个参数为
θ
t
θ_t
θt的教师流估计网络,该网络具有光度损失和平滑损失。然后使用教师估计器来生成伪标签,并在LR视频上训练一个参数为
θ
o
θ_o
θo的学生流网络,算法如下图所示:
其中,教师网络
F
t
F_t
Ft的光度损失是基于两个连续帧中相同物体必须具有相似强度的假设:
L
p
h
(
F
12
y
)
=
∑
p
ρ
(
y
1
(
p
)
,
y
2
(
p
+
F
12
y
(
p
)
)
)
⋅
O
y
(
p
)
\mathcal{L}_{\mathrm{ph}}\left(\mathbf{F}_{12}^{y}\right)=\sum_{p} \rho\left(y_{1}(p), y_{2}\left(p+\mathbf{F}_{12}^{y}(p)\right)\right) \cdot O^{y}(p)
Lph(F12y)=p∑ρ(y1(p),y2(p+F12y(p)))⋅Oy(p)其中
p
p
p是图像中的像素坐标,
O
y
(
p
)
O^y(p)
Oy(p)是通过正反向检查的方法来丢弃发生区域上的损失而得到的遮挡掩模。
ρ
(
⋅
)
ρ(·)
ρ(⋅)是基于像素的相似性度量,
F
12
y
=
F
t
(
y
1
,
y
2
)
F^y_{12}=F_t(y_1,y_2)
F12y=Ft(y1,y2)是HR视频中相邻帧的光流场。此外还采用一阶平滑损失来鼓励相邻流的共线性:
L
s
m
(
F
12
y
)
=
∑
d
∈
x
,
y
∑
p
∣
∂
d
F
12
y
(
p
)
∣
e
−
∣
∂
d
y
1
(
p
)
∣
\mathcal{L}_{\mathrm{sm}}\left(\mathbf{F}_{12}^{y}\right)=\sum_{d \in x, y} \sum_{p}\left|\partial_{d} \mathbf{F}_{12}^{y}(p)\right| e^{-\left|\partial_{d} y_{1}(p)\right|}
Lsm(F12y)=d∈x,y∑p∑∣∂dF12y(p)∣e−∣∂dy1(p)∣基于HR流对于运动补偿更准确的假设,为此使用
F
12
y
F^y_{12}
F12y作为LR流
F
12
x
F^x_{12}
F12x的伪标签,并提出蒸馏损失:
L
d
i
s
(
F
12
x
,
F
12
y
)
=
∑
p
∣
F
12
y
(
p
)
−
F
u
(
F
12
x
)
(
p
)
∣
\mathcal{L}_{\mathrm{dis}}\left(\mathbf{F}_{12}^{x}, \mathbf{F}_{12}^{y}\right)=\sum_{p}\left|\mathbf{F}_{12}^{y}(p)-F_{u}\left(\mathbf{F}_{12}^{x}\right)(p)\right|
Ldis(F12x,F12y)=p∑∣F12y(p)−Fu(F12x)(p)∣其中
F
u
F_u
Fu是上采样操作,学生网络稍后将用作运动补偿的光流估计器,实现中采用了一个轻量级流模型pwclite作为光流网络。
实验
定量评估
在BI的REDS4上峰值信噪比为31.96dB(BasicVSR++为32.39dB),Vimeo-90K-T的峰值信噪比为37.63dB(VRT为38.20dB)。