数字人解决方案— SadTalker语音驱动图像生成视频原理与源码部署
简介
随着数字人物概念的兴起和生成技术的不断发展,将照片中的人物与音频输入进行同步变得越来越容易。然而,目前仍存在一些问题,比如头部运动不自然、面部表情扭曲以及图片和视频中人物面部的差异等。为了解决这些问题,来自西安交通大学等机构的研究人员提出了 SadTalker 模型。
SadTalker 模型在三维运动场中学习如何从音频中生成3DMM的3D运动系数,包括头部姿势和表情,并利用全新的3D面部渲染器来生成自然的头部运动。
为了学习真实的运动系数,研究人员将音频和不同类型的运动系数之间的联系进行了显式建模。他们设计了蒸馏系数和3D渲染的脸部,从音频中学习准确的面部表情。同时,他们还设计了条件VAE,即 PoseVAE,用于合成不同风格的头部运动。最后,他们将生成的三维运动系数映射到人脸渲染的无监督三维关键点空间,并合成最终的视频。
在实验中,研究人员证明了 SadTalker 模型在运动同步和视频质量方面实现了最先进的性能,为通过人脸图像和语音音频生成会说话的人物头像视频提供了一种有效的方法。
SadTalker语音驱动图像生成视频
企鹅交流群:787501969,整合包下载地址可以加交流群
获者从csdn下载:https://download.csdn.net/download/matt45m/88984818
算法架构
在数字人创作、视频会议等多个领域中,将静态照片动态化,即通过语音音频让照片中的人物动起来,是一项具有挑战性的任务。过去的研究主要集中在生成唇部运动,因为唇部动作与语音之间的关联最为紧密。虽然一些工作也尝试生成其他相关的人脸运动,比如头部姿势,但生成视频的质量仍然存在着许多不自然的问题,例如偏好的姿势、模糊、身份修改和面部扭曲等限制。
另一种流行的方法是基于潜在空间的人脸动画,该方法主要关注于在对话式人脸动画中特定类别的运动。然而,生成高质量的视频仍然是一项具有挑战性的任务。尽管三维面部模型中包含高度解耦的表征,可以用于单独学习面部不同位置的运动轨迹,但仍然会产生不准确的表情和不自然的运动序列。
基于以上观察结果,研究人员提出了SadTalker(Stylized Audio-Driven Talking-head)系统。该系统通过隐式三维系数调制来实现风格化音频驱动的视频生成。
3面部
现实中的视频通常是在三维环境中拍摄的,因此三维信息对于生成逼真的视频至关重要。然而,以往的研究很少考虑到三维空间,因为仅仅通过一张平面图像很难获取原始的三维稀疏信息,而且设计高质量的面部渲染器也非常困难。
受到最近单图像深度三维重建方法的启发,研究人员开始将预测的三维形变模型(3DMMs)作为中间表征。在3DMM中,三维脸部形状S可以被解耦为:
S = S ‾ + α U i d + β U e x p , ( 1 ) {\bf S}={\overline S}+\alpha{\bf U}_{i d}+\beta{\bf U}_{e x p},\qquad(1) S=S+αUid+βUexp,(1)
在这个算法中,通过LSFM morphable模型,三维形变模型(3DMMs)的各个参数有以下含义和作用:
- S:代表三维人脸的平均形状。
- Uid 和 Uexp:LSFM morphable模型的参数,分别用于描述人物的身份和表情的正则。
- α 和 β:分别是身份和表情的系数,分别具有80维和64维,用于描述人物的身份和表情。
- r 和 t:分别表示头部旋转和平移,用于保持头部姿势的差异性。
- {β, r, t}:仅将运动的参数建模为表情系数β、头部旋转r和平移t。
在该算法中,从驱动的音频中单独学习头部姿势ρ=[r, t]和表情系数β。然后,利用这些学习到的运动系数来隐式地调制面部渲染,用于最终的视频合成。这种方法可以保持生成的面部动画与音频的相关性,从而使合成的视频更加真实和生动。
通过音频生成运动稀疏
SadTalker使用了两个模型,PoseVAE和ExpNet,来分别生成头部姿势和表情的运动。这是因为三维运动系数包含了头部姿势和表情,而这两者具有不同的特性。头部姿势是全局运动,对应整个面部区域的变化,而表情通常是相对局部的,局限于特定的面部区域。由于头部姿势与音频的关系相对较弱,而表情与音频高度相关,如果尝试在一个模型中完全学习所有的系数,会导致网络面临巨大的不确定性。因此,通过分别使用PoseVAE和ExpNet来生成头部姿势和表情的运动,网络可以更有效地处理头部姿势和表情之间的关系,从而提高生成的面部动画的真实性和准确性。
ExpNet
学习一个能够从音频中准确生成表情系数的通用模型是非常困难的,原因主要有两点:
-
音频到表情不是对不同人物的一对一的映射任务:不同个体对相同的语音输入可能会产生不同的面部表情反应。这是由于个体之间的生理特征、情感状态、习惯性表现等因素的差异导致了相同音频信号引发不同表情的情况。
-
表情系数中存在与音频相关的动作,这会影响到预测的准确性:音频信号中的语调、情感内容以及说话速度等因素都可能影响到面部表情的生成。因此,从音频中预测表情时,需要考虑如何有效地捕捉和建模这些与音频相关的动作,以提高预测的准确性和鲁棒性。
为了应对这些挑战,ExpNet 的设计目标是减少这些不确定性。针对个体身份问题,研究人员通过使用第一帧的表情系数将表情运动与特定的人物联系起来。
为了减少自然对话中其他面部成分的运动权重,研究人员通过预训练网络,如 Wav2Lip 和深度三维重建,只使用嘴唇运动系数作为系数目标。这种方法有助于减少由于音频中其他动作导致的表情系数的不确定性。
对于其他细微的面部运动,比如眼睛眨动等,可以在渲染图像上的额外landmark损失中引入,以进一步提高模型的准确性和鲁棒性。
PoseVAE
研究人员设计了一个基于变分自动编码器(VAE)的模型,旨在学习谈话视频中真实的、身份相关的风格化头部运动。在训练中,他们采用了基于编码器-解码器结构的方法对固定的n个帧进行姿势VAE训练。编码器和解码器都是由两层多层感知器(MLP)组成,输入是一个连续的t帧头部姿势,将其嵌入到高斯分布中。在解码器中,网络从采样分布中学习生成t帧姿势。
需要注意的是,PoseVAE并不直接生成姿势,而是学习第一帧的条件姿势的残差。这使得该方法在测试中能够在第一帧的条件下生成更长、更稳定、更连续的头部运动。根据条件变分自动编码器(CVAE),PoseVAE还增加了相应的音频特征和风格标识作为节奏感知(rhythm awareness)和身份风格的条件。
模型使用KL散度来衡量生成运动的分布,并使用均方损失和对抗性损失来确保生成的质量。这样的设计使得模型能够从谈话视频中学习到真实且与身份相关的头部运动,并能够在测试阶段生成更长、更连续的运动序列。
3D-aware面部渲染
在生成真实的三维运动系数后,研究人员使用了一个精心设计的三维图像动画器来渲染最终的视频。最近提出的图像动画方法,称为 face-vid2vid,可以隐含地从单一图像中学习3D信息。然而,该方法需要一个真实的视频作为动作驱动信号。与此不同的是,这篇论文中提出的脸部渲染可以通过3DMM系数来驱动。
为了建立显式3DMM运动系数(头部姿势和表情)与隐式无监督3D关键点之间的关系,研究人员提出了 mappingNet。mappingNet 使用了几个一维卷积层,类似于 PIRenderer,使用时间窗口的时间系数进行平滑处理。不同之处在于,研究人员发现 PIRenderer 中的人脸对齐运动系数会极大地影响音频驱动的视频生成的运动自然度,因此 mappingNet 只使用表情和头部姿势的系数。
训练阶段包含两个步骤:首先,按照原论文的方法,使用自监督方式训练 face-vid2vid。然后,在冻结外观编码器、canonical关键点估计器和图像生成器的所有参数后,通过在ground truth视频的3DMM系数上进行重建,对 mappingNet 进行微调。
在无监督关键点的域中,使用 L1 损失进行监督训练,并按照其原始实现方式生成最终的视频。这种方法允许通过3DMM系数来驱动脸部渲染,从而生成具有更高真实度和自然度的视频。
实验对比
在实验结果中,研究人员使用了多个指标来评估他们提出的方法相对于其他方法的性能:
-
图像质量评估:使用 Frechet Inception Distance(FID)和 Cumulative Probability Blur Detection(CPBD)来评估生成图像的真实性和清晰度。
-
身份保留程度评估:使用 ArcFace 提取图像的身份嵌入,并计算源图像与生成帧之间身份嵌入的余弦相似度(CSIM)来评估身份的保留程度。
-
唇部同步和口型评估:评估了来自 Wav2Lip 的口型的感知差异,包括距离评分(LSE-D)和置信评分(LSE-C)。
-
头部运动评估:使用 Hopenet 提取的头部运动特征嵌入的标准偏差来评估生成头部运动的多样性,并计算 Beat Align Score 来评估音频和生成头部运动的一致性。
通过与其他最先进的谈话头像生成方法进行对比,包括 MakeItTalk、Audio2Head 和音频转表情生成方法(Wav2Lip、PC-AVS),研究人员使用公开的 checkpoint 权重进行评估。
实验结果显示,提出的方法在整体视频质量和头部姿势的多样性方面表现出更好的性能。同时,在唇部同步方面也与其他完全说话的头部生成方法相当。虽然研究人员发现唇语同步指标对音频过于敏感,可能导致不自然的唇部运动获得更好的分数,但该方法取得了与真实视频相似的分数,表明了其优势。
与其他方法相比,实验结果显示了提出的方法与原始目标视频的视觉质量非常相似,并且能够生成与预期的不同头部姿势非常相似的视频。相比之下,其他方法如 Wav2Lip 生成了模糊的半脸,PC-AVS 和 Audio2Head 难以保留源图像的身份,Audio2Head 只能生成正面说话的脸,而 MakeItTalk 和 Audio2Head 则由于二维扭曲而生成了扭曲的人脸视频。
项目安装
项目安装分三种方式,有从源码安装的,这个可以参考官方给的安装文档,在SD-webui里面当插件安装,还有一键整合包这三种模式:
1.源码安装方式
源码安装最好依赖在conda虚拟环境:
安装环境:
git clone https://github.com/OpenTalker/SadTalker.git
cd SadTalker
conda create -n sadtalker python=3.8
conda activate sadtalker
pip install torch==1.12.1+cu113 torchvision==0.13.1+cu113 torchaudio==0.12.1 --extra-index-url https://download.pytorch.org/whl/cu113
conda install ffmpeg
pip install -r requirements.txt
下载模型:
bash scripts/download_models.sh
头像合成:
python inference.py --driven_audio <audio.wav> \--source_image <video.mp4 or picture.png> \--enhancer gfpgan
全身合成:
python inference.py --driven_audio <audio.wav> \--source_image <video.mp4 or picture.png> \--result_dir <a file to store results> \--still \--preprocess full \--enhancer gfpgan
2.插件安装方式
启动SD-webui,这里使用的是秋叶大佬的一键整合包,找到插件,点安装,等待安装完成之后,重启webui:
安装完成了之后,在ui界面就有SadTalker这个插件菜单:
在sd插件路径下创建模型两个目录:
将下面4个模型文件下载到checkpoints文件夹下,再将下载的gfpgan 文件夹里面的文件放到SadTalker的gfpgan目录下:
3.一键整合包安装
下载整合包,点击启动:
之后在浏览器打开:http://127.0.0.1:7860/
错误解决:
Windows系统下报错: LLVM ERROR: Symbol not found: __svml_sqrtf8_ha
vml_dispmd.dll引起的错误,是由于numba库在windows系统下会根据系统变量路径自动调用svml_dispmd.dll可执行程序。解决方案是把系统路径下的该文件删除或重新命名,并添加一个新的系统变量NUMBA_DISABLE_INTEL_SVML=1
相关文章:

