5

AI数字人SadTalker实战 - 哥不是小萝莉

 6 months ago
source link: https://www.cnblogs.com/smartloli/p/18033296
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

AI数字人SadTalker实战

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

2.1 什么是SadTalker?

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

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

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

666745-20240225210944191-2048909032.png

2.2 快速安装

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

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

1.环境准备

git clone https://github.com/OpenTalker/SadTalker.git
cd SadTalker 
conda create -n sadtalker python=3.9
conda activate sadtalker
# install torch 2.2
pip install torch torchvision torchaudio
conda install ffmpeg
pip install -r requirements.txt
pip install dlib # macOS needs to install the original dlib.

2.下载模型

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

bash scripts/download_models.sh

3.安装深度学习工具包

pip install tts
python app_sadtalker.py

3.表情建模

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

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

666745-20240225221934960-1430578051.png

在这里,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散度来度量生成运动的分布,同时采用均方损失和对抗性损失来确保生成的质量。这样的设计综合考虑了多个因素,提高了生成视频的运动真实性和质量。

666745-20240225222448617-1590078719.png

 5.人脸合成

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

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

666745-20240225222745582-195037058.png

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

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

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

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

666745-20240225223851136-1079178618.png

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK