Motion In-Betweening with Phase Manifolds

论文信息: ACM Transactions on Graphics (SIGGRAPH) 2023, Paul Starke et al., Electronic Arts/Universität Hamburg/Meta Reality Labs

Link: ACM Digital Library

代码: GitHub - pauzii/PhaseBetweener


一、核心问题:什么是 Motion In-Betweening?

1.1 一个直观的例子

想象你是一位动画师,正在制作一个游戏角色的动画:

关键帧 1 (第 0 帧)          关键帧 2 (第 60 帧)
    站立姿势   ------------>    蹲下姿势
              中间怎么办?

Motion In-Betweening(动作中间帧生成) 就是要解决:给定起始姿势和目标姿势,自动生成中间的过渡动作

1.2 传统方法的困境

问题 1:线性插值很僵硬

最 naive 的做法是直接对关节角度做线性插值:

  • 第 30 帧 = (第 0 帧 + 第 60 帧) / 2

但这样生成的动作会:

  • 看起来像机器人,没有"活力"
  • 脚会在地面滑动(foot skating)
  • 身体会穿透地面

问题 2:时间长就更糟

当两个关键帧时间间隔很长时(比如 4 秒以上),问题更严重:

  • 系统不知道中间应该做什么动作
  • 可能生成"原地漂浮"的诡异动作
  • 无法处理复杂的动作(如爬行、翻滚)

问题 3:相位不匹配

假设起始帧是"左脚着地",目标帧是"右脚着地":

  • 直接插值会导致"双脚同时着地"的不自然动作
  • 系统需要理解"行走周期"的概念

1.3 本文的核心洞察

关键思想:引入相位(Phase) 作为时间的"内在时钟"。

类比理解:

  • 想象一个正弦波:sin(ωt + φ)
  • 相位 φ 告诉你在波的哪个位置(波峰?波谷?上升段?)
  • 对于行走动作,相位可以告诉你:左脚着地?右脚着地?腾空?

相位流形(Phase Manifold) 就是把所有可能的相位状态组织成一个连续的空间,在这个空间里:

  • 相近的相位 = 相近的动作时刻
  • 可以平滑地从一个相位过渡到另一个相位
  • 可以生成训练时没见过的长时间过渡

二、核心概念详解:什么是相位流形?

2.1 相位(Phase)的直观理解

定义:相位是描述周期性运动"当前处于哪个阶段"的变量。

例子 1:行走周期

        左脚着地          双脚着地          右脚着地          双脚着地
相位 0°  --------->  相位 90°  --------->  相位 180° ---------> 相位 270°
   ⊙                    ⊙                    ⊙                    ⊙
  /|\                  /|\                  /|\                  /|\
   |  左脚在前          |  双脚并拢          |  右脚在前          |  双脚并拢
  / \                  / \                  / \                  / \

关键观察

  • 行走是周期性的:0° → 360° → 0°(循环)
  • 相位 0° 和相位 360° 是同一个状态
  • 相位可以表示为角度圆上的点

数学表示: $$\phi \in [0, 2\pi)$$

或者用 2D 向量表示(更方便神经网络处理): $$\mathbf{p} = [\cos(\phi), \sin(\phi)]$$

2.2 为什么需要"流形"(Manifold)?

单一相位不够用

对于简单的行走,一个相位变量就够了。但对于复杂动作:

  • 左手和右手可能在不同相位(如一只手插兜,另一只手摆动)
  • 上半身和下半身可能独立运动(如边走路边挥手)
  • 不同身体部位有不同的周期

解决方案:多通道相位

论文使用 5 个相位通道(C=5),每个通道捕捉不同的运动模式:

通道 0: 下肢行走相位(左右脚交替)
通道 1: 上肢摆动相位(左右手交替)
通道 2: 身体起伏相位(上下运动)
通道 3: ...
通道 4: ...

相位流形 就是这 5 个相位通道张成的空间: $$\mathcal{P} = {(\phi_1, \phi_2, \phi_3, \phi_4, \phi_5) \mid \phi_i \in [0, 2\pi)}$$

几何直观

  • 每个相位通道是一个圆(S¹)
  • 5 个圆组合成一个 5 维环面(5-torus)
  • 动作序列就是这个环面上的一条轨迹

2.3 相位流形的核心优势

优势 1:时间对齐

没有相位时:

  • 神经网络只能靠"还剩多少帧"来猜测动作
  • 相同的剩余时间可能对应完全不同的姿势

有相位时:

  • 相位直接编码"动作进行到哪个阶段"
  • 相同的相位 = 相同的动作阶段
  • 避免"时间混合"(不同时刻的姿势被混淆)

优势 2:长时外推

训练时只见过 2 秒的过渡,测试时要生成 4 秒的过渡:

