文章目录
Video-to-Video Synthesis
github:https://github.com/NVIDIA/vid2vid
论文地址:https://tcwang0509.github.io/vid2vid/paper_vid2vid.pdf
代码后续进行讲解~~
1、背景
视频——》草图——〉视频合成
学习从输入源视频(例如,一系列语义分割掩码)到精确描述源视频内容的输出逼真视频的映射函数。
2、整体思路
在没有对时间动态建模的情况下,直接将现有的图像合成方法应用于输入视频通常会导致低视觉质量的时间不连贯的视频。
在本文中,提出了一种在生成对抗学习框架下的视频到视频合成方法。通过精心设计的生成器和鉴别器,再加上时空对抗目标,我们在包括分割蒙版、草图和姿势在内的多种输入格式上实现了高分辨率、逼真、时间连贯的视频结果。
3、方法
令
s
1
T
≡
{
s
1
,
s
2
,
.
.
.
,
s
T
}
s_1^T\equiv \left \{ s_1,s_2,...,s_T \right \}
s1T≡{s1,s2,...,sT}为源视频帧序列。例如,它可以是语义分割掩模或边缘图的序列。令
x
1
T
≡
{
x
1
,
x
2
,
.
.
.
,
x
T
}
x_1^T\equiv \left \{ x_1,x_2,...,x_T \right \}
x1T≡{x1,x2,...,xT} 为对应的真实视频帧的序列。
视频到视频合成的目标是学习一个映射函数,可以将
s
1
T
s_1^T
s1T转换为输出视频帧序列,
x
~
1
T
≡
{
x
~
1
,
x
~
2
,
.
.
.
,
x
~
T
}
\widetilde{x}_1^T\equiv \left \{\widetilde{x}_1,\widetilde{x}_2,...,\widetilde{x}_T \right \}
x
1T≡{x
1,x
2,...,x
T},使得条件分布给定
s
1
T
s_1^T
s1T的
x
~
1
T
\widetilde{x}_1^T
x
1T的条件分布与给定
s
1
T
s_1^T
s1T的
x
1
T
x_1^T
x1T的条件分布相同
p
(
x
~
1
T
∣
s
1
T
)
=
p
(
x
1
T
∣
s
1
T
)
p(\widetilde{x}_1^T|s_1^T)=p({x}_1^T|s_1^T)
p(x
1T∣s1T)=p(x1T∣s1T)
通过匹配条件视频分布,该模型学习生成逼真的、时间连贯的输出序列,就像它们是由摄像机捕获的一样。
我们为这个条件视频分布匹配任务提出了一个条件 GAN 框架。令
G
G
G 为将输入源序列映射到相应输出帧序列的生成器:
x
1
T
=
G
(
s
1
T
)
x_1^T = G(s_1^T )
x1T=G(s1T)。我们通过解决下式给出的极小极大优化问题来训练生成器:
m
a
x
D
m
i
n
G
E
(
x
1
T
,
s
1
T
)
[
log
D
(
x
1
T
,
s
1
T
)
]
+
E
s
1
T
[
log
(
1
−
D
(
G
(
s
1
T
)
,
S
1
T
)
)
]
\underset{D}{max}\underset{G}{min} E_{(x_1^T,s_1^T)}[\log_{}{D}(x_1^T,s_1^T)]+E_{s_1^T}[\log_{}{(1-D(G(s_1^T),S_1^T ))}]
DmaxGminE(x1T,s1T)[logD(x1T,s1T)]+Es1T[log(1−D(G(s1T),S1T))]
D
D
D是鉴别器,在求解上式时,我们最小化了
p
(
x
~
1
T
∣
s
1
T
)
p(\widetilde{x}_1^T|s_1^T)
p(x
1T∣s1T) 和
p
(
x
1
T
∣
s
1
T
)
p({x}_1^T|s_1^T)
p(x1T∣s1T)之间的 Jensen-Shannon 散度。
3.1 Sequential generator 连续帧,帧与帧之间如何生成
为了简化视频到视频的合成问题,我们做出马尔可夫假设,将条件分布
p
(
x
~
1
T
∣
s
1
T
)
p(\widetilde{x}_1^T|s_1^T)
p(x
1T∣s1T)分解为由下式给出的乘积形式:
p
(
x
~
1
T
∣
s
1
T
)
=
∏
t
=
1
T
p
(
x
~
t
∣
x
~
t
−
L
t
−
1
,
s
t
−
L
t
)
p(\widetilde{x}_1^T|s_1^T)=\prod_{t=1}^{T} p(\widetilde{x}_t|\widetilde{x}_{t-L}^{t-1},s_{t-L}^t)
p(x
1T∣s1T)=t=1∏Tp(x
t∣x
t−Lt−1,st−Lt)
换句话说,我们假设视频帧可以顺序生成,第 t 帧 x ~ t \widetilde{x}_t x t的生成仅取决于三个因素:1)当前源帧 s t s_t st,2)过去 L 个源帧 s t − L t − 1 s_{t-L}^{t-1} st−Lt−1,以及 3) 过去 L 个生成帧 x ~ t − L t − 1 \widetilde{x}_{t-L}^{t-1} x t−Lt−1。我们训练前馈网络 F F F 使用 x ~ t = F ( x ~ t − L t − 1 , s t − L t ) \widetilde{x}_t=F(\widetilde{x}_{t-L}^{t-1},s_{t-L}^t) x t=F(x t−Lt−1,st−Lt)对条件分布 p ( x ~ t ∣ x ~ t − L t − 1 , s t − L t ) p(\widetilde{x}_t|\widetilde{x}_{t-L}^{t-1},s_{t-L}^t) p(x t∣x t−Lt−1,st−Lt)进行建模。通过以递归方式应用函数 F 获得最终输出 x ~ 1 T \widetilde{x}_{1}^{T} x 1T。我们发现,较小的 L(例如,L = 1)会导致训练不稳定,而较大的 L 会增加训练时间和 GPU 内存,但质量改进却很少。在我们的实验中,我们设置 L = 2。
3.2 前馈网络F
视频信号在连续帧中包含大量的冗余信息。如果已知连续帧之间的光流,则可以通过对当前帧进行翘曲来估计下一帧。
除了遮挡区域之外,这种估计在很大程度上是正确的。基于这一观察,我们将 F 建模为
F
(
x
~
t
−
L
t
−
1
,
s
t
−
L
t
)
=
(
1
−
m
~
t
)
⊙
w
~
t
−
1
(
x
~
t
−
1
)
+
m
~
t
⊙
h
~
t
F(\widetilde{x}_{t-L}^{t-1},s_{t-L}^t)=(1-\widetilde{m}_t)\odot \widetilde{w}_{t-1}(\widetilde{x}_{t-1})+\widetilde{m}_t\odot \widetilde{h}_t
F(x
t−Lt−1,st−Lt)=(1−m
t)⊙w
t−1(x
t−1)+m
t⊙h
t
⊙
\odot
⊙是逐元素乘积运算符,1 是全一的图像。第一部分对应于前一帧扭曲的像素,而第二部分则产生新像素的幻觉。其他术语的定义如下
- w ~ t − 1 = W ( x ~ t − L t − 1 , s t − L t ) \widetilde{w}_{t-1} =W(\widetilde{x}_{t-L}^{t-1},s_{t-L}^t) w t−1=W(x t−Lt−1,st−Lt)是从 x ~ t − 1 \widetilde{x}_{t-1} x t−1 到 x ~ t \widetilde{x}_{t} x t的估计光流, W W W 是光流预测网络。我们使用输入源图像 s t − L t s_{t-L}^t st−Lt和先前合成的图像 x ~ t − L t − 1 \widetilde{x}_{t-L}^{t-1} x t−Lt−1来估计光流。通过 w ~ t − 1 ( x ~ t − 1 ) \widetilde{w}_{t-1}(\widetilde{x}_{t-1}) w t−1(x t−1),我们基于 w ~ t − 1 \widetilde{w}_{t-1} w t−1扭曲 x ~ t − 1 \widetilde{x}_{t-1} x t−1。
- h ~ t = H ( x ~ t − L t − 1 , s t − L t ) \widetilde{h}_t=H(\widetilde{x}_{t-L}^{t-1},s_{t-L}^t) h t=H(x t−Lt−1,st−Lt)是幻觉图像,由生成器 H H H 直接合成。
- m ~ t = M ( x ~ t − L t − 1 , s t − L t ) \widetilde{m}_t =M(\widetilde{x}_{t-L}^{t-1},s_{t-L}^t) m t=M(x t−Lt−1,st−Lt)是遮挡掩模,其连续值在0到1之间。 M M M表示掩模预测网络。我们的遮挡蒙版是软的而不是二进制的,以更好地处理“放大”场景。例如,当一个物体靠近我们的相机时,如果我们只扭曲之前的帧,随着时间的推移,该物体会变得越来越模糊。为了提高物体的分辨率,我们需要合成新的纹理细节。通过使用软掩模,我们可以通过逐渐混合扭曲的像素和新合成的像素来添加细节。
对于M,W和H,我们使用残差网络。为了生成高分辨率的视频,我们采用了由粗到精的生成器设计。
3.3 判别器设计
由于使用多个判别器可以缓解 GAN 训练期间的模式崩溃问题 [19,67,73],因此我们还设计了两种类型的判别器,如下所述。
3.3.1条件图像鉴别器 D I D_I DI
D I D_I DI 的目的是确保每个输出帧都类似于给定相同源图像的真实图像。该条件鉴别器应该为真对 ( x t ∣ s t ) ({x}_t|s_t) (xt∣st) 输出 1,为假对 ( x ~ t ∣ s t ) (\widetilde{x}_t|s_t) (x t∣st)输出 0。
3.3.2 条件视频鉴别器 D V D_V DV
D V D_V DV的目的是确保连续输出帧类似于给定相同光流的真实视频的时间动态。 D I D_I DI 以源图像为条件, D V D_V DV 以流为条件。令 w t − 2 t − K w_{t−2}^{t−K} wt−2t−K 为 K 个连续实像 x t − 1 t − K x_{t−1}^{t−K} xt−1t−K的 K − 1 K − 1 K−1光流。该条件鉴别器 D V D_V DV 应针对真对 ( x t − 1 t − K , w t − 2 t − K ) (x_{t−1}^{t−K},w_{t−2}^{t−K}) (xt−1t−K,wt−2t−K)输出 1,针对假对 ( x ~ t − 1 t − K , w t − 2 t − K ) (\widetilde{x}_{t−1}^{t−K},w_{t−2}^{t−K}) (x t−1t−K,wt−2t−K)输出 0。
3.4 学习目标函数
我们引入两个采样算子来方便讨论。
- 首先,令 ϕ I \phi_I ϕI为随机图像采样算子,使得 ϕ I ( x 1 T , s 1 T ) = ( x i , s i ) \phi_I(x_1^T,s_1^T) = (x_i,s_i) ϕI(x1T,s1T)=(xi,si)其中 i i i 是从 1 到 T 均匀采样的整数。换句话说, ϕ I \phi_I ϕI从 ( x 1 T , s 1 T ) (x_1^T,s_1^T) (x1T,s1T)中随机采样一对图像。
- 其次,我们将 ϕ V \phi_V ϕV定义为随机检索 K 个连续帧的采样算子。具体来说, ϕ V ( w 1 T − 1 , x 1 T , s 1 T ) = ( w i − K i − 2 , x i − K i − 1 , s i − K i − 1 ) \phi_V(w_1^{T-1},x_1^T,s_1^T) = (w_{i-K}^{i-2},x_{i-K}^{i-1},s_{i-K}^{i-1}) ϕV(w1T−1,x1T,s1T)=(wi−Ki−2,xi−Ki−1,si−Ki−1)其中 i i i 是从 K + 1 K + 1 K+1 到 T + 1 T +1 T+1 均匀采样的整数. 该算子检索 K 个连续帧和相应的 K − 1 K − 1 K−1 个光流图像。有了 ϕ I \phi_I ϕI和 ϕ V \phi_V ϕV ,我们就准备好展示我们的学习目标函数了。
3.4.1 训练F
我们通过求解来训练顺序视频合成函数 F
m
i
n
F
(
m
a
x
D
I
L
I
(
F
,
D
I
)
)
+
m
a
x
D
V
L
V
(
F
,
D
V
)
+
λ
w
L
w
(
F
)
\underset{F}{min}(\underset{D_I}{max}L_I(F,D_I))+ \underset{D_V}{max}L_V(F,D_V)+\lambda _wL_w(F)
Fmin(DImaxLI(F,DI))+DVmaxLV(F,DV)+λwLw(F)
其中
L
I
L_I
LI 是由条件图像鉴别器
D
I
D_I
DI 定义的图像上的 GAN 损失,
L
V
L_V
LV 是由
D
V
D_V
DV 定义的 K 个连续帧上的 GAN 损失,
L
W
L_W
LW 是流估计损失。在整个基于网格搜索的实验中,权重
λ
W
λ_W
λW 设置为 10。除了等式中的损失项之外,我们还使用鉴别器特征匹配损失和VGG特征匹配损失,因为它们提高了收敛速度和训练稳定性.
3.5 Foreground-background prior.
前景-背景优先。当使用语义分割掩模作为源视频时,我们可以根据语义将图像分为前景区域和背景区域。例如,建筑物和道路属于背景,而汽车和行人则被视为前景。我们在生成器设计中利用这种强大的前景-背景先验来进一步提高所提出模型的综合性能。
特别地,我们将图像幻觉网络
H
H
H 分解为前景模型
h
~
F
,
t
=
H
F
(
s
t
−
L
t
)
\widetilde{h}_{F,t}=H_F(s_{t-L}^t)
h
F,t=HF(st−Lt) 和背景模型
h
~
B
,
t
=
H
B
(
x
~
t
−
L
t
−
1
,
s
t
−
L
t
)
\widetilde{h}_{B,t}=H_B(\widetilde{x}_{t-L}^{t-1},s_{t-L}^t)
h
B,t=HB(x
t−Lt−1,st−Lt) 。背景运动通常可以建模为全局变换,其中光流可以非常准确地估计。因此,可以通过变形准确地生成背景区域,并且背景幻觉网络
H
B
H_B
HB只需要合成被遮挡的区域。另一方面,前景物体通常具有较大的运动并且仅占据图像的一小部分,这使得光流估计变得困难。网络
H
F
H_F
HF 必须从头开始合成大部分前台内容。有了这个前景-背景先验,F 由下式给出
F
(
x
~
t
−
L
t
−
1
,
s
t
−
L
t
)
=
(
1
−
m
~
t
)
⊙
w
~
t
−
1
(
x
~
t
−
1
)
+
m
~
t
⊙
(
~
(
1
−
m
B
,
t
)
⊙
h
~
F
,
t
+
m
B
,
t
⊙
h
~
B
,
t
)
F(\widetilde{x}_{t-L}^{t-1},s_{t-L}^t)=(1-\widetilde{m}_t)\odot \widetilde{w}_{t-1}(\widetilde{x}_{t-1})+\widetilde{m}_t\odot \widetilde((1-m_{B,t})\odot\widetilde{h}_{F,t}+m_{B,t}\odot \widetilde{h}_{B,t} )
F(x
t−Lt−1,st−Lt)=(1−m
t)⊙w
t−1(x
t−1)+m
t⊙(
(1−mB,t)⊙h
F,t+mB,t⊙h
B,t)
其中 m B , t m_{B,t} mB,t 是从地面真实分割掩模 s t s_t st 导出的背景掩模。该先验极大地提高了视觉质量,但代价是轻微的闪烁伪影。
3.6 多模态合成
多模态合成。合成网络 F F F是单峰映射函数。给定一个输入源视频,它只能生成一个输出视频。为了实现多模态合成,我们对由实例级语义分割掩模组成的源视频采用特征嵌入方案。
具体来说,在训练时,我们训练图像编码器
E
E
E 将真实图像
x
t
x_t
xt 编码为
d
d
d 维特征图(在我们的实验中 d = 3)。
然后,我们对地图应用实例平均池化,以便同一对象内的所有像素共享相同的特征向量。
然后,我们将实例平均特征图
z
t
z_t
zt 和输入语义分割掩码
s
t
s_t
st 提供给生成器 F 。训练完成后,我们将混合高斯分布拟合到属于同一对象类的特征向量。在测试时,我们使用该对象类的估计分布对每个对象实例的特征向量进行采样。给定不同的特征向量,生成器
F
F
F 可以合成具有不同视觉外观的视频。
4、实验效果
具体效果可参考视频:https://www.youtube.com/watch?v=5zlcXTCpQqM