数字人解决方案——EMAGE面部加肢体动画实现从音频生成数字人表情与动作

概述

AI数字人面部与肢体的驱动算法是数字人研发中至关重要的一环,它能够有效降低VR Chat、虚拟直播和游戏NPC等应用场景中的成本。随着技术的发展,基于语音的面部、肢体和手部动作生成模型已经逐步成熟并得到广泛应用。然而,当尝试将这些独立模型生成的动画结果进行混合时,往往会导致整体动画效果的不协调。为了解决这一问题,研究人员开始探索采用统一的框架来同步生成面部表情和肢体动作,以期达到更自然、协调的动画效果。

尽管在面部表情和肢体动作的生成方面,研究社区已经分别建立了一些统一的数据标准,例如FLAME模型用于面部表情,AMASS模型用于肢体动作,但这些基线模型大多是在独立的数据集上进行训练和评估的,缺乏一个全身统一的数据标准和模型。为了填补这一空白,东京大学、清华大学和德国马普所的研究人员合作提出了EMAGE框架,这是一个能够从音频和动作掩码中生成包括面部、局部肢体、手部和全局运动在内的全身动作的框架。EMAGE的提出,为数字人研发领域带来了新的突破,有望进一步提升AI数字人在各种应用场景中的表现力和协调性。

EMAGE面部加肢体动画实现从音频生成数字人表情与动作

论文地址:https://arxiv.org/abs/2401.00374
项目主页:https://pantomatrix.github.io/EMAGE/
hugging face space 链接:https://huggingface.co/spaces/H-Liu1997/EMAGE

简介

EMAGE研究论文通过结合BEAT2数据集,提出了一种创新的方法,使用户能够自定义动作输入,并在预定义的时序与空间动作输入方面展现出灵活性。这种方法最终能够生成与音频同步的完整全身动作效果,其输出的全身动作效果达到了业界的领先水平(SOTA)。

BEAT2,全称为BEAT-SMPLX-FLAME,是一个结合了语音和基于网格的动作数据的全身数据集,包含了长达60小时的数据。这个数据集将SMPLX模型中的肢体参数与FLAME模型中的面部参数相结合,同时解决了头部、颈部和手指等部位的运动模型问题。BEAT2为研究社区提供了一个标准化且高质量的3D动作捕捉数据集,极大地促进了数字人动作生成技术的研究和应用。

通过EMAGE框架和BEAT2数据集的结合,研究人员能够更精确地生成与音频同步的全身动作,这不仅提高了动作生成的自然度和真实感,也为数字人在虚拟环境中的交互和表现提供了更多可能性。这种技术的发展对于推动数字人在VR、虚拟直播、游戏和其他交互式应用中的实际应用具有重要意义。

图片

图片

在EMAGE框架的研究中,通过对比不同方法生成的动作和表情,可以明显看出精调后的结果在多个方面具有优势。以下是对上述描述的详细解释:

:在这一比较中,我们可以看到,经过精细调整(Refined Moshed)的SMPLX肢体参数结果,在颈部弯曲、头颈形状比例以及手指弯曲等方面都展现出更高的准确性和细节表现。与BEAT数据集中的原始骨架数据(BEAT)、使用AutoRegPro重定向的数据(Retargeted)以及Mosh++的初始结果(Moshed)相比,精调后的结果更加逼真和自然。

:在表情权重的可视化比较中,原始BEAT数据集中的混合表情权重与ARKit的基础脸部模板(BEAT)、基于线性Wrapped的方法(Wrapped Optimum)以及人工PCA映射FACs的表情优化(Handcraft Optimum)进行了对比。最终,基于FLAME混合表情的人工映射优化实现了更为准确的唇动细节和自然对话时的口型。

EMAGE框架在训练过程中,利用了肢体动作掩码的先验知识,以提高模型的推理性能。通过使用音频与动作掩码的转换器,EMAGE有效地提升了音频生成动作和动作掩码下的动作重建的联合训练效率。这意味着网络能够更有效地将音频和肢体动作的提示帧编码进模型。此外,EMAGE还自适应地结合了音频的节奏和内容的语音特征,并使用组合式的VQ-VAEs(Vector Quantized-Variational AutoEncoders)来增强身体各个部位(共计四种)结果的真实性和多样性。这种结合了先验知识和自适应特征的方法,使得EMAGE在生成与音频同步的全身动作方面达到了业界领先水平。

