D3D-HOI Ground Gap:根因、相关工作与最小改进方案¶
日期: 2026-07-21
实验范围: 5 个明确接地的 Gate5 case,历史 default full_so3 + full_xyz 及 soft-support 权重 0/30/100/300。
逐 case 数据: ground_alignment_gate5_metrics.csv
原始诊断输出: output/runs/d3dhoi_soft_support_ablation/20260721_gate5_wired/diagnostics/ground_contact_tradeoff/
视频接地 montage: output/runs/d3dhoi_soft_support_ablation/20260721_gate5_wired/diagnostics/video_ground_contact_gate5.jpg
口径更正: 初版报告把
15.47 cm写成 object-init 相对 scene floor 的 gap,这是不准确的。该数值是 object-init 相对后续由 human feet 定义的 support plane 的 gap。相对最初由 ground mask + MoGe 拟合的 scene plane, Gate5 object-init gap 为-11.95~+7.54 cm,signed mean0.12 cm、mean absolute gap5.14 cm。另外,所谓depth seed=15.25 cm是事后使用当前代码 重放的诊断值,并非当时流水线保存的中间 artifact;它只能作为辅助线索,不能 用来严格定位真实生成过程。
1. 结论先行¶
这次失败不是“视频中的物体其实没有接地”。真正的问题是系统里同时存在两个 没有保持一致的 ground gauge:最初从可见场景拟合出的 scene plane,以及后续 从 human feet 得到的 human support plane。最终 human 脚面当然贴合后者,因为 后者本来就是从 human 定义出来的;这不能证明 human 已经贴合可见场景地面。
真正的因果链是:
world_frame_source=ground_plane首先用 ground mask + MoGe points 拟合T_c2w_init,并令 scene floor 为z=0。_transform_hmr_to_world()随后根据 HMR heels 修改T_c2w[2,3];camera 与 human 的相对投影保持一致,但原 scene plane 在新坐标中的高度也随之改变。 输出 metadata 仍写ground_z=0,没有持久化这块被移动后的 scene plane。- loader 最后又从 human foot surface 产生
ground_offset。于是 object/camera 更接近 scene gauge,而 Physics/support loss 使用 human gauge。Gate5 两块 plane 的差达到-24.44~+1.26 cm,mean absolute difference 为15.86 cm。 - object init 本身也没有使用 ground:scale/translation 只来自 mask、depth 与
silhouette refinement;
pointcloud_depth_weight=0,support vertices 是 refinement 完成后才提取并保存,未进入 objective。 - 相对原 scene plane,object init 在 b007/b009 已接近地面(
-0.60/+1.29 cm), 但 b005 穿地11.95 cm、b008 悬空7.54 cm、b001 悬空4.31 cm。因此 init 确实需要 ground-aware solve,但15.47 cm不能全归因于 object init。 - object-pose reconstruction 冻结刚体 rotation、translation、scale,只优化 articulation;后续 HOI 又使用 human plane,因此会继续放大 gauge 冲突。
所以,先统一 scene/human ground gauge,再做 ground-aware object init。继续提高
晚期 object-only support 权重不能修复坐标 gauge。正确方向仍保持
full_so3 + full_xyz,但在初始化的 scale–translation 反解中显式使用共享 ground。
2. 哪些结论已经被实验直接确定¶
2.1 视频中的接地是真实语义,不是假设错误¶
对每个 case 检查了首帧、中间帧和末帧。五种大型家居物体均在原视频中由室内地面支撑,没有桌面支撑、悬挂或被人抬起的情形。因此这些 case 使用“物体底部接近 floor”作为 soft prior 是合理的。
限制是:视频没有 metric ground-truth plane,视觉检查只能确定“应接地”的语义,不能直接给出精确到厘米的 3D plane 参数。
2.2 human 只贴合 human-derived plane,不一定贴合 scene plane¶
| case | human foot surface - plane mean |
|---|---|
| b001-0010 | -0.72 cm |
| b005-0024 | -0.41 cm |
| b007-0017 | -0.69 cm |
| b008-0028 | -0.28 cm |
| b009-0001 | -0.49 cm |
这只说明最终 human 与 loader 中由它自身导出的 support plane 一致。相对最初
ground-mask/MoGe scene plane,五个 human plane 的差分别为 -18.95、-20.69、
-24.44、+1.26、-13.95 cm。human root-z 的 preserve_contact_median 保留原绝对
contact median,因此不会修复这种 human-vs-scene 的常量 gauge mismatch。
2.3 object init 的真实问题必须按两块 plane 分开看¶
| case | object init → human plane | object init → original scene plane | human plane → original scene plane |
|---|---|---|---|
| b001-0010 | +23.26 cm | +4.31 cm | -18.95 cm |
| b005-0024 | +8.74 cm | -11.95 cm | -20.69 cm |
| b007-0017 | +23.84 cm | -0.60 cm | -24.44 cm |
| b008-0028 | +6.28 cm | +7.54 cm | +1.26 cm |
| b009-0001 | +15.24 cm | +1.29 cm | -13.95 cm |
| signed mean | +15.47 cm | +0.12 cm | -15.35 cm |
| mean absolute | 15.47 cm | 5.14 cm | 15.86 cm |
三个信息很关键:
- b007/b009 的大 human-plane gap 主要是两块 plane 不一致,不是 object init 悬空 24/15 cm;相对 scene floor,它们已经在 1.3 cm 内。
- b005/b008/b001 仍证明 object init 缺少 ground constraint,会产生约
12 cmpenetration 或4–8 cmfloating。 object_init == object_pose不是巧合,而是配置中这些阶段的rotation=false, translation=false, scale=false, articulation=true所决定的。- 事后重放的 depth seed 与四个保存的 coarse scale 中有三个吻合,但 b007 不吻合, b001 又没有原始 history;所以不能再把重放均值当作严格 stage artifact。
2.4 直接 floor snap 会破坏 Recon¶
将最终 object 在内存中只沿 world-z 平移,使 support patch 贴合当前 human-foot plane,然后重新测 hand contact 与 object-mask IoU:
| case | final gap | hand contact 变化 | mask IoU 变化 |
|---|---|---|---|
| b001-0010 | 19.20 cm | 1.92 → 17.71 cm | 0.848 → 0.516 |
| b005-0024 | 11.32 cm | 4.59 → 9.31 cm | 0.906 → 0.864 |
| b007-0017 | 31.79 cm | 4.61 → 23.58 cm | 0.613 → 0.626 |
| b008-0028 | 4.29 cm | 8.90 → 7.81 cm | 0.845 → 0.796 |
| b009-0001 | 5.89 cm | 2.89 → 6.20 cm | 0.802 → 0.740 |
| mean | 14.50 cm | +8.34 cm worse | -0.0945 |
这个反事实证明的是:不能把 object 事后强行吸到当前 human plane。由于 human plane 本身可能与 scene plane 相差十几厘米,它不能用来否定 ground-aware scale/translation initialization;后者会在 ground 条件下重新求 scale、x/y/z, 而不是保持当前 scale 后只做 z snap。
它没有证明 joint refit 不可能成功。相反,它说明必须释放至少一部分 human arm/wrist/hand、object scale/full pose 或 camera/depth residual,并用 2D/image evidence 把它们共同约束住。
3. 为什么 0/30/100/300 soft-support sweep 基本不动¶
有效 Gate5 sweep 的唯一语义改动是 historical default full_so3 + full_xyz 上的
HOI object-only support_plane 权重;下表 gap 均相对该阶段错误使用的
human-derived plane:
| weight | gap mean | gap max | contact mean | mask IoU | support pass |
|---|---|---|---|---|---|
| 0 | 14.496 cm | 31.786 cm | 4.583 cm | 0.8029 | 0/5 |
| 30 | 14.486 cm | 31.771 cm | 4.619 cm | 0.8032 | 0/5 |
| 100 | 14.377 cm | 31.428 cm | 4.602 cm | 0.8040 | 0/5 |
| 300 | 14.264 cm | 31.389 cm | 4.775 cm | 0.8036 | 0/5 |
这不是 loss 没接入反向传播;有效 sweep 已有 batched-vs-serial 回归测试。失效原因是优化问题本身:
- 时机太晚。 object 已经在错误 metric gauge 中初始化,后续 rigid root 又被长期冻结。
- 变量不够。 object-only 平移必须在 floor、hand 和 image 三者中二选一,无法让 human 去配合。
- 单位尺度失衡。 当前 support 是
mean(height_m²),而 contact/temporal 项权重大几个数量级。 - loss 形状不理想。 对全部 support vertices 的对称平方既没有明确区分 penetration 与 floating,也没有 tolerance、robust kernel 或 contact confidence。
- plane 本身不一致。 late loss 使用 human-derived plane,而初始化阶段更接近 ground-mask/MoGe scene gauge;优化器实际上被要求修复上游坐标冲突。
因此“不掉 Recon 的最小有效权重”在这组 late object-only sweep 中不存在;不是没有把 30/100/300 调细,而是优化位置和自由度错误。
4. 与 physics / physics-inspired HOI 方法的对照¶
| 方法 | 如何使用 ground/contact/physics | 对本项目的直接启示 |
|---|---|---|
| WHAM, CVPR 2024 | 预测足地接触并据此修正 global root trajectory;不是逐帧 foot hard snap | 适合 human drift,但不能独自解决 object metric gauge |
| SLAHMR, CVPR 2023 | 将共享 ground plane、camera scale、human states 和 learned contact probability 联合优化;同时约束 foot distance 与 foot skate | ground 应是优化变量/独立 scene quantity,而不是只从 human 事后导出 |
| Physics-Based Human Motion Estimation, ICCV 2021 | 共同优化 human pose、shape、contact force、dynamics、smoothness 和 observation;ground contact 用来解除 monocular depth ambiguity | physics/contact 应进入 joint objective,而非最后单变量吸附 |
| Trajectory Optimization for Physics-Based Reconstruction, CVPR 2022 | 先由 seed frames 估计 time-consistent shape/ground,再做带 2D/3D observation 和 dynamics 的 trajectory optimization | 先建立一致的 scene gauge,再优化 trajectory |
| PHOSA, ECCV 2020、CHORE, ECCV 2022 | 通过 scale prior、silhouette、depth ordering、interpenetration 与 contact 对 human/object 联合拟合 | 独立估 human 与 object 后再拼接,容易产生 scale/depth 不一致 |
| CONTHO, CVPR 2024、PICO, CVPR 2025 | 用 dense/contact correspondence 迭代地共同修正 human 与 object | hand contact 不能只作为 object-only 强 loss;它应驱动 joint refinement |
| ScoreHOI, ICCV 2025 | 结合 learned prior、physical constraints 和 contact-driven iterative refinement | 物理合理性要与 observation/prior 同时优化,不能靠一个 scalar snap |
| CARI4D, CVPR 2026 | 将 foundation outputs 放入一致的 metric depth/scale,并以 render-and-compare 和 contact-aware joint optimization 对齐 | 与当前问题最接近:关键是统一 foundation cues 的 metric gauge |
| HA-HOI, 2026 preprint | human-first/object-follow:固定 human 调 object depth,再优化 full object pose,随后联合 object、hands/arms,最后细化 wrist/fingers | 可直接借鉴其 coarse-to-joint 变量释放顺序 |
| InterMimic, CVPR 2025、PhysHOI | 在 simulator 中用 body/object state、contact graph 或 teacher policy 模仿和修正 reference | physics tracker 能改善可执行性,但假定 reference 已有基本一致的 world gauge |
| RePHO, 2026 preprint | kinematic initialization 后用 RL/physics refinement,并通过 adaptive sampling 选择可靠 reference | 可作为最后 feasibility projection,但必须保留 image/contact 回投门槛 |
| CRISP-Real2Sim, ICLR 2026 | 同时恢复 camera、human 与 global scene point cloud;以 contact points 锚定遮挡 surface,并拟合干净的 scene primitives | 最重要的可迁移点是:floor 需要 scene geometry 的独立锚点 |
共同规律不是“把最低点设成 z=0”,而是:
- 先建立 camera、human、object、scene 共享的 metric world gauge;
- 用 contact/ground/penetration 作为 soft physical evidence;
- 同时保留 image、keypoint、depth、motion prior;
- 逐步释放 human/object 变量共同优化;
- physics rollout 用于 refinement 或验证,而不是替代视觉对齐。
InterMimic 本地实现中的 replay_root_height_offset 与 replay_object_height_offset(默认各 0.03 m,示例 root 为 0.08 m)只是 replay 时的人工常量补偿。它们没有从 monocular video 自动恢复 floor,也不是可以复制到 Recon 的通用修复。
5. 推荐的最小改进方案¶
5.1 不变的原则¶
- object 始终保持
rotation.mode=full_so3、translation.mode=full_xyz。 - 不恢复
yaw_only,不使用ground_supporthard parameterization。 - human root-z 仍只消除 foot relative drift,不改变动作、身体朝向或 root x/y。
- ground 只对 inventory 明确标记为 floor-supported 且 floor confidence 足够的 case 生效。
- support 是 soft evidence;允许真实地面不平、CAD 底面误差和少量接触 tolerance。
5.2 第一步:持久化唯一的 shared scene floor¶
用 DA3/scene point map 在 human/object mask 之外的可见下半区域提取 floor candidates,结合:
- world-frame gravity/up normal;
- RANSAC/robust plane fitting;
- human planted-foot observations;
- image 中物体底边与地面交界附近的 depth;
- 跨帧 plane consistency。
得到并持久化 scene_T_c2w、plane_normal、plane_offset 和 confidence。
heel correction 不得再一边修改 T_c2w,一边继续声称原 ground 为 z=0;若为了
human reprojection 需要另一 camera gauge,必须显式保存两个 transform 之间的变换。
human foot 只作为共享 plane 的另一个观测,不再独占 plane offset。若可见 floor
太少或多个观测相互矛盾,则降低置信度并进入 joint refinement。
5.3 第二步:把 support 前移到 multi-frame object initialization¶
最小版本可以先不改 full pose 参数化:对每个任意 R∈SO(3) 和 uniform scale
candidate,使用 support vertices 解
t_z = plane_offset - min(n·R(sv)),再由 mask centroid 投影方程解平面内的
t_x/t_y,render 后按 mask IoU + robust depth 选择 scale。旧代码中的
solve_ground_constrained_translation() 与 ground_constrained_scale_sweep_init()
已经实现了这一数学结构,并不要求 yaw-only;问题是它被绑定/跳过在错误的
translation_mode=ground_support 分支里。
随后再把 one-frame pre_track_motion_max_area 扩展为 5–10 个分散且 mask/depth
可靠的 frames,共享 object scale 与刚体 root,逐帧 articulation。优化:
- multi-frame silhouette;
- object-region metric depth,使用 trimmed robust residual;
- object temporal/static-root prior;
- full 6D pose 与 scale prior;
- soft floor support。
现有 pointcloud_depth_weight=0.0 应在小范围 sweep 中启用,而不是 mask refine 后完全丢弃 metric-depth anchor。它必须与 scene floor 同时用,否则单纯加强有 bias 的 object depth 也可能把错误锁死。
5.4 第三步:coarse-to-joint HOI refinement¶
参考 HA-HOI/CARI4D 的变量释放顺序:
- object depth/root phase: human 固定,优化 object full pose/scale,使用 mask + depth + floor + weak contact;
- object full-6D phase: 仍保持 human 固定,稳定 rotation、translation、scale 与 articulation;
- joint phase: 联合优化 object full pose、human arm/wrist/hand,以及很小、强 anchor 的 human root residual;同时保留 human 2D keypoint、object mask/depth、foot-floor、hand-object、penetration 和 temporal losses;
- hand detail phase: object/root 基本冻结,只细化 wrist/fingers 与 contact correspondence。
这一步是避免上述 floor-snap 反事实中 contact/IoU 崩坏的核心:落地需要由 human 上肢和 object 一起吸收,而不是只移动 object。
5.5 改写 soft-support loss 的数值形式¶
建议分成两项:
h_i = n · v_i - d
L_penetration = mean(relu(-h_i - tolerance)^2)
L_contact = robust(min/low-quantile(h_i) - target_gap)
L_penetration对穿地强惩罚;L_contact只作用于 support patch 的最低分位数,不要求 CAD 底面每个点完全共面;target_gap/tolerance初始可取0.5–1.0 cm;- residual 以厘米或 object size 归一化,避免与 hand/contact loss 出现隐式
10^4量纲差; - floor confidence、case support label 和 frame visibility 决定权重;
- multiplier 用 adaptive/augmented-Lagrangian 更新,而不是只手扫
30/100/300。
5.6 “Recon 不掉”的实现方式:约束式选择,不是口头保证¶
对每个 candidate 保存原版 baseline,并仅在以下门槛全部通过时采用:
| 验收项 | Gate5 首轮建议 |
|---|---|
| object → shared scene-plane support abs-p95 | <=2 cm,稳定后再收紧至 <=1 cm |
| object-mask IoU delta | >=-0.005 |
| hand-contact mean delta | <=+0.5 cm |
| human 2D/reconstruction metrics | 不差于 baseline 的既定容差 |
| object orientation/location/motion/dimension | 各项不差于 baseline 的既定容差 |
| penetration | 不增加,且无明显新穿地/穿物 |
| pose parameterization | 必须为 full_so3 + full_xyz |
优化层面可用 augmented Lagrangian 或 constrained/Pareto search:在 IoU/contact/human reprojection 不越过 baseline 容差的可行域内最小化 ground gap。发布层面再做 hard rejection:任何门槛失败就回退原版结果。这样“新结果不使 Recon 掉点”是由测量和回退机制保证,而不是期待某个固定 weight 自动做到。
6. 推荐实验顺序¶
只在 Gate5 运行,未通过前不扩 Full20:
| 实验 | 相对 historical default 的唯一新增能力 | 目的 |
|---|---|---|
| E0 | 无,当前 support=0 baseline | 固定回退结果与全部 Recon 指标 |
| E1 | shared scene floor + full-SO3 grounded scale/translation init;其余不变 | 验证用户提出的初始化反解 |
| E2 | multi-frame object root/scale + nonzero depth anchor | 消除 one-frame scale–depth ambiguity |
| E3 | object + arms/wrists/hands joint refinement | 在落地同时恢复 hand contact 与 image fit |
| E4 | optional RePHO/InterMimic-style physics projection | 只做 feasibility refinement,并经同一 Recon gate 回投 |
每一步只保留通过验收门槛的 case;同时记录失败 case 的 active constraints。若 E1 能降 gap 但损害 contact,不能继续放大 support,而应进入 E2/E3。若 E2/E3 仍无 feasible solution,说明 human/object/camera 的 metric gauge 需要更上游的 joint camera/scene refinement,而不是继续调 loss weight。
7. 置信度与剩余不确定性¶
高置信、由本地结果直接验证的部分:
- 五个视频语义上确实是 floor-supported;
- 当前 human foot 与 human-derived plane 基本一致,但该 plane 与原 scene plane 可相差 24 cm;
- object init 当前没有任何 ground term,且相对原 scene plane 的 per-case absolute error 仍达到 12 cm;
- articulation-only object-pose 阶段完整保留该 rigid gap;
- late weight
0/30/100/300无有效候选; - 直接把 object-only snap 到 human-derived plane 会显著破坏 contact/IoU;
yaw_only + ground_support不能作为正确 Recon。
尚未被现有 Gate5 完全分解的部分:
- 原始 MoGe scene plane、aligned DA3 ground depth 与 HMR foot plane 应如何联合估计 最可靠的 shared metric plane;
- 独立 scene plane 在强遮挡 case 中能达到的 metric 精度;
- joint refinement 需要释放到 wrist/arms,还是还需很小的 camera/human-root residual。
这些不确定性不影响主要结论,因为推荐方案不依赖某一个子原因成立;E1–E3 会逐步隔离它们。需要避免的是把“已经定位到 object init 阶段”误写成“已经证明 depth offset 是唯一原因”。
8. 可复现命令¶
# 读取既有结果并执行 stage/counterfactual 诊断,不修改任何 recon artifact
PYTHONPATH=$PWD /DATA/intern/hoi4d/miniconda3/envs/arthoi4d/bin/python \
scripts/experiments/diagnose_d3dhoi_ground_contact_tradeoff.py \
--cases-root \
output/runs/d3dhoi_soft_support_ablation/20260721_gate5_wired/support_000 \
--case-list configs/case_lists/d3dhoi_ground_support_gate5.txt \
--output \
output/runs/d3dhoi_soft_support_ablation/20260721_gate5_wired/diagnostics/ground_contact_tradeoff
# 查看有效 soft-support sweep
sed -n '1,220p' \
output/runs/d3dhoi_soft_support_ablation/20260721_gate5_wired/REPORT.md
9. 调研边界¶
检索日期为 2026-07-21。检索覆盖 world-grounded HMR、scene-aware human reconstruction、joint HOI reconstruction、physics-guided HOI、physics-based monocular reconstruction 与 real-to-sim;优先使用论文官网、CVF、arXiv/OpenReview 和本地官方代码。纳入标准是方法中明确存在 ground、contact、joint optimization 或 physics refinement 机制。PhysHO 等面向 deformable human/object dynamics、但与本项目刚性 articulated furniture 的 metric alignment 机制不直接匹配的方法未作为核心依据。
本报告的定量结论只来自 Gate5;原视频接地检查没有 metric 3D ground truth;floor-snap 是只平移 object 的反事实而非完整 reoptimization。因此它证明的是“当前 late object-only 修复不可行”,不是“joint visual/physical refinement 不可能”。