数字人模型Wav2Lip技术理论与模型训练

Wav2Lib属于生成式模型,是数字人用到的模型。Wav2Lib模型用于语音与视频中人的口型对齐,生成口型对齐后的高质量视频。

Wav2Lib-用于将语音与视频中的唇部运动进行同步的深度学习模型:

论文地址:https://arxiv.org/pdf/2008.10010

下面介绍一下Wav2Lib模型架构与技术原理

摘要:

Wav2Lip研究了将任意身份的说话人脸视频与目标语音片段进行唇同步的问题。通过从强大的唇同步判别器中学习来实现。Wav2Lip提出了新的、严格的评估基准和指标,以准确测量不受约束视频中的唇同步。在具有挑战性的基准上的广泛定量评估表明,Wav2Lip模型生成的视频的唇同步准确性几乎与真实同步视频一样好。Wav2Lip模型可以实现广泛的现实应用。

  1. 引言

要让视频在不同语言中可访问。翻译视频中说话人脸视频或创建新视频的一个关键方面是纠正唇同步以匹配所需的目标语音。这在研究社区中引起了相当大的关注。

  1. 相关工作

2.1 受限的语音驱动的说话人脸生成

之前的语音与嘴唇同步视频,受限说话人视频与词汇,工作专注于将不受约束的说话人脸视频与任何目标语音进行唇同步,不受身份、声音或词汇的限制。

2.2 不受限的语音驱动的说话人脸生成

给定一个短语音片段和一个随机参考人脸图像,网络的任务是生成一个与输入人脸匹配音频的唇同步版本。此外,模型还输入目标人脸的下半部分被遮罩以作为姿态先验。这是至关重要的,因为它允许生成的面部裁剪无缝地粘贴回原始视频中,而无需进一步的后处理。Wav2Lip使用一个预训练的、准确的唇同步判别器,该判别器不在生成器训练后与生成器关联训练。观察到,这是实现更好唇同步结果的一个重要设计选择。

3 自然的视频的准确语音驱动唇同步

Wav2Lip的核心架构可以概括为“通过从训练有素的唇同步专家中学习来生成准确的唇同步”。

判别器需要关注音视频对应关系。研究者认为,从实际视频帧中捕捉到的“真实”、准确的唇同步概念可以用于准确地判别和强制生成图像中的唇同步。

研究者建议使⽤预训练的专家唇同步鉴别器 ,该鉴别器在真实视频中能够准确地检测出同步。此外,不应该对⽣成的帧进⾏进⼀步的微调。

研究者建议为任务调整和训练⼀个修改版本的SyncNet用做专家鉴别器 。

SyncNet概述:SyncNet输⼊电视连续⼈脸帧的窗⼝V (仅下半部分)和⼤⼩为Ta×D的语⾳段S,其中Tv和Ta分别为视频和⾳频时间步⻓。它经过训练,可以通过随机采样⾳频窗⼝Ta×D来区分⾳频和视频之间的同步,该⾳频窗⼝要么与视频对⻬(同步),要么来⾃不同的时间步⻓(不同步)。它包含⼀个⼈脸编码器和⼀个⾳频编码器,两者都由⼀堆2d -卷积组成。在这些编码器⽣成的嵌⼊之间计算 L2距离,并使⽤最⼤间隔损失来训练模型,以最⼩化(或最⼤化)同步(或不同步)对之间的距离。

Wav2Lip专家唇同步鉴别器。研究者对SyncNet进⾏了以下更改,以训练适合唇形⽣成任务的专家唇形同步鉴别器。⾸先,不像原始模型那样以通道级联的⽅式提供灰度图像,⽽是提供彩⾊图像。其次,模型明显更深,具有残差跳跃连接。第三,研究者使⽤了⼀种不同的损失函数:具有⼆进制交叉熵损失的余弦相似度。也就是说,计算ReLU激活的视频和语⾳嵌⼊v,s之间的点积,为每个样本⽣成⼀个介于[0,1]之间的单个值,表明输⼊的⾳频-视频对是同步的概率 :

使⽤Adam优化器在LRS2训练数据集分割 (≈ 29⼩ 时 )上训练我们的专家唇形鉴别器,批次⼤⼩为 4,Tv = 5帧,初始学习率为1e− 3。专家⼝型鉴别器在LRS2测试集上的准确率约为91%。

通过向对⼝型专家学习⽣成准确的对⼝型 。现在有了⼀个准确的⼝型鉴别器,现在可以⽤它来惩罚⽣成器(图2)在训练时间内⽣成不准确的情况。

