AI数字人打造之sadtalker让照片开口说话

news2024/11/26 0:50:46

1 sadtalker介绍

        西安交通大学也开源了人工智能SadTalker模型,通过从音频中学习生成3D运动系数,使用全新的3D面部渲染器来生成头部运动,可以实现图片+音频就能生成高质量的视频。

        论文地址:Learning Realistic 3D Motion Coefficients

       通过人脸图像和一段语音音频生成说话的头部视频仍然包含许多挑战。即不自然的头部运动、扭曲的表情和身份修改。研究团队认为这些问题主要是因为从耦合的 2D 运动场中学习。另一方面,明确使用 3D 信息也存在表情僵硬和视频不连贯的问题。

        为了学习真实的运动系数,研究人员显式地对音频和不同类型的运动系数之间的联系进行单独建模:通过蒸馏系数和3D渲染的脸部,从音频中学习准确的面部表情;通过条件VAE设计PoseVAE来合成不同风格的头部运动。

        最后使用生成的三维运动系数被映射到人脸渲染的无监督三维关键点空间,并合成最终视频。音频可以是英文、中文、歌曲,视频里的人物还可以控制眨眼频率!

        开源代码地址:github地址

2 模型介绍

        “用语音驱动静态照片”技术在数字人创作、视频会议等多个领域都迫切需要,但目前来说这仍然是一项非常有挑战性的任务。之前的工作主要集中在生成“唇部运动”,因为嘴唇的动作与语音之间的关系最强,其他工作也在尝试生成其他相关运动(如头部姿势)的人脸视频,不过生成视频的质量仍然非常不自然,并受到偏好姿势、模糊、身份修改和面部扭曲的限制。另一种流行的方法是基于latent的人脸动画,主要关注在对话式人脸动画中特定类别的运动,同样很难合成高质量的视频,因为虽然三维面部模型中包含高度解耦的表征,可以用来单独学习面部不同位置的运动轨迹,但仍然会生成不准确的表情和不自然的运动序列。

        基于上述观察结果,研究人员提出了SadTalker(Stylized Audio-Driven Talking-head),通过隐式三维系数modulation的风格化音频驱动的视频生成系统。

        

        为了实现这一目标,研究人员将3DMM的运动系数视为中间表征,并将任务分为两个主要部分(表情和姿势),旨在从音频中生成更真实的运动系数(如头部姿势、嘴唇运动和眼睛眨动),并单独学习每个运动以减少不确定性。最后通过一个受face-vid2vid启发设计的3D感知的面部渲染来驱动源图像。

(1)3D面部

        因为现实中的视频都是在三维环境中拍摄的,所以三维信息对于提高生成视频的真实性至关重要;不过之前的工作很少考虑三维空间,因为只从一张平面图像很难获得原始的三维稀疏,并且高质量的面部渲染器也很难设计。

        受最近的单图像深度三维重建方法的启发,研究人员将预测的三维形变模型(3DMMs)的空间作为中间表征。在3DMM中,三维脸部形状S可以被解耦为:

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

        即,从驱动的音频中单独学习头部姿势ρ=[r, t]和表情系数β,然后使用这些运动系数被隐式地调制面部渲染用于最终的视频合成。

(2)通过音频生成运动稀疏

        三维运动系数包含头部姿势和表情,其中头部姿势是全局运动,而表情是相对局部的,所以完全学习所有的系数会给网络带来巨大的不确定性,因为头部姿势与音频的关系相对较弱,而嘴唇的运动则是与音频高度关联的。所以SadTalker使用下面PoseVAE和ExpNet分别生成头部姿势和表情的运动。

(3)ExpNet

        学习到一个可以「从音频中产生准确的表情系数」的通用模型是非常困难的,原因有二:

1)音频到表情(audio-to-expression)不是对不同人物的一对一的映射任务;

2)表情系数中存在一些与音频相关的动作,会影响到预测的准确性。

        ExpNet的设计目标就是为了减少这些不确定性;至于人物身份问题,研究人员通过第一帧的表情系数将表情运动与特定的人物联系起来。

        为了减少自然对话中其他面部成分的运动权重,通过Wav2Lip和深度三维重建的预训练网络,只使用嘴唇运动系数(lip motion only)作为系数目标。至于其他细微的面部运动(如眼睛眨动)等,可以在渲染图像上的额外landmark损失中引入。