没有相位:

  • 网络没见过这么长的时间,直接懵了
  • 生成的动作会"卡住"或漂移

有相位:

  • 相位的变化率(频率)可以外推
  • 网络知道"继续按这个节奏走"
  • 可以生成比训练更长的过渡

优势 3:相位匹配

起始帧相位 = 0°(左脚着地),目标帧相位 = 180°(右脚着地):

  • 网络知道需要走"半步"
  • 不会生成"双脚同时着地"的诡异动作

三、Periodic Autoencoder:如何学习相位流形?

3.1 问题设定

输入:动作捕捉数据(关节位置/速度序列)

输出:相位变量 + 重构的动作

挑战

  • 没有相位标签(无监督学习)
  • 相位需要从数据中自动发现

3.2 核心架构

动作速度序列 (121 帧)
       ↓
   1D 卷积层 (提取局部特征)
       ↓
   Latent Embedding (5 通道)
       ↓
   ┌──────────┬──────────┐
   ↓          ↓          ↓
可微 FFT     可微 FFT    MLP
(提取 A,F,B) (提取 A,F,B) (预测相移 S)
       ↓          ↓          ↓
       └────────────────────┘
               ↓
         重构 Latent: L(t) = A·sin(2π(F·t - S)) + B
               ↓
         1D 反卷积层
               ↓
         重构动作速度

关键组件

  1. 1D 卷积:捕捉时间序列的局部模式
  2. 可微 FFT 层:从 latent 中提取正弦波参数
    • A = 振幅(amplitude)
    • F = 频率(frequency)
    • B = 偏移(bias)
  3. MLP:单独预测相移(phase shift)
  4. 正弦重构:用提取的参数重建 latent
  5. 1D 反卷积:从 latent 重构动作

3.3 相位提取公式

训练完成后,相位编码通过以下方式计算:

对于每个通道 $t \in {0,1,2,3,4}$:

$$\text{pe}(2t) = A_t \cdot \cos(2\pi \cdot S_t)$$ $$\text{pe}(2t+1) = A_t \cdot \sin(2\pi \cdot S_t)$$

输出:10 维相位编码向量(5 通道 × 2 维)

为什么用 (cos, sin) 表示

  • 避免相位跳变(0 和 2π 在圆上是同一点)
  • 神经网络更容易处理连续表示
  • 可以直接做线性插值

3.4 相位可视化

论文图 3 展示了不同动作的相位通道:

侧步行走          爬行动作          跑步转跳跃
   ~~~             ~~~              ~~~
  /     \         /     \          /     \
 ~       ~       ~       ~        ~       ~
(相位平滑变化)   (相位平滑变化)    (相位有突变)

观察

  • 周期性动作(行走、爬行):相位平滑变化
  • 非周期性动作(跳跃):相位有突变
  • 不同动作有不同的相位模式

四、In-Betweening 框架:如何使用相位流形?

4.1 整体架构

┌─────────────────────────────────────────────────────────┐
│                   输入 (第 i 帧)                         │
│  - 当前姿势 X_i^S                                       │
│  - 目标姿势 X_i^T                                       │
│  - 轨迹信息 X_i^R                                       │
│  - 接触信息 X_i^C                                       │
│  - 相位信息 X_i^P (10 维)                                │
└─────────────────────────────────────────────────────────┘
                          ↓
┌─────────────────────────────────────────────────────────┐
│              Gating Network (门控网络)                   │
│  输入:相位信息 X_i^P                                    │
│  输出:8 个专家的混合权重 α                               │
└─────────────────────────────────────────────────────────┘
                          ↓
┌─────────────────────────────────────────────────────────┐
│          Motion Prediction Network (运动预测网络)        │
│  8 个专家网络,每个输出预测结果                           │
│  加权组合:Y = Σ α_k · Expert_k(X)                      │
└─────────────────────────────────────────────────────────┘
                          ↓
┌─────────────────────────────────────────────────────────┐
│                  输出 (第 i+1 帧)                        │
│  - 预测姿势 Y^S                                          │
│  - 预测轨迹 Y^R                                          │
│  - 预测接触 Y^C                                          │
│  - 相位更新 Y^P (频率 + 振幅)                            │
└─────────────────────────────────────────────────────────┘

4.2 Mixture-of-Experts 设计

为什么用 MoE?

不同动作类型需要不同的"专家"处理:

  • 专家 1:处理行走
  • 专家 2:处理跑步
  • 专家 3:处理爬行
  • ...

门控网络:根据当前相位,决定哪个专家"值班"

$$\alpha = \text{softmax}(g(\phi))$$ $$Y = \sum_{k=1}^8 \alpha_k \cdot \text{Expert}_k(X)$$