⽣成器的架构。

⽣成器架构细节。关键贡献在于⽤专家鉴别器来训练它。

⽣成器G包含三个块:(i)⾝份编码器,(ii)语⾳编码器,和(iii)⼈脸解码器。⾝份编码器是⼀个残差卷积层堆栈,它编码⼀个随机参考帧R,并沿着信道轴连接⼀个姿势先验P(⽬标⾯,下半部分被屏蔽)。 语⾳编码器也是⼀个 2d卷积堆栈,⽤于编码输⼊语⾳段S,然后将其与⾯部表⽰连接起来。解码器也是⼀个卷积层的堆栈,以及⽤于上采样的转置卷积。⽣成器经过训练以最⼩化⽣成帧L1重构损失介于生成帧Lg与真实帧LG:

⽣成器是⼀个独⽴⽣成每个帧的2D-CNN编码器-解码器⽹络。然后如何使⽤我们的预训练专家唇同步鉴别器,该鉴别器需要Tv = 5帧的时间窗⼝作为输⼊?

惩罚不准确的唇部⽣成。在训练过程中,由于训练的专家鉴别器⼀次处理Tv= 5个连续帧,还需要⽣成器G来⽣成所有 Tv = 5帧。为参考帧采样⼀个随机的连续窗⼝, 以确保整个电视窗⼝的姿态等的时间⼀致性。当⽣成器独⽴处理每个帧时,沿着堆栈时间步⻓在提供参考帧时获得 (N· Tv,H,W, 3)的输⼊形状的批维度,其中N, H,W分别是批⼤⼩,⾼度和宽度。当将⽣成的帧提供给专家鉴别器时, 时间步⻓沿着通道维度连接起来,就像在鉴别器的训练期间所做的那样。专家鉴别器的结果输⼊形状是 (N,H/2, W, 3· T v),其中只有⽣成的⼈脸的下半部分⽤于鉴别。⽣成器还经过训练,以最⼩化来⾃专家鉴别器的 “ 专家同步损失” Esync:

其中Psynci是根据公式1计算的。注意,专家判别器的权重在⽣成器训练期间保持冻结。这种纯粹基于从真实视频中学习到的对⼝型概念的强烈辨别迫使⽣成器也实现真实的对⼝型,以尽量减少对⼝型损失Esync。

⽣成照⽚级逼真的⼈脸

在实验中观察到,使⽤强⼝型鉴别器会迫使⽣成器⽣成准确的唇形。然⽽,它有时会导致变形区域稍微模糊或包含轻微的伪影。为了减轻这种轻微的质量损失,在生成设置中与⽣成器⼀起训练了⼀个简单的视觉质量鉴别器。因此,有两个鉴别器,⼀个⽤于同步精度,另⼀个⽤于更好的视觉质量。 由于视觉质量鉴别器不会对⼝型同步进⾏任何检查,只惩罚不现实的⼈脸⽣成,因此它是在⽣成的⼈脸上进⾏训练的。鉴别器D由⼀堆卷积块组成。每个块由⼀个卷积层组成,后⾯跟着⼀个Leaky ReLU激活函数。鉴别器被训练成最⼤化⽬标函Ldisc(方程5):

其中Lg对应⽣成器G的图像 ,LG对应真实图像。

⽣成器最⼩化⽅程6,即重建损失(⽅程2)、同步损失(⽅程3)和对抗损失Lgen(⽅程4)的加权和 :

其中sw是同步惩罚权重,sg在所有的实验中根据经验设置为0.03和 0.07的对抗性损失。因此,完整⽹络使⽤两个不相交的鉴别器优化了卓越的同步精度和质量。仅在LRS2训练集上训练模型,批处理⼤⼩为80。使⽤初始学习率为1e− 4的Adam优化器和beta β1 = 0.5, β 2 = 0.999的⽣成器和视觉质量鉴别器d。注意,唇同步鉴别器没有进⼀步微调,因此其权重被冻结。通过解释在对真实视频进⾏推理时它是如何⼯作的来总结所提出的架构的描述。该模型逐帧⽣成说话的⼈脸视频。每个时间步⻓的视觉输⼊是当前的⼈脸裁剪(来⾃源帧),与相同的当前⼈脸裁剪拼接,下半部分被掩蔽,⽤作姿态先验。因此,在推理过程中,模型不需要改变姿态,显著减少了伪影。相应的⾳频⽚段也作为输⼊提供给语⾳⼦⽹络,⽹络⽣成输⼊的⼈脸裁剪,但⼝腔区域发⽣了变形。

