【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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CLIPTokenizer.from_pretrained本地加载

以"openai/clip-vit-large-patch14"为例,原代码为: self.tokenizer CLIPTokenizer.from_pretrained(“openai/clip-vit-large-patch14”) self.transformer CLIPTextModel.from_pretrained(“openai/clip-vit-large-patch14”) 但我连不到外…

Python CNN卷积神经网络实例讲解,CNN实战,CNN代码实例,超实用

一、CNN简介 1. 神经网络基础 输入层(Input layer),众多神经元(Neuron)接受大量非线形输入讯息。输入的讯息称为输入向量。 输出层(Output layer),讯息在神经元链接中传输、分析、权…

VUE2中使用阿里云播放器AliPlayer

简述 基于 Vue 的播放器单页应用, 利用 web 播放器 sdk 进行视频点播,包含播放列表、字幕、多语言、自适应码率,皮肤自定义等功能 Web播放器文档 已知问题 vue中使用截图,不太好使【已自行优化】无键盘快捷键,无法通过空格暂停…

DCGAN 使用指南:将卷积神经网络和对抗网络结合,适用于生成小尺寸的图像

DCGAN 使用指南:将卷积神经网络和对抗网络结合 网络结构细节设计 论文地址:https://arxiv.org/abs/1511.06434 项目代码:https://github.com/tensorlayer/DCGAN.git DCGAN 适用于生成小尺寸的图像,并且具有简单易用的优势 Styl…

“2024上海智博会、2024北京智博会”双展联动,3月上海,6月北京

“2024上海智博会、2024北京智博会”双展联动,将分别于3月和6月在上海和北京举办。这两个展会旨在充分展示智慧城市、人工智能、物联网、大数据、软件等新兴行业的最新产品和技术。 作为中国最具影响力和创新力的智能科技展会,上海智博会和北京智博会吸引…

bclinux aarch64 ceph 14.2.10 云主机 性能对比FastCFS vdbench

部署参考 ceph-deploy bclinux aarch64 ceph 14.2.10-CSDN博客 ceph-deploy bclinux aarch64 ceph 14.2.10【3】vdbench fsd 文件系统测试-CSDN博客 ceph 14.2.10 aarch64 非集群内 客户端 挂载块设备-CSDN博客 FastCFS vdbench数据参考 bclinux aarch64 openeuler 20.03 …

Java LeetCode篇-深入了解关于单链表的经典解法

🔥博客主页: 【小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍ 文章目录 1.0 移除链表元素 1.1 使用双指针方法 2.0 反转链表 2.1 递归法 2.2 头插法 3.0 链表中倒数第 k 个节点 3.1 递归法 3.2 快慢指针 4.0 合并两个有序链表 4.1 递归法 …

【每日一题】1670. 设计前中后队列-2023.11.28

题目: 1670. 设计前中后队列 请你设计一个队列,支持在前,中,后三个位置的 push 和 pop 操作。 请你完成 FrontMiddleBack 类: FrontMiddleBack() 初始化队列。void pushFront(int val) 将 val 添加到队列的 最前面…

如何通过“闻香”给葡萄酒分类?

有句话叫做“闻香识女人”,葡萄酒也如同美女,千娇百媚风情万种,所以通过“闻香”也可以给葡萄酒进行分类。 那么,云仓酒庄的品牌雷盛红酒分享葡萄酒都有哪些不同的香呢? 云仓酒庄是云仓酒庄的结合,也就是在…

计算机网络(超详解!) 第二节 物理层(上)

1.物理层的基本概念 物理层考虑的是怎样才能在连接各种计算机的传输媒体上传输数据比特流,而不是指具体的传输媒体。 物理层的作用是要尽可能地屏蔽掉不同传输媒体和通信手段的差异。 用于物理层的协议也常称为物理层规程(procedure)。 2.物理层的主要任务 主要…

vivado产生报告阅读分析21

