枢纽
数据集OMOMO, InterDiff
物理感知
输入模态vision

PhysHOI:用「接触图」教物理仿真人玩转高动态物体

Yinhuai Wang, Jing Lin, Ailing Zeng 等(北大 + IDEA + 清华 + CMU)。arXiv:2312.04393, 2023。 项目页 · action generationphysics-based imitationHOI

🧠 一句话心智模型:教一个物理仿真人「怎么运球 / 怎么抓箱子」,传统做法是给每个任务手写一个奖励(球要转、手要握紧……)。PhysHOI 改成:给一段参考动作 + 一张「谁该碰谁」的接触图,让 RL 自己学——「把动作追像,同时把接触关系追对」。一旦说清「接触的语义」,就再也不用为每种球类运动写专门的 reward 了。

🎯 为什么重要:从「一任务一奖励」到「一个 reward 通吃所有 HOI」

物理仿真里的人-物交互(Human-Object Interaction, HOI)有个老痛点:DeepMimic、AMP 这类经典动作模仿方法只会动人不动物;而能玩球的方法(Vid2tennis、Hassan et al. 等)每个任务都要手写专门的奖励,篮球运球、网球挥拍、抓握箱子各写各的,不可扩展

核心矛盾:仿真人只能间接控制物体(通过接触力推动/握住它),不能像修改状态那样直接搬运物体。在高动态场景(运球、转球、抛接)里,物体一离开手就完全失控——纯运动学 reward(位置/姿态对齐)会让人陷入「不碰就不犯错」的局部最优:手停在球的轨迹旁边不动,loss 反而最低。

论文 Tab.1 把同期工作摆得很清楚——只有 PhysHOI 同时勾上四个属性:高动态 HOI ✓、接触引导 ✓、任务无关 reward ✓、全身(含手指)✓

💡 核心思想:把「接触关系」做成一张图,乘进 reward 里

PhysHOI 的关键设计是 Contact Graph(CG,接触图)。给定一条 kinematic 参考动作(人和物的运动轨迹),除了「位置/旋转/速度」这些运动学量之外,再额外抽出一组二值接触标签:身体第 $i$ 部分和物体第 $j$ 部分,在该帧是否接触(1/0)。

Contact Graph:把「谁该碰谁」变成 reward 的一部分 ① 参考动作(kinematic) 人:SMPL-X 52 部位 物:刚体 + 简化 mesh 每帧抽接触二值图 CG: E ∈ {0,1}^(k(k-1)/2) e.g. 全身抓握:154 节点 / 11781 边 ② Aggregated CG(聚合) 把部位合并成组: 篮球 → 球 / 双手 / 其余身体 抓握 → 物 / 桌 / 全身 组间任意点碰 = 边为 1 省内存 + 抗噪 ③ 任务无关 reward r = r_body × r_obj × r_IG × r_CG 「乘法」是关键—— 任一项崩,整体崩 PPO + Isaac Gym(60Hz 仿真,30Hz 策略,2048 并行环境) ❌ 只有运动学 reward 时 「用头顶球」「用手腕蹭球」 「干脆不碰球,省得出错」 → BallPlay Backspin Succ 仅 0.2% ✅ 加上 CGR 后 「正确部位 + 正确时机」接触 球被精确带到参考轨迹 → Backspin 提升到 70.3%
图 1:PhysHOI 的核心——在参考动作上抽取 Contact Graph,聚合后与运动学 reward 相乘。乘法形式保证「接触关系错一个就整体扣分」,强制策略学会正确的接触语义,逃离运动学-only 的局部最优。

🛠️ 四个让「一个 reward 通吃」的关键设计

设计心智为什么必要 / 怎么实现
① Contact Graph + Aggregated CG 把接触关系做成完全图(每对身体部位+物体一条边,标签 0/1);再按场景聚合几组(如双手合并) 原始 CG 在全身抓握下 154 节点/11781 边太重;聚合降到 3 节点(球/手/身 或 物/桌/身),抗噪 + 省内存
② 乘法 reward $r_t = r_t^b \cdot r_t^o \cdot r_t^{ig} \cdot r_t^{cg}$(四项相乘) 用加法会让一项塌了另一项仍能补;用乘法保证「人像 + 物像 + 相对位置对 + 接触对」必须同时满足——这是逃离局部最优的结构约束
③ Contact-Aware HOI 状态 状态 $s_t=\{g^t, \hat{h}^{t+1}\}$ 包含当前仿真 + 下一步参考;参考含 $\{\hat s^{sbj}, \hat s^{obj}, \hat s^{ig}, \hat s^{cg}\}$ 把接触图作为参考状态的一部分喂给策略;策略既要追运动学也要追接触——信息密度翻倍
④ BallPlay 数据集 8 个篮球技能:back dribble / cross leg / hold / fingertip spin / pass / backspin / cross / rebound 单目视频自动标注(深度估计 + 语义分割 + CAD 模型选择 + 接触标签 + 物理修正);填补「动态 HOI 数据集空白」
🔮 直觉:为什么是「乘法」而不是「加法」?
加法 reward 的潜台词是「可以打补丁」——身体姿势错了但球位置对了,仍然有奖励。这正好给了策略作弊空间:手不动,球用头蹭过去,奖励还是正的。乘法 reward 的潜台词是「全或无」——任何一项为 0,整体就是 0。这就把局部最优直接封死,逼策略必须找到「正确接触 + 正确轨迹」的全局解。这一点和 RLHF 里把 KL 惩罚放进 reward 的乘法形式有异曲同工之妙。

