SadTalker 学习笔记

news2024/11/12 21:12:59

SadTalker: Learning Realistic 3D Motion Coefficients for Stylized Audio-Driven Single Image Talking Face Animation

摘要

Generating talking head videos through a face image and a piece ofspeech audio still contains many challenges. i.e., unnatural head movement, distorted expression, and identity modification. We argue that these issues are mainly because oflearning from the coupled 2D motion fields. On the other hand, explicitly using 3D information also suffers problems ofstiffexpression and incoherent video. We present SadTalker, which generates 3D motion coefficients (head pose, expression) of the 3DMM from audio and implicitly modulates a novel 3D-aware face render for talking head generation. To learn the realistic motion coefficients, we explicitly model the connections between audio and different types ofmotion coefficients individually. Precisely, we present ExpNet to learn the accurate facial expression from audio by distilling both coefficients and 3D-rendered faces. As for the head pose, we design PoseVAE via a conditional VAE to synthesize head motion in different styles. Finally, the generated 3D motion coefficients are mapped to the unsupervised 3D keypoints space ofthe proposed face render, and synthesize the final video. We conducted extensive experiments to demonstrate the superiority ofour method in terms ofmotion and video quality.

通过人脸图像和一段语音音频生成说话的头部视频仍然包含许多挑战。也就是说,不自然的头部运动、扭曲的表情和身份修改。我们认为,这些问题主要是因为oflearning从耦合的二维运动场。另一方面,明确地使用3D信息也遭受僵硬的表达和不连贯的视频的问题。我们提出了SadTalker,它产生的3D运动系数(头部姿势,表达)的3DMM从音频和隐式调制一个新的3D感知的面部渲染说话的头部生成。为了学习真实的运动系数,我们明确地建模音频和不同类型的运动系数之间的连接。准确地说,我们提出ExpNet学习准确的面部表情从音频中提取系数和3D渲染的脸。至于头部姿态,我们设计了PoseVAE通过条件VAE合成不同风格的头部运动。最后,生成的三维运动系数映射到建议的人脸渲染的无监督三维关键点空间,并合成最终的视频。我们进行了大量的实验来证明我们的方法在运动和视频质量方面的优越性.

方法

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FkU3zE6M-1685335353879)(C:\Users\dell\AppData\Roaming\Typora\typora-user-images\image-20230517143810030.png)]

图2.pipeline。我们的方法使用3DMM的系数作为中间运动表示。为此,我们首先从音频生成真实的3D运动系数(面部表情β、头部姿势P),然后这些系数用于隐式地调制3D感知面部渲染以用于最终视频生成。

即,该系统使用的3D运动系数作为中间表示的讲话头部生成。首先从原始图像中提取系数。然后分别用ExpNet和PoseVAE生成真实感的3DMM运动系数。最后,提出了一种3D感知的人脸渲染来产生说话的头部视频。

三维人脸模型的初步研究

由于真实视频是在3D环境中捕获的,因此3D信息对于提高所生成的视频的真实性至关重要。然而,先前的工作很少在3D空间中被考虑,因为难以从单个图像获得精确的3D系数,并且高质量的面部渲染也难以设计。受最近的单图像深度3D重建方法[5]的启发,我们将预测的3D变形模型(3DMM)的空间视为我们的中间表示。在3DMM中,3D面部形状S可以被解耦为:
S = S ‾ + α U i d + β U e x p , (1) \mathbf{S}=\overline{\mathbf{S}}+\alpha\mathbf{U}_{id}+\beta\mathbf{U}_{exp},\tag{1} S=S+αUid+βUexp,(1)
其中 S ‾ \overline{\mathbf{S}} S是3D人脸的平均形状, U i d U_{id} Uid U e x p U_{exp} Uexp是LSFM可变形模型的恒等式和表达式的正交基[1]。系数 α ∈ R 80 \alpha\in\mathbb{R}^{80} αR80 β ∈ R 64 \beta\in\mathbb{R}^{64} βR64分别描述了人的身份和表达。为了保持姿态方差,系数 r ∈ S O ( 3 ) r \in SO(3) rSO(3) t ∈ R 3 t \in\mathbb{R}^{3} tR3表示头部旋转和平移。为了实现身份无关系数生成,我们仅将运动参数建模为 { β , r , t } \{\beta,\mathbf{r},\mathbf{t}\} {β,r,t}。如前所述,我们从驾驶音频中分别学习头部姿势 ρ = [ r , t ] \rho = [r,t] ρ=[rt]和表情系数 β \beta β。然后,这些运动系数被用来隐式地调制我们的脸渲染最终的视频合成。

