Press "Enter" to skip to content

一增两减,助力深度学习在实时推理场景中的应用

本文整理自英伟达史永明博士在 AI 技术专场所做出的演讲。在演讲中他主要介绍了为实现 DIGITAL JENSEN,利用 Audio2Face 实现语音生成对应面部视频、用 Audio2Gestures 实现语音生成对应肢体动作的主要技术流程、算法细节和评估效果的介绍,以及 NVIDIA Ampere Architect & SDK 在其他更多方面的应用。关注本文标签「RTE 技术分享」,我们将陆续更新更多演讲干货。以下为演讲整理。

 

 

▲图:NVIDIA 深度学习资深解决方案架构师 史永明

 

 

会议开始之初,史永明博士先介绍了之前在英伟达 GTC 大会上展示的虚拟人视频的制作过程,在视频制作里面,包括英伟达 CEO 黄仁勋本人,以及代表性的皮衣和整体的场景,全部都用AI合成。史永明博士在演讲中展示了 Audio2Face 在 DIGITAL JENSEN 上的算法工作流程。

 

 

Audio2Face 可以将输入的音频流数据转换为对应的音频驱动的面部动画,使用到的输入数据是一段音频信息和面部模型。

 

 

算法过程分成两步走,第一步,真正意义上的 Audio2Face,通过音频驱动,驱动预先创建好的头部模型表情,此时这个模型并不是我们最终想要的模型,所以还需要做一步 face retargeting 的转换,需要把预置头部模型的一些关键点和目标所需要驱动的头部模型的关键点匹配,最终实现音频驱动的面部动画。

 

 

第一步详细阐述如下:在 SDK 右边,输入一段音频信息,可以是事先录制的,也可以是通过 TTS 或者其他方式合成的音频,根据输入的音频流数据产生预置模型的面部动画,此时输入为音频,输出为音频驱动的预置模型的面部动画(非目标模型)。

 

 

第二步:将产生的预置模型的动画重映射到最终目标模型上。因为最终需要的是一个真实的或者是一个期望的目标头部的动画,所以需要做一个映射,可以在目标模型上选一些点,比如眼角、嘴角、鼻子、眉毛等等,选取 20 个左右,越多越好,做一步映射,最后可以用一个音频驱动,用音频带动目标头部模型,生成我们想要的动画。

 

 

这里所使用的算法逻辑,可以参考之前的文章,输入是 520 毫秒的时间窗口,以当前时刻为基准,前后各 260 毫秒。同时需要一个情感向量输入,因为我们讲话通常不可能一点情感都没有。模型的输出是 5022 个特征点,即预置的人脸有 5022 个点组成,每个点是 X、Y、Z 三个坐标,是需要乘以 3。

 

 

算法细节:这里的 loss function 有三个部分,第一个是 position loss,即预测值和真实值之间的位置差异;第二个是 Motion loss,指的是动作差异,之所以有这个 loss,是因为不希望输出的关键点有跳变,所以要增加平滑性;第三个是情感正则化损失 Emotion regularization loss,我们的情感是一个长时稳定的,所以要对表情特征进行正则化,避免情感向量在不同帧之间有突变。

 

 

模型运行参照时间评估:最终可以实现在单卡上做到 6.3 毫秒一帧;一批次输入 100 个 frame 的话,单帧可以达到 0.2 毫秒。延迟由音频窗口大小决定(目前是 260ms);如果想降低延时,可对时间窗口进行调整。

 

 

 

Audio2Gestures 算法在 DIGITAL JENSEN 上的工作流程:Audio2Gestures 是将输入的语音流生成对应的语言肢体动作。在 Audio2Gesture 中,身体的动作和语言之间的关系有很大的不确定性。在用音频生成内容的几种方式中,确定性最强的是 ASR,即用声音去生成一段文本,虽然有些同音字,但是在我们大的文本里边概率比较小。此外,上面提到的 audio2face,即用音频生成面部表情,也有一定确定性,因为发音和面部肌肉相关。

 

 

训练数据集介绍:这里使用的训练数据集,是通过特定设备,请动作演员,模仿 Jensen 的身体动作,从而将动作通过设备采集下来,总共采集了两小时四十分钟。最后还需要让动作演员去根据之前对两小时四十分钟理解,自由发挥 15 分钟。

 

 

Aduio2Gesturede 的实现细节目前尚未公开,大家可持续关注 NV 的后续报道,特别是可以到 NVIDIA2021 年的 GTC 大会了解。

 

 

 

