AI数字人SadTalker实战
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.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
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/
AI数字人SadTalker实战的更多相关文章
- 百度AI开放平台- API实战调用
百度AI开放平台- API实战调用 一. 前言 首先说一下项目需求. 两个用户,分别上传了两段不同的文字,要计算两段文字相似度有多少,匹配数据库中的符合条件的数据,初步估计列出来会有60-1 ...
- 《2017全球人工智能人才白皮书》发布丨解读世界顶级AI牛人的秘密——腾讯研究院
<2017全球人工智能人才白皮书>发布丨解读世界顶级AI牛人的秘密——腾讯研究院:下载链接:http://www.tisi.org/c16 这个报告写的很好,排版布局,表格,色调,内容都值 ...
- 乘风破浪,遇见未来元宇宙(Metaverse)之进入元宇宙世界,虚拟数字人行业洞察报告
正值元宇宙热潮,虚拟数字人兴起 作为⼀个新兴领域,虚拟数字⼈已经引起市场和资本的⾼度关注,截⾄目前据不完全统计,全球范围已有500+虚拟数字人相关项目获得融资,融资总额超10亿美元,并且融资项目和总额 ...
- 4星|《超级技术:改变未来社会和商业的技术趋势》:AI对人友好吗
超级技术:改变未来社会和商业的技术趋势 多位专家或经济学人编辑关于未来的预测,梅琳达·盖茨写了其中一章.在同类书中属于水平比较高的,专家只写自己熟悉的领域,分析与预测有理有据而不仅仅是畅想性质. 以下 ...
- Redis 实现美团的外卖派单系统“附近的人”筛选实战原理分析
针对“附近的人”这一位置服务领域的应用场景,常见的可使用PG.MySQL和MongoDB等多种DB的空间索引进行实现.而Redis另辟蹊径,结合其有序队列zset以及geohash编码,实现了空间搜索 ...
- 如何通过Java应用程序添加或删除 PDF 中的附件
当我们在制作PDF文件或者PPT演示文稿的时候,为了让自己的文件更全面详细,就会在文件中添加附件.并且将相关文档附加到 PDF 可以方便文档的集中管理和传输.那么如何添加或删除 PDF 中的附件呢?别 ...
- ChatGPT调研分析与应用场域结合构想
作者:京东科技 胡骏 摘要 1. ChatGPT调研分析 2022年11月30日,ChatGPT横空出世,在全球范围内形成了热烈的讨论.根据Similarweb的数据,今年1月,平均每天约有1300万 ...
- [易学易懂系列|rustlang语言|零基础|快速入门|(23)|实战1:猜数字游戏]
[易学易懂系列|rustlang语言|零基础|快速入门|(23)|实战1:猜数字游戏] 项目实战 实战1:猜数字游戏 我们今天来来开始简单的项目实战. 第一个简单项目是猜数字游戏. 简单来说,系统给了 ...
- keras图片数字识别入门AI机器学习
通过使用mnist(AI界的helloworld)手写数字模型训练集,了解下AI工作的基本流程. 本例子,要基于mnist数据集(该数据集包含了[0-9]的模型训练数据集和测试数据集)来完成一个手写数 ...
- 华为五大专家亲述:如何转型搞 AI?
导语:非AI专业技术人员转型AI技术,或是作为一名学生学习AI技术开发,对每个有这样诉求和经历的人来说,都希望能够看到AI技术人才的成长经历,给出自己的真实经历分享. 前言 参考塞缪尔.约翰逊(18世 ...
随机推荐
- [转帖]通过拓扑 label 进行副本调度
https://docs.pingcap.com/zh/tidb/stable/schedule-replicas-by-topology-labels#%E5%9F%BA%E4%BA%8E%E6%8 ...
- [转帖]在KingbaseES数据库中批量创建数据库/表
1. 问题 如何在KingbaseES中批量创建表和库? 2. 通过shell脚本文件实现 有时候我们在进行测试的时候需要进行批量的建库以及建表,这时我们可以使用shell脚本实现或者是SQL实现,s ...
- [转帖]iostat相关参数说明——await:平均每次设备I/O操作的等待时间 (毫秒),如果%util接近 100%,说明产生的I/O请求太多
https://www.cnblogs.com/bonelee/p/6323587.html iostat是I/O statistics(输入/输出统计)的缩写,iostat工具将对系统的磁盘操作活动 ...
- 各开发语言DNS缓存配置建议
作者:翟贺龙 一.背景 在计算机领域,涉及性能优化动作时首先应被考虑的原则之一便是使用缓存,合理的数据缓存机制能够带来以下收益: 1.缩短数据获取路径,热点数据就近缓存以便后续快速读取,从而明显提升处 ...
- 可插拔组件设计机制—SPI
作者:京东物流 孔祥东 1.SPI 是什么? SPI 的全称是Service Provider Interface,即提供服务接口:是一种服务发现机制,SPI 的本质是将接口实现类的全限定名配置在文件 ...
- vue3中watch监听不是你想的那样简单
vue3 中watch监听数组,数组变化后未触发回调 今天发生了一个很神奇的现象,就是我使用watch监听数组时. 被监听的数组已经发生了变化.但是没有触发回调操作. 当时的我感到很疑惑? 不应该呀? ...
- vue报错:'XX' is defined but never used no-unused-vars
参考地址:http://www.gold404.cn/info/87 导致这个报错的原因就是eslint校验, 就是你当初在vue创建脚手架的时候选择了eslint校验: 后面你绝对会碰到这样的报错, ...
- word文档删除空白页
记住两个快捷键 CTRL+Backspace Shift+Backspace 鼠标箭头放在空白的页面 按住键盘上的快捷键 就可以成功删除了不要天天看营销号设置什么磅值,全选删除啥的 效果如下
- Windows 核心编程笔记 [2] 字符串
1. ANSI 和 Unicode Windows 中涉及字符串的函数有两个版本 1)ANSI版本的函数会把字符串转换为Unicode形式,再从内部调用函数的Unicode版本 2)Unicode版本 ...
- github clone或访问慢
做技术的我们经常会访问github.com,有时出现github访问非常慢或者git clone速度很慢,git push也很慢 原因很简单:github被高高的墙屏蔽了. 所以解决方案就是手动把 c ...