📊 关键结果:BallPlay 成功率 7.5% → 82.4%(DeepMimic → PhysHOI)

维度数字(来自原文 Table 2 / Table 3)
训练规模SMPL-X 全身模型:52 身体部位、51×3 DoF(30×3 手 + 21×3 身);Isaac Gym 60Hz 仿真 / 30Hz 策略;2048 并行环境;单卡 A100
训练时长GRAB 5000 epochs;BallPlay 15000 epochs(每 epoch 10 帧连续仿真)
HOI 模仿成功率(Tab.2)GRAB 抓握:PhysHOI 95.4% vs Zhang et al. 38.6% vs DeepMimic 27.0%BallPlay 篮球:PhysHOI 82.4% vs 13.6% vs 7.5%
物体位置误差 $E_{o\text{-}mpjpe}$BallPlay:PhysHOI 82.9mm vs DeepMimic 1662.5mm vs Zhang 155.3mm(DeepMimic 几乎完全丢球)
接触准确率 $E_{cg}$ ↓GRAB:PhysHOI 0.0260 vs Zhang 0.3370;BallPlay:PhysHOI 0.0877 vs Zhang 0.4124
CGR 消融(Tab.3,BallPlay)纯运动学 reward(rtb·rto)→ 完整(+IG+CGR):Toss 20.7% → 84.8%;Backspin 0.2% → 70.3%;Cross leg 6.7% → 88.2%;Pass 4.8% → 71.2%。注:单独看 CGR 增量(rtb·rto·rig → full),Toss 7.7%→84.8%、Backspin 21.7%→70.3%
BallPlay 数据集8 个篮球技能;含视频 + 估计 SMPL-X + 物体 motion + 接触标签 + 物理修正
关键洞察:PhysHOI 不是「在某个球类任务上刷新了 SOTA」——它是第一次证明「一个 task-agnostic reward + 接触图」就能让仿真人学会全身(含手指)高动态 HOI。以 Backspin 为例(Tab.3),纯运动学 reward 仅 0.2%,加上 interaction graph reward 后到 21.7%,再加上接触图 reward(CGR)跳到 70.3%——三级递进(0.2%→21.7%→70.3%)清晰展示每个组件的贡献,这是论文最干净的消融证据之一(四个任务的 CGR 增量分别为 Cross leg +80.0、Toss +77.1、Pass +55.0、Backspin +48.6,CGR 在所有任务上都起决定性作用)。

🌐 在领域中的位置

DeepMimic(人动不了物) AMP(GAN 式动作模仿) Zhang et al.(IG 加进 reward,但仍局部最优) PhysHOI(CG + 乘法 reward,task-agnostic)⭐

PhysHOI 是「物理仿真 + 全身 + 动态 HOI」这条窄路上的里程碑——它把「为每个交互任务手写 reward」的传统范式,换成「一条 kinematic 参考 + 一张接触图」的统一范式。关联线索:action generation / physics-based imitation / motion prior。

❓ 常见误区

PhysHOI 是模仿学习还是 RL?

两者都是。整体是 RL(PPO)框架,但 reward 不是任务目标,而是「追像参考动作 + 接触图对齐」。所以叫 "physics-based imitation"——用 RL 实现模仿学习。物体被动、只能间接通过接触力推动,所以必须靠 RL 探索而非回归。

为什么不能直接用 motion matching / 重定向?

因为运动学方法会产生穿模、滑步、漂浮——手看上去握住球,物理上根本没接触。PhysHOI 用物理仿真强制约束动力学,所以需要 RL 学一个能产生正确接触力的策略,而不是把参考姿势硬贴上去。

「接触图」和「interaction graph(IG)」有什么区别?

IG 描述「接触点相对物体的位置」(连续向量,描述「手放在球的哪里」),来自 Zhang et al. 的工作。CG 描述「谁和谁接触了」(二值标签,描述「应该接触的身体部位对不对」)。前者管「精细位置」,后者管「该不该碰」——两者互补,都乘进 reward。

为什么物体在仿真里只能「间接控制」?

因为这是HOI 模仿——目标是「像人那样抓球/运球」,不是「把球瞬移到目标位置」。如果直接给物体施加外力,就失去了「 humanoid 通过接触推动物体」这个核心难点。物体的运动必须由 humanoid 的关节扭矩(PD controller 输出)经物理仿真产生。