问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

EMO:语音驱动的肖像动画生成技术详解

创作时间:
作者:
@小白创作中心

EMO:语音驱动的肖像动画生成技术详解

引用
1
来源
1.
https://www.bilibili.com/read/cv33659566/

在AI技术快速发展的今天,语音驱动的肖像动画生成技术正逐渐成为研究热点。其中,EMO(Emote Portrait Alive)以其卓越的效果和创新的技术原理脱颖而出。本文将详细介绍EMO的技术原理、实现方法和训练策略,并与现有的其他方法进行比较。

0、概述

EMO是一种音频驱动的肖像视频生成方法,不需要借助3D模型、面部landmark等,就可以保证整个视频中帧间的无缝过渡和ID信息的一致性。

输入:是单个参考图像,和一段语音,可以是说话、或者唱歌;

输出:表情丰富、且有各种头部姿势的肖像视频,还可以根据输入音频的长度生成任意持续时间的视频。

这里简单提一下关于音频驱动的头像生成的最近工作总结:

音频驱动的头像生成可以大致分为两种方法:基于视频的方法(video-based)和基于单图像的方法(single-image)。

  • 基于视频的方法,对输入视频片段进行直接编辑。例如,Wav2Lip,使用音频-唇形同步鉴别器,根据音频重新生成视频中的唇形运动。它的局限性在于依赖于基础视频,导致头部运动固定并且仅产生嘴巴运动,这会限制真实感。

  • 对于单图像方法,参考照片用于生成反映照片外观的视频。Vividtalk提出通过学习混合形状和头部姿势来独立生成头部运动和面部表情。然后使用它们创建3D facial mesh,作为中间表示来指导最终视频帧的生成。类似地,Sadtalker采用3D Morphable Model (3DMM)作为生成头部说话视频的中间表示。这些方法的一个常见问题是3D mesh的表示能力有限,这限制了生成视频的整体表现力和真实感。此外,这两种方法都基于非扩散模型,这进一步限制了生成结果的性能。Dreamtalk尝试使用扩散模型,但它没有直接应用于图像帧,而是使用它们来生成3DMM的系数。与前两种方法相比,Dreamtalk在结果上有所改进,但仍无法实现高度自然的面部视频生成。

下面看看EMO的具体实现原理吧,为什么它如此逼真?

1、原理

1.1 整体结构

这次先来放上EMO的整体框架图,方便对照查看。

1)temporal module:为了确保生成帧之间的连续性

2)ReferenceNet:为了保持ID一致性,它输入参考图像以获得参考特征。

  1. audio layer:对语音特征进行编码,驱动角色说话。

4)face locator 和 speed layer,提供weak control,为了使运动可控且稳定

1.2 Backbone

注意,Backbone依然采用类似UNet的结构,但是没有用prompt embedding,而是用的referencenet提取到的feature。

1.3 Audio layers

1)从预训练 wav2vec 的各个block中获取音频序列的特征;

2)将这些特征concate起来,生成第帧的audio embedding;

3)将第帧前后各帧的audio embedding concat 起来作为最终的audio embedding,因为考虑到动作可能会受到未来/过去音频片段的影响,例如说话前张嘴和吸气。

该audio embedding作为 audio-attention的输入。

1.4 ReferenceNet

从self-attention layer 获取参考图片的特征reference feature maps

1.5 Temporal Modules

借鉴AnimateDiff,把输入的feature map reshape成

为了生成不限长度的视频,借鉴之前的方法--采用前一剪辑末尾的帧作为后续生成的初始帧,这里实际是合并了最后 n 帧,把它称为先前生成的片段中的“运动帧”,以增强跨剪辑的一致性。

具体来说,这 n 个运动帧被输入到 ReferenceNet 中以提取多分辨率的motion feature map。在去噪过程中,将时间层输入与相同分辨率的motion feature map合并。

对于第一个视频片段,运动帧初始化为0。

注意,目标图像和运动帧仅concat一次并输入到 ReferenceNet 中,提取的特征在整个去噪过程中被重复使用,确保inference的计算时间不会大幅增加。

1.6 Face Locator and Speed Layers

ID一致性、帧间连续性已经解决,但是motion的一致性和稳定性还未解决,因为它们目前都是独立生成的。

Face Locator--在哪生成面部

前面提到,以前的3D模型的方法或者skeleton的方法,其自由度有限,并且在训练阶段打标不充分,使用这些控制信号可能不能很好地创建生动的面部表情和动作。

此外,其无法考虑个体的细微差别,相同的控制信号在不同角色之间也会有差异。

这里选择“弱”控制信号方法(weak control)。

1)从face box来获取一个mask;

2)Face Locator(一个由一系列卷积构成的轻量编码器)对mask进行编码;

3)该编码结果与latent noise相加,一起送入UNet。

由于M是整个视频片段的联合区域,表示允许面部在一个相当大的区域内运动,从而保证头部不限于静态姿势。

接下来,就是如何控制头部运动频率。

Speed Layers--头部运动速度

用一个参数来控制第帧头部运动速度。

将速度范围划分为个离散速度桶,每个速度桶代表不同的速度级别。每个桶都有一个中心值和一个半径。

可以表示为向量,其中。

采用与audio layer中的方法,每帧的头部运动速度embedding由前后各帧的embedding concat得到,即,并且

随后通过 MLP 来获取speed feature。

在temporal layer内,为了计算时shape的一致,repeat 为,并实现一种交叉注意力机制。

2、训练策略

2.1 训练方法

分为三个阶段。

第一阶段是图像预训练,包括 Backbone Network、ReferenceNet 和 Face Locator 。

在此阶段,Backbone 输入时单个帧,而 ReferenceNet 是从同一个视频片段中随机选择的与前面不同的一帧。

Backbone 和 ReferenceNet 都从原始 SD 初始化权重。

在第二阶段,引入视频训练,结合了temporal modules 和 audio layers,从video中采样n+f个连续帧,开始的n帧是运动帧。

temporal modules从 AnimateDiff 初始化权重。

第三阶段,加入speed layers,在这个阶段只训练temporal modules和speed layers。省略音audio layers, 因为说话人物的表情、嘴部动作和头部运动的频率主要受音频影响。因此,这些元素之间似乎存在相关性,可能会提示模型根据速度信号而不是音频来驱动角色的运动。而且实验结果表明,speed layers和audio layers的同时训练会破坏音频对角色运动的驱动能力

2.2 训练数据

数据集:

1)从互联网上收集了大约 250 小时的talking head 视频,

2)公开数据集 HDTF 和 VFHQ 。 由于 VFHQ 数据集缺乏音频,因此仅在第一个训练阶段使用。

打标:

用 MediaPipe 人脸检测框架来获取面部bounding box。

通过使用面部landmark提取每帧的 6-DoF 头部姿势来标记头部运动速度,然后计算连续帧之间的旋转度。

2.3 训练参数

裁剪为 512 × 512。

在第一个训练阶段,batch_size=48.

在第二和第三阶段,设置f = 12作为生成的视频长度,运动帧数设置为。

所有阶段的学习率均设置为1e-5。

在推理过程中,DDIM的采样算法,steps=40,耗时约为 15 秒(f = 12 帧)。

3、局限

1)更耗时。

2)由于没有使用任何明确的控制信号来控制角色的运动,因此可能会导致无意中生成其他身体部位(例如手),从而导致视频中出现伪影。该问题的一个潜在解决方案是采用专门针对身体部位的控制信号。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号