通过音频生成运动系数

如上所述,3D运动系数包含头部姿势和表达式,其中头部姿势是全局运动,并且表达式是相对局部的。为此,学习所有内容将在网络中造成巨大的不确定性,因为头部姿势与音频的关系相对较弱,而嘴唇运动则高度相关。我们使用下面分别介绍的所提出的PoseVAE和ExpNet来生成头部姿势和表情的运动。

ExpNet

学习一个从音频中产生精确表达式系数的通用模型是非常困难的,原因有两个:

  1. 音频到表情不是针对不同身份的一对一映射任务。
  2. 在表达式系数中存在一些与音频无关的运动,这将影响预测的准确性。我们的ExpNet旨在减少这些不确定性。至于身份问题,我们通过第一帧的表情系数 β 0 \beta_0 β0将表情运动与特定人联系起来。为了减少自然谈话中其他面部组件的运动权重,我们通过Wav2Lip 和深度3D重建的预训练网络使用嘴唇运动系数作为系数目标。然后,其他次要面部运动(例如,眨眼)可以经由渲染图像上的附加界标损失来利用。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-63TQCnDs-1685335353880)(C:\Users\dell\AppData\Roaming\Typora\typora-user-images\image-20230517145254865.png)]

图3.ExpNet的结构。我们涉及单目3D人脸重建模型[5](Re和Rd)来学习真实的表情系数。其中Re是预训练的3DMM系数估计器,Rd是没有可学习参数的可微分3D面部渲染。我们使用参考表达式β0来减少身份的不确定性,并且从预训练的Wav2Lip [30]和第一帧生成的帧作为目标表达式系数,因为它仅包含与嘴唇相关的运动。

如图3中所示,我们从音频窗口 a { 1 , … , t } a\{1,\dots,t\} a{1,,t},其中每个帧的音频特征是0.2s梅尔频谱图。对于训练,我们首先设计基于ResNet的音频编码器 Φ A \Phi_A ΦA以将音频特征嵌入到潜在空间。然后,添加线性层作为映射网络 Φ M \Phi_M ΦM以对表达式系数进行解码。这里,我们还添加来自参考图像的参考表达式 β 0 \beta_0 β0以减少如上所述的身份不确定性。由于我们在训练中使用仅嘴唇系数作为基础事实,因此我们显式地添加眨眼控制信号 z b l i n k ∈ [ 0 , 1 ] z_{blink} \in [0,1] zblink[01]和对应的眼睛界标丢失以生成可控的眼睛眨眼。形式上,网络可以写为:
β { 1 , . . . , t } = Φ M ( Φ A ( a { 1 , . . . , t } ) , z b l i n k , β 0 ) , (2) \beta_{\{1,...,t\}}=\Phi_M(\Phi_A(a_{\{1,...,t\}}),z_{blink},\beta_0),\tag{2} β{1,...,t}=ΦM(ΦA(a{1,...,t}),zblink,β0),(2)

对于损失函数,我们首先使用 L d i s t i l l \mathcal{L}_{distill} Ldistill来评估仅唇表达系数 R e ( Wav2Lip ( I 0 , a { 1 , . . . , t } ) ) R_e(\text{Wav2Lip}(I_0,a_{\{1,...,t\}})) Re(Wav2Lip(I0,a{1,...,t}))和生成的 β { 1 , … , t } \beta_{\{1,\ldots,t\}} β{1,,t}。请注意,我们仅使用wav 2lip的第一帧 I 0 I_0 I0来生成嘴唇同步视频,这减少了姿势变量和除嘴唇移动之外的其他面部表情的影响。此外,我们还涉及可微的三维人脸渲染 R d R_d Rd计算额外的感知损失显式面部运动空间。如图3所示,我们计算界标损失 L l k s \mathcal{L}_{lks} Llks以测量眨眼的范围和整体表达准确度。预先训练的唇阅读网络 Φ r e a d e r \Phi_{reader} Φreader也被用作时间唇读损失 L r e a d \mathcal{L}_{read} Lread以保持感知唇质量。

