Perpetual Humanoid Control (PHC) & Universal Humanoid Motion Representations (UHC/PULSE)
作者 / 机构:Zhengyi Luo, Jinkun Cao, Alexander Winkler, Kris Kitani, Weipeng Xu (CMU & Meta Reality Labs Research);UHC 多了 Josh Merel, Jing Huang
发表:PHC — arXiv 2305.06456 (2023.05, ICCV 2023);UHC/PULSE — ICLR 2024 (2023.10 arXiv 2310.04582)
arxiv:2305.06456 (PHC) · 2310.04582 (UHC) · 项目页:https://zhengyiluo.github.io/PHC/ · https://zhengyiluo.github.io/PULSE/
在线索中的位置:属于 [T04 · Motion Prior:从 AMP 到 BFM] 的转折 4 / 大规模 controller 雏形;是 BFM(2025)的直接前身——把 ASE/CALM 的「技能库」升级成「单 policy 覆盖全 AMASS」。
一句话定位:PHC 用 Progressive Multiplicative Control Policy (PMCP) 训出第一个无「上帝之手」residual force、单 policy 覆盖 98.9% AMASS(40h+ MoCap)、并自带 fall recovery 的人形 controller;UHC/PULSE 把 PHC 升级到 100% 覆盖率并蒸馏成 universal motion representation (PULSE),把 motor skill 压进一个可复用的 latent space,成为后续 retarget/teleop/BFM 的事实基座 motor policy。
动机:为什么需要 PHC
到 2023 年初,ASE/CALM 已经能学 64 维 latent skill,但有两个硬约束:
- 覆盖率不够「universal」:ASE 在 187 段 gladiator 题材 MoCap 上训,CALM/Multi-AMP 也只覆盖特定风格(locomotion / boxing / dancing)。MoCap 的「圣杯」是 AMASS(~10000 clips、40+ 小时、15 个数据集合并),但单 policy 在整个 AMASS 上高保真模仿一直没人做到。
- fall recovery 缺位:之前所有 physics-based imitator 一旦跌倒就 reset,这在 avatar 应用里致命——用 webcam pose 估计当输入,pose 估计会穿地/抖动/不可能姿态,policy 立刻跌倒,reset 又回到不可靠 pose,「跌倒-reset-再跌倒」死循环。
当时的 SOTA 是 UHC(Luo et al. NeurIPS 2021,Dynamics-regulated kinematic policy for egocentric pose estimation,PHC 把它作为基线 [22],注意不是本笔记讲的 UHC/PULSE)+ Residual Force Control (RFC):用「上帝之手」额外力 puppet 人形,能 cover 97% AMASS,但力破坏物理真实感(flying/floating/swinging)。PHC 要回答的是:不用 RFC、不加任何外力,单 policy 能不能在 AMASS 上 ≥ 97%、且能从跌倒态自然爬起来?
UHC/PULSE(2023.10)则在 PHC 之上加一层:「把 PHC 的 motor skill 蒸馏成一个 universal latent space」——这个 space 能当 HRL 的 action space,让下游任务(speed/strike/terrain/VR tracking)不再需要从零训 policy。这是 ASE latent skill 思路在大规模数据上的真正落地。
方法核心
PHC:goal-conditioned RL + AMP + PMCP
PHC 是一个 goal-conditioned policy $\pi_\text{PHC}(a_t|s_t)$,输入是仿真状态 $s_t = (s^p_t, s^g_t)$:proprioception $s^p_t = (q_t, \dot{q}_t, \beta)$(pose/velocity/body shape)+ goal state $s^g_t$(参考姿态和当前姿态的差,含 root rotation $\hat\theta_{t+1}\ominus\theta_t$、translation、linear/angular velocity 等)。action $a_t \in \mathbb{R}^{23\times 3}$ 是 SMPL 23 个 actuated joint 的 PD target。
关键设计 1:reward = task + AMP + energy(Eq. 1)
$$r_t = 0.5\,r^g_t + 0.5\,r^\text{amp}_t + r^\text{energy}_t$$
- $r^g$ 是 imitation reward:joint position ($w_\text{jp}e^{-100\|\hat p-p\|}$) + joint rotation ($e^{-10}$) + linear vel ($e^{-0.1}$) + angular vel ($e^{-0.1}$),4 项指数加权和(Eq. 2)。精确权重(PHC 附录 hyperparameter 表):$w_\text{jp}=0.5,\,w_\text{jr}=0.3,\,w_\text{jv}=0.1,\,w_\text{j\omega}=0.1$。
- $r^\text{amp}$ 是 AMP 的判别器 reward——PHC 全程沿用 AMP,用 proprioception $s^p_{t-10:t}$ 10 帧窗口判别。这是 fall recovery 自然感的关键:跌倒姿态在 MoCap 里没有,但 AMP 判别器仍能约束「爬起来的动作像人」。
- $r^\text{energy} = -0.0005\sum_j |\mu_j\omega_j|$(joint torque × angular velocity,§3.1 原文 $-0.0005 \cdot \sum_{j\in\text{joints}} |\mu_j\omega_j|$),防 policy 抖脚——这是去掉 RFC 后必须自己加的正则。
和 AMP/ASE 的关系:PHC 不是替代 AMP,而是 AMP + goal-conditioned tracking + PMCP 的组合。AMP 在这里当 portable motion prior,让 fall recovery 这种「无参考」的子任务也能产生 natural motion。ASE 把 AMP 放进 latent z,PHC 把 AMP 直接加进 reward。
关键设计 2:Progressive Multiplicative Control Policy (PMCP)——这是 PHC 能 scale 到 AMASS 的核心。
直接在 AMASS 上训单 policy 会 catastrophic forgetting:训难的 clip 时把易 clip 忘掉。PMCP 借 Progressive Neural Networks (PNN) 思路:训一系列 primitives $P^{(1)}, P^{(2)}, \ldots, P^{(K)}$,每个负责越来越难的子集。
- $P^{(1)}$ 在整个数据集 $\hat Q$ 上训到收敛(success rate 不再涨)。
- 评估 $P^{(1)}$ 在 $\hat Q$ 上失败的 sequence,组成 $\hat Q_\text{hard}^{(1)}$。
- 冻结 $P^{(1)}$,新初始化 $P^{(2)}$(可选 lateral connection 或 weight sharing),只训 $\hat Q_\text{hard}^{(1)}$。
- 递归得到 $\hat Q_\text{hard}^{(2)} \subseteq \hat Q_\text{hard}^{(1)}$,$P^{(3)}$ 训 $\hat Q_\text{hard}^{(2)}$,依此类推。
- 论文还提一种「weight sharing 变体」:新 $P^{(k+1)}$ 直接从 $P^{(k)}$ 权重 init(去掉 lateral connection)——这本质是「在 hard 子集上 fine-tune 一个新 copy」,但保留旧 copy 的能力。motion imitation 任务里这种变体更好用,因为动作高度相关。
最后训一个 composer $C(w^{1:K+1}_t|s_t)$,输出权重 $w \in \mathbb{R}^{K+1}$ 动态组合 primitives。组合方式是 Multiplicative Control Policy (MCP)(Eq. 5)——不是 MoE 的 top-1 选一个,而是「top-inf MoE」:所有 primitive 同时激活,按权重相乘 policy 分布:
$$\pi(a_t|s_t) = \frac{1}{\mathcal{C}(s_t)} \prod_i^k \mathcal{P}^{(i)}(a^{(i)}_t|s_t)^{\mathcal{C}(s_t)}$$
合并后是高斯(Eq. 6):mean 和 variance 都按 $w/\sigma$ 加权。这个 design 让 composer 在 hard/easy 边界模糊时能平滑过渡。
关键设计 3:fall recovery 的三类失败态处理(这是 PHC "Perpetual" 之名的来源)
PHC 显式定义三类 fail-state,并在 primitive stack 末端加一个 $P^{(F)}$ 专门处理:
- Fallen on the ground:人形躺在地上。
- Faraway from reference (> 0.5m):姿态没倒但位置偏离参考。
- Fallen + faraway:上述两者组合。
$P^{(F)}$ 的关键 trick:fail-state 下屏蔽非 root 的参考信息。因为跌倒时再去模仿参考姿态没意义(不能在地上「模仿跑步」),所以 $s^g$ 只保留 root 的位置和朝向,非 root 关节 goal 全部置 identity。这把目标从「逐关节 imitation」降级成「point-goal navigation」——只需要爬起来并往参考 root 走。具体(Eq. 3):
$$s^g_t = \begin{cases} s^g_t \text{ (full imitation)} & \|\hat p^0_t - p^0_t\|_2 \leq 0.5 \\ s^{g-\text{Fail}}_t \text{ (point-goal)} & \text{otherwise} \end{cases}$$
$P^{(F)}$ 的 reward 是 point-goal reward + AMP + energy(Eq. 4):$r^\text{g-recover}_t = 0.5 r^\text{g-point}_t + 0.5 r^\text{amp}_t + 0.1 r^\text{energy}_t$,point-goal 是 $r^\text{g-point}_t = d_{t-1} - d_t$(root 距离的单调下降)。$P^{(F)}$ 只在 Qloco(手动挑的行走/跑步子集)上训,让 AMP 判别器偏简单 locomotion 分布。距离 > 5m 时 goal 位置归一化(防止目标太远梯度爆炸)。
跌倒初始化沿用 ASE:每 episode 开始有概率把人形随机从空中扔下(随机高度/朝向)。faraway 态通过把人形初始化在距参考 2–5m 处构造。composer 训练时交错训练 imitation 和 recovery(Alg. 1)。
其他工程细节(决定成败):
- Relaxed Early Termination (RET):UHC 旧的终止条件是所有关节离参考 > 0.5m 就 reset。PHC 发现 ankle/toe 关节因为仿真脚和真人多段脚的 dynamics mismatch,硬跟会导致失衡,所以把 ankle 和 toe 移出 termination 条件(这些关节的 imitation/discriminator reward 仍保留,防动作不人类)。这个小细节对成功率影响显著。
- 不用 residual action:之前方法用 $q^d_t = \hat q_t + a_t$(参考姿态 + 残差)加速训练,但 PHC 直接 $q^d_t = a_t$,完全移除对参考的依赖——这才能处理 noisy/ill-posed reference。
- keypoint-only imitation:state 可只用 3D keypoint(不要求 joint rotation),兼容只输出 keypoint 的视觉 estimator(MeTRAbs)。
UHC/PULSE:把 PHC 蒸馏成 universal motion representation
UHC(ICLR 2024,项目名 PULSE = Physics-based Universal motion Latent SpacE)的 pipeline 三步:
Step 1:PHC+ —— 拉到 100% AMASS 覆盖率。PHC 是 98.9%。UHC 分析发现 AMASS 里有严重穿透/不连续的 clip,hard-negative mining 会被这些脏数据卡住——清洗后性能提升。另外 PHC 一发现 $\hat Q_\text{hard}^{(t)}$ 就立刻开 $P^{(t+1)}$,剥夺了 $P^{(t)}$ 在自己的 hard negative 上继续学的机会;改成让 $P^{(t)}$ 先在 $\hat Q_\text{hard}^{(t)}$ 上充分训再加 $P^{(t+1)}$,配合架构小改,只用 3 个 primitive 就到 100%。这就是 PHC+。
Step 2:online distillation 学 latent space。目标是把 PHC+ 的 motor skill 分布 $P(a_t|s^p_t, s^{g-\text{mimic}}_t)$ 压进一个 latent $z_t$。架构是 encoder-decoder + learnable prior(Fig. 2):
- Encoder $E(z_t|s^p_t, s^{g-\text{mimic}}_t) = \mathcal{N}(\mu^e_t, \sigma^e_t)$
- Decoder $D(a_t|s^p_t, z_t)$
- Prior $R(z_t|s^p_t) = \mathcal{N}(\mu^p_t, \sigma^p_t)$(不是 VAE 的零均值高斯,而是 conditioned on proprioception 的 learnable prior,灵感来自 HuMoR)
目标(Eq. 2,ELBO):
$$\log P(a_t|s^p_t, s^{g-\text{mimic}}_t) \geq \mathbb{E}_E[\log D(a_t|s^p_t, z_t)] - D_{KL}(E\|R)$$
Loss(Eq. 3):$\mathcal{L} = \mathcal{L}_\text{action} + \alpha\mathcal{L}_\text{regu} + \beta\mathcal{L}_\text{KL}$。
- $\mathcal{L}_\text{action} = \|a^{\text{PHC+}}_t - a_t\|^2_2$:直接回归 PHC+ 的 action(不是 reconstruction,没有 state 重建项)。
- $\mathcal{L}_\text{regu} = \|\mu^e_t - \mu^e_{t-1}\|^2_2$:相邻帧 latent 平滑,类似 NPMP 的 AR(1) prior——消融里这非常关键,不加 latent 空间不连续,下游 RL 探索失败。
- $\beta$ anneal 调 reconstruction/KL 平衡。
为什么不用 RL 直接训 latent?作者试过:(a) RL-only 训不出好 latent;(b) RL + supervised 混合反而比纯 supervised 更差(RL 探索噪声污染 latent)。所以 PULSE 完全 supervised distillation,硬约束在 PHC+ 的 action 分布上。训练数据通过 rollout πPULSE + 查询 PHC+ 拿到 $(s^p, s^{g-\text{mimic}}, a, a^{\text{PHC+}})$ 对,hard-negative mining + progressive training 同 PHC。
Step 3:hierarchical downstream control。冻结 decoder $D$ + 仿真当新 MDP,action 变成 $z$。高层 task policy $\pi_\text{task}(z^\text{task}_t|s^p_t, s^g_t)$ 训 downstream。关键:action 是 residual 到 prior mean(Eq. 4):
$$a^{\text{task}, d}_t = D(\pi_\text{task}(z^\text{task}_t|s^p_t, s^g_t) + \mu^p_t)$$
$\mu^p_t$ 来自 prior $R(z_t|s^p_t)$,提供「人形当前状态下的合理 latent 起点」。RL exploration 用固定 variance (0.22) 而非 $\sigma^p_t$($\sigma^p$ 太小)。消融里 residual-to-prior 也是关键,不用 residual 性能大幅下降。这样下游任务不需要任何对抗学习,直接采样 prior 就能产生 natural motion。
实验结果
PHC vs UHC(旧)+RFC vs Unicon(Table 1,AMASS-Train/Test/H36M-Motion,AMASS-Train 含 11313 clips、Test 140、H36M-Motion 140):
- PHC 在 AMASS-Train* 上 98.9% success rate(无任何外力,
Ours行),UHC+RFC(UHC+RFC✓)是 97.0%,UHC 去掉 RFC 跌到 84.5%。PHC keypoint 变体(Ours-kp)98.7%(差 0.2 个百分点但兼容视觉 pose estimator)。各项误差指标:Eg-mpjpe(PHC 37.5 vs UHC+RFC 36.4,接近)/ Empjpe(PHC 26.9 vs UHC+RFC 25.1,接近;vs UHC-RFC 39.6,PHC 大幅领先)/ Eacc(PHC 3.3 vs UHC+RFC 4.4,PHC 优)/ Evel(PHC 4.9 vs UHC+RFC 5.9,PHC 优)。关键解读:PHC 在无外力下匹配/超过带「上帝之手」的 UHC+RFC,说明无外力反而更准、更稳定。 - AMASS-Test:PHC 96.4%(vs UHC+RFC 96.4% 持平,vs UHC-RFC 62.6%;
Ours-kp97.1%)。H36M-Motion:PHC 92.9%(Ours-kp95.7%),大幅超过 UHC+RFC 87.0% 与 UHC-RFC 23.6%。 - 在 noisy motion(HybrIK/MeTRAbs 视频估计、MDM 语言生成,Table 2)上同样领先。
- 应用:webcam 30fps 实时驱动多 avatar(OCSort 多人追踪 + Gaussian filter 平滑);in-betweening(用 PHC 的 recovery 能力填补 MDM 生成的 disjoint 片段)。
UHC/PULSE:
- PHC+ 拉到 100% AMASS。
- random rollout 从 prior 采样就能产生 stable human-like motion(这是 ASE latent 做不到的——ASE latent 必须 high-level 指挥,PULSE 直接 prior 采样)。
- 4 类下游任务(speed / strike / complex terrain traversal / VR controller tracking)都用同一个 PULSE latent,下游 policy 训练用最简单 reward 即可,无需 AMP。
为什么重要
- 第一个「单 policy 无外力覆盖全 AMASS」的 humanoid controller:98.9% → 100% 覆盖率是物理仿真人形从「demo」走向「基础设施」的临界点。RFC 的「上帝之手」一直是物理真实性的污点,PHC 干净地移除了它。
- fall recovery 的三类失败态分类法 + point-goal 降级是后续所有 teleop 真机系统的基础能力。OmniH2O/HOVER/H2O 全部依赖这个 recovery 机制处理 VR 输入抖动和失衡。
- PULSE 是第一个真正 universal 的 motion latent space:覆盖 40h MoCap,下游任务零对抗学习、zero-cost 复用。这是 ASE 64 维技能库在大规模数据上的真正落地,也是 BFM(2025)「motor foundation」概念的雏形——只是 BFM 团队没用 foundation model 这个词。
- PMCP 是 scale RL 的实用范式:progressive primitive + composer 的「先专后合」思路,比单纯 hard-negative mining 更能抗 catastrophic forgetting,被后续大规模 control 任务广泛借鉴。
局限
- PMCP 部署重:3+ primitive + composer 网络在 inference 时全激活,参数量和延迟不友好(论文虽然 30fps 跑得动,但真机带宽紧张场景吃力)。这也是 BFM 后来压缩成单 policy 的动机之一。
- 仍依赖 SMPL kinematic 结构:PHC/UHC 是「人形 avatar」controller,不能直接迁移到非人形(四足、轮式)或不同自由度的机器人。retarget 到真机人形还需要额外工作(OmniH2O 才补上)。
- PHC 不是 generative model:它只能 track 参考动作,不能生成 AMASS 之外的新行为——PHC+ 100% 覆盖率指「能模仿 100% AMASS」,不是「能生成 100% 想象得到的人形动作」。这是 PHC/UHC(tracker + latent distillation)和 BFM(generative foundation)的本质区别,见 T04 §五对照表。
- PULSE latent 没语义寻址:和 ASE 一样,每个 $z$ 对应什么行为要靠可视化,不能按「走路」「踢」直接调用。这是 CALM 路线解决的问题,PULSE 没继承。
- 训练成本:PHC 训练数据规模大、primitive 训练+composer 训练 + PULSE distillation 三段,总体时长以周计,单 GPU 玩家不易复现。
复现要点
- 基座:Isaac Gym,SMPL 24 rigid body(23 actuated)kinematic 结构,β∈R^10 body shape。
- reward 权重:$r = 0.5 r^g + 0.5 r^\text{amp} + r^\text{energy}$,energy 系数 $-0.0005$。imitation reward 4 项指数(joint pos $e^{-100}$、rot $e^{-10}$、vel $e^{-0.1}$、ang vel $e^{-0.1}$),精确权重 $w_\text{jp}=0.5,\,w_\text{jr}=0.3,\,w_\text{jv}=w_\text{j\omega}=0.1$(PHC 附录 hyperparameter 表)。discount 0.99。
- 网络:所有网络(discriminator/primitive/value/composer)都是 2 层 MLP [1024, 512](§3.1 原话 "two-layer MLP [1024, 512]"),primitive 输出 Gaussian action。
- PMCP:工程实践上 weight-sharing 变体(新 primitive 从旧 primitive 权重 init,无 lateral connection)比 lateral connection 变体更易跑通,motion imitation 任务因动作高度相关而更适合这种变体;primitive 数量:PHC 主模型 4 个(含 $P^{(F)}$,§5.1 "four primitives including fail-state recovery"),消融 R4–R8 测了 2–8 个(§C),primitive 越多性能越好但训练时间增加;UHC/PHC+ 改进后只用 3 个(含 $P^{(F)}$)就到 100%。
- RET(必须):early termination 只看非 ankle/toe 关节,距参考 > 0.5m 才 reset。
- fall recovery:$P^{(F)}$ 只在 Qloco(手挑 locomotion 子集)训;fail-state 下 $s^g$ 只保留 root,非 root goal 置 identity;reward 用 point-goal。
- PULSE:encoder/decoder/prior 都是 3 层 MLP(§5.1 "encoder E, decoder D, prior R, CALM, and ASE are three-layer MLPs"),policy/primitive 是 6 层 MLP。latent dim = 32(§5.1 原话 "The latent space is 32d: $z_t \in \mathbb{R}^{32}$, about half of the humanoid DOF of 69");$\beta$ anneal,$\mathcal{L}_\text{regu}$ 系数 $\alpha$ 适中即可;rollout πPULSE 采数据 + 查询 PHC+ 监督。
- downstream:task policy action 是 residual-to-prior,固定 variance 0.22;prior mean $\mu^p_t$ 每步重算。
- 预期难度:高。PHC 复现 1–2 个月(数据清洗 + 多 primitive 训练 + composer);PULSE distillation 再 2–3 周。代码已开源(项目页链接),是直接起点。
相关
- 建立在:AMP [Peng et al. 2021](判别器 reward,本仓库 P-AMP-2021.md);ASE [Peng et al. 2022](latent skill + fall recovery 初始化思路,本仓库 P-ASE-2022.md);UHC 旧版 [Luo et al. NeurIPS 2021, Dynamics-regulated kinematic policy] + RFC [Yuan & Kitani 2022](residual force baseline,PHC 直接对标);PNN [Rusu et al. 2016](progressive network 骨架);HuMoR [Rempe et al. 2021](learnable prior on proprioception);NPMP [Merel et al. 2018](AR(1) latent 平滑)。
- 引出:OmniH2O [He et al. 2024, arXiv:2406.08858](用 PHC 当 motor policy,VR/RGB 驱动真人形,T07);HOVER [He et al. 2024.10](多模式 policy distillation,PHC 是基座之一);ExBody [Cheng et al. 2024](expressive whole-body 真机);BFM [Zeng et al. 2025, arXiv:2509.13780](最终升级成 generative motor foundation,把 PHC/UHC 压回单 policy,T04 转折 5,本仓库 P-BFM-2025.md);BeyondMimic [Liao et al. 2025](把 tracker + diffusion 合流)。
- 本仓库笔记交叉引用:T04-motion-prior-amp-to-bfm.md(转折 4);是 P-ASE-2022.md 的大规模数据升级;是 P-BFM-2025.md 的直接前身(BFM = PHC/UHC 的 generative 化 + 单 policy 化);与 P-MDM-2023.md 互补(MDM 生成语言条件 motion,PHC 把它当输入做 in-betweening)。