其他命令选项 • -of_objects <suggestion objects> &#xff1a; 启用特定建议的报告。在此模式下运行时 &#xff0c; report_qor_suggestions 不会生成新建议。此命令可快速执行 &#xff0c; 读取 RQS 文件后 &#xff0c; 此命令可用于查看其中包 含的建议。其…

流程控制翻转学习

&#x1f4d1;前言 本文主要是【Python】——Python流程控制翻转学习的文章&#xff0c;如果有什么需要改进的地方还请大佬指出⛺️ &#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是听风与他&#x1f947; ☁️博客首页&#xff1a;CSDN主页听风与他 &#x1f304;每…

OSHI-操作系统和硬件信息库

文章目录 引言一、快速入门1.1 OSHI的简介1.2 引入依赖1.3 涉及的包&#xff08;package&#xff09;1.4 涉及的核心类 二、操作系统信息&#xff1a;OperatingSystem2.1 总揽2.2 文件系统信息&#xff1a;FileSystem2.3 网络参数信息&#xff1a;NetworkParams2.4 进程信息&am…

Docker,从入门到精通

1、DockerFile 介绍 dockerfile 是啥?dockerfile 用来构建 docker 镜像的文件。 具体步骤&#xff1a; 1、编写一个 dockerfile 文件 2、docker build 构造一个镜像 3、docker run 运行镜像 4、docker push 发布镜像 DockerFile 构建过程 1、每个保留关键字都必须是大…

WSDM 2024 | LLMs辅助基于内容的推荐系统增强BPR训练数据

本文提出了一种简单而有效的基于LLMs的图数据增强策略&#xff0c;称为LLMRec&#xff0c;以增强基于内容的推荐系统。LLMRec包含三种数据增强策略和两种去噪策略。数据增强策略包括从文本自然语言的角度挖掘潜在的协同信号, 构建用户画像(LLM-based), 并强化item side informa…

Adobe Illustrator绘图解决卡顿问题

最近在用AI做矢量图&#xff0c;但是遇到了一个很难搞的问题&#xff0c;当我们需要分辨率较高的图片的时候&#xff0c;Python用Matplotlib生成的pdf时dpi参数会设置为600及以上&#xff0c;但是样子的话就造成了pdf文件过大以及AI卡顿&#xff0c;比如&#xff0c;下午生成的…

解码 SQL:深入探索 Antlr4 语法解析器背后的奥秘

探寻SQL的背后机制 前言 在数据领域&#xff0c;SQL&#xff08;Structured Query Language&#xff09;是一门广泛使用的语言&#xff0c;用于查询和处理数据。你可能已经使用过诸如MySQL、Hive、ClickHouse、Doris、Spark和Flink等工具来编写SQL查询。 每一种框架都提供了…

F22服装管理软件系统 前台任意文件上传漏洞复现

0x01 产品简介 F22服装管理软件系统是广州锦铭泰软件科技有限公司一款专为服装行业开发的综合性管理软件。该产品旨在帮助服装企业实现全面、高效的管理&#xff0c;提升生产效率和经营效益。 0x02 漏洞概述 F22服装管理软件系统UploadHandler.ashx接口处存在任意文件上传漏洞…

实时天气(预报)API接口

实时天气预报API接口 一、实时天气(预报)API接口二、使用步骤1、接口2、请求参数3、请求参数示例4、接口 返回示例 三、 如何获取appKey和uid1、申请appKey:2、获取appKey和uid 四、重要说明 一、实时天气(预报)API接口 一款帮助你获取实时天气和天气预报的API接口 二、使用步…

对于 ` HttpServletResponse ` , ` HttpServletRequest `我们真的学透彻了吗

对于 **HttpServletResponse , HttpServletRequest**我们真的学透彻了吗 问题引入 PostMapping("/importTemplate") public void importTemplate(HttpServletResponse response) {ExcelUtil<SysUser> util new ExcelUtil<SysUser>(SysUser.class);uti…