跳转至

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 mean 0.12 cm、mean absolute gap 5.14 cm。另外,所谓 depth seed=15.25 cm 是事后使用当前代码 重放的诊断值,并非当时流水线保存的中间 artifact;它只能作为辅助线索,不能 用来严格定位真实生成过程。

1. 结论先行

这次失败不是“视频中的物体其实没有接地”。真正的问题是系统里同时存在两个 没有保持一致的 ground gauge:最初从可见场景拟合出的 scene plane,以及后续 从 human feet 得到的 human support plane。最终 human 脚面当然贴合后者,因为 后者本来就是从 human 定义出来的;这不能证明 human 已经贴合可见场景地面。

真正的因果链是:

  1. world_frame_source=ground_plane 首先用 ground mask + MoGe points 拟合 T_c2w_init,并令 scene floor 为 z=0
  2. _transform_hmr_to_world() 随后根据 HMR heels 修改 T_c2w[2,3];camera 与 human 的相对投影保持一致,但原 scene plane 在新坐标中的高度也随之改变。 输出 metadata 仍写 ground_z=0,没有持久化这块被移动后的 scene plane。
  3. 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
  4. object init 本身也没有使用 ground:scale/translation 只来自 mask、depth 与 silhouette refinement;pointcloud_depth_weight=0,support vertices 是 refinement 完成后才提取并保存,未进入 objective。
  5. 相对原 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。
  6. 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 cm penetration 或 4–8 cm floating。
  • 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 2020CHORE, ECCV 2022 通过 scale prior、silhouette、depth ordering、interpenetration 与 contact 对 human/object 联合拟合 独立估 human 与 object 后再拼接,容易产生 scale/depth 不一致
CONTHO, CVPR 2024PICO, 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 2025PhysHOI 在 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”,而是:

  1. 先建立 camera、human、object、scene 共享的 metric world gauge;
  2. 用 contact/ground/penetration 作为 soft physical evidence;
  3. 同时保留 image、keypoint、depth、motion prior;
  4. 逐步释放 human/object 变量共同优化;
  5. physics rollout 用于 refinement 或验证,而不是替代视觉对齐。

InterMimic 本地实现中的 replay_root_height_offsetreplay_object_height_offset(默认各 0.03 m,示例 root 为 0.08 m)只是 replay 时的人工常量补偿。它们没有从 monocular video 自动恢复 floor,也不是可以复制到 Recon 的通用修复。

5. 推荐的最小改进方案

5.1 不变的原则

  • object 始终保持 rotation.mode=full_so3translation.mode=full_xyz
  • 不恢复 yaw_only,不使用 ground_support hard 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_c2wplane_normalplane_offsetconfidence。 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 的变量释放顺序:

  1. object depth/root phase: human 固定,优化 object full pose/scale,使用 mask + depth + floor + weak contact;
  2. object full-6D phase: 仍保持 human 固定,稳定 rotation、translation、scale 与 articulation;
  3. 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;
  4. 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 不可能”。