下面介绍一下基于Wav2Lib代码训练过程

1、代码与环境准备

git clone https://github.com/Rudrabha/Wav2Lip.git

cd Wav2Lip-master

pip install -r requirements.txt

安装ffmpeg

在Ubuntu系统上,用sudo apt-get install ffmpeg命令

在Windows系统上,在官网下载安装,官网地址:https://ffmpeg.org/

下载预训练人脸检测模型,下载地址:https://www.adrianbulat.com/downloads/python-fan/s3fd-619a316812.pth

下载预训练的Wav2Lib模型,下载地址:

https://iiitaphyd-my.sharepoint.com/personal/radrabha_m_research_iiit_ac_in/_layouts/15/onedrive.aspx?id=%2Fpersonal%2Fradrabha%5Fm%5Fresearch%5Fiiit%5Fac%5Fin%2FDocuments%2FWav2Lip%5FModels%2Fwav2lip%2Epth&parent=%2Fpersonal%2Fradrabha%5Fm%5Fresearch%5Fiiit%5Fac%5Fin%2FDocuments%2FWav2Lip%5FModels&ga=1

2、下载数据集,解压到相应配置文件指定位置

下载LSR2数据集,用其中的main部分,执行下面命令处理数据:

python preprocess.py --data_root data_root/main --preprocessed_root lrs2_preprocessed/

如果要用自己的数据训练,需要按LSR2数据集结构准备数据,再执行上面命令。

不论是训练还是测试视频都要用H.264编码,如何查看视频编码?用下面命令:

ffprobe -v quiet -print_format json -show_streams 00021.mp4

查询结果中json里面的codec_name就是视频编码。

非H.264编码的视频转H.264编码,用如下命令:

ffmpeg -i 00021test.mp4 -c:v libx264 -c:a aac output.mp4

3、预训练模型文件下载

下载预训练人脸检测模型,下载地址:https://www.adrianbulat.com/downloads/python-fan/s3fd-619a316812.pth

下载预训练的Wav2Lib模型,下载地址:

https://iiitaphyd-my.sharepoint.com/personal/radrabha_m_research_iiit_ac_in/_layouts/15/onedrive.aspx?id=%2Fpersonal%2Fradrabha%5Fm%5Fresearch%5Fiiit%5Fac%5Fin%2FDocuments%2FWav2Lip%5FModels%2Fwav2lip%2Epth&parent=%2Fpersonal%2Fradrabha%5Fm%5Fresearch%5Fiiit%5Fac%5Fin%2FDocuments%2FWav2Lip%5FModels&ga=1

下载预训练的专家判别器模型,下载地址:

https://iiitaphyd-my.sharepoint.com/personal/radrabha_m_research_iiit_ac_in/_layouts/15/onedrive.aspx?id=%2Fpersonal%2Fradrabha%5Fm%5Fresearch%5Fiiit%5Fac%5Fin%2FDocuments%2FWav2Lip%5FModels%2Flipsync%5Fexpert%2Epth&parent=%2Fpersonal%2Fradrabha%5Fm%5Fresearch%5Fiiit%5Fac%5Fin%2FDocuments%2FWav2Lip%5FModels&ga=1

训练专家判别器,用下面命令(如果不想训练,可以用从上面地址下载的专家判别器模型,但是如果用自己的数据训练,就必须要训练专家判别器模型!):

python color_syncnet_train.py --data_root lrs2_preprocessed/ --checkpoint_dir <folder_to_save_checkpoints>

lrs2_preprocessed/是上面处理过的训练数据保存位置,<folder_to_save_checkpoints>是保存模型文件的位置

训练Wav2Lip模型,用如下命令:

python wav2lip_train.py --data_root lrs2_preprocessed/ --checkpoint_dir <folder_to_save_checkpoints> --syncnet_checkpoint_path <path_to_expert_disc_checkpoint>

上面<path_to_expert_disc_checkpoint>是专家判别器模型保存位置

如果要同时训练视频质量判别模型,把上面命令中的wav2lip_train.py 换成hq_wav2lip_train.py就可以。

4、训练完成后,进行测试或推理,用如下命令:

python inference.py --checkpoint_path <ckpt> --face <video.mp4> --audio <an-audio-source>

上面<ckpt>换成Wav2Lip模型保存地址,<video.mp4>换成要处理的视频文件地址,<an-audio-source>要换成音频文件地址。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值