Infinigen Object Reconstruction¶
Development / historical ledger;不是 formal Generated-video Results。 Infinigen 是 asset source, VideoGen 才是 video input。正式 generator/prompt/seed/camera/reference manifest 尚未冻结;当前设计见 Reconstruction metric review 与 Paper tables。
Historical note (2026-07-15): the temporary
object_sam3_debugpath described below has been promoted and replaced by the productionobject_maskschema documented indocs/project/infinigen_masks.md. References to the old debug path are retained only as an experiment record and are not runnable interfaces.
日期:2026-07-07
Objective¶
为 35 个 Infinigen object-recon case 准备稳定的 V41R-style 跑法。 当前已完成 handoff 文档指定的 3-case smoke:
8:infinigen_door_p00_i01_videogen14:infinigen_drawer_p00_i00_videogen20:infinigen_microwave_p00_i02_videogen
Current Best Run¶
- Run ID:
infinigen_v41r_object_smoke_arthoi4d_tmp_novlm_local_fix1 - Env:
/tmp/arthoi4d-tmp - Base config:
configs/methods/recon/ours_track_refine_synthetic.yaml - Exp JSON:
output/runs/infinigen_v41r_object_smoke_arthoi4d_tmp_novlm_local_fix1/exp_8_14_20.json
Drawer Scale Diagnostics¶
日期:2026-07-12
只针对 infinigen_drawer_p00_i00_videogen 做了 3 组单点诊断,不重跑 full recon protocol,只看 scale 相关因素。
运行目录:
- pose-mode ablation:
output/runs/drawer_pose_mode_scale_diag_20260712 - object-init depth diagnostic:
output/runs/drawer_objectinit_depth_diag_20260712 - HOI-align scale diagnostic:
output/runs/drawer_hoialign_scale_diag_20260712 - unified summary + panels:
output/runs/drawer_scale_compare_20260712
关键结果:
- baseline
result_object_pose_recon.ptscale =0.175551 yaw_only + ground_support->0.174963yaw_only + full_xyz->0.175273- 结论:去掉
ground_support几乎不改 drawer scale,yaw_only本身也不是当前大误差的主因 full_so3 + ground_support/full_xyz最后迭代 scale 约0.1786 / 0.1781- 但两者都在 export 时失败:
drawer_slider_1超出允许 clamp 阈值(max_abs_delta 0.0130 / 0.0167 > 0.01) - 因此当前不能把
full_so3视为可接受修复 - source object-init
init.object_scale = 0.193956 - object-init refine
nodepth->scale_after = 0.179218 - object-init refine
depth_abs1->scale_after = 0.175275 - 与 baseline
0.175551已几乎重合,且 IoU0.8366 -> 0.8898 - 当前 drawer scale 最有效的单点修复是:在 object-init refine 打开 aligned-depth abs loss
- HOI-align
translate_only->0.175551(完全不变) - HOI-align
translate_plus_scale->0.175075 - 说明 HOI-align 放开 scale 后只产生很小修正(约
-4.76e-4),不能指望它补救 drawer 的大 scale 偏差
本轮最可能的错误位置判断:
- 第一嫌疑仍是 object-init / object-pose 前段的 metric-scale 恢复,而不是 HOI-align
- 仅改 joint-search pose mode(
yaw_only、ground_support)对 drawer scale 基本无效 - 真正有用的是把 depth 直接接到 object-init residual refine;这说明当前 scale 偏差主要缺少早期 metric-depth 约束,而不是后段 HOI 接触优化没放开 scale
可视化:
- metrics csv:
output/runs/drawer_scale_compare_20260712/drawer_scale_metrics_summary.csv - pose-mode panel:
output/runs/drawer_scale_compare_20260712/pose_mode_scale_panel.png - object-init depth panel:
output/runs/drawer_scale_compare_20260712/object_init_depth_panel.png - HOI-align panel:
output/runs/drawer_scale_compare_20260712/hoi_align_scale_panel.png
Object Mask Debug Diagnostics¶
日期:2026-07-12
前述 drawer / door scale 诊断建立在错误 object mask 上,因此这部分结论优先级高于前述 scale ablation。
本轮目标:
- 只跑 object SAM3 mask debug,不重跑其它 preprocess 和 recon
- 针对
drawer/door各测两种临时策略: multi_instance_union_reject(对应 2+5)candidate_label_union(对应 3)- 代码保持 legacy path,不覆盖原逻辑,只通过
object_sam3_debug分支软接入 - 运行环境改为
condaenvarthoi4d
关键代码:
pipeline/reconstruction/preprocess/segmentation/sam3_masks.pypipeline/hoi_reconstructor.pyscripts/experiments/run_sam3_object_mask_debug.py
临时 runtime config:
- drawer:
output/runs/infinigen_v41r_object_smoke_arthoi4d_tmp_novlm_local_fix1/cases/infinigen_drawer_p00_i00_videogen/runtime/pipeline_config_maskdebug_multi_instance_union_reject.yamloutput/runs/infinigen_v41r_object_smoke_arthoi4d_tmp_novlm_local_fix1/cases/infinigen_drawer_p00_i00_videogen/runtime/pipeline_config_maskdebug_candidate_label_union.yaml- door:
output/runs/infinigen_v41r_object_smoke_arthoi4d_tmp_novlm_local_fix1/cases/infinigen_door_p00_i01_videogen/runtime/pipeline_config_maskdebug_multi_instance_union_reject.yamloutput/runs/infinigen_v41r_object_smoke_arthoi4d_tmp_novlm_local_fix1/cases/infinigen_door_p00_i01_videogen/runtime/pipeline_config_maskdebug_candidate_label_union.yaml
mask debug 运行目录:
output/runs/object_mask_debug_refimg_20260712
状态:
- drawer:
multi_instance_union_reject: successcandidate_label_union: fail- door:
multi_instance_union_reject: successcandidate_label_union: success
汇总文件:
- run status:
output/runs/object_mask_debug_refimg_20260712/run_status.tsv - metrics csv:
output/runs/object_mask_debug_refimg_20260712/comparison/mask_compare_summary.csv - drawer panel:
output/runs/object_mask_debug_refimg_20260712/comparison/infinigen_drawer_p00_i00_videogen_mask_compare.png - door panel:
output/runs/object_mask_debug_refimg_20260712/comparison/infinigen_door_p00_i01_videogen_mask_compare.png
关键结果:
- drawer
multi_instance_union_reject area_ratio_frame0 = 0.03982reference_iou = 0.51911- 选中的仍是多个抽屉面板:
[3, 6, 7, 8] - drawer
candidate_label_union - 失败于 reject gate:
reference_iou = 0.2179 < 0.2200 - 当前
drawer_base + drawer_door没有恢复出整柜体 silhouette - door
multi_instance_union_reject area_ratio_frame0 = 0.07429reference_iou = 0.67340- 仅选中
obj_id = 0 - door
candidate_label_union - 结果与 legacy / 2+5 基本一致
door_frameprompt 没有选出额外实例;有效部分仍只有door
本轮结论:
- drawer 的主要问题不是“单实例太少”,而是 SAM3 语义上把多个
drawer_door当成 object;把它们 union 以后仍不是整柜体 - 当前 reference gate 采用归一化 crop silhouette IoU,会把多个矩形抽屉面板误认为和 canonical drawer 外形足够相似,因此无法可靠拒绝 drawer face union
- door 的主要问题不是 reject gate,而是 text prompt 本身没有把
door_frame实例召回;因此 3 和 2+5 都没有真正补到门框 - 结论上,scale 错误的直接来源仍是 object mask 缩到 active part,而不是 joint search / HOI-align 本身
下一步更合理的修复方向:
- drawer: 不再只用 cropped normalized IoU,改成更强的 whole-object prior(例如保留 canvas 上下文的 silhouette / bbox extent / support extent)
- door:
给
door_frame增加 prompt alias 或独立 whole-object prior,否则 label union 也只会退化成door - 两类 case 都应继续保留 debug-only 分支,确认 whole-object mask 可恢复后再考虑是否并回默认 preprocess
Object Mask Debug Round 2¶
日期:2026-07-14
本轮把上一轮失败的两条临时 debug 策略直接替换掉:
- 删除旧 debug mode:
multi_instance_union_rejectcandidate_label_union- 新 debug mode:
reference_subset_selectprompt_alias_selectlabel_alias_union_select- 原始默认 object-mask 路径保持不变,仍由
hoi_reconstructor.py中的 legacyelse -> run_sam3_masks(...)处理
额外本地修复:
submodules/sam3/sam3/model_builder.py去掉对pkg_resources.resource_filename(...)的依赖,直接用本地assets/bpe_simple_vocab_16e6.txt.gz- 动机:
arthoi4d环境中有不可读的.dist-info目录,pkg_resourcesimport 会提前失败
批量实验:
- run root:
output/runs/object_mask_debug_suite_20260714 - summary:
output/runs/object_mask_debug_suite_20260714/summary.csv - drawer panel:
output/runs/object_mask_debug_suite_20260714/comparison/infinigen_drawer_p00_i00_videogen_panel.png - door panel:
output/runs/object_mask_debug_suite_20260714/comparison/infinigen_door_p00_i01_videogen_panel.png
本轮 2 个方向、2 轮方法:
- whole-object prior 方向
prior_looseprior_hard- prompt alias 方向
alias_objectalias_label- 第二轮 completion / hull
alias_object_hullalias_label_hull
Drawer 结论¶
prior_loose / prior_hard / alias_object / alias_object_hull- 都退化为选择单个小抽屉面板
selected_prompt = drawerselected_obj_ids = [1]area_ratio_frame0 = 0.00778- 说明单靠更强 prior 打分,仍会被“局部 drawer face 的 shape 很像 canonical 正面”误导
alias_label / alias_label_hulldrawer_base最优 prompt 变成dresser- 成功召回整柜体 mask,
area_ratio_frame0 = 0.12731 drawer_door分支只补了一个小 drawer face,但对最终 union 影响不大- completion/hull 基本没再带来额外收益
- 定性上真正有用的是:
label aliases for static body labels
Door 结论¶
prior_loose / prior_hard / alias_object- 与 legacy 基本一致,仍是门板本体
door frame/arched door frame/doorway/archway都没有召回实例alias_labeldoor_frame仍然完全空door分支从wooden door得到的 mask 与 legacy 近似alias_object_hull / alias_label_hull- 通过 completion 把多连通门板 mask 压成单连通 arch silhouette
normalized_iou从约0.652提升到0.693 / 0.706component_count从6/7降到1- 但仍没有真正召回 reference 中左侧/后侧 frame 几何,只是 shape-completion 改善
综合判断¶
- drawer:
当前最有效的方向已经很明确,不是更强 subset prior,而是
把 whole-object static body label 用更合适 alias 重新 prompt 出来 - door:
当前 alias 词表仍不足以真正召回
door_frame - 现阶段唯一有效增益来自 completion/hull
- 但这更像几何补全,不是语义召回
- 因此如果继续迭代:
- drawer 应把
drawer_base -> dresser/cabinet这类 alias 机制正式化 - door 需要继续扩
door_frame专用 alias,或引入单独的 frame-aware completion/prior,而不是只靠 generic hull
Promoted Case Overrides¶
日期:2026-07-14
已将当前 best 策略直接写入 configs/datasets/infinigen/summary.json 的 case override:
infinigen_drawer_p00_i00_videogen- 启用
reconstruction.preprocess.segmentation.object_sam3_debug - 使用
mode = label_alias_union_select drawer_basealiases:dresser body / cabinet body / dresser / cabinet / chest of drawersdrawer_dooraliases:drawer / drawer frontmask_completion.enabled = falseinfinigen_door_p00_i01_videogen- 启用
reconstruction.preprocess.segmentation.object_sam3_debug - 使用
mode = label_alias_union_select door_framealiases:door frame / arched door frame / arched doorway / doorway / archwaydooraliases:door / arched door / wooden doormask_completion.enabled = truefill_convex_hull = trueclose_kernel_px = 9
备注:
- 当前这一步只是把 best 策略推广到 case-level config,尚未基于新 summary 重跑真实 preprocess / recon
- 因为
hoi_reconstructor.py仍保留默认 legacyelse -> run_sam3_masks(...),只有这两个 case 会走额外恢复分支
Final Smoke Status¶
- preprocess: 实际 3/3 可用
- recon: 3/3 完成,均写出
recon/output/result.pt
结果文件:
output/runs/infinigen_v41r_object_smoke_arthoi4d_tmp_novlm_local_fix1/cases/infinigen_door_p00_i01_videogen/recon/output/result.ptoutput/runs/infinigen_v41r_object_smoke_arthoi4d_tmp_novlm_local_fix1/cases/infinigen_drawer_p00_i00_videogen/recon/output/result.ptoutput/runs/infinigen_v41r_object_smoke_arthoi4d_tmp_novlm_local_fix1/cases/infinigen_microwave_p00_i02_videogen/recon/output/result.pt
active-joint 产物:
.../infinigen_door_p00_i01_videogen/recon/preprocess/active_joints/result.json.../infinigen_drawer_p00_i00_videogen/recon/preprocess/active_joints/result.json.../infinigen_microwave_p00_i02_videogen/recon/preprocess/active_joints/result.json
Real Fixes Applied¶
-
CoTracker3 sliding-window 本地化修复
-
文件:
pipeline/reconstruction/preprocess/tracks/point_tracks.py - 修复:
sliding-window 聚合后的 tensor 显式
.detach().cpu().numpy() -
原始报错:
TypeError: can't convert cuda:0 device type tensor to numpy -
FoundationPose init-frame 参数对齐
-
文件:
pipeline/reconstruction/preprocess/object_init/foundation_pose.py - 修复:
run_foundation_pose_object_init(...)显式接受init_frame_index -
现状: 当前只支持
init_frame_index == 0,非零会显式报错 -
no-VLM solver 配置闭合
-
文件:
configs/methods/recon/ours_track_refine_synthetic.yaml - 修复:
显式设置
optimization.loss.contact: 0.0 -
原始报错: recon 阶段仍要求 contact labels,触发
FileNotFoundError: optimization.loss.contact > 0.0 requires VLM contact labels -
带
active_joint_names的 Infinigen case 改为显式 manual active-joint 选择 -
文件:
configs/datasets/infinigen/summary.json - 变更:
为 15 个已有
object.active_joint_names但未声明策略的 case 写入reconstruction.preprocess.active_joints.selection: manual - 直接动机:
drawercase 在selection=auto下会报RuntimeError: Active-joint detection found no track/link assignments - 当前 smoke 中:
infinigen_drawer_p00_i00_videogen已通过 manual 路径补跑成功
Important Logs¶
- clean preprocess log:
output/runs/infinigen_v41r_object_smoke_arthoi4d_tmp_novlm_local_fix1/logs/preprocess_smoke.log - drawer manual rerun:
output/runs/infinigen_v41r_object_smoke_arthoi4d_tmp_novlm_local_fix1/logs/preprocess_drawer_manual.log - recon success log:
output/runs/infinigen_v41r_object_smoke_arthoi4d_tmp_novlm_local_fix1/logs/recon_smoke_rerun.log
注意:
preprocess_summary.json仍记录第一次 multi-batch 的2 success / 1 failed- 这是因为
drawer的 manual 补跑是单 case 追加完成的 - 真实最终状态以
preprocess_drawer_manual.log和各 case 产物为准
Full35 Readiness¶
当前可以按 no-VLM 路线继续准备 full35,但需沿用以下约束:
- 使用
configs/methods/recon/ours_track_refine_synthetic.yaml - 不要用
scripts/run/infinigen/full.shfull.sh仍默认走 VLM-contact config - 用
create_exp_json.py生成 exp,再分 stage 跑 - 对带
object.active_joint_names的 case,保留 summary 里的reconstruction.preprocess.active_joints.selection: manual
Next Commands¶
full35 推荐仍按 no-VLM 分两段:
- preprocess
python scripts/run/infinigen/preprocess_from_exp.py --exp_json <full35_exp_json> - recon
python cli/pipeline/run_all.py --exp_json <full35_exp_json> --stage recon
Microwave Diagnosis¶
case:
infinigen_microwave_p00_i02_videogen
结论:
- active-joint 选择本身是对的:
recon/preprocess/active_joints/result.json正确选中door_joint_0 - 主要适配问题不在
active_part mask - 当前 no-VLM smoke 实际没有启用
part_maskloss runtime/pipeline_config.yaml中optimization.loss.part_mask.value: 0.0- 真正不对的是
track_refine默认的一次性multi_anchor_2d_loss track_refine会对每个 CoTracker3point_source_frame用 warm-start 关节值渲染source_vertices- 但 microwave 的 warm-start 在后半段已经错了,例如:
result_object_pose_recon.pt: frame 75 =60.46 deg, frame 90 =0.0 deg, frame 105 =0.0 degresult_object_articulation_recon.pt: frame 80 =74.74 deg, frame 90 =33.2 deg, frame 100 =0.0 deg
- 这意味着后半段 source frame(尤其
90/105)上的 2D tracks 会被绑定到错误门姿的 mesh 上,再进入 one-shot joint refine - 最终轨迹证据:
recon/output/result.pt的door_joint_0只在 frame63-91非零- 峰值在 frame
86,约89.64 deg - frame
100已重新回到0 deg - 源视频和 object mask 不支持“关回去”的结论
- 可视化见:
recon/output/microwave_debug/mask_keyframes_panel.pngrecon/output/microwave_debug/object_human_mask_overlap.pngrecon/output/microwave_debug/door_joint_trajectory.png
- frame
100的源帧和 object mask 仍显示门处于打开状态
建议修复路线:
- 不直接继续用
ours_track_refine_synthetic.yaml的 one-shotmulti_anchor_2d_loss - 改用新增 config:
configs/methods/recon/ours_track_refine_synthetic_sequential_multibind.yaml - 该 config 显式:
- 关闭
track_refine.multi_anchor_2d_loss - 启用
track_refine.sequential_multibind.enabled - 这样后续 source frame 会分阶段重绑,减少“错误 warm-start source pose 参与后半段绑定”的问题
Sequential Multibind Rerun¶
日期:2026-07-07
run:
- Run ID:
infinigen_v41r_object_microwave_seqmb_fix1 - Base config:
configs/methods/recon/ours_track_refine_synthetic_sequential_multibind.yaml - Exp JSON:
output/runs/infinigen_v41r_object_microwave_seqmb_fix1/exp_20.json
执行说明:
- 新 run 的 preprocess 在当前 shell 下无法直接重跑
SAM3 video inference expects CUDA, but no GPU is available.- 为保持“只换 recon config”的对比,这次复用了旧 smoke 的 preprocess:
- 从
output/runs/infinigen_v41r_object_smoke_arthoi4d_tmp_novlm_local_fix1/cases/infinigen_microwave_p00_i02_videogen/recon/preprocess拷到新 run case - recon 通过非沙箱 GPU 跑通
结果:
- sequential multibind 确实生效:
recon/output/object_articulation_recon/joint_refine/sequential_multibind_summary.json- source frames:
[30, 45, 60, 75, 90, 105] - 但 microwave 没有修好,且比旧版更早错误关上
新旧对比:
- old multi-anchor:
- 峰值
89.64 deg @ frame 86 door_joint_0 > 5 deg区间:64-91- frame
100/110/120 = 0 deg - new sequential multibind:
- 峰值
67.93 deg @ frame 80 door_joint_0 > 5 deg区间:63-84- frame
86/90/100/110/120 = 0 deg
对比图:
- 轨迹:
output/runs/infinigen_v41r_object_microwave_seqmb_fix1/cases/infinigen_microwave_p00_i02_videogen/recon/output/compare_debug/door_joint_compare.png - 渲染关键帧:
output/runs/infinigen_v41r_object_microwave_seqmb_fix1/cases/infinigen_microwave_p00_i02_videogen/recon/output/compare_debug/render_keyframes_compare.png
当前判断:
sequential_multibind解决了“后半段错误 source pose 参与 one-shot multi-anchor 绑定”的一部分协议问题- 但对这个 microwave case,仍缺少足够强的“门在后半段应保持打开”的监督
- 现状看,它把峰值提前到更早阶段,同时更早衰减回零位
Microwave Sequential Ablations¶
日期:2026-07-07
目标:
- 检查当前 microwave 的“提前关”是否来自某种“结尾必须保持关闭 / 关闭后不能再开”的监督,而不是纯粹的 track-refine 协议问题
已确认的配置事实:
optimization.loss.no_contact_articulation.enabled: false- 当前 no-VLM microwave 路线不存在启用中的显式“post-contact no-reopen / end-closed”loss
本轮 ablation:
-
w_mask=0 -
Run ID:
infinigen_v41r_object_microwave_ablate_maskloss - 做法:
- fresh runtime config 后只改
track_refine.w_mask: 0.0 - 结果:
- 峰值
68.67 deg @ frame 81 door_joint_0 > 5 deg区间:63-85- frame
86/90/100/110 = 0 deg - 判断:
- 去掉 full-sequence mask supervision 也没有阻止“提前关”
-
因此当前错误不是由
track_refine.w_mask单独驱动的 -
max_stages=4 -
Run ID:
infinigen_v41r_object_microwave_ablate_stop4 - 做法:
- fresh runtime config 后只改
track_refine.sequential_multibind.max_stages: 4 - 相当于去掉最后两个 late stages:
source=90,105 - 结果:
- 峰值
68.35 deg @ frame 80 door_joint_0 > 5 deg区间:63-84- frame
86/90/100/110 = 0 deg - 判断:
- 去掉后半段
source=90/105也没有修好 - 因此“提前关”不是由最后两段 sequential stage 单独造成的
统一对比:
- 轨迹汇总 JSON:
output/runs/infinigen_v41r_object_microwave_ablation_compare/door_joint_compare_all.json - 四组轨迹图:
output/runs/infinigen_v41r_object_microwave_ablation_compare/door_joint_compare_all.png - 关键帧面板:
output/runs/infinigen_v41r_object_microwave_ablation_compare/render_keyframes_compare_all.png - 主视角裁剪关键帧:
output/runs/infinigen_v41r_object_microwave_ablation_compare/render_keyframes_compare_incoming_crop.png
当前结论更新:
- 没有证据表明 microwave 的“提前关”来自显式“结尾保持关闭 / 不许 reopen”的监督
- 也没有证据表明它主要由
track_refine.w_mask或最后两个 late sequential stages 驱动 - 更可能是
sequential_multibind早期阶段本身就已把门角度拉回零附近,后续freeze_previous_frames=true/resume只是在延续这个错误状态
清理:
- 失败的临时 method config
configs/methods/recon/ours_track_refine_synthetic_sequential_multibind.yaml已删除 - fresh ablation 只保留各自 run 内的 runtime config 与结果,未再新增仓库级 method config
seqmb_fix1/ablate_*目录下的exp_20.json现在只作为历史记录保留;若要复现,直接使用各 case 的runtime/pipeline_config.yaml
Microwave Warm-Start Recovery Attempts¶
日期:2026-07-08
目标:
- 做 4 个彼此独立的 stage2 尝试,检查是否能修掉 baseline 的 microwave “提前关”
已加的 track-refine 调试能力:
infinigen_default.yaml- 显式新增:
track_refine.multi_anchor_source_frame_allowlisttrack_refine.multi_anchor_source_min_mask_ioutrack_refine.two_pass_rebind.* pipeline/reconstruction/optimization/tracks/refine3d.py- 支持按 source-frame allowlist 过滤 multi-anchor 绑定
- 支持 source-frame render mask IoU 诊断并写入
summary.json pipeline/reconstruction/optimization/run.py- 支持
two_pass_rebind包装:先用受限 source 做 pass0,再从 pass0 结果进入完整 pass1
4 个 fresh run:
-
1A cap75 -
Run ID:
infinigen_v41r_object_microwave_try_1a_cap75 - 改动:
multi_anchor_source_frame_allowlist = [0,15,30,45,60,75] - 结果:
- 峰值
88.75 deg @ frame 87 >5 deg区间:64-92- frame
90 = 43.24 deg - frame
100/110 = 0 deg - 判断:
- 比 baseline 只多撑了约 1 帧
-
“提前关”基本未修好
-
1B src-iou -
Run ID:
infinigen_v41r_object_microwave_try_1b_sourceiou - 改动:
multi_anchor_source_min_mask_iou = 0.65 - 结果:
- 峰值
88.36 deg @ frame 86 >5 deg区间:63-91- frame
100/110 = 0 deg - source-frame IoU:
75=0.742,90=0.745,105=0.680 - 判断:
- 阈值没挡掉任何晚期 source frame
-
效果与 baseline 几乎相同,说明这版 IoU gate 太弱
-
1C two-pass -
Run ID:
infinigen_v41r_object_microwave_try_1c_twopass - 改动:
- pass0:
source=[0,15,30,45,60,75] - pass1:从 pass0 结果 warm start,再跑完整 source 集合
- 结果:
- 峰值
87.39 deg @ frame 88 >5 deg区间:63-107- frame
90 = 73.34 deg - frame
100 = 53.08 deg - frame
110 = 0 deg - 判断:
- 明显延后了错误关门
-
但仍在后段突然塌回关闭,并出现
90-105一段偏平的“半开平台” -
joint-search -
Run ID:
infinigen_v41r_object_microwave_try_jsparse - 改动:
- 开启
joint_search.enabled = true run_before_track_refine = trueoptimizer = grid_dpframe_interval = 15- 结果:
- 峰值
103.13 deg @ frame 108 >5 deg区间:65-120- frame
90 = 90.27 deg - frame
100 = 93.75 deg - frame
110/120 = 103.13 deg - 判断:
- 原来的“提前关”现象消失
- 但出现新的 warm-start / refine drift:门后段继续增大并停在过开状态
统一对比产物:
- JSON:
output/runs/infinigen_v41r_object_microwave_try_compare/attempt_compare_summary.json - 曲线图:
output/runs/infinigen_v41r_object_microwave_try_compare/door_joint_compare_attempts.png - 关键帧拼图:
output/runs/infinigen_v41r_object_microwave_try_compare/render_keyframes_compare_attempts.png
当前结论:
- baseline 的问题更像是:
- late warm-start source pose 错,导致 multi-anchor binding 把后半段 tracks 绑到错误关门几何上
- 之后 track-refine 主要在这个错误 basin 里做平滑和细调,无法靠现有 2D/mask 项把门再拉开
1A说明单纯砍掉90/105source frame 不够1B说明当前 render-mask IoU 还不能有效区分“几何姿态虽错但 silhouette 仍像”的 source frame1C说明“先用早期 source 重绑,再进入完整 refine”是有效方向,但 pass1 重新引入晚期 source 后仍会把结果拖回错误 basinjoint-search说明只要 warm start 足够接近正确开门轨迹,track-refine 可以保持打开;但缺少后段约束时又会继续漂到过开
下一步优先级:
- 优先沿
1C路线继续 - 让 pass1 不再完全恢复 baseline 式 late-source 绑定,或者降低晚期 source 的绑定权重
- 次优先尝试在
joint-search成功 warm start 的基础上 - 给后段加轻量稳定项,抑制继续过开,而不是重新允许塌回关闭
- 不优先继续
1B - 这版 source-mask IoU 对 microwave 不够判别