wav2lip论文学习1.0(待完善)

参考文章:02 基于Wav2Lip实现唇形动作迁移 - 知乎 (zhihu.com)

1.实验介绍

1.1实验目的

1.理解并掌握的基础知识点,包括:encoderdecoder

2.掌握Wav2Lip唇形动作迁移算法的设计原理以及构建流程;

1.2实验内容

Wav2Lip模型是一个基于GAN的唇形动作迁移算法,实现生成的视频人物口型与输入语音同步。Wav2Lip不仅可以基于静态图像来输出与目标语音匹配的唇形同步视频,还可以直接将动态的视频进行唇形转换,输出与输入语音匹配的视频,俗称「对口型」。

1.3实验环境:本地

1.4实验设计

1.实验的实现方案:

Wav2Lip唇形同步设计方案

(1)在训练阶段,生成器模型的输入包含两部分(视频帧序列和音频),分别通过Face encoder和Audio encoder得到特征信息,并进行融合;再通过Face decoder获得唇形和音频同步的图像帧。把原始视频帧和生成图像帧输入到视觉质量判别器中,二分类的结果表示是真实的图像、还是生成的图片,进而提高图像质量。把生成图像帧和音频输入到预先训练好的唇形同步判别器中,判断唇形是否生成的精准,在训练过程中,唇形同步判别器参数会一直被冻结,不参与训练和更新。

(2)在推理阶段,提供一段音频和视频(或图像、动画)即可合成唇形同步视频。

2.实验详细实现:

Wav2Lip生成唇形同步视频的实验流程如下图所示,主要包含6个步骤:

Wav2Lip唇形同步实验流程


1.数据处理: 根据网络接收的数据格式,完成相应的预处理操作,保证模型正常读取;
2.模型构建: 设计Wav2Lip网络结构;
3.模型配置: 实例化模型,指定学习率和优化器;
4.模型训练: 执行多轮训练不断调整参数,以达到较好的效果;
5.模型保存: 将模型参数保存到指定位置,便于后续推理使用;(这就解释了第一次跑模型的时间会长,之后再跑模型会快,因为脸部监测模型第一次跑好就被保存下来了)
6.模型推理及可视化: 使用训练好的模型将视频人物的唇形和输入语音同步,并可视化推理结果。

2.实现流程+论文学习

2.1数据处理

(都打包好了,不用自己处理。可以学习一下数据处理的思路)

2.1.1数据准备

LRS2 (Lip Reading Sentences 2) 数据集来自BBC电视节目中的数千个口语句子,每个句子的长度不超过100个字符。

 2.1.2数据预处理

对下载的LRS2数据集做进一步处理(提取A视频帧进行人脸检测,提取B的音频),并保存在相应文件夹下。

1.导入相应的依赖库

2. 运行lrs2_preprocess.py文件对数据集进行预处理以实现快速训练,感兴趣的可以详细阅读代码。

2.1.3 批量数据读取

我们选取一段连续的真实视频人脸序列,并只保留上半部分人脸(图5中下半部分被遮挡的目标人脸),另外再选取一段随机参考帧(通过视频随机移动5帧产生),然后将两段图片序列在通道的维度上concatenate起来;同时选取与真实帧同步的音频片段,一起输入到Generator中, 这些数据输入到生成器中后,生成器重建出与音频同步的唇形,即重建出被遮挡的人脸下半部分的同时,其唇形也已经是和音频同步的唇形。

数据输入形式

 2.2模型构建

Wav2Lip模型结构如 图6 所示,包含一个生成器和两个判别器。为了根据音频生成与音频精准同步的唇形图像,首先模型的输入包含两个部分,一是一段视频帧序列,二是一段音频(Melspectrogram segment),这两部分数据按照特定的组织格式输入模型的生成器,生成器由两个编码器以及一个解码器组成,生成器中的脸部编码器接收视频图像帧,生成中间特征;生成器中的音频编码器接收音频信号生成音频中间特征;得到的脸部中间特征以及音频中间特征分别进行concat进行特征融合,融合后的特征再送入脸部解码器中进行解码,最终输出唇形与音频同步的图像帧(Generated frames)。在训练的时候,生成器生成的唇形同步的图像帧会输入到后面的判别器中,判别器也包含两部分,一是一个已经预训练好的唇形与音频同步的判别器SyncNet, 它接受音频信号以及生成的唇形同步的图像作为输入,来判别生成的唇形图像与音频是否同步,这个判别器需要提前预训练好,目的是增强唇形与音频同步判别的能力;二是唇形视觉质量的判别器(Visual Quality Discriminator),这个判别器接收生成器生成的唇形图像以及与音频同步真实同步的唇形图像,来判别其真假,驱动唇形质量更好地生成。

