[论文阅读]Parallel and High-Fidelity Text-to-Lip Generation

Novelty

[论文链接][https://arxiv.org/abs/2107.06831]

  • 采用NAR方法,克服AR方法带来的Drawback,即
    • 推理速度慢
    • 错误传播导致图像失真
  • 采用SSIM来提高生成图像的感知质量
  • 解决合成的同步问题(NAR方法)
  • 尝试了在训练集中没有Audio如何去训练的方法

Model

[论文阅读]Parallel and High-Fidelity Text-to-Lip Generation_第1张图片

Identity Encoder

输入为来自视频里随机的一张图,来得到生成图像的外貌信息。通过多层2D卷积得到图像的特征。总的来说这一模块是一个简单的特征工程,将输入图像特征化。

需要注意的是这里将各层的特征都进行了输出,进而希望得到一个多尺度的特征图。

Text Encoder

输入为句子的词,通过Embedding输出Linguistic information并且对每一个text token对应的时间序列长度进行预测。即通过输入的Text得到每个词对应的视频长度,并且准备Linguistic information作为之后的输入。

Motion Decoder

通过Linguistic information以及时间长度,来给出Lip的Motion信息 。

Video Decoder

每一个Video Decoder都包含一个Indentity Encoder,Video Decoder的数量取决于生成视频的帧率,比如FPS=60的视频就有60个Video Decoder。

Video Decoder通过Identity Image里的特征(从Indentiy Encoder里提取出来)以及第 t t t时刻的Motion特征来生成这一时刻的frame。

Loss Function

作者采用了四个损失函数来训练模型

重建损失 Reconstruction Loss

采用了L1损失函数来作为整个网络的损失函数

Duration Prediction Loss

这个损失函数是用来优化根据词来预测其持续时间的

SSIM

提高生成图像的感知质量

Adversarial Learning

只用以上三个损失函数不足以去生成一个高质量且细节出色的嘴唇图像。作者用对抗学习的方法训练了一个判别器来提高图像质量。

数据集

作者用了两个数据集来进行训练/比较,分别是 G R I D GRID GRID以及 T C D − T I M I T TCD-TIMIT TCDTIMIT。但是这两个数据集都需要进行预处理 ,毕竟 T2L算是一个比较新的任务。

GRID

TCD-TIMIT

[关于TIMIT数据集][https://blog.csdn.net/qq_39373179/article/details/103788208?spm=1001.2101.3001.6650.3&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-3-103788208-blog-53026268.pc_relevant_multi_platform_whitelistv4&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-3-103788208-blog-53026268.pc_relevant_multi_platform_whitelistv4]

作者将这个数据集处理到了音素的细粒度,即将一个句子按照音素进行分离。

作者在Github里给出了一定了该数据集,其目录结构大致如下:

  • timit
    • timit_wavs
      • xxx.wav
      • xxx.wav
    • volunteers
      • xxM
      • xxF
    • dict.txt
    • phone_set.json
    • Test.txt

其中,volunteers里面的每个文件夹中包含数个文件夹,这里的每个文件夹都代表该 volunteer读的一个句子,而有lips文件夹的则是可以用来测试的那些数据

而wav文件则是音频

phone_set.json是 音素 音素 音素的集合,理解为发音的 字典 字典 字典

Experiment

生成效果

[论文阅读]Parallel and High-Fidelity Text-to-Lip Generation_第2张图片

从ParaLib与另外两个模型的对比上来看,ParaLib因为没有次啊用AR的方法,其在长时间序列的图像生成上效果明显优于另外两种方法。

但是也很明显的是,ParaLib生成的图像与GT对比来说十分模糊。所以让图像更清晰(或者或锐利),可能是一个改进的方向。

推理速度与视频长度

[论文阅读]Parallel and High-Fidelity Text-to-Lip Generation_第3张图片

因为DualLip和TransformerT2L是一个AR模型,所以它的推理推理速度受到视频长度的严重影响 。

而ParaLip由于其并行化推理(没用AR),其效果并不是很受到视频长度的影响。

跑代码

[官方代码][https://github.com/Dianezzy/ParaLip]

看论文加跑代码用了整整一天,也仅仅是调通了而已,甚至因为路径问题没有解决我还是分成了两个程序来跑,很蠢的方法。这里记录一下遇到的坑。我的环境是Windows,作者的代码环境是Linux,如果环境和作者的一样可能会方便一点。

数据集问题

作者在GIthub中放出的TCD-TIMIT数据集并非是一个完整的数据集,同时作者

OSError: [WinError 1455]页面文件太小,无法完成操作

Bug触发条件:运行gen_timit.py+windows+Anaconda环境没有安装在C盘。

可以直接参考这[一篇文章][https://blog.csdn.net/weixin_46133643/article/details/125042903],大概就是windows只为C盘分配了虚拟内存,最开始我将自己盘的虚拟内存分配为了10240MB,但是还不够,改为40960MB才成功运行

TCD-TIMIT数据集预处理

按照Github上的说明,首先运行 g e n _ t i m i t . p y gen\_timit.py gen_timit.py来将数据进行处理,处理后会生成如下文件:

  • test.data 保存了测试的数据
  • test.idx 保存了每组数据的offset,比如第一组数据在test.data中从0开始,那么其对应的值就为0,第二组数据从153966开始,那么其值就为153966
  • test_all_keys.npy 保存了所有的数据的key,即人+语句,如:01M_sx191
  • test_lengths.npy 全部为1,代表了图片的张数,我不是很理解这个的作用,难道可以为2嘛?

[论文阅读]Parallel and High-Fidelity Text-to-Lip Generation_第4张图片

这些文件加上phone_set.json,即可以运行之后的测试文件 g r i d _ l i p g e n _ t a s k . p y grid\_lipgen\_task.py grid_lipgen_task.py

如何跑我们自己的句子(英语)

  • 如果不想改代码,请准备这样的一张图片:png格式,160x80像素
  • 把这个图片按照图中目录放到data中 ,其中文件名可以修改,但是需要和Test.txt中的保持一致
    [论文阅读]Parallel and High-Fidelity Text-to-Lip Generation_第5张图片
  • 到CMU的这个[网站][http://www.speech.cs.cmu.edu/tools/lextool.html]上生成自己句子的Phoneme
  • 将其调整到这一格式

训练自己的数据集

本人能力有限,没跑出来。作者给出的代码中没有包含和loss有关的实现,也即代码是不完整的,也可能是我没看明白代码,总之没跑通训练的代码。

你可能感兴趣的:(论文阅读,论文阅读,人工智能,深度学习)