数字人解决方案— SadTalker语音驱动图像生成视频原理与源码部署
简介 随着数字人物概念的兴起和生成技术的不断发展,将照片中的人物与音频输入进行同步变得越来越容易。然而,目前仍存在一些问题,比如头部运动不自然、面部表情扭曲以及图片和视频中人物面部的差异等。为了解决这些问题,来自西安…...

HTML5语法总结
文章目录 一.HTML基本框架二.标题标签三.段落标签四.换行与水平线标签五.文本格式化标签(加粗、倾斜、下划线、删除线)六.图像标签扩展:相对路径,绝对路径与在线网址 七.超链接标签八.音频标签九.视频标签十.列表标签十一.表格标签扩展:表格结构标签合并…...

在github下载的神经网络项目,如何运行?
github网页上可获取的信息 在github上面,有一个requirements.txt文件,该文件说明了项目要求的python解释器的模块。 - 此外,还有一个README.md文件,用来说明项目的运行环境以及其他的信息。例如python解释器的版本是3.7、PyTorc…...

spring boot学习第十四篇:使用AOP编程
一、基本介绍 1,什么是 AOP (1)AOP 为 Aspect Oriented Programming 的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。 (2)利用 AOP…...

凯特信安云签解决方案
联合解决方案 凯特信安基于《电子签名法》设计“云签服务方案”,应用人脸识别、电子签章签名云服务等技术,支持多个自然人、多个企业等签名,满足各种移动终端签署的应用场景。面向不动产登记、工改系统等社会公众服务系统,针对自然…...

