跳转至

D3D-HOI V41R 后续 Recon 优化交接

日期:2026-06-27

本文档只面向继续优化 object recon / articulation 的同学。下游 HOI align 的执行建议见:

docs/d3dhoi_v41r_hoi_align_handoff_zh.md

完整实验状态以 docs/d3dhoi_recon_tuning_state.mddocs/d3dhoi_recon_tuning_experiment_plan.md 为准。

当前基线

当前推荐 recon handoff baseline 是 V41R:

  • Run root: output/runs/d3dhoi_recon_tuning/v041r_select_seed_track2_part75_smooth9000_full20
  • Config: configs/methods/recon/d3dhoi_tuning/v041r_select_seed_track2_part75_smooth9000.yaml
  • Metrics: output/runs/d3dhoi_recon_tuning/v041r_select_seed_track2_part75_smooth9000_full20/eval/d3dhoi_result_pt/summary.json

20-case 指标:

Method Motion False-close False-open Pred range Jerk p90
V27D 12.814 0.172 0.166 57.717 0.455
V41R 9.777 0.128 0.047 63.039 0.446
V41L 9.659 0.131 0.031 63.111 0.570

默认继续优化时以 V41R 为 balanced baseline。V41L 是 motion/false-open Pareto 点,但 jerk 偏高,不建议直接作为默认。

V41R 方案摘要

  • 刚体 6D pose 和 xyz scale:沿用 V27D,固定。
  • q 初始化:
  • b004-0013_cad7221b004-0017_cad7221 使用 V38AD q-grid seed。
  • 其余 18 个 case 从 V27D q 开始。
  • loss:
  • active-p2 track3d ref_transform,weight 2
  • active-p2 part mask,weight 75
  • smooth joint,weight 9000
  • full-object mask loss:articulation stage 明确关闭。
  • track3d 可见性:使用 visibility_3d / mask-gated visibility。
  • part-mask human occlusion:V41R 没有扣 human mask。

已经尝试并拒绝的方向

V28:MLP / global articulation

结果:

  • motion 17.704
  • false-close 0.291
  • false-open 0.084
  • jerk p90 1.261

问题:降低 false-open 主要靠 under-opening,motion 和 jerk 都明显变差。不要作为主线继续扩。

V34 / 早期 track-only

b004 microwave 上失败:

  • motion 17.522 -> 20.074
  • false-close 0.487 -> 0.668
  • false-open 0.121 -> 0.000
  • pred range 33.840 -> 18.237

问题:track-only 会把 false-open 变成 false-close / under-open。不要扩展该 exact 方法。

V37 / V38:active-p2 track2d/track3d 诊断

有用结论:

  • active-p2 tracks 质量本身很好,CoTracker3 不是主要瓶颈。
  • aligned-depth track3d 能在 microwave 上提供明确 open 信号。
  • b004-0032 f0-ref qzero q-grid 可以支持正确 open trajectory,selected-frame mean error 约 4.70 deg
  • b004-0013 仍 under-open,高开度 GT 接近 90 deg 时只稳定支持到约 77-78 deg
  • b007-0017 active-p2 track3d 仍无法支持完整开度,容易 collapse 到 under-open。

结论:track3d 是有效信号,但受 active-part mask、CAD active link、depth/support geometry、reference binding 共同限制。

V41 family:当前最好但已接近平台

V41 系列只调 active-p2 track3d、part mask 和 smooth joint 权重。

  • V41D:第一个 full20 motion 低于 10。
  • V41L:motion 9.659、FO 0.031,但 jerk 0.570
  • V41R:motion 9.777、FO 0.047、jerk 0.446,当前推荐。

结论:track2/part75 家族在 motion 9.66-9.78 附近基本饱和。继续做标量权重小 sweep 意义不大。

V43:object-init depth refine

目标是判断 b004-0032 是否可以通过 single-frame object init 的 z/scale/depth loss 修正。

从 V27D object-init artifact 出发,固定 rotation,只优化 translation / xyz scale:

Variant 自由度 Depth abs IoU 结论
V27D init baseline 0.171m 0.960 rendered object 明显比 aligned depth 更靠近相机
V43C z-only + scale 0.160m 0.962 基本没修好
V43D xyz translation + scale 0.101m 0.960 有改善,但仍不是 3-5cm
V43E/F/G 更大 depth weight 0.088/0.083/0.083m 0.944/0.933/0.930 depth 降低但 silhouette/scale 失真

结论:这不是简单的 scale/lr/rotation 自由度不足。更可能是 CAD/真实几何、visible-surface/depth 定义、active-link/hinge mismatch。

相关可视化:

  • output/runs/d3dhoi_recon_tuning/v043_v27dpose_fixedrot_xyzscale_b0040032_visual_sheet.png

b004-0032 上固定 V38AD rigid pose、global scale 和 q trajectory,只缩放 active link。

  • identity active-mask IoU 0.431
  • 强制门宽 0.85x 后 IoU 0.492
  • 但 minAreaRect major ratio 被过度压缩,bbox height / centroid mismatch 仍明显

结论:active-link CAD/projection mismatch 存在,但不是一个稳定的 per-link 0.75x0.8x scale 能解决。

相关可视化:

  • output/runs/d3dhoi_recon_tuning/active_link_scale_diagnostics/b004-0032_v38ad_activep2_x085_only/active_link_scale_forced_sheet.png

V44:human occlusion 扣 part mask

V41R 的 part-mask loss 没有扣 human mask。V44A2 只改:

  • optimization.occlusion.apply_to_mask_loss=true
  • human_mask_dilation_px=0

