[toc】
前言
- 以往的输出往往都需要借助中间形式, landmarks, 3d models, 这是一个从声音直接映射到视频的方法, 输入是声音和图像, 输出是一段视频。
- 关键思想是学习到target face 和 speech segment的joint embedding, 这个embedding可以被用于产生和音频同步的帧。
Dataset
整个流程如下:
这里canonical face就类似正面化的脸部, 如下图:
这里需要用到一些变换, 因为输入的人脸要变正, 通过放缩, 旋转和平移实现相似变换。这里变换的是鼻子眼睛啥的, 嘴部没有变化。为了保留嘴部运动信息。
使用了VoxCeleb和LRW数据集, 用DLIB检测landmarks。 作者还提到SyncNet提供了视频中音频和视觉面部序列的联合嵌入, 可以确定好几个人中是谁在讲话, 同时还可以纠正语音同步错误, 我寻思LRW数据集也不用这么折腾····
The Speech2Vid Model
论文中提出的model叫Speech2Vid, 测试时给定两个输入, 音频段, frontal headshot(应该是比较正面的人脸), 结构如下:
这个decoder叫talking face image decoder, 对于给定的输入, model生成了最能代表音频的一系列帧, 该模型通过在音频序列上滑动0.35秒的窗口, 逐帧生成视频。
音频的处理
使用MFCC, 只是用了12个, 0.35s的音频被组合在一起, 采样率是100Hz所以共有35个时间步, 所以输入可以看成12*35的heatmap, 每个列代表特征
identity
对identity encoder的输入是1121123的静止图像, 后来还用多个cat起来的作为输入, 比如1121125
架构解析
主要有三个模块:audio encoder,the identity encoder, and the image decoder, 这三个是同步训练的。
- Audio encoder是一些卷积层, 然后到256维的向量
- Identity encoder, 理想情况下应该可以提取出识别面部的独特feature, 所以使用了在VGG Face dataset上预训练的VGG-M 网络, 数据集包括2.6百万张2.6K个不同的身份图像。固定CNN的权重,学习fc层的参数, 然后到256维的向量。
- Image decoder, 解码器把音频和image编码后cat的向量作为输入, 然后通过反卷积层
网络具有两个跳过连接,以帮助保留目标标识的定义特征 - 这是通过将编码器激活与网络图中显示的位置的解码器串联来完成的。
这是在解码的过程中也输入了图片的信息,也就是解码器输入部分编码器的隐层会有好效果
使用L1 loss
Training
监督图像取0.35s采样窗口的视频中间帧, 输入的image是从不同的时间点随机选取的, 当输入是多张图片时, 就随机从同一个视频中采样多张图片。
- 这是个单帧生成的网络, 没有什么时间连续上的约束, 当然因为它0.35s对应一帧, 也不用太强的时间约束。
Deblurring module
有10个卷积层, 和ReLu层以及残差模块。 这里提到虽然之前正面化了, 但是输入, ground truth和生成的图像对应并不完美, 所以只用了CNN而不是generator network
输出的结果类似锐化后的: