Riemannian Motion Generation:让动作生成本来就「活在弯曲的流形」上
🎯 为什么重要:动作表示的「冗余原罪」
人体有 $J$ 个关节,每个关节本质上是 3 维的旋转(SO(3)),所以一帧姿态的内在自由度大约是 $3J$。然而主流数据集(HumanML3D、MotionStreamer…)为了方便,把同一个状态用多种坐标视角同时记录——关节旋转、关节位置、关节速度、脚触地标记…塞进 $12J$ 维的欧式向量里。
这就造成一个被忽视的代价:模型在一个远大于数据真实维度的空间里学,损失景观里会出现 $d-m$ 个零曲率的冗余方向(论文命题 1 严格证明了这点)。直觉上:沿这些方向走,姿态根本不变,但梯度会告诉你「这里很平」,让优化茫然。
| 表示格式 | 包含的因子 | 环境维度 | 问题 |
|---|---|---|---|
| HumanML3D | $R_\text{Joint}+P+dT+dR_J+dP$ | $12J-1$ | 冗余最大;姿态/位置/速度三套并存 |
| MotionStreamer | $R_\text{Joint}+P+dT+dR_J$ | $12J+8$ | 同上 |
| DART | $T+R_\text{Ori}+R_J+P+dT+dR_J$ | $12J+12$ | 加入全局平移与朝向,更冗余 |
| HY-Motion | $T+R_\text{Ori}+R_J$ | $9J+3$ | 已较紧凑,但仍用 6D 旋转表示 |
| RMG(本文) | $T+R_\text{Ori}+R_J$,单位四元数 | $4J+3$ | 每个因子放在它的「自然流形」上 |
论文表 1 的一行总结:过去所有方法的维度都是 $9J$ 起步,而 RMG 只用 $4J+3$。当 $J=22$(SMPL 标准骨架),就是 91 维 vs 263 维——少了一个数量级。
💡 核心思想:把动作拆成「带几何的因子」,每个因子放回它本来的流形
RMG 把一帧姿态分解成两类因子,每类都映射到对应的黎曼流形:
关键转变有三:
① 单位四元数代替 6D 旋转——直接落在 $S^3$ 上,4 维刚好,没有冗余,测地线天然光滑;
② 切空间监督——神经网络输出仍是个欧式向量,但训练时投影到当前点的切平面 $\Pi_{T_{x_t}M}$ 再与目标速度做 MSE,数学保证速度「永远朝流形内部走」;
③ 流形保持积分——推理时用黎曼 Euler 法 $x_{t+h}=\mathrm{Exp}_{x_t}(h\cdot v_\theta)$,每步积分后自动回到流形上,无需事后正交化。
🛠️ 三步把 flow matching 搬到弯曲流形
| 环节 | 欧式版(旧) | 黎曼版(RMG) | 为什么必要 |
|---|---|---|---|
| ① 插值路径 | $x_t = (1-t)x_0 + t x_1$(直线) | $x_t = \mathrm{Exp}_{x_0}(t\,\mathrm{Log}_{x_0}(x_1))$(测地线) | 旋转的「直线插值」会脱离球面 → 必须沿测地线,结果始终是合法旋转 |
| ② 目标速度 | $v_t = x_1 - x_0$(常数) | $v_t = \frac{1}{1-t}\mathrm{Log}_{x_t}(x_1)$(切向量) | 切空间里的向量,才能数学一致地「指回数据点」 |
| ③ 网络输出 | 直接回归 | $\Pi_{T_{x_t}M}\,v_\theta(x_t,t)$ 投影 | 网络输出在 $\mathbb{R}^D$,必须投影到切空间才是合法速度 |
| ④ 推理积分 | $x_{t+h} = x_t + h\,v$ | $x_{t+h} = \mathrm{Exp}_{x_t}(h\,v)$ | Exp 映射「把切空间向量绕回流形」,保证约束 by construction |
| ⑤ 先验分布 | 高斯 $\mathcal{N}(0,I)$ | 「包裹高斯」$\mathrm{RN}(\mu,\Sigma)$:先在切空间采噪声,再 Exp 到流形 | 球面上的「高斯」不是直接采样,而是切空间采样+指数映射 |
论文命题 2 给出严格证明:当数据支撑在 $d$ 维流形上、环境维度 $D\gg d$ 时,黎曼 flow matching 的 $W_2$ 误差率是 $n^{-2s/(2s+d)}$,欧式版只能达到 $n^{-2s/(2s+D)}$。分母里的 $D$ 换成 $d$,收敛快得多。这不是工程 trick,是把生成模型放回数据真实维度带来的统计红利。
具体实现:DiT(Diffusion Transformer)骨干;HumanML3D 上文本编码用 Qwen3-Embedding-0.6B(1024 维特征),MotionMillion 上换成 Qwen3-1.7B + 单流 MM-DiT;classifier-free guidance(dropout 10%)+ EMA + cosine warmup。
📊 结果:FID 0.043(HumanML3D SOTA),MotionStreamer 格式全指标第一
| 维度 | 数字 | 对比 |
|---|---|---|
| HumanML3D 格式 FID↓ | 0.043±0.002 | 前 SOTA MoMask 0.045,RMG 略胜 |
| HumanML3D R@1↑ | 0.525±0.002 | 第二(仅次于 MotionCLR 0.542) |
| HumanML3D Diversity / MModality | 9.555 / 2.748 | 同时保持高多样性(不像 MotionCLR 偏科) |
| MotionStreamer 格式 FID↓ | 5.835±0.060 | 碾压前 SOTA MotionStreamer 11.790(砍半) |
| MotionStreamer 格式 R@1↑ | 0.710 | 第一(GT 0.702 居然被超过) |
| MotionStreamer 格式 4 指标 | 4/4 全部第一 | 唯一一个在所有报告指标上同时领先 |
| MotionMillion FID↓(guidance 2.0) | 5.6 | 对比 MotionMillion-7B 的 10.3(分布差距近半) |
| MotionMillion R@1↑(guidance 3.0) | 0.86 | 超 7B 模型的 0.79,模型尺寸却更小(0.5B+1.7B) |
消融:哪些因子真正重要?
| 表示 | FID 在 guidance sweep 下的表现 | 结论 |
|---|---|---|
| T+R(本文采用) | 0.084→0.043→0.101(ω: 2.5→6.5→9.5) | 最稳、最低、最鲁棒 |
| T+P(无旋转) | 0.20→0.44 单调恶化 | 没有旋转,guidance 越强越崩 |
| T+R+P | 中间,恢复方式影响大 | 加 P 不带来增益 |
| T+dR(用速度替旋转) | 0.44→1.03 | 时序差分「丢全局、保局部」,长程结构弱 |
两个研究问题的答案:(RQ1) 旋转因子是稳定性主因,pose-coordinate 无额外贡献;(RQ2) 时序差分反而有害——绝对的位置+旋转表示最鲁棒。这与动画 / 机器人管线的实践一致:运动总是由「根节点平移 + 关节旋转」驱动。
🌐 在领域中的位置
RMG 是动作生成「几何化」的里程碑。它把「旋转活在 SO(3)/$S^3$、不是 $\mathbb{R}^6$」这件数学事实首次完整地搬到大模型 + 大数据上,并给出严格的理论解释(命题 1 冗余产生零曲率方向、命题 2 流形 flow matching 收敛率严格更优)。线索:与 Diffusion Policy、π0 等 action head 工作共通——后者也开始思考「动作头要不要几何感知」。关联线索:动作生成的几何化分支。
❓ 常见误区
这和「6D 旋转表示」(Zhou 2019)有什么区别?
6D 表示是「把旋转用 6 个数表示,再正交化」——它仍是欧式空间的产物,需要事后 re-orthogonalization 才合法。RMG 用单位四元数,直接落在 $S^3$ 上:4 维(vs 6D)、无需正交化、测地线天然光滑。前者是「摊平后修补」,后者是「一开始就在球面上」。
「黎曼 flow matching」是不是只是把欧式公式里的直线换成测地线?
形式上是这样,但收益来自三层叠加:(1) 插值路径不脱离流形(避免无效中间态);(2) 监督信号在切空间(保证速度合法);(3) 推理时 Exp 映射自动回弹(约束 by construction)。三层合起来才能让模型在低维弯曲空间里学到正确的速度场。
为什么消融里「时序差分(速度)反而更差」?直觉上速度应该有用啊?
因为 flow matching 本身就是「学一个时间相关的速度场」——网络已经在学「朝下一个状态走多快」。再显式加一层时序差分输入,相当于让模型用「局部速度」代替「全局姿态」,削弱了对长程结构的把握。实验在 guidance 增大时尤为明显:T+dR 的 FID 从 0.44 涨到 1.03。
和 Diffusion Policy 比,有什么共通点和差异?
共通:都把动作生成从「回归」换成了「生成模型学分布」。差异:Diffusion Policy 解决的是多模态动作分布问题(在欧式空间里用扩散);RMG 解决的是动作空间的几何问题(在弯曲流形上做 flow matching)。两者正交,理论上可以合体——让 Diffusion Policy 的动作头跑到旋转流形上。