数字人解决方案— 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

学习一个能够从音频中准确生成表情系数的通用模型是非常困难的,原因主要有两点:

  1. 音频到表情不是对不同人物的一对一的映射任务:不同个体对相同的语音输入可能会产生不同的面部表情反应。这是由于个体之间的生理特征、情感状态、习惯性表现等因素的差异导致了相同音频信号引发不同表情的情况。

  2. 表情系数中存在与音频相关的动作,这会影响到预测的准确性:音频信号中的语调、情感内容以及说话速度等因素都可能影响到面部表情的生成。因此,从音频中预测表情时,需要考虑如何有效地捕捉和建模这些与音频相关的动作,以提高预测的准确性和鲁棒性。

为了应对这些挑战,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系数来驱动脸部渲染,从而生成具有更高真实度和自然度的视频。

实验对比

在实验结果中,研究人员使用了多个指标来评估他们提出的方法相对于其他方法的性能:

  1. 图像质量评估:使用 Frechet Inception Distance(FID)和 Cumulative Probability Blur Detection(CPBD)来评估生成图像的真实性和清晰度。

  2. 身份保留程度评估:使用 ArcFace 提取图像的身份嵌入,并计算源图像与生成帧之间身份嵌入的余弦相似度(CSIM)来评估身份的保留程度。

  3. 唇部同步和口型评估:评估了来自 Wav2Lip 的口型的感知差异,包括距离评分(LSE-D)和置信评分(LSE-C)。

  4. 头部运动评估:使用 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

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C# winform修改背景图 控件双向绑定 拖拽打开图片

修改背景图 说明 这里我准备基于百度飞桨PaddleSeg项目的人像分割模块做一个人像抠图&#xff0c;这里顺便用上了双向绑定和图片拖拽打开。 下面就是示例&#xff1a; 用颜色替换 用背景图替换 保存成功后的图片 一、使用百度飞桨PaddleSeg //初始化 引擎engine new Padd…

使用ansible批量修改操作系统管理员账号密码

一、ansible server端配置 1、对于Linux主机配置免密登录ssh-copy-id -i ~/.ssh/id_rsa.pub rootremote_ip 2、在/etc/ansible/hosts文件中添加相应主机IP 3、对于Windows主机需要在/etc/ansible/hosts文件中进行以下配置 192.168.83.132 ansible_ssh_useradministrator an…

【AI】Ubuntu系统深度学习框架的神经网络图绘制

一、Graphviz 在Ubuntu上安装Graphviz&#xff0c;可以使用命令行工具apt进行安装。 安装Graphviz的步骤相对简单。打开终端&#xff0c;输入以下命令更新软件包列表&#xff1a;sudo apt update。之后&#xff0c;使用命令sudo apt install graphviz来安装Graphviz软件包。为…

mysql笔记:24. 主从同步环境搭建

文章目录 主从同步的基本原理主从同步的搭建步骤1. 环境准备2. 配置主服务器&#xff08;Master&#xff09;3. 配置从服务器&#xff08;Slave&#xff09;4. 测试配置5. 常见故障5.1. 主从服务器上的MySQL版本不一致导致失败&#xff1f;5.2. Slave_IO_Running状态异常&#…

Mybatis之自定义映射resultMap

学习的最大理由是想摆脱平庸&#xff0c;早一天就多一份人生的精彩&#xff1b;迟一天就多一天平庸的困扰。各位小伙伴&#xff0c;如果您&#xff1a; 想系统/深入学习某技术知识点… 一个人摸索学习很难坚持&#xff0c;想组团高效学习… 想写博客但无从下手&#xff0c;急需…

深度学习之本地部署大模型ChatGLM3-6B【大模型】【报错】

文章目录 0.前言1.模型下载2.配置环境2.1 下载项目文件2.2 配置环境 3.开始推理4.总结 0.前言 本博客将介绍ChatGLM3-6B大模型在Ubuntu上的本地部署教程 1.模型下载 由于毛毛张的服务器服务无法科学上网&#xff0c;所以模型的相关文件必须现在本地下载好&#xff0c;再上传到…

抖店怎么入驻?2024最新入驻流程,新手必看!

我是电商珠珠 最近&#xff0c;很多新手都来问我&#xff0c;入驻抖店的话有没有什么学习资料啊&#xff0c;入驻都需要什么资质啊等等&#xff0c;我也整理了一份&#xff0c;新手入门必备资料&#xff0c;需要的可以来找我拿。 下面我来说说抖店的入驻资质&#xff0c;以及…

C++ —— 内存管理

目录 1. C内存分布 2. C 内存管理方式 2.1 new 和 delete 操作内置类型 2.2 new 和 delete 操作自定义类型 3. operator new与operator delete函数 4. new和delete的实现原理 5. malloc/free 和 new/delete 的区别 1. C内存分布 首先看一段代码&#xff1a; int globalV…