(4)PoseVAE

        研究人员设计了一个基于VAE的模型以学习谈话视频中真实的、身份相关(identity-aware)的风格化头部运动。

        在训练中,使用基于编码器-解码器的结构对固定的n个帧进行姿势VAE训练,其中编码器和解码器都是两层MLP,输入包含一个连续的t帧头部姿势,将其嵌入到高斯分布;在解码器中,网络从采样分布中学习生成t帧姿势。

        需要注意的是,PoseVAE并没有直接生成姿势,而是学习第一帧的条件姿势的残差,这也使得该方法在测试中能在第一帧的条件下生成更长、更稳定、更连续的头部运动。根CVAE,PoseVAE中还增加了相应的音频特征和风格标识作为rhythm awareness和身份风格的条件。模型使用KL散度来衡量生成运动的分布;使用均方损失和对抗性损失来保证生成的质量。

(5)3D-aware面部渲染

        在生成真实的三维运动系数后,研究人员通过一个精心设计的三维图像动画器来渲染最终的视频。最近提出的图像动画方法face-vid2vid可以隐含地从单一图像中学习3D信息,不过该方法需要一个真实的视频作为动作驱动信号;而这篇论文中提出的脸部渲染可以通过3DMM系数来驱动。研究人员提出mappingNet来学习显式3DMM运动系数(头部姿势和表情)和隐式无监督3D关键点之间的关系。

        mappingNet通过几个一维卷积层建立,类似PIRenderer一样使用时间窗口的时间系数进行平滑处理;不同的是,研究人员发现PIRenderer中的人脸对齐运动系数将极大地影响音频驱动的视频生成的运动自然度,所以mappingNet只使用表情和头部姿势的系数。

        训练阶段包含两个步骤:首先遵循原论文,以自监督的方式训练face-vid2vid;然后冻结外观编码器、canonical关键点估计器和图像生成器的所有参数后,以重建的方式在ground truth视频的3DMM系数上训练mappingNet进行微调。在无监督关键点的域中使用L1损失进行监督训练,并按照其原始实现方式给出最终生成的视频。

3 实验效果

         为了证明该方法的优越性,研究人员选取了Frechet Inception Distance(FID)和Cumulative Probability Blur Detection(CPBD)指标来评估图像的质量,其中FID主要评估生成帧的真实性,CPBD评估生成帧的清晰度。

        为了评估身份保留程度,使用ArcFace来提取图像的身份嵌入,然后计算源图像和生成帧之间身份嵌入的余弦相似度(CSIM)

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

        在头部运动的评估中,使用Hopenet从生成的帧中提取的头部运动特征嵌入的标准偏差来计算生成头部运动的多样性;计算Beat Align Score来评估音频和生成头部运动的一致性。

        在对比方法中,选取了几种最先进的谈话头像生成方法,包括MakeItTalk、Audio2Head和音频转表情生成方法(Wav2Lip、PC-AVS),使用公开的checkpoint权重进行评估。

        从实验结果中可以看出,文中提出的方法可以展现出更好的整体视频质量和头部姿势的多样性,同时在唇部同步指标方面也显示出与其他完全说话的头部生成方法相当的性能。

        研究人员认为,这些唇语同步指标对音频太敏感了,以至于不自然的唇部运动可能会得到更好的分数,不过文中提出的方法取得了与真实视频相似的分数,也表明了该方法的优势。

 

        不同方法生成的视觉结果中可以看到,该方法与原始目标视频的视觉质量非常相似,而且与预期的不同头部姿势也非常相似。 

4 安装部署与使用:

(1)annoconda环境安装

annoconda环境安装与使用详见:环境安装

(2)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

(3)预训练模型下载

mkdir ./checkpoints  

#### download the new links.
wget -nc https://github.com/OpenTalker/SadTalker/releases/download/v0.0.2-rc/mapping_00109-model.pth.tar -O  ./checkpoints/mapping_00109-model.pth.tar
wget -nc https://github.com/OpenTalker/SadTalker/releases/download/v0.0.2-rc/mapping_00229-model.pth.tar -O  ./checkpoints/mapping_00229-model.pth.tar
wget -nc https://github.com/OpenTalker/SadTalker/releases/download/v0.0.2-rc/SadTalker_V0.0.2_256.safetensors -O  ./checkpoints/SadTalker_V0.0.2_256.safetensors
wget -nc https://github.com/OpenTalker/SadTalker/releases/download/v0.0.2-rc/SadTalker_V0.0.2_512.safetensors -O  ./checkpoints/mapping_00109-model.safetensors