PoseVAE

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-K80juqnG-1685335353880)(C:\Users\dell\AppData\Roaming\Typora\typora-user-images\image-20230517150259943.png)]

图4.提供(解释)PoseVAE的管道。我们通过条件VAE结构学习输入头部姿态 ρ 0 \rho_0 ρ0的残差。鉴于以下条件:第一帧 ρ 0 \rho_0 ρ0、风格标识 Z s t y l e Z_{style} Zstyle和音频剪辑 a { 1 , … , t } a\{1,\dots,t\} a{1,,t},我们的方法学习剩余头部姿势 Δ ρ { 1 , . . . , t } = ρ { 1 , . . . , t } − ρ 0 \Delta\rho_{\{1,...,t\}} = \rho_{\{1,...,t\}} - \rho_0 Δρ{1,...,t}=ρ{1,...,t}ρ0。训练完成后,我们可以通过姿态解码器和条件(cond.)只有。

基于VAE 的模型被设计为学习真实谈话视频的真实和身份感知的风格化头部运动 ρ ∈ R 6 \rho \in \mathbb{R}^6 ρR6。在训练中,使用基于编码器解码器的结构在固定的 n n n个帧上训练姿态VAE。编码器和解码器都是两层MLP,其中输入包含顺序的t-frame头部姿势,并且我们将其嵌入到高斯分布中。在解码器中,学习网络以从采样的分布生成t帧姿态。我们的PoseVAE不是直接生成姿势,而是学习第一帧的条件姿势 ρ 0 \rho_0 ρ0的残差,这使得我们的方法能够在第一帧的条件下在测试中生成更长,稳定和连续的头部运动。此外,根据CVAE,我们添加相应的音频特征 a { 1 , … , t } a\{1,\dots,t\} a{1,,t}和风格认同 Z s t y l e Z_{style} Zstyle作为节奏意识和认同风格的条件。KL-散度 L K L \mathcal{L}_{KL} LKL用于测量所生成的运动的分布。均方损失 L M S E \mathcal{L}_{MSE} LMSE和对抗损失 L G A N \mathcal{L}_{GAN} LGAN用于确保生成的质量。

3D感知人脸渲染

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rgnRzAl1-1685335353881)(C:\Users\dell\AppData\Roaming\Typora\typora-user-images\image-20230517151906831.png)]

图5. FaceRender以及与facevis2vid的比较。给定源图像 I s I_s Is和驱动图像 I d I_d Id,facevis2vid在 X c \mathcal{X}_c Xc X s \mathcal{X}_s Xs X d \mathcal{X}_d Xd的无监督3D关键点空间中生成运动。然后,可以经由外观 A 0 A_0 A0和关键点来生成图像。由于我们没有驱动图像,我们使用显式解纠缠的3DMM系数作为代理,并将其映射到无监督的3D关键点空间。

在生成逼真的3D运动系数后,我们通过一个精心设计的3D感知图像动画渲染最终的视频。我们从最近的图像动画方法face-vid 2 vid 中获得灵感,因为它隐式地从单个图像中学习3D信息。然而,在他们的方法中,需要真实的视频作为运动驱动信号。我们的面部渲染使其可通过3DMM系数驱动。如图5所示,我们提出mappingNet来学习显式3DMM运动系数(头部姿势和表情)与隐式无监督3D关键点之间的关系。我们的mappingNet是通过几个1D卷积层构建的。我们使用来自时间窗口的时间系数作为PIRenderer 进行平滑。不同的是,我们发现PIRenderer中的人脸对齐运动系数将极大地影响音频驱动视频生成的运动自然度。

至于训练,我们的方法包含两个步骤。首先,我们像原始论文中一样以自我监督的方式训练face-vid 2 vid 。在第二步中,我们冻结外观编码器、规范关键点估计器和图像生成器的所有参数以进行调整。然后,我们以重建方式在地面实况视频的3DMM系数上训练映射网络。我们使用 L 1 \mathcal{L}_1 L1损失在无监督关键点域中给予监督,并根据其原始实现最终生成视频。更多细节可以在补充材料中找到。

实验

数据集

