Video-to-Video Synthesis
Introduction
- NIPS 2018 https://arxiv.org/pdf/1808.06601.pdf
- Target: learn a mapping function from an input source video (e.g., a sequence of semantic segmentation masks) to an output photorealistic video that precisely depicts the content of the source video.
- Key idea: propose a video-to-video synthesis approach under the generative adversarial learning framework. Through carefully-designed generators and discriminators, coupled with a spatio-temporal adversarial objective, we achieve high-resolution, photorealistic, temporally coherent video results on a diverse set of input formats including segmentation masks, sketches, and poses.
Motivation
image2image translation是一个被普遍研究的问题,而video2video则相对较少出现在文献里,而直接讲图片的方法应用到视频上会出现时序上不连贯/低像素等问题,因此文章提出了结合对空间-时序特征的编码,应用生成网络进行视频的translation。
Method
problem definition
首先这篇文章提出的问题区别于视频预测,是一种视频合成的方法。也就是输入并不是历史的图片,而是视频对应的一些结构性信息例如segmentation map/sketches/poses(虽然就我本人而言还不能想到什么样的场景下会可以得到这些输入但是得不到对应的视频,但是或许可以应用在自己手动绘制或者调整segmentation map等来实现视频合成)。显而易见的是,从网络解构/输入形式上来看,视频合成任务是要比视频预测相对来说简单的。
具体来说,网络的输入是源视频的segmentation map/edge map等:
网络的输出是对应的视频帧:
为了保证输入的形式一致性,网络假设对于预测的某个时刻的视频帧,只与其之间的L(文章取2即可)帧的信息有关,而不是之前的所有序列有关,这样对于t时刻的预测我们需要已知如下的信息:
optical flow
使用光流的原因我的理解有两点:
- 视频中一般存在的着大量的信息冗余,对于相邻的两帧图像,在空间上大部分区域像素都是相同的,而只有少部分存在运动的区域的像素有较大的变化,光流(optical flow)是可以用来表示这些区域的变化大小和方向。
- 在生成第t帧视频时,相比与仅使用条件输入st信息(类似pix2pixHD那样)或者使用前L帧视频的完整信息,更好的方式是估算从第t-1帧到第t帧的光流,然后作用于t-1帧(此过程称为wrap),从而直接得到当前第t帧的预测值,即加入光流约束。这相当于利用了视频相对于图像所特有的时序信息。
然后就是具体如何利用光流(或者如果将光流与pix2pix集合):
其中w是预测的光流,它利用st和前一时刻的预测作为输入;h是单纯利用pix2pix得到的预测;m是一个权重。
从上文可以看出,总的来说是需要三个子网络的:光流预测子网络、pix2pix子网络和mask预测子网络。同时为了合成出高像素的视频作者同样提出了coarse2fine的结构。
对于判别器,本文同样采用了两种:
值得注意的是DI利用x和s作为输入,而DV利用x和w作为输入。
generator
延续了pix2pixHD的设计,vid2vid还是使用了两阶段的Generator,第一阶段G1用来生成全局粗糙的低分辨率视频,第二阶段G2用来生成局部精细化的高分辨率视频。
其中,G1的输入是下采样2倍之后,前L帧+当前帧的Semantic map序列以及之前L帧生成图像的序列,在经过下采样和提特征之后,在网络的中间将两路输提取入的feature map相加,接着在网络后部又分出两个分支,来生成未加光流约束的原始图像以及光流和权重mask;G2的输入是原始分辨率的Semantic map序列以及生成图像,在经过2倍下采样+提特征的卷积层之后,将两个分支提取的feature map分别与G1对应的两路输出相加,然后分别送入G2后半部分的两个分支,进行局部细节的refine。
最后值得一提的是,作者提出了当输入是segmentation map的时候可以根据其中的信息对于视频的前景/背景分别建模:
文中指出,背景信息由于变化不大,所以更像是一种直接的几何变换,这种情况下光流的预测相对准确,因此背景的合成更像是一种inpainting,而前景的物体往往会发生运动,这种情况下光流的预测会比较困难,这样就不将光流作为输入的一部分,于是将h的获得拆解为两部分可以减少artifacts。
最后一点就是在损失函数中除了对抗loss还有光流loss:
Performance
https://tcwang0509.github.io/vid2vid/paper_gifs/cityscapes_comparison.gif
从表面来看,pix2pix的单帧效果似乎更好,但是从视频的角度来看,pix2pix的视频在连续帧之间存在明显的光闪烁的问题,而vid2vid则非常平滑,这与其编码了时序信息以及对于光流的利用是分不开的。