好处

  • 每个专家可以专注特定动作类型
  • 相位相近的动作自动聚类
  • 支持动作平滑过渡

4.3 双向控制(Bi-directional Control)

问题:自回归生成会有累积误差,导致到不了目标姿势

解决:从两个方向预测,然后混合

Ego-centric(自我中心)

  • 从当前姿势出发,向前预测
  • "我现在在哪,下一步去哪"

Goal-centric(目标中心)

  • 从目标姿势出发,向后预测
  • "目标在哪,怎么靠近"

混合公式

$$Y_{final} = (1-\lambda) \cdot Y_{ego} + \lambda \cdot Y_{goal}$$

其中 λ 根据"还剩多少时间到目标"动态调整:

  • 刚开始:λ 小,相信自己预测
  • 快到了:λ 大,相信目标预测

效果

  • 起始阶段:动作自然流畅
  • 结束阶段:精确对齐目标

五、实验结果

5.1 相位变量的影响

对比实验

  • No Phases:不用相位输入
  • Contact Phases:只用接触点相位(脚/手/臀)
  • Learned Phases:用 Periodic Autoencoder 学习的相位

指标 1:动作活力(Vividness)

动作类型No PhasesContactLearnedGround Truth
行走55.261.763.466.4
急转弯冲刺96.9130.2152.4170.2
爬行8.726.445.358.3
蹲下47.162.864.277.6

结论:学习相位让动作更有活力,接近真实动作

指标 2:脚部滑动(Foot Skating)

方法滑动误差 (cm)
No Phases2.66
RTN0.55
Ours0.46
Ground Truth0.32

结论:相位可以显著减少脚部滑动

5.2 长时间过渡能力

测试:训练时最长 60 帧(2 秒),测试时生成更长的过渡

帧数3045607590105120
RTN 误差2.232.983.713.964.144.875.59
Ours 误差2.712.933.083.273.23.563.89

关键发现

  • RTN 在长过渡时误差快速增长
  • 本文方法误差增长缓慢
  • 可以生成比训练长 2 倍的过渡

5.3 双向控制的影响

任务位置误差 (cm)旋转误差 (°)
非双向 - 行走21.5918.94
双向 - 行走9.6111.23
非双向 - 爬行26.6929.64
双向 - 爬行12.0515.01

结论:双向控制将目标对齐误差降低约 50%

5.4 压力测试

极端情况 1:10 米距离,2 秒到达

  • No Phases:不自然地加速,脚部严重滑动
  • Contact Phases:稳定但会漂移
  • Learned Phases:生成跳跃动作,自然到达

极端情况 2:30 米距离,10 秒到达

  • 系统生成合理的跑步动作
  • 虽然开始时有点"僵硬"
  • 整体过渡自然

六、局限性与未来方向

6.1 局限性

  1. 依赖训练数据

    • 只能生成训练过的动作类型
    • 未见过的动作需要重新训练
  2. 长过渡质量下降

    • 虽然比 baseline 好,但超长过渡仍有问题
    • 动作可能变得"僵硬"
  3. 物理合理性

    • 没有显式的物理约束
    • 可能有轻微的穿透或漂浮

6.2 未来方向

  1. 结合物理仿真

    • 像 POMP 一样加入物理模块
    • 保证物理合理性
  2. 更长的上下文

    • 使用 Transformer 等架构
    • 捕捉更长程的依赖
  3. 多角色交互

    • 扩展到双人/多人动作
    • 处理角色间物理交互

七、启发与总结

7.1 核心启发

1. 相位是时间的"内在表示"

  • 不要依赖外部时间("还剩多少帧")
  • 学习内在的相位时钟
  • 相位可以外推到未见过的时间长度

2. 流形是结构的"几何表示"

  • 把动作组织成连续的流形空间
  • 相近的点 = 相近的动作
  • 在流形上插值 = 自然过渡

3. 无监督学习的力量

  • Periodic Autoencoder 不需要相位标签
  • 自动从数据中发现相位结构
  • 学到的相位可以迁移到下游任务

7.2 与相关工作的对比

方法相位表示时间外推物理约束
RTN
CVAE隐式
本文显式相位流形
POMP相位流形 + 物理

7.3 一句话总结

本文的核心贡献:用相位流形作为动作的"内在时钟"和"几何结构",实现了自然、稳定、可外推的 motion in-betweening。


笔记说明:本文是 SIGGRAPH 2023 关于动作中间帧生成的工作。核心创新是使用 Periodic Autoencoder 学习相位流形,将动作在时间和空间上对齐,然后通过 Mixture-of-Experts 网络生成平滑过渡。理解本文有助于学习数据驱动的动作生成方法,特别是如何处理长时间过渡和相位匹配问题。