This repository contains public, host-neutral recipes for the experiments behind the advertised papers and the instance-completion work. They are meant to catch broken public commands and config drift before a user spends hours on a run.
The recipes do not ship datasets or checkpoints. They render commands against the public Hydra configs and fail early when a checkpoint, mesh, output path, or BOP split has to be supplied.
List available recipes:
python3 scripts/reproduce_experiment.py --list
python3 scripts/reproduce_experiment.py --list --suite 3dv2026
Render a command without running it:
python3 scripts/reproduce_experiment.py --recipe iros2023:mugs-main-train
python3 scripts/reproduce_experiment.py --recipe 3dv2026:ar-uncond-eval \
--set weights=cvpr_2025/pcd_larm_v1/model_ema.pt \
--set vae_weights=cvpr_2025_vae/pcd_vqvae_16k_long/model_best.pt
Execute one recipe:
python3 scripts/reproduce_experiment.py --execute --recipe iros2023:mugs-main-train
Installed environments can also use the console entry point:
reproduce_experiment --list --suite inst3d2026
The commands use ./scripts/run.sh, which appends dirs=default. Set the needed roots in conf/dirs/default.yaml before running experiments:
| Key | Used by |
|---|---|
log |
checkpoint lookup and training outputs |
shapenet_v1_onet |
IROS 2023 mug experiments |
shapenet_v1_fused |
3DV 2026 latent generative experiments |
automatica |
Humanoids 2023 grasping experiments |
tabletop |
Inst3D joint and pipeline training |
tabletop_pile |
Inst3D pile fine-tuning and pile evaluation |
bop |
Inst3D BOP scene evaluation |
Keep local machine paths in your untracked dirs config. Public docs and scripts should stay independent of a particular cluster, workstation, or package profile.
Core recipes:
python3 scripts/reproduce_experiment.py --list --suite iros2023
The suite covers uncertain-label preprocessing, the ConvONet mug model, the MCDropout/PSSNet/RealNVP baselines, and gen_eval for a trained checkpoint:
python3 scripts/reproduce_experiment.py --recipe iros2023:watertight-meshes \
--set mesh_root=ShapeNetCore.v1 \
--set watertight_root=shapenet_watertight \
--set n_jobs=8
python3 scripts/reproduce_experiment.py --recipe iros2023:sample-points \
--set watertight_root=shapenet_watertight \
--set samples_root=shapenet_processed \
--set n_jobs=8
python3 scripts/reproduce_experiment.py --recipe iros2023:mugs-main-eval \
--set weights=mugs_paper/run_name/model_best.pt
When using the Zenodo extract, uncertain labels are already present; run iros2023:uncertain-labels only when regenerating labels from raw rendered depth.
Core recipes:
python3 scripts/reproduce_experiment.py --list --suite humanoids2023
The suite covers Kinect-style rendering, VQDIF training/evaluation, and the PointTransformer and ShapeFormer comparison models:
python3 scripts/reproduce_experiment.py --recipe humanoids2023:watertight-meshes \
--set mesh_root=automatica_meshes \
--set watertight_root=automatica_watertight \
--set n_jobs=8
python3 scripts/reproduce_experiment.py --recipe humanoids2023:render-kinect \
--set mesh=mesh.obj \
--set depth_root=depth_renders
python3 scripts/reproduce_experiment.py --recipe humanoids2023:stable-poses \
--set watertight_root=automatica_watertight \
--set poses_root=automatica_poses \
--set n_jobs=8
Core recipes:
python3 scripts/reproduce_experiment.py --list --suite 3dv2026
The suite covers VAE/VQ-VAE stage-one training, LDM/AR training, conditional Kinect variants, and representative generation evaluation. LDM and AR checkpoints do not include the VAE/VQ-VAE weights, so pass vae_weights again at evaluation time.
The data-generation recipes cover the public preprocessing chain: watertight meshes, point/occupancy samples, Kinect-style partial observations, and optional HDF5 packing:
python3 scripts/reproduce_experiment.py --recipe 3dv2026:watertight-meshes \
--set mesh_root=ShapeNetCore.v1 \
--set watertight_root=shapenet_watertight \
--set n_jobs=8
python3 scripts/reproduce_experiment.py --recipe 3dv2026:sample-points \
--set watertight_root=shapenet_watertight \
--set samples_root=shapenet_processed \
--set n_jobs=8
python3 scripts/reproduce_experiment.py --recipe 3dv2026:render-kinect-parallel \
--set watertight_root=shapenet_watertight \
--set depth_root=shapenet_kinect \
--set n_jobs=8
The AR recipes intentionally use cvpr_2025 with overrides:
model.arch=larm model.compile=False ++vae_arch=3dshape2vecset_vqvae
Evaluation recipes also pass norm.center=True norm.scale=True explicitly because the trained runs used those resolved values.
Core recipes:
python3 scripts/reproduce_experiment.py --list --suite inst3d2026
The suite covers joint training, pipeline training, pile fine-tuning/evaluation, and BOP camera-frame scene evaluation. Pile recipes use inputs.type=kinect_sim, data.train_ds=[tabletop_pile], and test.no_aug=True. BOP recipes use camera-frame settings and disable the filtering/refinement switches that were not part of the public sanity path:
python3 scripts/reproduce_experiment.py --recipe inst3d2026:render-tabletop-packed \
--set num_scenes=100 \
--set num_views=10 \
--set shard=0 \
--set tabletop_dataset=tabletop.v3
python3 scripts/reproduce_experiment.py --recipe inst3d2026:add-kinect-sim \
--set hdf5_root=tabletop.v3/train/0 \
--set shapenet_root=ShapeNetCore.v1
python3 scripts/reproduce_experiment.py --recipe inst3d2026:bop-pipeline-eval \
--set bop_split=bopscene_hb_val_primesense \
--set occ_weights=tabletop_pile/comp_cam_kinect_10_epochs/model_best.pt \
--set inst_weights=tabletop_pile/instseg_cam_kinect_10_epochs/model_best.pt
Use camera-frame checkpoints for BOP recipes. World-frame pile checkpoints are not compatible with BOP scene geometry.
The tabletop rendering wrapper expects DATA_ROOT in the execution environment. Keep that value local; it is intentionally not part of the public recipe command.
The public sanity checks render every recipe and Hydra-compose every recipe that goes through scripts/run.sh. They are not a replacement for full training or evaluation:
pytest experiments/tests/test_reproduction.py
pytest experiments/tests/test_reproduction_hydra.py
These tests should pass without private paths, Slurm, or local CUDA setup. GPU-node runs are useful for final local validation, but those commands belong outside the public repository.