wav2lip结构图

在Wav2Lip判别器和生成器网络中,重复使用conv+norm+ReLu+residual;conv+LeakyReLU;ConvBNRelu+norm+ReLU三个模块。

2.2.1生成器

生成器的训练目标:最小化生成帧LgL_gLg​和真实帧 LGL_GLG​ 之间的L1损失
生成器包含如下3部分:

生成器的结构图

 

Identity Encoder:由一堆残差卷积层组成,对随机参考帧R进行编码,并在通道维度与姿态先验P(下半部分遮住的目标脸部)相连接。

Speech Encoder(Audio Encoder):由一堆2D卷积层组成,对输入语音片段S进行编码,然后与其对应脸部表示相连接。

Face Decoder:由一堆卷积层组成,以及使用转置卷积进行上采样。通过对输入图像的遮挡目标脸部进行适当的出行修复,产生一个由视听融合产生的唇同步面孔。

2.2.2唇形同步判别器

研究者发现,之前方法由于仅使用重建损失较弱的唇形同步判别器,没有对错误的唇形进行适当的惩罚。于是,采用预训练的专家唇形同步判别器,它已经相当准确地检测唇形同步错误。我们不在GAN设置中训练唇形同步判别器,即对于生成的帧,不再进行进一步微调唇形同步判别器。
基于SyncNet模型改进,用于训练唇形同步判别器,主要包含以下几点改进:

1.不以信道级联的方式输入灰度图,而是输入彩色图像;

2.使用跳跃连接的残差块,构建更深层的网络;

3.更换损失函数,使用余弦相似度的二值交叉熵损失值。

视频和人脸图像之间的映射能够从未标记的数据中进行端到端的训练,该网络由两个不对称的音频和视频流组成训练后的网络用于确定视频中的假同步错误,如图8、图9所示:

图8:唇形唇部判别器和生成器关联
图9:唇形唇部判别器示意图

 2.2.3视觉质量判别器

一堆卷积块(NonNormConv2d)组成,每个块由一个卷积层和一个LeakyReLU激活层做成,用来提高视觉质量和同步精度。

视觉质量判别器

 2.2.4测试网络

测试生成网络Wav2Lip和质量判别网络Wav2LipDiscQual的前向计算结果,一个batch的数据,输出一张图片。

2.3 训练配置

2.3.1 声明定义好的判别器和生成器实例

定义一个生成器gen_model、唇形同步判别器dis_sync_model、质量判别器dis_qual_model(对应的代码没有找到)

2.3.2定义优化器对象

2.3.3唇形同步判别器损失函数

2.3.4辅助函数

2.4模型训练

2.5模型保存

训练完成后,可以将模型参数保存到磁盘,用于模型推理。

2.6模型推理

加载保存好的生成器模型来进行模型推理,观察模型生成唇形同步视频的效果,推理流程:

推理流程

 

推理步骤

 使用已有的 S3FD算法进行人脸检测,将视频的每一帧都处理为仅包含人脸的帧。

3.总结

该wav2lip模型几乎是万能的,适用于任何人脸、任何语音、任何语言,对任意视频都能达到很高的准确率,可以无缝地与原始视频融合,还可以用于转换动画人脸,并且导入合成语音也是可行的。不仅可以让蒙娜丽莎像朱广权一样播报新闻,还可以让宋代诗人穿越千年念诗、让你的idol对你说出任何你想听的情话等等。大家可以上传自己准备的视频和音频, 合成任意想要的逼真的配音视频。
让图片会说话、视频花式配音的魔法--Wav2lip的使用只用两步:

在上述代码中的face参数和audio参数分别换成自己的视频和音频路径;

运行上述代码,并保存制作完成的对口型视频(outfile参数指定的视频文件)。

4.扩展

本次实验:构建了Wav2Lip的GAN网络,并在LRS2数据集上实现了唇形动作迁移任务。

通过本次实验,应该掌握了《人工智能导论:模型与算法》- 6.5深度生成学习(P231-P235)中介绍的相关原理的实践方法,还熟悉了通过开源框架实现深度学习任务的实验流程和代码实现。

可以在此实验的基础上,尝试开发自己感兴趣的唇形动作迁移任务。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值