史永明谈到:尽管使用的是 3D 模型,但是在屏幕上呈现的都是 2D 的,并且头部通常是注意力最集中的地方,故需要对头部进行一些精细的调整。Face Vid2Vid 输入的头部模型是通过 Audio2Face 生成的,在 Audio2Face 中有一个 Jensen 的头部模型输入,是 3D 的 Jensen 头部模型,是通过很多单反相机扫描建模的,通常这种建模的方式,肉眼很明显的分别出是建模出来的,不是真实拍摄的效果,用这个模型对 Jensen 头部做渲染,对结果与期望进行了对比,最终发现图看上去不太真实。故需要使用 Face Vid2Vid 算法改进模型的生成效果,使得其更加自然真实。

 

 

NVIDIA之前的方法有图片到图片的变换 Image-to-Image Translation、视频到视频的迁移 Video-to-Video Translation。通过一个人脸,通过模型使其变成另一个风格,但是这样会造成每一种风格,都需要寻找相应风格的模型,比如脸形、发型的模型,故这种模型不适用。

 

 

在 Face Vid2Vid 算法中有三个关键步骤,第一步是对图片提取特征点,然后是驱动视频进行特征转换,最后产生目标视频。

 

 

这里需要对脸进行标准化,然后使用空间变换包括旋转变换,平移变换等方式,把表情加上去,可以把目标任务表情和原始表情关联起来,最后生成我们想要的效果。

 

 

这里使用到的数据集部分一个是公开数据集,里面很多名人头部的动画,还有英伟达自己构建的独立数据集,目前不公开。视频时长 1000 小时,对于这个数据集请参考他们构建的方式。

 

 

 

英伟达有很多其他新颖的技术,比如 AI 渲染里面的光线追踪、路径追踪等。一般来说,在渲染时,图像采样点少,速度快,但效果不好,采样点多它效果好,但算得不够快,用英伟达的AI渲染,在较少采样点的时候,可以用 AI 技术把噪声噪点消除掉。另外,为解决低采样率时的噪声问题,可以用 AI denoiser 获得跟 4096SPP 高采样率时相似的效果。另外还可以使用直接光照和全局光照,让画面看起来更饱和。最后是 DLSS,它的用法是,如果是对很高分辨率的图片进行渲染时,显卡通常没法达到实时的高帧率,所以通过在相对低分辨率下渲染,渲染后通过深度学习超载采样技术,把它转换到高分辨率上,这样既保证相同质量输出的前提下,又获得了实时的效果。

 

 

英伟达三大硬件介绍:分别是渲染里面的着色,光线追踪的 RT core 和深度学习的 Tensor core。以上一代图灵架构为例,要渲染一张图片,如果全用 shader,是需要 51 毫秒,如果是打游戏,二十多帧。如果把光线追踪的部分放在 shader 上,把判断光线和哪个部分要相交的BVH的部分放到RT core 上,可以使时间大幅度缩减,20 毫秒就可以生成一帧。如果再使用 DLSS,可以达到 12 毫秒。在安培架构里,这些数值有不同程度的提升。三项技术全开,渲染相同的一帧画面只需要 6.7 毫秒。

 

 

一增两减:这里所说的一增两减”,一增指的是算力的提升。两减是两部分,第一部分是在安培架构下,有一个结构化稀疏的特性,把无效的计算去除,提升单位算力的效率。第二个是支持很多量化方式,支持 QAT 量化方式。

 

 

 

史永明博士通过对 A100 和 A100 的上一代训练卡 V100 数值的对比,对英伟达所提升的部分做了展示,各项性能都达到了几倍或者十几倍的性能提升,这是“一增两减“中的一增。而“一增两减”两减中的一减,即结构化稀疏,是因为在模型里面通常有些激活函数,会把激活值映射到 0,这对后续的矩阵计算是没有意义的值,但这些消耗了计算资源,所以提出了结构化稀疏的概念。

 

 

 

在模型的量化中,英伟达在工程化部署里,使用 TensorRT。考虑到模型训练有不同的框架训练,但是应用场景需要把它部署在不同的硬件设备上,这些硬件设备对应的就是英伟达不同的 GPU。TensorRT 会在相应的 GPU 上找到一种最快的实现,找到算子最优的运算方式。

 

 

在模型路径推理中,正常训练是常使用 FP32 精度,而混合训练使用的是 FP16+FP32。现在随着量化技术的发展,TensorRT已支持 QAT(量化感知训练),即在模型里面插一些 Q/DQ (量化/反量化)节点,让模型在训练的时候就知道这个模型后面是要为量化服务的,它能比较好的恢复量化带来的精度损失。同时在 TensorRT 里面还做一些 Q/DQ 节点的优化,让 Q 和 DQ 分别做不同的前移或者后移,保证整个计算图大部分都运行在 INT8 的精度。

Be First to Comment

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注