### enhancer 
mkdir -p ./gfpgan/weights
wget -nc https://github.com/xinntao/facexlib/releases/download/v0.1.0/alignment_WFLW_4HG.pth -O ./gfpgan/weights/alignment_WFLW_4HG.pth 
wget -nc https://github.com/xinntao/facexlib/releases/download/v0.1.0/detection_Resnet50_Final.pth -O ./gfpgan/weights/detection_Resnet50_Final.pth 
wget -nc https://github.com/TencentARC/GFPGAN/releases/download/v1.3.0/GFPGANv1.4.pth -O ./gfpgan/weights/GFPGANv1.4.pth 
wget -nc https://github.com/xinntao/facexlib/releases/download/v0.2.2/parsing_parsenet.pth -O ./gfpgan/weights/parsing_parsenet.pth 

(4)视频生成

通过图片+语音生成视频:

python inference.py --driven_audio data/sample.wav --source_image data/sample.png

 通过视频片段+语音生成视频

python inference.py --driven_audio data/sample.wav --source_image data/sample.mp4

(5)通过参数对生成的视频进行控制

--preprocess full 表示完整图片

--still 可以减少头部运动

--enhancer gfpgan

参数1是保留全身,如果不加这个参数,则视频中只剩头部

参数2是减少头部晃动,头部晃动是会和脖子的连接部位脱节

参数3是基于gfpgan对视频进行增强

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

chatgpt赋能python:Python屏蔽语句的重要性

Python屏蔽语句的重要性 Python是一种高级程序设计语言,被认为是开发Web应用程序、数据科学和人工智能的最佳语言之一。在编写Python程序时,每个人都会遇到需要屏蔽语句的情况。在本文中,我们将详细介绍Python屏蔽语句的重要性和用法。 什么…

chatgpt赋能python:Python建模仿真:优秀的工具与技巧

Python建模仿真:优秀的工具与技巧 在现代科技时代,建模仿真是许多不同行业的核心部分,帮助工程师和科学家研究解决许多问题。Python作为一种简单易学且强大的语言,已经被广泛应用于建模仿真领域。 Python的优点 Python在建模仿…

用Python进行数学建模(一)

一、导入数据 1.直接赋值 2.读取 Excel 文件 3.代码示例 import pandas as pd# 读取数据文件 def readDataFile(readPath): # readPath: 数据文件的地址和文件名try:if (readPath[-4:] ".csv"):dfFile pd.read_csv(readPath, header0, sep",") # 间隔…

chatgpt赋能python:Python嵌入C:一个高效的编程技巧

Python嵌入C:一个高效的编程技巧 作为一名有10年Python编程经验的工程师,我发现在某些情况下,Python嵌入C是一种高效的编程技巧。这种技巧可以使您利用Python的简洁性和高级功能,同时仍然保持程序的执行速度。在本文中&#xff0…

chatgpt赋能python:Python对接硬件:从入门到精通

Python对接硬件:从入门到精通 Python是一门极为强大的编程语言,它不只是用来进行数据分析和Web开发的,也可以用来对接各种硬件设备。这是因为Python具有简单易学,语法简洁,库众多的优点。 什么是Python对接硬件 Pyt…

通过AI工具(ChatGPT接口)生成一字未改的论文,查重率4.2%,可以直接当作论文使用

论文题目:基于AIOT技术的能源控制器的设计以及应用 查重结果:4.2% AI工具国内体验,关注:码视野,回复关键字:1002 一、引言 随着全球经济的快速发展和人口的增长,对能源的需求日益增加。然而&…

nodejs环境变量配置问题记录

问题一:Error: EPERM: operation not permitted, open ‘D:\Program Files\nodejs\node_cache\_cacache\tmp\bccd20 这个问题主要是没有权限导致的。 问题二:使用node命令提示 ‘node‘ 不是内部或外部命令,也不是可运行的程序 这个错误是环…

chatgpt赋能python:Python如何将文件另存为:让您的文件管理更便捷

Python如何将文件另存为:让您的文件管理更便捷 随着数字化时代的来临,文件管理已经成为我们日常工作不可缺少的一部分。当涉及到大量的文件管理时,手动操作可能会浪费大量的时间和精力。 在这种情况下,自动化的解决方案将会是很有…

【玩转Linux操作】用户管理(命令讲解配上样例解释)

