Learning joint spatial-temporal transformations for video inpainting (CVPR2020) 文章下载
下面是一些本人觉得重要的内容,若有错误,欢迎大家批评指正
本文作者关注视频帧中的缺失区域,归纳总结了相关文章的贡献和缺点,表示缺失区域的内容还来自远处帧中的已知内容,其实意在捕获long-range correspondence,提高时空一致性。利用transformer的结构特性,提出一个STTN网络,输入相邻帧和远处帧来同时填补所有输入帧的缺失内容。
Introduction&Related work
视频修复算法的实际应用:corrupted video restoration, unwanted object removal, video retargeting and under/over-exposed image restoration. 许多工作用大量的时空一致性内容填充缺失区域,下面主要讨论Patch-based methods和Deep generative methods。
Patch-based methods
这些方法基于全局优化,通过从已知区域提取相似的空间或时空patch来合成缺失区域。(合成缺失区域的方法例如,提供foreground和background segments;外观和光流的联合估计)
局限性:1、通常假设运动场均匀,不适用于复杂运动场景。
2、基于全局优化的方法通常具有高的计算复杂度。
Deep generative methods
相关方法:3D和2D全卷积网络相结合来学习时间信息和空间细节(在复杂场景中,结果很模糊);外观和光流的联合估计;采用RNN网络来确保时间一致性;Temporal SN-PatchGAN和Temporal shift module的开发。
局限性: 1、无法从远处帧中获取可见内容。
2、处理复杂和大的运动场景的能力不足。
目前state-of-art methods会应用attention模块来捕获long-range correspondence,这样就可以用来自远处帧的可见内容来填充目标帧的缺失区域。例如帧级注意(将对齐帧进行加权和操作);像素级注意(从边界向内部填充)。但是这些方法受复杂运动的显著外观变化影响,有两个major limitation:
1、通常假设全局仿射变换或均匀运动。
2、所有视频逐帧处理,无专门的时间一致性优化设计。
Methodology
针对上述提到的局限性,作者提出了能够学习联合时空转换的视频修复方法。主要贡献如下:
1)学习视频修复的空间和时间的联合转换,通过深度生成模型沿时空维度进行对抗训练。
2)提出了基于multi-scale patch的视频帧表示,可实现快速训练和推理。
3)使用静态mask和移动目标mask进行了定量和定性评估,来模拟真实世界的应用。
Overall design
Problem formulation
输入为两项:随机创建的
(
X
l
T
,
M
l
T
)
{(X_l^T, M_l^T)}
(XlT,MlT)。
①损坏的视频序列:
X
l
T
:
=
{
X
1
,
X
2
,
.
.
.
,
X
T
}
X_l^T:={\{X_1,X_2,...,X_T}\}
XlT:={X1,X2,...,XT},其中高为
H
H
H,宽为
W
W
W,帧长度为
T
T
T。
②对应的帧级掩码:
M
l
T
:
=
{
M
1
,
M
2
,
.
.
.
,
M
T
}
M_l^T:={\{M_1,M_2,...,M_T}\}
MlT:={M1,M2,...,MT},对于每个掩码
M
i
M_i
Mi,“0”代表已知像素,“1”代表缺失区域。
输出:生成的视频帧
Y
l
T
^
:
=
{
Y
1
^
,
Y
2
^
,
.
.
.
,
Y
T
^
}
\hat{Y_l^T}:={\{\hat{Y_1},\hat{Y_2},...,\hat{Y_T}}\}
YlT^:={Y1^,Y2^,...,YT^}
目的是重建原始的视频帧
Y
l
T
:
=
{
Y
1
,
Y
2
,
.
.
.
,
Y
T
}
Y_l^T:={\{Y_1,Y_2,...,Y_T}\}
YlT:={Y1,Y2,...,YT}
那么真实数据的条件分布
p
(
Y
l
T
∣
X
l
T
)
p(Y_l^T|X_l^T)
p(YlT∣XlT) 可用生成数据中的一个条件分布
p
(
Y
l
T
^
∣
X
l
T
)
p(\hat{Y_l^T}|X_l^T)
p(YlT^∣XlT)来近似。
***将视频全局的已知信息用来填补目标帧的缺失区域内容会更有效,因此以相邻帧和远处帧为条件,需要在前馈过程中完成所有输入帧的缺失区域的填补。作者将视频修复任务看成一个“多对多”的问题。基于马尔可夫假设,“多对多”问题可简化表示为: p ( Y l T ^ ∣ X l T ) = ∏ t = 1 T p ( Y t − n t + n ∣ X t − n t + n , X 1 , s T ^ ) , ( 1 ) p(\hat{Y_l^T}|X_l^T)=\prod_{t=1}^Tp(\hat{Y_{t-n}^{t+n}|X_{t-n}^{t+n}, X_{1,s}^T}), (1) p(YlT^∣XlT)=t=1∏Tp(Yt−nt+n∣Xt−nt+n,X1,sT^),(1) 其中 X t − n t + n X_{t-n}^{t+n} Xt−nt+n表示具有中心时刻t和时间半径n的相邻帧的一个短视频。 X 1 , s T X_{1,s}^T X1,sT表示从以s采样率的视频 X l T X_l^T XlT中均匀采样的远处帧。由于 X 1 , s T X_{1,s}^T X1,sT通常可以覆盖视频的大部分关键帧,因此它能够描述整个视频。
图1 (从左至右) 帧级编码器;多层多头时空变压器;帧级解码器
Network design
图1为所提出的STTN框架。STTN 由3个组件组成,包括帧级编码器、多层多头时空变换器和帧级解码器。STTN以相邻帧
X
t
−
n
t
+
n
X_{t-n}^{t+n}
Xt−nt+n和远处帧
X
1
,
s
T
X_{1,s}^T
X1,sT作为条件,同时完成所有输入帧。
1)帧级编码器是通过堆叠几个有stride的 2D 卷积层构建的,旨在为每帧的低级像素编码深度特征。帧级解码器类似,被设计为将特征解码回帧。
2)时空transformer是其核心组成部分,旨在学习深度编码空间中所有缺失区域的联合时空转换。
Spatial-temporal transformer
多头转换器并行运行多个“Embedding-Matching-Attending”步骤,用于不同的patch尺寸。在Embedding步骤中,每帧的特征被映射到查询和内存(即键值对)中以供进一步检索。在Matching步骤中,通过匹配从所有帧中提取的空间块中的查询Q和键K来计算区域亲和度。最后,在Attending步骤中,针对每个帧中的缺失区域进行相关区域的检测和转换。
我认为这个transformer最大的创新之处在于它被用来并行的实现输入帧缺失内容的填补,能够获取长期依赖关系。
(1) 在基于patch的多头注意transformer(可去看ViT的解析)基础上,在匹配阶段做了multi-scale patch的提取,避免后续patch之间交互时出现冗余;
(2) 还堆叠多层transformer,充分利用transformer的功率,从而在单次前馈过程中,根据区域特征的更新,提高对缺失区域的注意效果。
Optimization objectives
选择优化目标的原则是保证生成视频中每像素重建的精度、感知合理性和时空一致性。因此,作者选择了一个像素级的重建损失和一个时空对抗性损失作为我们的优化目标。
1、(像素级重建损失)包括在生成帧和原始帧之间计算的 L1 损失,以确保结果中的每像素重建准确性。空洞区域的L1损失表示为:
L
h
o
l
e
=
∥
M
l
T
⊙
(
Y
l
T
−
Y
l
T
^
)
∥
1
∥
M
l
T
∥
1
,
(
2
)
L_{hole}=\frac{{\Vert M_l^T ⊙ (Y_l^T-\hat{Y_l^T}) \Vert}_1}{{\Vert M_l^T \Vert}_1}, (2)
Lhole=∥MlT∥1∥MlT⊙(YlT−YlT^)∥1,(2)
与L1对应的有效区域损失可表示为:
L
v
a
l
i
d
=
∥
1
−
M
l
T
⊙
(
Y
l
T
−
Y
l
T
^
)
∥
1
∥
1
−
M
l
T
∥
1
,
(
3
)
L_{valid}=\frac{{\Vert {1-M_l^T} ⊙ (Y_l^T-\hat{Y_l^T}) \Vert}_1}{{\Vert {1-M_l^T} \Vert}_1}, (3)
Lvalid=∥1−MlT∥1∥1−MlT⊙(YlT−YlT^)∥1,(3)
其中⊙代表逐元素相乘,该值由对应区域的大小归一化。
2、(时空对抗性损失)
说白了对缺失区域的视频修复实际上可看成一种生成任务,那么对抗性训练可以帮助确保高质量的内容生成结果,作者建议使用时间PatchGAN(T-PatchGAN)作为我们的鉴别器[5,6,34,36]。这种对抗性的损失在提高视频绘制[5,6]的感知质量和时空一致性方面显示出了良好的效果。特别是,T-PatchGAN由6层三维卷积层组成。T-PatchGAN学习将每个时空特征区分为真实的或假的,从而通过STTN对真实数据的时空一致性和局部-全局感知细节进行建模。T-PatchGAN鉴别器的详细优化函数如下所示:
L
D
=
E
x
∼
P
Y
l
T
(
x
)
[
R
e
L
U
(
1
−
D
(
x
)
)
]
+
E
z
∼
P
Y
l
T
^
(
z
)
[
R
e
L
U
(
1
+
D
(
z
)
)
]
,
(
4
)
L_D=E_{x \sim P_{Y_l^T(x)}}[ReLU(1-D(x))]+E_{z \sim P_{\hat{Y_l^T}(z)}}[ReLU(1+D(z))], (4)
LD=Ex∼PYlT(x)[ReLU(1−D(x))]+Ez∼PYlT^(z)[ReLU(1+D(z))],(4)
STTN的对抗损失可表示为:
L
a
d
v
=
−
E
z
∼
P
Y
l
T
^
(
z
)
[
D
(
z
)
]
,
(
5
)
L_{adv}=-E_{z \sim P_{\hat{Y_l^T}(z)}}[D(z)], (5)
Ladv=−Ez∼PYlT^(z)[D(z)],(5)
总体优化目标总结如下:
L
=
λ
h
o
l
e
⋅
L
h
o
l
e
+
λ
v
a
i
l
d
⋅
L
v
a
i
l
d
+
λ
a
d
v
⋅
L
a
d
v
,
(
6
)
L={\lambda_{hole}}\cdot{L_{hole}}+{\lambda_{vaild}}\cdot{L_{vaild}}+{\lambda_{adv}}\cdot{L_{adv}}, (6)
L=λhole⋅Lhole+λvaild⋅Lvaild+λadv⋅Ladv,(6)
其中,
λ
h
o
l
e
=
1
\lambda_{hole}=1
λhole=1,
L
v
a
i
l
d
=
1
L_{vaild}=1
Lvaild=1,
L
a
d
v
=
0.01
L_{adv}=0.01
Ladv=0.01。一般的,这些权重都是根据经验设置的(做实验试出来的)。
Experiment
数据集
采用了视频修复中常用的两个数据集,包括Youtube-VOS和DAVIS。Youtube-VOS数据集遵循了原始的训练/验证/测试(3471/474/508)比例,平均长度为150帧。DAVIS数据集与之前的作品使用一致的训练/测试(60/90)设置。
主要分析到这,找文章作者的motivation和算法设计。有问题欢迎给我私信~~~~~