EMAGE 生成肢体动画的例子:

图片

从上到下依次为:真实数据、不使用肢体提示帧生成的数据、使用肢体提示帧生成的数据、肢体提示帧的可视化:

图片
EMAGE框架的强大功能在于其能够生成多样化、具有语义关联且与音频同步的肢体动作。这种能力使得EMAGE在创建数字人物时能够根据具体的语境和音频输入做出自然而合理的动作反应。例如,当接收到“spare time”这个提示词时,EMAGE能够理解其含义并生成相应的动作,如同时举起双手,表现出轻松和闲暇的状态。而面对“hike in nature”这样的描述,EMAGE则能够采取更加放松和符合户外活动的动作,如模拟徒步行走的姿态。

此外,EMAGE框架的灵活性体现在其能够接受非音频同步的肢体提示帧。这意味着EMAGE可以根据任意帧或关节的状态来引导生成的动作,从而实现更精确的动作控制。例如,如果需要数字人物重复特定的动作,如举起双手,或者需要在动作序列中改变行走方向,EMAGE都能够根据这些非音频同步的提示帧来生成相应的动作。

需要注意的是,尽管第三列的生成结果中的关节提示(以灰色网格表示)与第四行肢体提示帧中的关节(以绿色网格表示)在视觉上可能不一致,但这并不影响EMAGE根据这些提示生成准确和自然的动作。这种不一致性可能是由于不同帧或关节状态的表示方式不同,或者是由于EMAGE在处理和生成动作时采用了不同的算法和模型。总之,EMAGE的这种灵活性和多样性使其成为创建丰富、动态和交互式数字人物的理想工具。

下图是 EMAGE 生成面部动画的结果:

图片

EMAGE 生成的面部运动与基线模型的对比。

在AI数字人技术领域,生成逼真的面部表情和全身动作是一个重要且具有挑战性的任务。不同的方法针对这一任务的解决方案各有侧重,其中包括脸部单独生成的方法和全身整体动作生成方法。

脸部单独生成的方法,如faceformer和codetalker,专注于生成高质量的面部表情和口型。这些方法通常利用深度学习模型来理解和模拟人类面部的微妙变化,以及如何根据语音或其他输入信号生成相应的面部动作。在BEAT2数据集中,codetalker表现出了其独特的优势。尽管从技术角度来看,codetalker的MSE(均方误差)可能比真实数据更高,这意味着在数值上它可能更偏离真实数据,但从主观上看,其生成的面部表情和口型更加自然和逼真。这是因为codetalker具备离散的面部先验知识,这使得它能够更好地捕捉和表达人类面部的复杂性。

另一方面,全身整体动作生成方法,如Habibie et al.和Talkshow,旨在从整体上生成协调一致的全身动作。这些方法不仅关注面部表情,还包括肢体动作和整体姿态,以实现更全面的数字人动画效果。

EMAGE框架则结合了这两种方法的优点,利用离散的面部先验知识和动作掩码的肢体提示帧,实现了精准的唇动性能。这意味着EMAGE不仅能够生成逼真的面部表情,还能够根据音频输入生成协调的全身动作。通过这种方式,EMAGE能够提供更加丰富和真实的数字人体验,无论是在面部细节还是全身动作上都能够达到更高的标准。这种结合面部和肢体动作生成的方法,为数字人技术的发展提供了新的可能性,并有望在未来的应用中发挥重要作用。

模型框架

图片

EMAGE 是一个支持用户自定义输入,带有动作掩码与音频输入的全身动作建模框架,使用新提出的数据集 BEAT2(BEAT-SMPLX-FLAME),生成面部表情、局部身体动作、手部动作和全局平移运动时,是以音频与动作掩码作为基准联合训练。灰色身体部位是用户输入的肢体提示帧,蓝色表示整体的网络输出。

算法细节

图片

EMAGE 采取了两种训练路线:动作掩码重建(MaskedGesture2Gesture,即 MG2G)和使用音频的动作生成(Audio2Gesture,即 A2G)。