我们使用VoxCeleb[26]数据集训练包含超过100 k的视频1251科目。我们作物原始视频后之前的图像动画方法[36]和调整到256×256的视频。预处理后的数据是我们FaceRender用来训练。因为一些视频和音频VoxCeleb不一致,我们选择1890对齐的视频和音频的46个科目训练PoseVAE ExpNet。输入音频down-sampled 16赫兹和转换为mel-spectrograms一样设置Wav2lip [30]。为了测试我们的方法,我们使用346视频的第一个8秒视频(总共约70k帧)来自HDTF数据集[49],因为它包含高分辨率和野外说话的头部视频。这些视频也会按照[36]进行裁剪和处理,并将大小调整为256 ×256以进行评估。我们使用每个视频的第一帧作为参考图像来生成视频。

实施细节

所有ExpNet,PoseVAE和FaceRender都是单独训练的,我们使用Adam优化器[20]进行所有实验。在训练之后,我们的方法可以以端到端的方式推断,而无需任何手动干预。所有3DMM参数都是通过预训练的深度3D人脸重建方法提取的[5]。我们在8个A100 GPU上进行所有实验。ExpNet、PoseVAE和FaceRender的学习率分别为2e−5、1e−4和2e−4。至于时间上的考虑,ExpNet使用连续的5帧来学习。PoseVAE通过连续32帧学习。FaceRender中的帧是使用5个连续帧的系数逐帧生成的,以确保稳定性。

结果对比

[外链图片转存中...(img-u4v0YwdT-1685335353881)]

表1.与HDTF数据集上的最新方法进行比较。我们在单次设置中评估了Wav 2Lip [30]和PC-AVS [51]。Wav 2Lip * 实现了最佳视频质量,因为它只对嘴唇区域进行动画处理,而其他区域与原始帧相同。PC-AVS** 使用固定参考姿态进行评估,并且在一些样本中失败。

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

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

相关文章

前端页面调用EXE应用程序

文章目录 1️⃣ 操作步骤1.1 操作注册表1.1.1 创建 xcLeigh.reg 注册表文件1.1.2 安装 xcLeigh.reg 注册表文件1.1.3 放入EXE文件 1.2 界面代码1.3 运行效果 优质资源分享 作者:xcLeigh 文章地址:https://blog.csdn.net/weixin_43151418/article/details…

大专毕业,从6个月开发转入测试岗位的一些感悟 —— 写在测试岗位3年之际

时光飞逝,我从前端开发岗位转入测试岗位已经三年了,这期间从迷茫到熟悉,到强化,到熟练,到总结,感受还是很深的! 三年前的某一个晚上,我正准备下班回家,我们的项目经理把…

嵌入式Linux中的 gpio、gpiod基本分析

GPIO 应该是每个嵌入式设备都避免不了的。最近在做项目的时候,也遇到这方面的问题,所以简单总结一下。 现在内核里面多了 gpiod 的来控制 gpio 口,相对于原来的形式,使用 gpiod 的好处是我们申请后不进行 free 也没有什么问题。但…

Seata分布式事务AT、TCC、SAGA、XA模式

Seata是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata将为用户提供了AT、TCC、SAGA和XA事务模式,为用户打造一站式的分布式解决方案。 AT模式 🍮实现原理 阿里SEATA独有模式,通过生成反向SQ…

STM32读取24位模数转换(24bit ADC)芯片ADS1231数据

STM32读取24位模数转换(24bit ADC)芯片ADS1231数据 ADS1231是一款TI公司出品的24位ADC芯片,常用于与称重传感器配合实现体重计的应用。这里介绍STM32读取ADS1231的电路和代码实现。ADS1231的特点为通过硬件管脚可控制两种采样速率&#xff0…

日期与字符串相互转化(自定义日期工具类总结,Hutool工具类使用)

一、将日期格式化成字符串输出(Date转String) Java旧的时间API饱受诟病,Java8以后提供了新的时间API,在java.time包下。 //获取当前时间LocalDateTime dateLocalDateTime.now();//创建日期时间对象格式化器,日期格式类…

Hadoop学习---11、HA高可用

1、Hadoop HA高可用 1.1 HA概述 1、所谓HA(High Availablity),即高可用(7 * 24小时不中断服务)。 2、实现高可用最关键的策略是消除单点故障。HA严格来说应该分成各个组件的HA机制:HDFS的HA和YARN的HA。 …

数字化转型,低代码开发真的靠谱?