🎊专栏【玩转Linux操作】 🍔喜欢的诗句:更喜岷山千里雪 三军过后尽开颜。 🎆音乐分享【Counting Stars 】 欢迎并且感谢大家指出小吉的问题🥰 文章目录 🍔添加用户⭐命令🎈useradd 用户名 ⭐演示…

【日志解析】【启发式】Drain:一种用于日志解析的深度解析树

Drain:An Online Log Parsing Approach with Fixed Depth Tree 文章目录 Drain:An Online Log Parsing Approach with Fixed Depth Tree1 论文出处2 背景2.1 背景介绍2.2 针对问题2.3 创新点 3 主要设计思路3.1 Drain整体结构3.2 具体步骤 4 实验设计5 个…

pycharm利用快捷键,快速注释多行代码的方法分享

最近在pycharm的新手学习群里,发现有些小伙伴依然在“手工”进行代码的注释,效率较低。 下面分享pycharm利用快捷键,快速注释多行代码的方法。可以帮助pycharm初学者加倍提升代码的注释效率。 代码注释快捷键 pycharm代码注释的快捷键为 c…

Anaconda 下载安装

文章目录 Anaconda下载Anaconda安装 Anaconda下载 进入官网 https://www.anaconda.com/ ,往下滑动,找到下载地址 2. 根据自己的系统,选择相应的安装包 直接从官网下载的话,下载速度较慢,可以使用国内镜像快速下载 百…

chatgpt赋能python:Python-基础知识:如何在Python中建立一个文件

Python-基础知识:如何在Python中建立一个文件 在Python中,创建文件是一个非常常见和重要的基础操作。Python提供了多种方法来创建文件,包括使用内置函数和第三方库。在本文中,我们将探讨如何使用Python建立一个文件。 使用内置函…

Linux启动nginx

Linux启动nginx 一、下载并解压安装包 1.首先我们需要安装nginx所需要的依赖 yum install pcre pcre-devel gcc openssl openssl-devel zlib zlib-devel2.在/usr/local/下创建文件nginx文件 mkdir /usr/local/nginx/3.进入/usr/local/nginx/ cd /usr/local/nginx/4.在网上…

TensorBoard快速入门(Pytorch使用TensorBoard)

文章目录 TensorBoard 简介TensorBoard 界面介绍TensorBoard 安装TensorBoard 运行Pytorch 使用 TensorBoardGoogle Colab中使用 TensorboardTensor折线图(Scalars) TensorBoard 简介 TensorBoard 是Google开发的一个机器学习可视化工具。其主要用于记录…

【1】如何安装和卸载tensorflow-CPU和GPU各版本-简单清晰版

文章目录 前言一、tensorflow-cpu指定版本的卸载二、tensorflow-gpu指定版本的卸载三、tensorflow-cpu指定版本的安装1、创建虚拟环境2、激活虚拟环境3、安装指定版本的tensorflow 四、tensorflow-gpu指定版本的安装安装CUDA安装cuDNN安装tensorflow_gpu-2.1.0测试tensorflow安…

SparkSQL优化

执行计划 查看执行计划 explain():只展示物理执行计划。(使用较多)explain(mode"simple"):只展示物理执行计划。explain(mode“extended”):展示物理执行计划和逻辑执行计划。explain(mode"codegen&q…

【数据结构与算法】线性表 01 链表

一、线性表1.1 概念与特点1.2 线性表的存储结构1.3 常见操作1.4 应用场景 二、链表2.1 链表简介2.2 单向链表(单链表)2.21 基本概念2.22 单链表基本操作2.23 C语言实现 2.3 双向链表2.4 循环链表 一、线性表 线性表是一种最基本、最简单的数据结构&…

Windows下安装及使用pip

首先查看Windows系统下是否安装有pip。终端执行下面命令: pip list # 查看Python中安装了哪些第三方库如果出现 ModuleNotFoundError: No module named ‘pip‘ 则说明系统里未安装成功pip。 那么可以先把pip安装上。安装pip可以选择 在线安装 或者 离线安装 两…

网络配置心得-从switch网络加速出发

背景: 在PC上玩战地5饱受外挂毒打,早想接触主机游戏又没有机会。最近突然有个好机遇带我入坑switch,那肯定得赶紧体验一下啊~~ 被安利的游戏是斯普拉遁3(splatoon3),是一款switch独占的第三人称射击游戏&a…