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 反卷积层
↓
重构动作速度
关键组件:
- 1D 卷积:捕捉时间序列的局部模式
- 可微 FFT 层:从 latent 中提取正弦波参数
- A = 振幅(amplitude)
- F = 频率(frequency)
- B = 偏移(bias)
- MLP:单独预测相移(phase shift)
- 正弦重构:用提取的参数重建 latent
- 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 Phases | Contact | Learned | Ground Truth |
|---|---|---|---|---|
| 行走 | 55.2 | 61.7 | 63.4 | 66.4 |
| 急转弯冲刺 | 96.9 | 130.2 | 152.4 | 170.2 |
| 爬行 | 8.7 | 26.4 | 45.3 | 58.3 |
| 蹲下 | 47.1 | 62.8 | 64.2 | 77.6 |
结论:学习相位让动作更有活力,接近真实动作
指标 2:脚部滑动(Foot Skating)
| 方法 | 滑动误差 (cm) |
|---|---|
| No Phases | 2.66 |
| RTN | 0.55 |
| Ours | 0.46 |
| Ground Truth | 0.32 |
结论:相位可以显著减少脚部滑动
5.2 长时间过渡能力
测试:训练时最长 60 帧(2 秒),测试时生成更长的过渡
| 帧数 | 30 | 45 | 60 | 75 | 90 | 105 | 120 |
|---|---|---|---|---|---|---|---|
| RTN 误差 | 2.23 | 2.98 | 3.71 | 3.96 | 4.14 | 4.87 | 5.59 |
| Ours 误差 | 2.71 | 2.93 | 3.08 | 3.27 | 3.2 | 3.56 | 3.89 |
关键发现:
- RTN 在长过渡时误差快速增长
- 本文方法误差增长缓慢
- 可以生成比训练长 2 倍的过渡
5.3 双向控制的影响
| 任务 | 位置误差 (cm) | 旋转误差 (°) |
|---|---|---|
| 非双向 - 行走 | 21.59 | 18.94 |
| 双向 - 行走 | 9.61 | 11.23 |
| 非双向 - 爬行 | 26.69 | 29.64 |
| 双向 - 爬行 | 12.05 | 15.01 |
结论:双向控制将目标对齐误差降低约 50%
5.4 压力测试
极端情况 1:10 米距离,2 秒到达
- No Phases:不自然地加速,脚部严重滑动
- Contact Phases:稳定但会漂移
- Learned Phases:生成跳跃动作,自然到达
极端情况 2:30 米距离,10 秒到达
- 系统生成合理的跑步动作
- 虽然开始时有点"僵硬"
- 整体过渡自然
六、局限性与未来方向
6.1 局限性
-
依赖训练数据
- 只能生成训练过的动作类型
- 未见过的动作需要重新训练
-
长过渡质量下降
- 虽然比 baseline 好,但超长过渡仍有问题
- 动作可能变得"僵硬"
-
物理合理性
- 没有显式的物理约束
- 可能有轻微的穿透或漂浮
6.2 未来方向
-
结合物理仿真
- 像 POMP 一样加入物理模块
- 保证物理合理性
-
更长的上下文
- 使用 Transformer 等架构
- 捕捉更长程的依赖
-
多角色交互
- 扩展到双人/多人动作
- 处理角色间物理交互
七、启发与总结
7.1 核心启发
1. 相位是时间的"内在表示"
- 不要依赖外部时间("还剩多少帧")
- 学习内在的相位时钟
- 相位可以外推到未见过的时间长度
2. 流形是结构的"几何表示"
- 把动作组织成连续的流形空间
- 相近的点 = 相近的动作
- 在流形上插值 = 自然过渡
3. 无监督学习的力量
- Periodic Autoencoder 不需要相位标签
- 自动从数据中发现相位结构
- 学到的相位可以迁移到下游任务
7.2 与相关工作的对比
| 方法 | 相位表示 | 时间外推 | 物理约束 |
|---|---|---|---|
| RTN | 无 | 差 | 无 |
| CVAE | 隐式 | 中 | 无 |
| 本文 | 显式相位流形 | 好 | 无 |
| POMP | 相位流形 + 物理 | 好 | 有 |
7.3 一句话总结
本文的核心贡献:用相位流形作为动作的"内在时钟"和"几何结构",实现了自然、稳定、可外推的 motion in-betweening。
笔记说明:本文是 SIGGRAPH 2023 关于动作中间帧生成的工作。核心创新是使用 Periodic Autoencoder 学习相位流形,将动作在时间和空间上对齐,然后通过 Mixture-of-Experts 网络生成平滑过渡。理解本文有助于学习数据驱动的动作生成方法,特别是如何处理长时间过渡和相位匹配问题。