腾讯游戏开发精粹Ⅱ
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

4.3 一个语音驱动高保真数字人的机器学习处理流程

本节内容结构如下:首先介绍本章提出的机器学习处理流程;然后介绍制作数字人动画的核心——人脸绑定系统;接着分别详细介绍采用的神经网络模型、训练数据的制作;最后进行实验结果的分析。

4.3.1 框架介绍

首先需要明确,我们要驱动的是一个实时渲染的高保真数字人,而不是脸部视频或一个脸部统计模型(如AAM)。与相关算法章节中所提到的大部分算法不同的是,本章的驱动算法并不修改图像像素值或预测统计模型参数,而直接对接高保真数字人的制作管线与实时驱动方式。以下是设计的语音驱动高保真数字人的处理流程。

如图4.1所示,处理流程主要包括3步。

图4.1 语音驱动高保真数字人整体流程图

(1)语音信号声学特征提取。

(2)声学特征转化为人脸绑定系统的控制器数值。

(3)控制器数值通过LiveLink进入数字人动画管线,改变数字人3D模型,表现出数字人的不同面部动画状态。

与已有方法的最大区别是,基于数字人的人脸绑定系统实现了语音数据和数字人的连接。只要驱动模型可以正确地将语音信号转化为对应的人脸绑定系统的控制器数值,就可以利用高保真数字人Siren的动画系统和实时渲染系统,让数字人做出正确的面部表情,从而实现正确的数字人语音驱动效果。

这样的设计成功地将语音驱动高保真数字人这一问题转化为一个语音信号映射为绑定控制器数值的问题。而解决此问题的有效方式就是借助机器学习模型。

具体地,将基于虚幻引擎4的实时渲染的数字人当作一个“黑盒”,对于“数字人驱动”这个任务,“黑盒”与外部的接口就是人脸绑定系统,或者说是人脸绑定系统中的所有控制器。

采用这种处理流程所带来的一个好处是可以与目前大部分游戏开发流程“无缝”衔接,方便接入流程,为基于该技术开发工具打下了良好的基础。关于这一点,在4.6.2节游戏开发动画工具中有更加详细的介绍。

下面分别介绍流程的各个组成部分。

4.3.2 人脸绑定介绍

绑定(Rigging)是一个动画领域的专业名词,是动画制作过程中的一个主要步骤,被广泛应用在电影和游戏等数字娱乐行业。专门从事绑定工作的技术美术师称为绑定师(Rigger)。

人脸绑定过程既包含数学逻辑的控制,又包含符合真实人脸的解剖结构和肌肉运动的物理规则。常用的技术有FACS。

图4.2所示为人脸绑定系统示意图。从图4.2中可以看到一个人脸模型和一个面板。

图4.2 人脸绑定系统示意图

从动画管线的角度来看,人脸绑定的目的是更好地控制3D角色,动画师通过修改面板上的控制器,就可以使角色做出相应的表情。假设人脸绑定系统包含C个控制器,每个控制器由一个[-1,1]的浮点数表示,那么一帧表情就可以由一个C维向量表示。

图4.3所示为人脸绑定系统控制器修改表情示例,此时控制器C_jaw和R_eye_blink同时被激活(C_jaw和R_eye_blink的数值为1)。

图4.3 人脸绑定系统控制器修改表情示例

从机器学习的角度来分析,数字人的人脸绑定系统是对3D人脸模型的一种抽象。借助绑定师的专业技能和高质量绑定系统,我们实现了对3D人脸的精确控制。因此人脸绑定系统可以被认为是3D人脸运动(或称为动画)空间的一种特征表示,即一组控制器数值代表了一帧人脸动画,同时代表了3D人脸模型的一个状态。

进一步地,高精度尤其是数字人级别的3D人脸模型,往往有上万个顶点。假定模型有N个顶点,那么每一个3D人脸状态就等价于N×3维向量。而准确改变这些顶点位置,从而生成准确的人脸动画,就等价于正确地、序列化地改变N×3维向量,这显然是一个非常困难的问题。借助人脸绑定系统,将N×3维数据减少到C维,这大大降低了问题的解空间,也就降低了问题难度。有了这种有效的特征表示,就可以将数字人的动画驱动等价表示为绑定控制器数值的预测。

本章成功地找到了语音驱动数字人面部动画这一问题的一种解决路径:求解语音到控制器数值的映射。只要正确求解出这一映射关系,对于给定的语音数据,就可以准确地预测每一帧控制器的数值,进而正确驱动数字人面部动画。机器学习,尤其是监督学习这一学习范式,正是解决这类问题的一个非常好的方法。

4.3.3 训练数据采集与制作