Vue 3响应式系统详解:ref、toRefs、reactive及更多

&#x1f31f; 前言 欢迎来到我的技术小宇宙&#xff01;&#x1f30c; 这里不仅是我记录技术点滴的后花园&#xff0c;也是我分享学习心得和项目经验的乐园。&#x1f4da; 无论你是技术小白还是资深大牛&#xff0c;这里总有一些内容能触动你的好奇心。&#x1f50d; &#x…

停车管理系统asp.net+sqlserver

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

赋能数据收集:从机票网站提取特价优惠的JavaScript技巧

背景介绍 在这个信息时代&#xff0c;数据的收集和分析对于旅游行业至关重要。在竞争激烈的市场中&#xff0c;实时获取最新的机票特价信息能够为旅行者和旅游企业带来巨大的优势。 随着机票价格的频繁波动&#xff0c;以及航空公司和旅行网站不断推出的限时特价优惠&#xff…

汽车KL15、KL30、ACC的区别

文章目录 前言一、KL30是什么&#xff1f;二、KL15是什么&#xff1f;KL15信号的演变 三、为啥用KL15、KL30呢&#xff1f; 前言 相信刚接触汽车电子的伙伴都会有一个疑惑&#xff0c;什么是KL15?什么是KL30? 内心一脸懵逼…… KL是德语Klemme的缩写&#xff0c;指的是ECU的…

【Flutter 面试题】Flutter如何进行本地存储和缓存数据?

【Flutter 面试题】Flutter如何进行本地存储和缓存数据&#xff1f; 文章目录 写在前面口述回答补充说明实际案例完整代码示例运行结果详细说明 写在前面 &#x1f64b; 关于我 &#xff0c;小雨青年 &#x1f449; CSDN博客专家&#xff0c;GitChat专栏作者&#xff0c;阿里云…

两个免费的wordpress主模板

wordpress免费网站主题 蓝色高端大气上档次的wordpress免费网站主题&#xff0c;首页大图wordpress模板。 https://www.wpniu.com/themes/31.html WP免费模板 用粉色高端大气上档次的WP免费模板&#xff0c;建个网站也不错的。 https://www.wpniu.com/themes/16.html

npm ERR! code ELIFECYCLE 解决办法

npm ERR! code ELIFECYCLE 解决办法 问题分析可能原因解决方法 问题 使用Vue脚手架构建项目的时候出现npm ERR! code ELIFECYCLE 分析可能原因 vue-cli-service 并没有加入到环境变量里 解决方法 ./node_modules/.bin/vue-cli-service serve

Day74:WEB攻防-机制验证篇重定向发送响应状态码跳过步骤验证码回传枚举

目录 验证码突破-回传显示&规律爆破 某目标回显显示 某APP验证码爆破 验证目标-重定向用户&重定向发送 某CMS重定向用户 某CMS重定向发送 验证逻辑-修改响应包&跳过步骤URL 某APP修改响应包 某APP跳过步骤URL 实战SRC验证逻辑挖掘分享案例 短信验证码回…

SpringCloud Alibaba Nacos 服务注册和配置中心

一、前言 接下来是开展一系列的 SpringCloud 的学习之旅&#xff0c;从传统的模块之间调用&#xff0c;一步步的升级为 SpringCloud 模块之间的调用&#xff0c;此篇文章为第十二篇&#xff0c;即介绍 SpringCloud Alibaba Nacos 服务注册和配置中心。 二、Nacos 简介 2.1 为…

HarmonyOS(鸿蒙)应用开发——(一)

目录 1 创建hellopro项目 2 了解ArkTS 3 了解ArkTS的组件 4 组件介绍 4.1 常用基础组件&#xff1a; 4.1.1 Text 4.1.2 Button 4.1.3 TextInput 4.2 容器组件 4.2.1 Column 4.2.2 Row 5 案例——实现一个简易登录页面 5.1 在实现预览效果之前&#xff0c;我们…

MCU技术的创新浪潮与产业变革

MCU技术的创新浪潮与产业变革 一、MCU技术的创新发展 MCU&#xff0c;即微控制器&#xff0c;作为现代电子设备的核心部件&#xff0c;一直在不断地创新与发展。随着科技的进步&#xff0c;MCU的性能得到了极大的提升&#xff0c;功能也越来越丰富。从8位到32位&#xff0c;再…

【SpringMVC】知识汇总

SpringMVC 短暂回来&#xff0c;有时间就会更新博客 文章目录 SpringMVC前言一、第一章 SpingMVC概述二、SpringMVC常用注解1. Controller注解2. RequestMapping注解3. ResponseBody注解4. RequestParam5. EnableWebMvc注解介绍6. RequestBody注解介绍7. RequestBody与RequestP…