Conference

Emotional Speech-Driven Animation with Content-Emotion Disentanglement

Radek Danecek, Kiran Chhatre, Shashank Tripathi, Yandong Wen, Michael J. Black, Timo Bolkart

Max Planck Institute for Intelligent Systems

一句话总结

EMOTE 从语音和一个情绪标签直接驱动 3D 头部动画,通过”内容-情绪解耦”机制让口型与语音同步的同时可以对表达的情绪做语义级编辑。

研究背景

  • 领域现状:语音驱动的 3D 人脸动画已能生成与音频同步的口型(VOCA、FaceFormer、MeshTalk、CodeTalker 等),但这些方法大多忽略情绪对面部表情的影响,也几乎不提供对情绪的显式控制。
  • 核心痛点:一是”表情”与”口型”存在冲突——传达情绪所需的脸形常常与匹配音频所需的唇动不一致;二是缺乏高质量的、带情绪的语音-3D 扫描配对数据集,现有 3D 数据集在情绪丰富度上非常有限。
  • 本文 idea:作者观察到语音和情绪在时间与空间上有本质差异——语音引起的唇部运动是高时间频率、空间上集中在嘴部,而情绪是低时间频率、可作用于整张脸的长时段现象。利用这一差异,把口型监督放在逐帧层面、把情绪监督放在序列层面,并设计一个内容-情绪交换机制显式解耦二者;由于缺乏 3D 数据,改用情绪视频数据集 MEAD 提取伪真值来训练。

方法

整体框架分两步:先训练一个时序变分自编码器 FLINT 作为面部运动先验,再训练一个回归器把语音音频(加上目标情绪、强度、说话人风格的条件)映射到这个先验的隐空间,最后经冻结的先验解码器还原为逐帧 FLAME 参数并生成网格。

flowchart LR
  A["语音波形"] --> B["Wav2Vec 2.0 语音特征"]
  C["情绪/强度/身份 one-hot 条件"] --> D["线性风格层"]
  B --> E["拼接 + 下采样 SQUASH"]
  D --> E
  E --> F["FLINT 隐序列"]
  F --> G["冻结 FLINT 解码器"]
  G --> H["FLAME 参数序列 → 3D 网格"]
  H --> I["可微渲染 → 口型/情绪感知损失"]

关键设计:

  1. FLINT 运动先验(为什么需要):直接在 SOTA 网络上加感知损失会导致时序抖动和不自然的下颌旋转。FLINT 是一个基于 transformer 编码器的时序 VAE,把 \(T\) 帧的 FLAME 表情+下颌参数(每帧 53 维)压缩成 \(T/q\) 个隐帧(取 \(q=8\)),用重参数化采样,以顶点 MSE 和 KL 散度训练。它约束了合理运动的空间,显著减少高频抖动。

  2. 解耦的口型与情绪监督(是什么/怎么做):口型用逐帧的唇读感知损失 \(L_{lip}\),把嘴部区域裁出送入唇读网络比对特征;情绪用序列级的动态情绪损失 \(L_{emo}\),用一个轻量 transformer 情绪分类器聚合整段的情绪特征 \(\phi\)(256 维)后比对。二者都用负余弦相似度。这样把”高频局部的口型”与”低频全局的情绪”在监督层面分开。

  3. 内容-情绪交换解耦机制(核心创新):仅靠条件输入不足以真正解耦。训练时复制一个 batch 并交换其中的情绪条件——用音频 \(j\) 配上音频 \(i\) 的情绪条件生成结果,要求它的唇读特征仍匹配音频 \(j\) 原本的发音,而情绪特征则要变成新指定的情绪。对应两个解耦损失 \(L_{emo}^{dis}\) 和 \(L_{lip}^{dis}\)。因为情绪被当作序列现象处理,避免了逐帧时间对齐的要求。

  4. 非自回归双向架构(效率):与 FaceFormer/CodeTalker 的 \(O(T)\) 自回归解码不同,EMOTE 的解码器只调用一次,解码复杂度 \(O(1)\),且能像 BERT 一样利用双向未来上下文。

伪真值数据的构造上,作者组合 EMOCA(擅长恢复情绪脸形)、SPECTRE(改善唇动)、MICA(更准的身份形状)并在 MEAD 上微调,得到与音频同步的参考 3D 脸。

实验结果

由于口型与情绪都难以自动评测,作者在 Amazon Mechanical Turk 上做了两个两两对比的感知实验。下面汇总口型同步偏好实验的核心结论(EMOTE 训练于 MEAD 伪真值,而多数基线训练于高质量 3D 扫描数据集):

对比对象 训练数据 口型同步感知偏好
EMOTE MEAD 伪真值 优于 MeshTalk(尽管训练数据质量更低)
EMOTE vs FaceFormer(同训练于 MEAD) MEAD 伪真值 EMOTE 胜出,体现架构与方法的价值
VOCA / FaceFormer / CodeTalker VOCASET 扫描 因扫描数据质量更优,口型偏好高于 EMOTE

消融实验(14 段音频、覆盖 7 种基本情绪)表明去掉解耦项、情绪损失、唇读损失或 FLINT 都会分别损害口型准确性、情绪表现力或时序稳定性,各设计均属关键;一个有趣的现象是用逐帧静态情绪损失替代动态情绪损失时表现与完整模型接近,但偶尔出现闭眼等伪影。

亮点与局限

  • 亮点:
    • 首个支持语音驱动 3D 人脸动画语义级情绪编辑的方法,能在序列过程中切换情绪而不破坏口型。
    • 巧妙利用语音(高频、局部)与情绪(低频、全局)的时空差异设计解耦监督,内容-情绪交换机制思路清晰。
    • 在缺乏 3D 情绪数据的情况下,用视频伪真值训练也能取得优于同数据基线的口型质量。
    • 非自回归双向架构比自回归 SOTA 更高效。
  • 局限:
    • 面对极快的高频语音会失效,主因是伪真值仅 25fps 采样率不足。
    • 不建模眨眼(与语音/情绪相关性弱,确定性方法难捕捉)。
    • 依赖伪真值而非真实 3D 扫描,训练数据质量天花板受限于单目重建方法的精度。

延伸思考

  • 评测完全依赖主观感知实验,说明该任务缺乏可靠的自动指标;构建情绪表现力与口型同步兼顾的客观评价体系是值得追问的方向。
  • “序列级情绪 + 逐帧内容”的解耦思想可迁移到语音驱动的全身手势、头部姿态生成等更广的说话人建模任务(后续 AMUSE 等工作正是沿此方向把内容/情绪/风格进一步分离)。
  • 引入更高帧率的 3D 扫描数据或概率化建模(处理眨眼等弱相关随机行为),有望突破当前确定性模型在高频语音和细节动作上的瓶颈。