写点什么

AI 数字人 SadTalker 实战

  • 2024-02-26
    福建
  • 本文字数:2552 字

    阅读完需:约 8 分钟

1.概述


AI 数字人在营销和品牌推广中扮演着至关重要的角色,许多企业和个人正积极利用数字技术来打造属于自己的财富。有没有一种简单而免费的方式来创建自己的数字人呢?本篇博客笔者将为大家介绍如何搭建属于自己的 AI 数字人。


2.内容


2.1 什么是 SadTalker?


生成头部说话视频通过人脸图像和语音音频仍然面临着多项挑战,包括不自然的头部运动、扭曲的表情和身份的修改。这些问题主要源于对耦合的二维运动场进行学习。另一方面,明确使用 3D 信息也可能导致表达僵硬和视频不连贯的问题。

为了应对这些挑战,提出了 SadTalker 模型。该模型从音频中生成 3DMM 的 3D 运动系数(包括头部姿势和表情),并通过隐式调制一种新颖的 3D 感知面部渲染,生成具有说话动作的头部视频。为了学习真实的运动系数,分别对音频和不同类型的运动系数之间的连接进行了显式建模。具体而言,我引入了 ExpNet,通过从音频中提取系数和 3D 渲染的面部,学习准确的面部表情。

对于头部姿势,设计了 PoseVAE,通过有条件的变分自编码器合成不同风格的头部运动。最后,生成的 3D 运动系数被映射到所提出的面部渲染的无监督 3D 关键点空间,并合成最终的视频。通过大量实验证明了该方法在运动和视频质量方面的卓越性。

 


2.2 快速安装


GitHub 地址:https://github.com/OpenTalker/SadTalker

论文:https://arxiv.org/pdf/2211.12194.pdf


1.环境准备


git clone https://github.com/OpenTalker/SadTalker.gitcd SadTalker conda create -n sadtalker python=3.9conda activate sadtalker# install torch 2.2pip install torch torchvision torchaudioconda install ffmpegpip install -r requirements.txtpip install dlib # macOS needs to install the original dlib.
复制代码


2.下载模型


执行如下命令,会自动下载模型:


bash scripts/download_models.sh
复制代码


3.安装深度学习工具包


pip install tts
复制代码


4.启动


python app_sadtalker.py
复制代码


3.表情建模


Audio Encoder 采用 ResNet 为主框架的编码器,整合了 Wav2Lip 模型的音频编码分支。这是一个预训练的编码器,通过微调后续的全连接层即可完成。Wav2Lip 的输入包括单张人脸图片和一段音频,输出为仅包含嘴巴动作的图片序列。生成的表情系数与嘴巴相关,有效减少了其他 3D 系数(特别是头部姿态)对表情系数的影响。


由于现实中的视频通常在三维环境中拍摄,因此三维信息对于提高生成视频的真实性至关重要。然而,之前的研究很少考虑到三维空间,因为仅仅从一张平面图像中很难获取原始的三维稀疏信息,同时设计高质量的面部渲染器也颇具挑战。受到最近单图像深度三维重建方法的启发,研究人员将预测的三维形变模型(3DMMs)的空间表示作为中间表征。在 3DMM 中,三维脸部形状 S 可以被解耦为:



在这里,S 代表三维人脸的平均形状,而 Uid 和 Uexp 则是 LSFM morphable 模型中身份和表情的正则。系数α(80 维)和β(64 维)分别描述个体身份和表情。为了维持不同姿势的差异性,系数 r 和 t 分别表示头部旋转和平移。为了实现身份无关的系数生成,仅将运动参数建模为{β, r, t}。


换句话说,我们从输入的音频中独立学习头部姿势ρ=[r, t]和表情系数β,然后使用这些运动系数来隐式调制面部渲染,用于最终的视频合成。这个方法保证了生成的视频在维持头部姿势的差异性的同时,实现了身份无关的系数生成,为最终合成的视频提供了更加自然和逼真的效果。


三维运动系数涵盖了头部姿势和表情,其中头部姿势表示全局运动,而表情则是相对局部的。由于头部姿势与音频的关系相对较弱,而嘴唇的运动与音频高度相关,完全学习所有的系数可能给网络带来巨大的不确定性。


因此,SadTalker 采用了 PoseVAE 和 ExpNet 两个模块,分别用于生成头部姿势和表情的运动。通过这种方式,网络能够更有效地处理头部姿势和表情之间的关系,避免不必要的不确定性,同时更专注于与音频高度关联的嘴唇运动的生成。


4.头部建模


在训练中,我们采用基于编码器-解码器结构的方法对固定数量的帧进行 PoseVAE(头部姿势变分自编码器)训练。编码器和解码器都是两层 MLP(多层感知机),接受一个包含连续 t 帧头部姿势的输入,并将其嵌入到高斯分布中。在解码器中,网络从采样分布中学习生成 t 帧姿势。


值得注意的是,PoseVAE 并不直接生成姿势,而是学习第一帧条件下的姿势残差。这一特性使得该方法在测试中能够在第一帧的条件下生成更长、更稳定、更连续的头部运动。


类似于条件变分自编码器(CVAE),PoseVAE 在模型中还引入了相应的音频特征和风格标识,用作节奏感知和身份风格的条件。模型使用 KL 散度来度量生成运动的分布,同时采用均方损失和对抗性损失来确保生成的质量。这样的设计综合考虑了多个因素,提高了生成视频的运动真实性和质量。



 5.人脸合成


在生成真实的三维运动系数后,研究人员采用了一个精心设计的三维图像动画器来渲染最终的视频。最近提出的图像动画方法,如 face-vid2vid,能够隐含地从单一图像中学习 3D 信息,但该方法需要一个真实的视频作为动作驱动信号。而在本论文中提出的脸部渲染方法,通过 3DMM 系数来驱动。


为了解决这个问题,研究人员引入了 mappingNet,该网络被设计用于学习显式的 3DMM 运动系数(头部姿势和表情)以及隐式的无监督 3D 关键点之间的关系。这个创新性的方法使得从生成的三维运动系数到最终视频的渲染过程更加精准和可控,为数字图像动画领域带来了新的突破。



通过使用几个一维卷积层,mappingNet 建立了一个模型,类似于 PIRenderer,它采用时间系数的时间窗口进行平滑处理。与 PIRenderer 不同的是,研究人员发现在 PIRenderer 中,人脸对齐的运动系数会显著影响音频驱动的视频生成的运动自然度。因此,mappingNet 仅使用表情和头部姿势的系数。


训练阶段包含两个关键步骤:首先,按照原论文的方法,以自监督的方式训练 face-vid2vid。然后,在冻结外观编码器、canonical 关键点估计器和图像生成器的所有参数之后,使用 ground truth 视频的 3DMM 系数对 mappingNet 进行微调,以重建的方式进行训练。


在无监督关键点的领域中,使用 L1 损失进行监督训练,并按照其原始实现方式生成最终的视频。这种方法可以提高生成视频的质量和自然度,尤其是在考虑到人脸对齐运动系数对音频驱动的影响的情况下。


6.预览


本地浏览器访问:http://127.0.0.1:7860/



文章转载自:哥不是小萝莉

原文链接:https://www.cnblogs.com/smartloli/p/18033296

体验地址:http://www.jnpfsoft.com/?from=001

用户头像

还未添加个人签名 2023-06-19 加入

还未添加个人简介

评论

发布
暂无评论
AI数字人SadTalker实战_AI_不在线第一只蜗牛_InfoQ写作社区