【AI数字人-论文】Wav2lip论文解读

文章目录

  • Wav2lip
    • 前言
    • Lip-sync Expert Discriminator
    • Generator
      • visual quality discriminator
      • 生成器总损失函数
    • 论文

Wav2lip

前言

Wav2Lip 是第一个通用说话者的模型,可生成与真实同步视频相匹配的口型同步精度的视频,它的核心架构概括为“通过向训练有素的口型同步专家学习,生成准确的口型同步”。基于此理念,Wav2lip包括一个生成器和两个判别器。

  • 一个可以准确判别真实视频中声音和嘴型同步的专家唇同步鉴别器(expert lip-sync discriminator);
  • 一个负责生成包含目标口型人脸图像的生成器(generator);
  • 一个视觉质量判别器(visual quality discriminator),用于提升图片质量。wav2lip中的两个判别器,一个为了准确的lip-sync,一个为了更好的视觉质量。

Lip-sync Expert Discriminator

专家口型同步判别器由SyncNet改进而来。

SyncNet包括一个人脸编码器和音频编码器,这两个编码器均是由一系列2D卷积层组成。人脸编码器的输入是一个由连续【AI数字人-论文】Wav2lip论文解读个下半部分人脸帧组成的窗口【AI数字人-论文】Wav2lip论文解读;音频编码器的输入是一个大小为【AI数字人-论文】Wav2lip论文解读的语音片段【AI数字人-论文】Wav2lip论文解读。其中【AI数字人-论文】Wav2lip论文解读【AI数字人-论文】Wav2lip论文解读分别是视频和音频时间步长。通过随机采样【AI数字人-论文】Wav2lip论文解读大小的音频窗口【此窗口要么与视频对齐(in-sync),要么来自不同的时间步(out-of-sync)】,进行训练,从而来区分音频和视频之间的同步。损失函数选择的是L2距离,最小化两个编码器输出的嵌入特征之间的L2距离。

SyncNet的网络架构代码如下所示:

class SyncNet_color(nn.Module):
    def __init__(self):
        super(SyncNet_color, self).__init__()
        self.face_encoder = nn.Sequential(*)
        self.audio_encoder = nn.Sequential(*)

    def forward(self, audio_sequences, face_sequences):
        # print(f'audio_sequences: {audio_sequences.size()}') # audio_sequences := (B, dim, T)
        face_embedding = self.face_encoder(face_sequences)
        audio_embedding = self.audio_encoder(audio_sequences)

        audio_embedding = audio_embedding.view(audio_embedding.size(0), -1)
        face_embedding = face_embedding.view(face_embedding.size(0), -1)
        
        audio_embedding = F.normalize(audio_embedding, p=2, dim=1)
        face_embedding = F.normalize(face_embedding, p=2, dim=1)
        
        return audio_embedding, face_embedding

wav2lip为了能够训练得到更精确的口型同步判别器,对SyncNet进行了三个方面的改进。

  1. 人脸编码器以RGB图像替换灰度图作为输入
  2. 增加模型的深度
  3. 损失函数更改为:余弦相似度二元交叉熵损失
# wav2lip损失函数
logloss = nn.BCELoss()
def cosine_loss(a, v, y):
    d = nn.functional.cosine_similarity(a, v)
    loss = logloss(d.unsqueeze(1), y)
    return loss

训练细节如下所示:
数据集:约29个小时的LRS2训练集
batch size: 64
【AI数字人-论文】Wav2lip论文解读 : 5
优化器:Adam
初始学习率:0.001
准确率:91%

有了更精确的口型同步判别器后,可以在训练过程中利用它来对生成器进行优化,提高生成器生成口型的准确性。

Generator

生成器【AI数字人-论文】Wav2lip论文解读负责生成目标口型的人脸图像,由三部分组成:身份编码器(Identity Encoder)、语音编码器(Speech Encoder)和人脸解码器(Face Decoder),这三部分均是由堆叠的2D卷积层组成。概括来说,生成器是一个2D卷积的编码器-解码器结构。

  • 身份编码器的把随机参考帧【AI数字人-论文】Wav2lip论文解读与先验姿势【AI数字人-论文】Wav2lip论文解读(下半部分被mask的目标脸)按通道维度拼接作为输入,编码身份特征。先验姿势帧的下半部分被mask,但是提供了目标人脸的姿态信息;参考帧则包含目标人脸的完整外观,用于唇部形状和运动的合成。
  • 语音编码器用于编码输入的语音片段
  • 人脸解码器以编码后的音频特征与身份特征的拼接为输入,通过反卷积进行上采样,重建人脸图像。

生成器通过最小化生成帧【AI数字人-论文】Wav2lip论文解读与真实帧【AI数字人-论文】Wav2lip论文解读之间的L1重构损失来进行训练。

生成器通过最小化来自专家判别器的同步损失来提高生成的帧的口型同步质量,同步损失函数为上述的余弦相似度二元交叉熵损失。

专家判别器在生成器训练期间不参与训练。基于从真实视频中学到的唇形同步概念的强烈辨别力迫使生成器也实现逼真的唇形同步,以最大限度地减少唇形同步损失。

visual quality discriminator

使用强大的唇形同步鉴别器会使得生成器生成准确的唇形。然而,它有时会导致变形区域稍微模糊或包含轻微的伪影。为了减轻这种轻微的质量损失,在 GAN 设置中与生成器一起训练一个简单的视觉质量鉴别器。视觉质量鉴别器不对口型同步执行任何检查,并且仅惩罚不切实际的面部生成,因此它是在生成的面部上进行训练的。

此判别器也是由堆叠的卷积块组成,它通过最大化目标函数【AI数字人-论文】Wav2lip论文解读进行训练。其中【AI数字人-论文】Wav2lip论文解读为真实图像,【AI数字人-论文】Wav2lip论文解读则为生成器生成的图像。

生成器总损失函数

生成器的最终优化目标由重建损失、同步损失和对抗损失三部分组成,用公式表示如下:

训练细节:
数据集:LRS2训练集
batch size: 80
优化器:Adam
初始学习率:0.0001
【AI数字人-论文】Wav2lip论文解读

论文

  • A Lip Sync Expert Is All You Need for Speech to Lip Generation
    In The Wild
  • Wav2Lip

版权声明:本文为博主作者:马鹤宁原创文章,版权归属原作者,如果侵权,请联系我们删除!

原文链接:https://blog.csdn.net/weixin_42111770/article/details/134691558

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
扎眼的阳光的头像扎眼的阳光普通用户
上一篇 2024年1月11日
下一篇 2024年1月16日

相关推荐