机器学习的成功前提是训练数据。对于很多问题,只有拥有高质量的数据才能训练出好的机器学习模型,从而有效解决问题。下面介绍所采用的训练数据采集和制作方案。根据4.3.2节的分析,语音驱动数字人面部动画这一问题被转化为一个典型的监督学习问题。那么训练数据必须包含语音数据和对应的、正确的绑定控制器数据。为了保证训练数据集的质量,必须使语音驱动动画尽量接近从演员本人面部捕捉的驱动动画。

为此,设计了如图4.4所示的数据采集流程。

图4.4 语音驱动数字人数据采集方案整体流程图

在搭建的面部捕捉场景中,数字人的参考演员本人佩戴头盔,朗读提前准备好的台本来驱动数字人,同时相关设备记录下演员面部视频及声音。这里要格外注意的是,必须严格保证视频和声音的完全同步,同时为了保证视频驱动的解算质量,最好控制每一段数据的时间。可以在采集开始和结束的时刻打板来对齐时间,或者借助时间尺码(Time Code)来对齐时间。在记录下演员的面部视频和声音数据后,需要借助视频捕捉流程中的解算步骤,利用提前制作好的解算器将视频解算为数字人绑定系统的控制器数据。其中要注意离散化的问题。高保真数字人的渲染帧率是60fps,因此解算出来的动画数据帧率也是60fps,即每秒的动画数据对应60×C个浮点数。

4.3.4 基线方法与结果

本节首先介绍基线方法,包括语音和动画特征提取及采用的神经网络模型,然后对实验结果进行对比分析。

4.3.4.1 特征提取

虽然语音驱动面部动画是一个典型的端到端的机器学习问题,但特征提取仍然是不可缺少的步骤。有效的声学特征提取是任务成功的保证。

(1)语音特征提取。在初次尝试语音驱动时,选择了语音识别技术中常用的MFCC(Mel-scaleFrequency Cepstral Coefficients,梅尔倒谱系数)特征。通常来讲,MFCC特征包含了语音内容,而且鲁棒性较好(可以在一定程度上排除噪声和背景声的干扰)。具体地,在分帧处理中,设置窗口长度为0.025s,帧移长度为0.0056s。对于48000采样率的音频数据,即每秒数据是长度等于48000维的向量。对于每帧数据,除提取长度等于13维的MFCC特征外,为了进一步增加语音特征的有效性,提取了MFCC-delta(MFCC一阶差分系数)和MFCC-delta-delta(MFCC二阶差分系数)特征,这两个特征的长度也都是13维,因此对于每帧音频数据,提取的特征长度一共是39维。

(2)动画数据特征提取。对输出的动画数据并没有进行特殊处理,因为控制器数据本身已经是一种很好的有效特征。对于解算出来的控制器,筛选出实际数据中对数字人口型动画影响较大的控制器,过滤掉一些恒为0的控制器。最终得到84个有效控制器,即每一帧动画数据对应84维向量。

4.3.4.2 模型结构与训练

完成特征提取后,下一步是机器学习模型训练。这里采用了多层神经网络。语音驱动模型结构如表4.1所示。

表4.1 语音驱动模型结构

采用L2损失函数来衡量训练过程中神经网络的输出和训练数据集中控制器数值的误差。除此之外,还将一个控制点运动正则项加入损失函数。

式中,N是样本数量;q表示训练数据集中的标签数据值;o表示模型的输出;d[ ]表示成对数据的有限差分算子。加入控制点运动正则项的目的是希望神经网络输出的结果在准确的同时可以尽可能平滑,从而使得动画效果更好。

4.3.4.3 结果分析

图4.5所示为基线方法对比结果。

该结果为演员本人声音的“受”字的口型驱动结果。具体地,图4.5中间人脸动画为标准参考结果,左侧为损失函数没有采用运动正则项的驱动结果,右侧为损失函数采用了运动正则项的结果。可以看出,在演员本人声音驱动的情况下,利用了MFCC特征的语音模型驱动结果与真值结果基本接近,但仍存在一定误差。

图4.5 基线方法对比结果

从单帧的驱动效果来看,采用包含运动正则项和不包含运动正则项的神经网络的输出结果基本相似。如图4.6所示,其中蓝色为真值结果,绿色为加入运动正则项的结果,红色为未加入运动正则项的结果。明显看出,加入运动正则项后,控制器数值曲线更加平滑。

图4.6 控制器结果比较

4.3.5 小结

本节介绍了对于语音驱动高保真数字人这一问题所采用的解决方案,包括整体处理流程及数据采集、特征提取、模型训练和实验结果分析;介绍了人脸绑定系统并分析了它对待解决问题的影响,以及如何将待解决问题转化为一个标准的机器学习问题。在当时(2017年底),这是对人工智能技术和高保真实时数字人结合的一次技术探索,并取得了一定效果。