论文: 《Video-to-Video Synthesis Ting-Chun》
github: https://github.com/NVIDIA/vid2vid
解决问题
视频生成任务需要生成时间上的连续帧,这对图像翻译任务来说是个挑战;
视频预测任务不会尝试预测目标运动或相机运动,这与视频生成存在很大差异;
本文提出方法可生成连续逼真高分辨率视频。
算法
s
1
T
≡
{
s
1
,
s
2
,
.
.
.
,
s
T
}
s^T_1 \equiv \{s_1,s_2,...,s_T\}
s1T≡{s1,s2,...,sT}表示源视频序列,
x
1
T
≡
{
x
1
,
x
2
,
.
.
.
,
x
T
}
x^T_1 \equiv \{x_1,x_2,...,x_T\}
x1T≡{x1,x2,...,xT}表示相关真实序列,
x
~
1
T
≡
{
x
~
1
,
x
~
2
,
.
.
.
,
x
~
T
}
\tilde x^T_1 \equiv \{\tilde x_1,\tilde x_2,...,\tilde x_T\}
x~1T≡{x~1,x~2,...,x~T}表示生成序列;
通过优化式2训练生成器,
序列生成器
为简化video-to-video问题,作者将条件分布
p
(
x
~
1
T
∣
s
1
T
)
p(\tilde x^T_1 | s^T_1 )
p(x~1T∣s1T)转化为式3,
第t帧
x
~
t
\tilde x_t
x~t生成依赖于三个要素:
- 当前源帧 s t s_t st;
- 过去L帧源帧 s t − L t − 1 s^{t-1}_{t-L} st−Lt−1;
- 过去L帧生成帧 x ~ t − L t − 1 \tilde x^{t-1}_{t-L} x~t−Lt−1;
作者使用前馈网络F建模条件分布
p
(
x
~
t
∣
x
~
t
−
L
t
−
1
,
s
t
−
L
t
)
p(\tilde x_t | \tilde x^{t-1}_{t-L},s^t_{t-L})
p(x~t∣x~t−Lt−1,st−Lt),
x
~
t
=
F
(
x
~
t
−
L
t
−
1
,
s
t
−
L
t
)
\tilde x_t = F(\tilde x^{t−1}_{t−L}, s^t_{t−L})
x~t=F(x~t−Lt−1,st−Lt)
L过少导致训练不稳定,过大将增加训练耗时及内存,且质量改善不明显。在作者实验中设置为2。
由于连续帧中大量信息重复,因此如果连续帧之间光流一致,则可以估计下一帧,除去遮挡区域,此估计很大程度上式正确的。基于此发现,F可定义为式4,前半部分用于扭曲前一帧,后半部分用于引入新生成像素,两者相互补充
其中,
w
~
t
−
1
=
W
(
x
~
t
−
L
t
−
1
,
s
t
−
L
t
)
\tilde w_{t-1} = W(\tilde x^{t-1}_{t-L},s^t_{t-L})
w~t−1=W(x~t−Lt−1,st−Lt)表示
x
~
t
−
1
\tilde x_{t-1}
x~t−1帧到
x
~
t
\tilde x_{t}
x~t帧所估计光流;
h
~
t
=
H
(
x
~
t
−
L
t
−
1
,
s
t
−
L
t
)
\tilde h_t = H(\tilde x^{t−1}_{t−L},s^t_{t−L})
h~t=H(x~t−Lt−1,st−Lt) 为预测生成帧;
m
~
t
=
M
(
x
~
t
−
L
t
−
1
,
s
t
−
L
t
)
\tilde m_t = M(\tilde x^{t−1}_{t−L}, s^t_{t−L})
m~t=M(x~t−Lt−1,st−Lt)为预测遮挡mask;
判别器
作者设置多个判别器解决面模式坍塌问题;
D
I
D_I
DI用于确保输出帧与真实图相似;
D
V
D_V
DV用于确保生成视频与真实视频相似;
另外作者使用两个采样器
ϕ
I
,
ϕ
V
\phi _I, \phi _V
ϕI,ϕV分别进行图像随机采一帧,视频随机采K帧;
损失函数
损失函数如式5,
L
I
L_I
LI使用
ϕ
I
\phi _I
ϕI,如式6,
L
V
L_V
LV使用
ϕ
V
\phi _V
ϕV,如式7,
L
W
L_W
LW如式8,包括两项,前者计算光流预测值与真值误差,后者计算依据光流预测下一帧与真实帧误差;
前背景先验
当输入mask作为源视频时,作者解耦图像生成网络H为前景模型
h
~
F
,
t
=
H
F
(
s
t
−
L
t
)
\tilde h_{F,t}=H_F(s^t_{t-L})
h~F,t=HF(st−Lt)和背景模型
h
~
B
,
t
=
H
B
(
x
~
t
−
L
t
−
1
,
s
t
−
L
t
)
\tilde h_{B,t}=H_B(\tilde x^{t−1}_{t−L},s^t_{t−L})
h~B,t=HB(x~t−Lt−1,st−Lt)。由于背景区域变化不大,可通过光流估计预测,
H
B
H_B
HB只需生成遮挡区域;而前景变化大,通过光流估计比较困难,使用
H
F
H_F
HF生成大多数前景区域,因此F可定义为式9;
低分辨率视频生成器网络结构如图8所示,
高分辨率视频生成器网络结构如图9所示,
多模态生成
生成网络F为单模态映射网络,给出源视频,仅能生成一个输出视频;为了达到多模态生成目的,作者训练图像编码器E将真实图 x t x_t xt编码为d维特征图,而后将实例进行avg pooling得到特征向量 z t z_t zt,使得在同一目标区域像素使用同一特征向量,将 z t z_t zt及分割mask s t s_t st送入生成器F;推理时,使用使用某一目标的特征向量;因此随着特征向量不同,F可以生成不同视频;
实验
图1,图2中虽然pix2pixHD生成每一帧比较真实,但是整个视频缺少连贯性,建筑物、车道帧与帧之间不一致,COVST也存在此问题。
表2展示消融实验结果,前背景先验、有条件视频判别器、flow wrap均有利于生成逼真效果;
图3展示多模态生成结果;
图4展示改变分割标签效果;
图5展示sketch2video效果,模型可以改变原始人脸视频,生成新的人脸;
图6,该模型学习生成超分跳舞视频,包含未见过人体身材和动作。
图7表示视频预测结果;预测分割mask,依据mask生成视频;
结论
作者基于conditional GAN提出video2video视频生成;大量实验证明本文方法达到SOTA;
但仍存在一些问题:
1、由于缺少足够信息,难以生成转弯的汽车;
2、不能保证目标在整个视频中一致性;
3、在进行分割处理将树转变为建筑时,偶尔出现伪影,因为两者形状不同。