这篇论文提出Wav2Lip的方法,做到了根据提供的语音和视频来合成嘴唇配对的新视频。
以前相关方面的方法都有一些缺点:
而Wav2Lip做到了训练完后对任意speaker、语言、视频都可以进行合成,而且合成的视频的嘴唇与audio是非常同步的。
从图可以看出,Wav2Lip有一个generator,还有一个pre-trained好的判断lip-sync的判别器,以及一个判断视频质量的判别器。
下面一一介绍一下这些部分。
论文分析,以前的方法不能做到lip-sync的原因是:对不准确的嘴唇同步的惩罚太小了。
第一,用L1 reconstruction loss来判断嘴唇是否同步是很weak的,因为嘴唇只占了一张图片的很小的一部分,那loss更加注重的是图片的其他部分。(这个原因可以从一个事实来证实:就是在训练过程中,到训练中期才开始改变嘴唇的形状。)
所以我们需要一个专门针对嘴唇是否同步的判别器。
第二,确实有方法这么做了,就是以前的LipGAN。但是它只用了一张图片来判断嘴唇是否同步,在后面的实验中可以证实一小段视频会更好地检测。而且,LipGAN把这个判别器跟生成器一起训练了,导致会有noisy generated images进入到判别器中,这会导致判别器会过于在意生成图像中的artifacts而不是嘴唇的同步。
所以,为了解决这个问题,论文提出了一个pre-trained好的expert Lip-sync discriminator。它不会在训练生成器的时候再去微调。
这个判别器是模仿SyncNet的。
SyncNet的输入是一段长度为 T v T_v Tv的连续的face frames(只有下半张脸)和大小为 T a × D T_a\times D Ta×D的speech segment,判别器判别这两个是in-sync还是out-of-sync。SyncNet有一个face encoder和一个audio encoder(都是二维卷积层组成的),SyncNet要最大化unsynced pairs的两个embeddings之间的L2 distance,最小化synced pairs之间的L2 distance。
论文的判别器做了几点改变:
生成器的结构是参考LipGAN的。有三个组成部分:identity encoder;speech encoder;face dncoder。
identity encoder是残差卷积层组成的,它的输入是:一段任意选取的reference frames R R R 和 pose prior P P P (就是遮住下半张脸)在通道维度上concatenated的。它这种输入使得生成的下半张脸可以无缝粘贴回原视频中,而不再需要后处理。
speech encoder是2维卷积层组成的,它是给 speech segment S S S 编码的。
face decoder由卷积层和反卷积层组成,输入就是前面两个encoder的输出concatenated在一起的feature map。
注意,生成器生成frames是一帧一帧生成的。假设batch size是 N N N,图像形状为 ( H , W , 3 ) (H, W, 3) (H,W,3),当要输入reference frames时,要把它们在batch size维度堆叠,即输入reference frames的形状为 ( N ⋅ T v , H , W , 3 ) (N\cdot T_v, H, W, 3) (N⋅Tv,H,W,3);当输入expert disciminator时,要把生成的frames在通道维度上堆叠,也就是是输入的形状为 ( N , H / 2 , W , 3 ⋅ T v ) (N, H/2, W, 3\cdot T_v) (N,H/2,W,3⋅Tv)。(注意,训练生成器的时候expert disciminator是不参与训练的。)
生成器要最小化生成frames和真实frames的L1重建误差 L r e c o n L_{recon} Lrecon,以及最小化“expert sync-loss" E s y n c E_{sync} Esync:
因为生成的图像会模糊或者有一些artifacts,所以要再加上一个判别图像质量的判别器,从而提高图像质量。
这个判别器是会和生成器一起训练的。
判别器要最大化 L d i s c L_{disc} Ldisc,生成器要最小化 L g e n L_{gen} Lgen:
其中 L g L_g Lg对应生成器生成的图片, L G L_G LG对应真实图片。
在后面的实验中会看到,如果加入了这个质量判别器,图像的质量上去了,但是嘴唇的同步效果会受到一点点影响。所以可以根据实际情况对它们做权衡。
从而,生成器的总损失函数为:
L t o t a l = ( 1 − s w − s g ) ⋅ L r e c o n + s w ⋅ E s y n c + s g ⋅ L g e n L_{total} = (1-s_w-s_g)\cdot L_{recon} + s_w \cdot E_{sync} + s_g \cdot L_{gen} Ltotal=(1−sw−sg)⋅Lrecon+sw⋅Esync+sg⋅Lgen
在Wav2Lip的测试阶段,每一time-step,visual输入的是current face crop 和 同一段但是遮掉下半张脸的current face crop concatenate在一起的图像;audio输入的是对应的audio segment。
但是,在现在的evaluation framework中,输入的reference frames不能是current frames,而是任意选择的frames,以防泄露了真实的嘴唇形状。
但是这样是不好的一种方法。
第一,就如前面提到的,Wav2Lip在测试阶段不会改变人物的姿势。如果输入的reference frames与要嘴唇同步的current frames是不一致的话,Wav2Lip做不到改变姿势。这样就不能很好地评价模型的效果;
第二,对于不同的模型,选择的reference frames是不同的,导致评价并不公平;
第三,由于reference frames选取是随机的,时间上的一致性已被破坏;
第四,现在的metrics没有专门针对lip-sync的。
为了解决这个问题,我们不随机选取reference frames,而是随机选取speech segments,这样嘴唇真实形状就不会泄露了。那为什么以前不这样做呢?因为它们evaluate的时候需要有speech segments对应的真实视频,但这是unavailable的。
论文使用了三个metrics来评判lip-sync:
论文提出了能够对任意视频、演讲者、语言进行嘴唇同步的方法,且提出了新的lip-sync evaluation framework。