【xr806开发板使用】连接wifi例程实现
##开发环境 win10 WSL ##1、环境配置 参考:https://aijishu.com/a/1060000000287513 首先下载安装wsl 和ubuntu https://docs.microsoft.com/zh-cn/windows/wsl/install (1)安装repo: 创建repo安装目录: mkdir ~/…...

停车管理系统asp.net+sqlserver
停车管理系统asp.netsqlserver 说明文档 运行前附加数据库.mdf(或sql生成数据库) 主要技术: 基于asp.net架构和sql server数据库, 功能模块: 停车管理系统asp.net sqlserver 用户功能有菜单列表 我的停车记录 专…...

新增多项功能,龙讯旷腾开源机器学习力场PWMLFF 2024.3版本上线
人工智能与传统计算机模拟结合是当今科学计算的一大趋势,机器学习力场作为其中的一个重要方向,能够显著提升分子动力学模拟的精度和效率。PWMLFF是一套由龙讯旷腾团队开发,在 GNU 许可下的开源软件包,用于快速生成媲美从头算分子动力学(AIMD&…...

Docker常用命令练习
文章目录 Docker常用命令练习1.docker 基础命令2.镜像命令3.保存镜像4.加载镜像5.容器命令6.环境变量7. --rm8. --networkhost Docker常用命令练习 1.docker 基础命令 安装docker yum install docker启动docker systemctl start docker关闭docker systemctl stop docker重…...
Kafka(十)安全
目录 Kafka安全1 安全协议1.1 PALINTEXT1.2 SSL1.2.1 生成服务端证书1.2.2 生成客户端证书1.2.3 修改配置listenersadvertised.listenerslistener.security.protocol.mapinter.broker.listener.namesecurity.inter.broker.protocolcontrol.plane.listener.name 1.3 SASL_PLAINT…...

流畅的 Python 第二版(GPT 重译)(四)
第二部分:函数作为对象 第七章:函数作为一等对象 我从未认为 Python 受到函数式语言的重大影响,无论人们说什么或想什么。我更熟悉命令式语言,如 C 和 Algol 68,尽管我将函数作为一等对象,但我并不认为 Py…...

windows docker
写在前面的废话 最近在学习riscv的软件相关内容,倒是有别人的sg2042机器可以通过ssh使用,但是用起来太不方便了,经常断掉,所以想着在自己的机器上跑一跑riscv的操作系统。最常见的有两种方法吧,第一个就是qemu…...

中国1km分辨率逐月地表太阳辐射均值数据集(1960-2022)
地表太阳辐射是地球系统的主要驱动因子,驱动着地球系统的能量、水和碳循环。它是地表水文、生态、农业等陆表过程模拟的重要驱动数据,也是太阳能利用的重要指标。发展长时间序列、高分辨率的地表太阳辐射数据集,对于地表过程研究、太阳能电厂…...
Android中内存泄漏的检测,解决方案以及示例
单例模式使用不当引起的内存泄漏 1. 什么是内存泄漏? 安卓内存泄漏是因为长生命周期的对象持有了短生命周期的引用 导致本应该本回收的内存无法回收,导致内存的占用越来越大,最终可能导致程序崩溃或者系统资源不足等问题。 在Android开发中,内存泄漏是一个常见的问题,…...
Android静默安装一(Root版)
近期开发上线一个常驻app,项目已上线,今天随笔记录一下静默安装相关内容。我分三篇静默安装(root版)、静默安装(无障碍版)、监听系统更新、卸载、安装。先说说我的项目需求:要求app一直运行&…...

【漏洞复现】2.Apache Log4j2远程代码执行漏洞(CVE-2021-44228)复现及分析
文章目录 1. 预备知识2. 漏洞复现2.1 漏洞介绍2.2 漏洞原理分析2.2.1 Log4j介绍2.2.2 JNDI介绍2.2.3 利用原理 2.3 漏洞复现2.3.1 使用docker搭建复现环境2.3.2 DNSLog验证2.3.3 JNDI注入反弹shell 2.4 漏洞修复2.4.1修改log4j2版本2.4.2 临时解决方案 1. 预备知识 Apache是一个…...

Simulink|局部遮荫下光伏组件多峰值PSO-MPPT控制
目录 主要内容 1.光伏电池工程数学模型的输出特性程序 2.普通扰动观察法进行MPPT 3.基于粒子群寻优的多峰输出特性 4.PSO_MPPT仿真模型 下载链接 主要内容 在实际的光伏发电系统中,由于环境多变等因素的影响,当局部出现被遮挡情况时光伏阵列…...

今日早报 每日精选15条新闻简报 每天一分钟 知晓天下事 3月21日,星期四
每天一分钟,知晓天下事! 2024年3月21日 星期四 农历二月十二 1、 教育部:2024年高考全国统考6月7日、8日举行,将专项整治手机作弊、严打高考移民。 2、 我国出台首部节约用水行政法规《节约用水条例》,5月1日起施行。…...

蓝桥杯Python B组练习——完美的代价
一、题目 问题描述 回文串,是一种特殊的字符串,它从左往右读和从右往左读是一样的。小龙龙认为回文串才是完美的。现在给你一个串,它不一定是回文的,请你计算最少的交换次数使得该串变成一个完美的回文串。 交换的定义是…...

分布式游戏服务器
1、概念介绍 分布式游戏服务器是一种专门为在线游戏设计的大型系统架构。这种架构通过将游戏服务器分散部署到多台计算机(节点)上,实现了数据的分散存储和计算任务的并行处理。每个节点都负责处理一部分游戏逻辑和玩家请求,通过高…...

JavaSec-RCE
简介 RCE(Remote Code Execution),可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景:Groovy代码注入 Groovy是一种基于JVM的动态语言,语法简洁,支持闭包、动态类型和Java互操作性,…...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销,平衡网络负载,延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...
【论文笔记】若干矿井粉尘检测算法概述
总的来说,传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度,通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)
🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...

NFT模式:数字资产确权与链游经济系统构建
NFT模式:数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新:构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议:基于LayerZero协议实现以太坊、Solana等公链资产互通,通过零知…...
Linux离线(zip方式)安装docker
目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1:修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本:CentOS 7 64位 内核版本:3.10.0 相关命令: uname -rcat /etc/os-rele…...

安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖
在Vuzix M400 AR智能眼镜的助力下,卢森堡罗伯特舒曼医院(the Robert Schuman Hospitals, HRS)凭借在无菌制剂生产流程中引入增强现实技术(AR)创新项目,荣获了2024年6月7日由卢森堡医院药剂师协会࿰…...
IP如何挑?2025年海外专线IP如何购买?
你花了时间和预算买了IP,结果IP质量不佳,项目效率低下不说,还可能带来莫名的网络问题,是不是太闹心了?尤其是在面对海外专线IP时,到底怎么才能买到适合自己的呢?所以,挑IP绝对是个技…...
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...
C++课设:简易日历程序(支持传统节假日 + 二十四节气 + 个人纪念日管理)
名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《编程项目实战》 目录 一、为什么要开发一个日历程序?1. 深入理解时间算法2. 练习面向对象设计3. 学习数据结构应用二、核心算法深度解析…...