MG2G:通过基于 Transformer 的动作的时空编码器与基于交叉注意力的动作解码器,来对肢体提示帧进行编码。

A2G:利用输入的肢体提示与独立的的音频编码器,对于经过预训练的面部和肢体潜征进行解码。

可切换的交叉注意力层在上述过程中作为关键组件,对于合并肢体提示帧和音频特征起重要作用。此融合使特征被有效地解耦并可以被用于动作的解码。动作潜征被重建之后,EMAGE 使用预训练的 VQ-Decoder 来对于面部和局部肢体运动进行解码。

此外,预训练的全局运动预测器也被用来估计全身的全局平移,使得模型生成逼真并且连贯动作的能力得到加强。

CRA 和 VQ-VAEs 的与训练模型的细节

图片

左图:内容节奏注意力模块 (CRA) 将音频的节奏(初始语音和振幅)与内容(来自文本的预训练词条嵌入)自适应地相融合。这种架构可以让特定帧更有效地基于音频的内容或节奏,生成更加具有语义的动作。

右图:通过对于面部、肢体上半身、手部和肢体下半身的分别重建,来预训练四个组合式 VQ-VAEs 模型,以更加明示地将与音频无关的动作相解耦。

前向传播网络对比

图片

直接融合模块 (a) : 将音频特征与未精调的肢体特征合并,仅基于位置嵌入重组音频特征。自注意力解码器模块 (b) : 为 MLM 模型中所采用的模块,只限于自回归推理的任务。EMAGE © : 融合 (a) 与 (b) 的长处,同时使音频特征融合更有效,且可以自回归解码。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

反激电源——TL431及光耦反馈电路计算(不涉及环路补偿)

一、TL431及光耦反馈电路 TL431以及光耦电路是反激的副边反馈类型电路中的常见应用。 其反馈工作原理为:当副边的输出电压升高时,TL431的REF点采样电压也会升高,使得TL431的导通量增加,同时光耦内部的发光二极管流过的电流也增大&…

C++11 数据结构3 线性表的循环链式存储,实现,测试

上一节课,我们学了线性表 单向存储结构(也就是单链表),这个是企业常用的技术,且是后面各种的基本,一定要牢牢掌握,如果没有掌握,下面的课程会云里雾里。 一 ,循环链表 1…

遥测终端赋能水库泄洪监测预警,筑牢度汛安全防线!

4月10日,水利部召开水库安全度汛视频会议。会议要求着力强化水库防洪“四预”措施,加快构建雨水情监测预报“三道防线”,完善预警信息发布机制,推进数字孪生水利工程建设,为科学调度指挥决策提供支持。强调坚决牢牢守住…

基于3D点云的散货库存体积计算

首先,你需要散货库存的点云。 我将使用 IntelRealSense 捕获的散货库存的 .ply文件。 然而,任何其他产生点云的成像技术都同样有效。 点击这里查看本教程的 Github 上的代码。 NSDT工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - …

二叉树的中序遍历 - LeetCode 热题 36

大家好!我是曾续缘😃 今天是《LeetCode 热题 100》系列 发车第 36 天 二叉树第 1 题 ❤️点赞 👍 收藏 ⭐再看,养成习惯 二叉树的中序遍历 给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。 示例 1: 输…

爬楼梯(c)

文章目录 描述分析思路关键代码运行结果 描述 给定一个整数数组 cost ,其中 cost[i]是从楼梯第i 个台阶向上爬需要支付的费用,下标从0开始。-旦你支付此费用,即可选择向上爬一个或者两个台阶 要求:请你计算并返回达到楼梯顶部的…

4.17

while(1) { HAL_ADC_Start(&hadc); adcVal HAL_ADC_GetValue(&hadc); TIM3->CCR3 adcVal-2000; } 1.总结串口的发送和接收功能使用到的函数 HAL_UART_Transmit_DMA(&huart1,"hello world",strlen("hello world")); HAL_UART_Tr…

Linux:如何删除指定时间之前修改的文件?