valid gate:

  • output/runs/d3dhoi_recon_tuning/v044a2_v41r_partmask_humanocc0_gate6

六个 high-overlap case 上相对 V41R 变差:

  • motion 8.456 -> 9.245
  • false-close 0.110 -> 0.194
  • false-open 0.000 -> 0.000
  • range 56.986 -> 55.217
  • jerk p90 0.525 -> 0.603

V44B/C 把 track3d weight 加到 5/10,仍救不回 b004-0017 under-open collapse:

  • V41R q range 57.545 deg
  • V44A2/B/C q range 约 19.6 deg
  • false-close 0.714

结论:human occlusion 是真实噪声,但全局扣除会移除 microwave door 的有效 part evidence。不要把 V44 当成全局替代;如果继续做,需要 case-aware / frame-aware gating,而不是单开关。

当前典型 Failure Mode

Case V41R motion V41R FC V41R FO V41R range 主因
b007-0017_cad103776 27.378 0.133 0.000 45.5 active-part / amplitude 证据不足,tail 不稳定
b007-0027_cad100282 26.301 0.333 0.105 52.3 疑似 asset mismatch
b005-0098_cad10797 16.779 0.077 0.000 57.9 V41R 比 V27D 略差,不是 false-open 主导
b004-0013_cad7221 14.665 0.273 0.000 64.6 high-open under-open,track3d/depth support 上限不足
b004-0033_cad7221 12.939 0.250 0.167 37.4 rigid orientation outlier,articulation-only 难修
b004-0017_cad7221 11.512 0.214 0.000 57.1 qgrid 有帮助,但对 part-mask/human occlusion 极敏感
b004-0032_cad7221 4.610 0.182 0.000 64.0 metric 好,但 active-link visual/depth mismatch 明显
b001-0010_cad12561 5.569 0.118 0.333 66.5 dishwasher rebound/false-open 残留
b008-0028_cad45524 6.369 0.000 0.000 29.3 overshoot 被压住,但 range 偏小

后续优化建议

方向 1:更强的 track3d formulation

不要优先做 track3d scalar weight sweep。V44B/C 已经说明权重到 5/10 也不能救 bad basin。

更值得检查:

  • ref_transform 是否真正等价于 ArtHOI-4D Reconstruction 的 3D transport supervision;
  • reference local points 是否在 residual / q 更新后需要重算;
  • open-frame reference tracks 是否因为 initial q 错而绑定到错误 CAD surface;
  • depth-lifted observed 3D 是否需要 robust clipping、surface normal filtering 或 depth discontinuity filtering;
  • track3d residual 是否被大量低信息 tracks 稀释。

方向 2:case-aware human occlusion / part-mask gating

V44 说明全局扣 human 不行,但不代表 human occlusion 不重要。

可尝试:

  • 只在 human overlap 高且 track3d residual 稳定的 frame 降 part-mask 权重;
  • microwave door opening 区间保留一部分 occluded part evidence;
  • 用 active-p2 temporal consistency 决定 part-mask weight;
  • 对 b004 microwave 与 b005/b008 非 microwave 分开策略。

拒绝标准:如果 b004-0017 q range 再 collapse 到约 20 deg,立即停止该方向。

方向 3:object pose / scale residual 作为 diagnostic

V43 说明单帧 object-init depth 不能干净解决所有问题,但 sequence-level shared residual 仍可作为诊断:

  • 整个 sequence 共享一个 R/t/scale residual;
  • 不做 per-frame object pose;
  • 重新计算 reference local points / binding,避免旧 pose 误差残留;
  • 观察 track3d 与 part mask 冲突是否缓解。

如果共享 residual 一开,track3d/part-mask 冲突明显消失,说明 V27D object init 是主因。否则更可能是 asset / hinge / semantic mismatch。

如果多个 case 都显示 active link 与真实 visible part 对不上,需要考虑资产侧。

短期:

  • 标记疑似 asset mismatch case,不让它们主导全局调参;
  • 做 per-link scale / hinge diagnostic,但不要直接作为默认方法;
  • b004-0032 这类 full IoU 高但 active-part IoU 低的 case,单独分析 active-link mesh/axis/hinge。

长期:

  • generated asset / SAM3D / Hunyuan / Particulate 系列可能更有上限,但工程量大;
  • 若要走这条线,应单独立项,不要混进当前 V41R 微调。

不建议继续做

  • 不要继续 broad blind sweep。
  • 不要只调 track3d/part_mask/smooth 标量权重。
  • 不要把 V44 全局 human-occlusion masking 设为默认。
  • 不要把 b007-0027 单个疑似 asset mismatch case 当成全局优化目标。
  • 不要重新跑 full preprocess,除非明确修改 preprocess 逻辑。
  • 不要把新 articulation baseline 静默从 V27D/V41R q 初始化;q init 必须明确标注。

建议下一轮 Recon Gate

如果还要继续 recon,建议只做小 gate:

  • microwave hard:b004-0013b004-0017b004-0032
  • b007 hard:b007-0017b007-0027
  • one regression guard:b005-0098

每个 gate 必须报告:

  • run root;
  • config path;
  • cases;
  • aggregate motion / false-close / false-open / range / jerk;
  • per-case delta vs V41R;
  • q range 是否 collapse;
  • 关键 frame 的 render/mask/track 可视化;
  • 是否应扩到 full20。

只有当 gate 同时满足 motion 不退、false-close 不涨、false-open 不回弹、range 不 collapse、jerk 不爆,才值得跑 full20。