【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卷积层组成。人脸编码器的输入是一个由连续 T u T_{u} Tu个下半部分人脸帧组成的窗口 V V V;音频编码器的输入是一个大小为 T a × D T_{a} \times D Ta×D的语音片段 S S S。其中 T u T_{u} Tu T a T_{a} Ta分别是视频和音频时间步长。通过随机采样 T a × D T_{a} \times D Ta×D大小的音频窗口【此窗口要么与视频对齐(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
T u T_{u} Tu : 5
优化器:Adam
初始学习率:0.001
准确率:91%

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

Generator

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

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

生成器通过最小化生成帧 L g L_{g} Lg与真实帧 L G L_{G} LG之间的L1重构损失来进行训练。
在这里插入图片描述
wav2lip生成器独立地生成每一帧,然后将连续生成的帧序列输入到专家口型同步判别器。因为专家口型同步判别器一次处理 T u = 5 T_{u}=5 Tu=5个连续帧,因此训练过程中,需要生成器也生成 T u = 5 T_{u}=5 Tu=5个连续帧。原先生成器独立处理每一帧,输入形状为 ( N , H , W , 3 ) \left(N, H,W, 3\right) (N,H,W,3), 现在沿批量维度堆叠时间步长,输入形状为 ( N ⋅ T u , H , W , 3 ) \left(N \cdot T_{u}, H,W, 3\right) (NTu,H,W,3)。但是在将生成的帧馈送给专家口型同步判别器时,时间步长沿着通道维度连接,就像在专家判别器训练期间所做的那样,输入形状为 ( N , H / 2 , W , 3 ⋅ T u ) \left(N, H / 2,W, 3 \cdot T_{u} \right) (N,H/2,W,3Tu)。因为只有下半部分的生成人脸被用于专家判别器,所以高度为 H / 2 H/2 H/2

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

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

在这里插入图片描述
通过这种生成器和专家判别器的联合设计,能够生成具有良好口型与语音同步性的人脸对象。然而,由于LRS2数据集的图像清晰度较低,导致生成的图像脸部较为模糊,特别是牙齿部分的还原度有待提高。为了改善这一情况,可以考虑采用具有更高清晰度的数据集,或者增大输入图像的大小wav2lip288x288,或者利用超分模型来提升脸部图像的清晰度。此外,当参考人脸图片为侧脸时,可能会引发脸部的不协调问题。

visual quality discriminator

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

此判别器也是由堆叠的卷积块组成,它通过最大化目标函数 L d i s c L_{disc} Ldisc进行训练。其中 L G L_{G} LG为真实图像, L g L_{g} Lg则为生成器生成的图像。
在这里插入图片描述

生成器总损失函数

生成器的最终优化目标由重建损失、同步损失和对抗损失三部分组成,用公式表示如下:
在这里插入图片描述
s w s_{w} sw 是同步惩罚权重, s g s_{g} sg 是对抗损失,在所有的实验中,根据经验分别设置为 0.03 和 0.07。

训练细节:
数据集:LRS2训练集
batch size: 80
优化器:Adam
初始学习率:0.0001
β 1 = 0.5 , β 2 = 0.999 \beta_{1} = 0.5, \beta_{2}=0.999 β1=0.5,β2=0.999

论文

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/200622.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

什么是虚拟化?如何监控虚拟化设备

虚拟化是创建物理 IT 资源(如服务器或桌面)的虚拟版本的行为,虚拟机(VM)是在物理主机设备上创建的,VM 的行为与物理设备完全相同,并且可以从主机运行不同的操作系统。 例如,您可以在…

GC算法和常见垃圾回收器

一、GC算法 GC Algorithms(常见的垃圾回收算法),找到这个垃圾之后怎么进行清除的算法 。GC常用的算法有三 种如下: 1:Copying(拷贝) 2:Mark-Sweep(标记清除) 3:Mark-Compact(标记压缩) 第一个是Copying(拷…

智能井盖传感器怎么监测井盖出现倾斜?

智能井盖传感器是一种先进的智能设备,能够二十四小时连续监测井盖是否出现倾斜。其工作原理主要是依靠内置的传感器,以及搭载的MEMS“芯”技术。便于智能井盖传感器实时感知到井盖的姿态变化,一旦发现有倾斜的现象,就会立即向运维…

LeetCode2514.统计同位异构字符串数目

题目简单,关键是灵茶山艾府的代码写起来太优美,不得不记录一下 const int Mod 1e97; using ll long long; ll qmi(ll a,ll b,ll mod){ll res 1;while(b){if(b&1)res res*a%mod;aa*a%mod;b>>1;}return res; }class Solution { public:int c…

计算机毕业设计 基于PHP的考研互助交流系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…

WMS仓储管理系统的实施流程是什么

WMS仓储管理系统是现代企业不可或缺的重要工具,它可以有效地优化仓库管理,提高工作效率,减少误差。但是,实施WMS仓储管理系统并不是一件轻松的事情,需要经过一系列的步骤来确保其成功实施。本文将详细介绍WMS仓储管理系…

什么是主机安全,有什么作用?

当今数字化时代,网络安全威胁和风险日益突出,已成为企业面临的重大安全挑战。网络攻击者不断尝试利用各种技术和手段对企业网络资源进行探测和攻击,如:利用漏洞、木马、钓鱼、勒索等方式窃取数据、破坏系统、篡改信息。因此&#…

泛微OA对接金蝶云星空方案分享(对接场景解析)

分享金蝶云星空跟泛微OA系统集成对接的方案分享,主讲审批流程对接,表单对接的两类场景。分别是金蝶云星空发起申请和泛微发起流程审批,最终实现统一管理。 数据集成主要有以下好处: (1)数据一致性&#xf…

为啥网络安全缺口这么大,还是这么缺网络安全工程师?(网络安全行业前景到底如何)

为啥网安领域缺口多达300多万人,但网安工程师也就是白帽黑客却很少,难道又是砖家在忽悠人? 原因主要为这三点: 首先是学校的原因,很多学校网络安全课程用的还都是十年前的老教材,教学脱离社会需求,实操技能…

jdk动态代理和CGLIBE代理

静态代理:由程序员创建或特定工具自动生成源代码,再对其编译。在程序运行前,代理类的.class文件就已经存在了。 动态代理:在程序运行时,运用反射机制动态创建而成。 使用jdk的反射机制,创建对象的能力&…

Android中使用Google Map

在app的使用过程中,我们经常会跟地图进行交互,如果是海外的应用,那选择使用Google Map 是最合适的选择。 在Android中如何使用Google Map,这里做一个简要的说明。 Google API_KEY的申请 Google Map 的使用并不是免费的&#xf…

【数据库】物理操作的一趟扫描算法机制原理,理解关系代数据与物理计划的关系,以及代价评估的应用和算法优化

一趟扫描算法 ​专栏内容: 手写数据库toadb 本专栏主要介绍如何从零开发,开发的步骤,以及开发过程中的涉及的原理,遇到的问题等,让大家能跟上并且可以一起开发,让每个需要的人成为参与者。 本专栏会定期更新…

element table滚动到底部加载数据(vue3)

效果图 使用插件el-table-infinite-scroll npm install --save el-table-infinite-scroll局部导入 <template><div class"projectTableClass"><el-table v-el-table-infinite-scroll"load"></el-table></div> </temp…

企业微信应用文本消息

应用支持推送文本、图片、视频、文件、图文等类型&#xff0c;本篇主要实现发送应用文本消息。 获取企业凭证 发送应用消息首先需要获取调用凭证access_token&#xff0c;此处的凭证为企业凭证&#xff0c;可通过企业授权安装时返回的授权信息中获取access_token&#xff1b;之…

数据科学新招:Python揭秘Prometheus接口

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com 在现代云原生应用的监控体系中&#xff0c;Prometheus无疑是一颗璀璨的明星&#xff0c;而Python则是一门多才多艺的编程语言。将它们结合&#xff0c;通过Python读取Prometheus接口数据&#xff0c;成为了实时监…

【内网安全】搭建网络拓扑,CS内网横向移动实验

文章目录 搭建网络拓扑 ☁环境CS搭建,木马生成上传一句话&#xff0c;获取WebShellCS上线reGeorg搭建代理&#xff0c;访问内网域控IIS提权信息收集横向移动 实验拓扑结构如下&#xff1a; 搭建网络拓扑 ☁ 环境 **攻击者win10地址&#xff1a;**192.168.8.3 dmz win7地址&…

【IEEE出版】2024年第四届消费电子与计算机工程国际学术会议(ICCECE 2024)

2024年第四届消费电子与计算机工程国际学术会议&#xff08;ICCECE 2024&#xff09; 2024 4th International Conference on Consumer Electronics and Computer Engineering 进入21世纪以来&#xff0c;计算机技术的高速发展带来了消费电子产品的快速更迭。在技术迅速发展历…

多模态大模型总结2(主要2023年)

LLaVA-V1&#xff08;2023/04&#xff09; 论文&#xff1a;Visual Instruction Tuning 网络结构 如下图 所示为 LLaVA-v1 的模型结构&#xff0c;可以看出其简化了很多&#xff0c;但整体来说还是由三个组件构成&#xff1a; Vision Encoder&#xff1a;和 Flamingo 模型的 V…

vsphere系列 :虚拟机配置直通GPU后,启动时出现 模块“DevicePowerOn”打开电源失败 的解决方案

vsphere中的虚拟机配置直通GPU后&#xff0c;启动时出现 模块“DevicePowerOn”打开电源失败 的解决方案 vsphere中的虚拟机配置直通GPU后&#xff0c;启动时出现 模块“DevicePowerOn”打开电源失败 的解决方案1、虚拟机配置GPU直通1、打开虚拟机选项2、点击编辑配置3、添加如…

SpringMVC—拦截器

1 拦截器概念 1.1 简介 拦截器是一种动态拦截方法调用的机制&#xff0c;在 SpringMVC 中动态拦截控制器方法的执行 【注】拦截器底层实现为AOP 作用&#xff1a; 在指定的方法调用前后执行预先设定的代码阻止原始方法的执行 1.2 拦截器和过滤器的区别 ① 归属不同&#…