1、与文件有关的时间 在说明如何删除符合这种要求的文件之前,先来看看与文件有关的有哪些时间 简名全名中文名含义atimeaccess time访问时间文件中的数据最后被访问的时间mtimemodify time修改时间文件中的数据最后被修改的时间ctime change time变化时间文件的元…

JavaSE高阶篇-IO流

第一部分 file类 1)File类 计算机常识: 1.名字为".jpg"的一定是图片吗? 不一定,有可能是文件夹 2.什么叫做文本文档: 用记事本打开,人能看懂的文件 比如:.txt .html .css等 .doc -> 不是 …

如何安装 IntelliJ IDEA 最新版本——详细教程

IntelliJ IDEA 简称 IDEA,被业界公认为最好的 Java 集成开发工具,尤其在智能代码助手、代码自动提示、代码重构、代码版本管理(Git、SVN、Maven)、单元测试、代码分析等方面有着亮眼的发挥。IDEA 产于捷克,开发人员以严谨著称的东欧程序员为主…

vscode 搭建stm32开发环境记录(eide+cortex-debug+jlink)

前言 clion使用的快过期了,所以就准备使用vscode 来代替clion作为代码开发环境 vscode 插件安装 创建个空白工程 添加项目相关的源文件,和配置宏定义和头文件目录 编译和烧录(ok) 结合cortex-debug 结果(测试ok)

数据可视化-ECharts Html项目实战(13)

在之前的文章中,我们深入学习ECharts动态主题切换和自定义ECharts主题。想了解的朋友可以查看这篇文章。同时,希望我的文章能帮助到你,如果觉得我的文章写的不错,请留下你宝贵的点赞,谢谢。 数据可视化-ECharts Html项…

Linux执行命令监控详细实现原理和使用教程,以及相关工具的使用

Linux执行命令监控详细实现原理和使用教程,以及相关工具的使用。 0x00 背景介绍 Linux上的HIDS需要实时对执行的命令进行监控,分析异常或入侵行为,有助于安全事件的发现和预防。为了获取执行命令,大致有如下方法: 遍…

MySQL-笔记-06.数据高级查询

目录 6.1 连接查询 6.1.1 交叉连接(cross join) 6.1.2 内连接(inner join) 6.1.3 外连接(outer join) 6.1.3.1 左外连接(left [outer] join) 6.1.3.2 右外连接(rig…

第2章:车辆纵向控制

2.1 车辆纵向动力学模型 注:车辆的纵向控制是指控制车辆行驶方向上的加减速,使得汽车可以按照期望的速度行驶,并保持安全的前后车距(即对汽车油门 / 刹车的控制); 2.1.1 车辆纵向受力模型 :轮胎…

SpringBootSpringCloud升级可能会出现的问题

1.背景 之前负责过我们中台的SpringBoot和Cloud的升级,特次记录分享一下项目中可能出现的问题,方便后续的人快速定位问题。以及下述选择的解决方案都是基于让升级的服务影响和改动最小以及提供通用的解决方案的提前进行选择的。 1.1版本说明 升级前&a…

OpenCV基本图像处理操作(十)——图像特征harris角点

角点 角点是图像中的一个特征点,指的是两条边缘交叉的点,这样的点在图像中通常表示一个显著的几角。在计算机视觉和图像处理中,角点是重要的特征,因为它们通常是图像中信息丰富的区域,可以用于图像分析、对象识别、3D…

JavaSE中的String类

1.定义方式 常见的三种字符串构造 public class Test1 {public static void main(String[] args) {// 使用常量串构造String str1 "abc";System.out.println(str1);// 直接newString对象String str2 new String("ABC");System.out.println(str2);// 使用…

【Linux学习】Linux指令(四)

文章标题 🚀zip/unzip指令:🚀tar指令(重要):🚀uname –r指令:🚀关机指令🚀几个常用操作 🚀zip/unzip指令: zip 与 unzip的安装 yum i…

Day20-【Java SE高级】单元测试 反射 注解 动态代理

一、单元测试 就是针对最小的功能单元(方法),编写测试代码对其进行正确性测试。 1. 咱们之前是如何进行单元测试的?有啥问题? 只能在main方法编写测试代码,去调用其他方法进行测试。无法实现自动化测试,一个方法测试失败,可能…