0%

文本语音驱动数字人表情口型竞赛

文本语音驱动数字人表情口型竞赛由SMG技术中心(上海东方传媒技术有限公司)、SMG融媒体中心、AR/VR技术及应用国家工程实验室主办,详细说明可参考比赛官网

一:问题描述

1.1 背景

随着“元宇宙”概念爆火,数字人出现在我们生活的方方面面。比如,申䒕雅,yoyo鹿鸣。但是,创建一个数字人的过程包括:人物原型、建模、生成、渲染,需要大量时间和经历。虚拟人的驱动方式主要为以下三种:手动制作动画、动作捕捉技术、AI智能驱动技术。然而,在实际应用中,让数据人能够模拟真人情感及行为细节仍然是正在不断优化的行业研究课题。

1.2 任务

如何让数字人基于对文本语音的理解,有更真实的表情和口型的表现力。

1.3 数据

  • 原始的文本数据;
  • “中之人”念文稿的原始语音数据(48kHZ采样率);
  • “中之人”通过动捕系统捕捉生成数据,并绑定在数字人的“申䒕雅”模型上生成的BlendShape参数,共30min左右。(按 25FPS 输出,一秒音频对应 25 组 BlendShape 参数)

1.4 评价

综合B 榜有效成绩排名将要求前 20 名提交 PPT 和代码,结合 PPT、代码审核及对 Blendshape 的渲染主观评价,前 10 名进行答辩。

表情(expression)可被视作由无数个表情基准通过线性组合而计算得到,用公式来说就是e=Bd+b,其中e是expression,B是一组表情基准(即blendshape,可以是皱眉、闭合眼皮、嘴角扬起等,越细分表情约细腻),d是对应的系数(在这一组里面的权重),b是neutral。当下,Maya 等软件在制作数字人动画时均需通过 blendshape 参数来实现表情动画的定义。

我们的竞赛任务即希望通过给定的语音文本,通过 AI 算法生成对应的 blendshape 参数,从而在 Maya 等软件中可以驱动对应人物表情。

为便于选手快速了解 Blendshape,可参考以下短视频的演示,视频中左侧的参数列表例如“Jaw Open”等都代表了脸部某一细节如唇角上扬、口型开闭、眼睛张闭等程度,通过对这一系列参数(统称为 blendshape)的数值(0-1 之间)予以控制,将能刻画一个数字人某一帧的口型表情,而当多帧连续放映就形成了动画效果

二、解决思路

主要有两种解题思路:

  • 基于语音驱动的数字人表情口型生成(A2F)。这种也是比较符合逻辑的,因为语音包含了除文本之外的更多的信息,如情绪等,能更好的用于表情口型的生成。
  • 基于文本驱动的数字人表情口型生成(T2F)。之所以会考虑这种方式,是因为这样一个应用场景。考虑一个数字人,是通过TTS合成的声音,不是中之人录音的。那这样的过程会经历两个算法,一个是TTS,一个则是按照TTS合成的生成传输到A2F模型,然后再生成表情口型。这是一个串联的过程。实际中可以将TTS与A2F进行合并,一个模型就可以完成这个过程。

不论是A2F还是T2F,核心的思路是 预训练模型 + 特征对齐 + Decoder

关于预训练模型:

关于对齐方法:

  • 特征硬对齐:什么是特诊硬对齐呢?一般处理语音的帧移是10ms,那么1s语音有100语音帧;视频为1s25视频帧,则对齐原则为4个语音帧对应1个视频帧。在语音经过 wav2vec 2.0模型获得最后层的隐层特征之后,将语音帧按照4进行平均,得到对齐后的隐层特征。
  • 基于 attention 学习 encoder 与 decoder 之间的对齐,参考 Tacotron2的方法。
  • 基于动态规划思想的对齐方案(Monotonic Alignment Search : 这个方法是 Glow-TTS 提出来的;),参考 GlowTTS 与 VITS。但是这里需要注意的是 VITS 中的对齐是用作文本-语谱的对齐,文本要相较于语谱的维度更低,一个音素级别的文本通常会对应5帧左右的语谱,所以就有了 duration predictor。但是换到语音-视频的对齐过程中,语音帧是更长的。这里需要修改 duration predictor,输出为该帧语音是否对应该帧视频,为二分类问题。

关于decoder:LSTM、Conv1D;关于损失:MAE、MSE、差分之后的MAE及MSE(防止表情抖动),其实损失函数还是挺重要的。MAE和MSE很容易造成过拟合,尤其是实验数据太少了,这里我没有着重考虑,自己关于损失函数的了解也比较浅。

实验了如下方法:

  • A2F:

    1. 预训练语音模型 wav2vec 2.0 + 特征硬对齐 + LSTM。
    2. 预训练语音模型 wav2vec 2.0 + attention特征对齐 + Conv1D(自回归结构),利用 Teacher Forcing 分分钟过拟合。
    3. 预训练语音模型 wav2vec 2.0 + 动态规划对齐 + Conv1D。
    4. 预训练ASR模型 + … 这里由于是英文预训练模型,没有后续实验了。
    5. FaceFormer(自回归结构),开源的模型,但是输出不是 BlendShape,这里重新进行了修改,没有利用 Teacher Forcing,但是收敛速度极其慢。
  • T2F:

    1. FastSpeech2 模型
    2. VITS 模型

三、总结

我主要犯的错有如下几点:

  • 尝试一个新的领域的比赛过程中,没有认真收集相关领域的资料,从而选出更合适可行的方法,而是直接按照自己的理解进行尝试。以后还是需要多收集资料,尤其是领域经典文章,比赛过程也是一个学习的过程!

  • 比赛步骤流程出现了极大的问题,我没有对官方的数据进行清洗。这对我的影响还是比较大的,直到比赛靠后才发现群里有人说某些标注信息有问题。完全忘记了当时参加数学建模时候一步步的流程了。数据真的太关键了!

  • 缺乏团队合作,自己一个人力量还是太小了,假如思路有问题都没有人讨论🤣。

虽然效果不好,还是插入一个渲染的视频吧,youtube链接notion链接

四、后续

可能考虑结合 VITS 方法构建端到端TTS和T2F统一框架,扩充数据可以结合https://github.com/benject/mirror这位兄台提供的方案。