关于数字化转型,有这么一种定义,即利用数字化技术和能力来驱动企业商业模式创新和商业生态系统重构的一种途径与方法。通俗点说,数字化的核心和目的就是通过数字化技术,实现业务的转型、创新和增长,提供新的营收点与价…

超详细,性能测试三大模式详解,资深测试老鸟一文道破...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 在性能测试工作中…

IC芯片自动测试系统平台ATECLOUD:提高半导体制造效率与质量

近年来,随着半导体产业的快速发展,IC芯片在各种电子设备中扮演着越来越重要的角色。然而,为了满足不断增长的需求和保持竞争力,制造商需要不断提高生产效率并确保产品质量。ATECLOUD——一款基于云计算技术的IC芯片自动测试系统平…

租赁小程序|人车网租赁系统|电动车租赁系统包含哪些功能?

随着科技不断完善,租赁行业的发展也越来越好,电动车也开始进行线上推广租赁,不仅可以让人们更加方便的租用电动车,还让商家可以通过线上模式带动线下的经营,不同于传统的汽车租赁,用户只要打开手机就可以进…

MySQL-5.7.19版本安装详解

MySQL-5.7.19版本安装详解 1. 软件下载 Mysql5.7地址:https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.19-winx64.zip 2. 软件安装 2.1 第一步:解压 下载后会得到mysql-5.7.19-winx64的zip 安装文件,先将其解压解压的路径最好不…

微信小程序导入Vant Weapp ui组件库2023年最新版

微信小程序导入Vant Weapp ui组件库2023年最新版 写这篇文章的原因是Vant Weapp的官方文档快速上手是有一定的问题的,没错,我就是那个试错的人,弄了一下午才发现问题所在,所以写了一篇正确的导入教程。 第一步:在项目…

Python进阶 │反爬虫和怎样反反爬虫

爬虫、反爬虫和反反爬虫是网络爬虫工作过程中一直伴随的问题。 在现实生活中,网络爬虫的程序并不像之前介绍的爬取博客那么简单,运行效果不如意者十有八九。首先需要理解一下“反爬虫”这个概念,其实就是“反对爬虫”。根据网络上的定义&…

PowerShell:因为在此系统上禁止运行脚本,解决方法

运行powershell脚本遇见报错: 无法加载文件 C:\Users\DH\Desktop\cs\rename.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅 https:/go.microsoft.com/fwlink/?LinkID135170 中的 about_Execution_Policies。 查了查之后发现是在计算…

差动测试棒如何连接到示波器

差动测试棒提供一个安全的绝缘仪器给示波器使用,它可以转换由高输入的差动电压进入一个低电压并且显示波形在示波器上,使用频率高达100MHz,非常适合大电力测试、研发使用。 差动测试棒输出标是设计在操作示波器1MΩ的输入阻抗的相对衰减量&a…

人工智能学习07--pytorch20--目标检测:COCO数据集介绍+pycocotools简单使用

如:天空 coco包含pascal voc 的所有类别,并且对每个类别的标注目标个数也比pascal voc的多。 一般使用coco数据集预训练好的权重来迁移学习。 如果仅仅针对目标检测object80类而言,有些图片并没有标注信息,或者有错误标注信息。…

需求:js给html添加css

目前发送请求&#xff0c;请求回html&#xff1a;<div class"articleRecommendation_con"> <a href"https://weekly.caixin.com/2023-05-26/102059365.html"><img src"https://img.caixin.com/2023-05-27/168515251870385…

如何选择适合平台的直播美颜SDK:从技术和商业角度考虑

直播美颜SDK作为一种技术解决方案&#xff0c;可以帮助直播应用实现优秀的美颜效果&#xff0c;提高用户体验和粘性。然而&#xff0c;如何选择适合你应用的直播美颜SDK&#xff0c;需要从技术和商业角度综合考虑。本文将从这两个角度出发&#xff0c;为你介绍如何选择适合你应…

手把手带你读vue2文档(基础篇总结)

目录 声明式渲染 v-bind v-if条件与循环 name命名 学会log打印 一些js方法 双向绑定v-model和v-bind 那么请实现一个复选框吧 自定义标签模板 vue2实例 数据与方法 你提到vue有两种数据和方法&#xff0c;js是不是只有一种 vue2自带的实例和方法 vue2$会和jQuery冲…