🔬 层C 归因手术审核 — Case01 物理判决翻转

PHC/Isaac Gym 物理化验证 · GVHMR SMPL 数据手术 · 2026-09-21 · 明牌证据页(非盲测)

① 视频证据 — GT 原片 vs SMPL 物理重演(v3 修复后数据)

GT 原片 case01.mp4 · 1280×704 · 15.0s · 有声
SMPL 重建 GVHMR global 渲染 · 物理人形重演的就是这条轨迹
判读:原片动作 = 汉服女子雨巷站立 + 1.13-1.93s 提裙行礼式爆发 + 末段三次缓走。修复后该 15s 轨迹已被物理人形完整重演(Succ 1.000),物理背书成立。

② 骨架帧0对比 — Isaac 同路径 FK 真值链

骨架帧0对比
用与仿真完全一致的路径(SkeletonTree.from_mjcf + pose_quat_global, is_local=False)FK 出的 GT 帧0骨架。左:修复前腿折进骨盆(骨盆-踝垂直距 0.07m,站立应为 ~0.86m);右:修复后正常站立、脚底接地。

③ 高度轨迹 — 悬空定谳

高度轨迹
修复前(上):脚底全程悬空 0.96-1.33m —— 物理人形从空中追一个悬空目标,0.1s 内必崩。修复后(下):骨盆 0.87-0.93m ✓,脚底 0.00-0.04m 接触地面 ✓。

④ 评测器取证探针 — 逐帧跟踪误差

误差曲线
探针注入评测器逐帧收集 max-body 误差(对数轴)。修复前 348 起点 100% 在 ≤0.17s 内突破 0.25m 终止线(首破部位 100% = 右脚趾;step0 手部已错位 108mm)——排除「动作中段 OOD」假设,指向帧 0 数据不自洽。修复后 54 起点全程贴地(35mm 级)。

⑤ 归因链 — 五步定谳

步动作发现 / 关键证据
1评测器探针给 im_amp_players.py 注入逐帧逐部位误差收集并重跑 347 起点:100% 窗口 ≤5 步破线、首破部位 100% R_Toe、step0 手部已 108mm → 帧0 数据坏,非动作后段 OOD
2真值链 FK同仿真路径 FK 复算:人物整体悬空 ~1.3m、骨盆-踝距 0.066m(standing 基线 0.859m)→ 腿折进骨盆,几何结构性损坏
3追凶层A源码实读 convert_gvhmr_to_phc.py:把世界旋转 R(Y→Z) 乘到了全部 66 个 rotvec——但 SMPL body_pose 是父链局部关节角,不随世界轴变换
4数据手术手术一(修旋转):只对 global_orient+trans 施加 R,body_pose 保原值 → 几何比例恢复(骨盆-踝距 0.831m)
手术二(接地):站立段脚底最小 z=0.4624m,整体下落 0.4364m 对齐 PHC 接触高度 0.026m → 脚趾触地 0.00-0.13m
5判决复跑Succ 1.000 / Mpjpe 35.0mm / 450 步全长存活 —— 判决翻转,物理背书成立

⑥ 核心修复代码(层A)

# 修复前 (v1, 错): 世界旋转乘到全部关节 pose_zup = (R @ pose_aa.reshape(-1,3).T).T.reshape(T,66,3) # body_pose 也被转 = 病灶 # 修复后 (v2): 只动 root 朝向 + trans; body_pose 局部角保持原值 root_mats = sRot.from_rotvec(pose_aa[:, :3]).as_matrix() pose_aa[:, :3] = sRot.from_matrix(R @ root_mats).as_rotvec() # R @ R_root trans_zup = (R @ trans.T).T # body_pose[:, 3:] 不动

⑦ 终审判定

判决翻转归因结论(数据手术有效 · Case01 物理背书成立):
判定口径
✅通过 = 接受归因结论与翻转判决,层C 物理化验证可接入下游(T1 组装器物理置信度字段 / 新案例入库流程)。
🔧需修 = 结论方向认可但有保留项(写在意见框)。
❌否决 = 归因不成立或证据不足(写在意见框)。
数据口径:Succ/Mpjpe 来自 PHC im_eval 协议(pnn 底层 + mcp 策略,312→54 起点重采样差异见探针 dump:v1=348 窗、v3=54 窗);FK 数字来自容器内同路径复算,图表由 /tmp/fk_evidence.npz 生成。