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.md 和 docs/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_cad7221、b004-0017_cad7221使用 V38AD q-grid seed。- 其余 18 个 case 从 V27D q 开始。
- loss:
- active-p2 track3d
ref_transform,weight2 - 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-0032f0-ref qzero q-grid 可以支持正确 open trajectory,selected-frame mean error 约4.70 deg。b004-0013仍 under-open,高开度 GT 接近90 deg时只稳定支持到约77-78 deg。b007-0017active-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、FO0.031,但 jerk0.570。 - V41R:motion
9.777、FO0.047、jerk0.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
Active-link local scale¶
在 b004-0032 上固定 V38AD rigid pose、global scale 和 q trajectory,只缩放 active link。
- identity active-mask IoU
0.431 - 强制门宽
0.85x后 IoU0.492 - 但 minAreaRect major ratio 被过度压缩,bbox height / centroid mismatch 仍明显
结论:active-link CAD/projection mismatch 存在,但不是一个稳定的 per-link 0.75x 或 0.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=truehuman_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/scaleresidual; - 不做 per-frame object pose;
- 重新计算 reference local points / binding,避免旧 pose 误差残留;
- 观察 track3d 与 part mask 冲突是否缓解。
如果共享 residual 一开,track3d/part-mask 冲突明显消失,说明 V27D object init 是主因。否则更可能是 asset / hinge / semantic mismatch。
方向 4:asset / active-link adaptation¶
如果多个 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-0013、b004-0017、b004-0032 - b007 hard:
b007-0017、b007-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。