YAML Metadata Warning:empty or missing yaml metadata in repo card
Check out the documentation for more information.
RLSplat ablation checkpoints (2026-09-16)
Uploaded checkpoints: Table 5 only โ
base/epoch_1-step_40000.ckpt(random 0901),27aa_gspo5k_lr1e5_head1e3_legacysampler,40a_alloc_uniform_5000,40b_alloc_sobel_5000(manifest.json["base"|"arms"]). The 1000-step ablation arms listed below are finished and their configs are here (arms/<arm>/,manifest.json["arms_not_uploaded"]) but their checkpoints stay on the training server โ ask for them if a full-eval cell needs one.
Finished ablation arms of the softmax-proportional allocation recipe, all finetuned from the
0901 random-allocation base (base/epoch_1-step_40000.ckpt). Training-side details, validation
curves and conclusions: results.md (sweep log, newest at the bottom) and HANDOFF_training.md.
Full-evaluation protocol for the paper tables: EVAL_PROMPT.md (hand it to Claude on the eval server).
Layout
manifest.json arm -> ckpt path, recipe, eval_overrides (hydra tokens needed to LOAD the ckpt), train_overrides, note
base/epoch_1-step_40000.ckpt 0901 random base (recipe rlsplat_b200_random_up504, no overrides)
arms/<arm>/ epoch_0-step_N.ckpt + sweep.env (training overrides + rationale)
+ config.yaml / overrides.yaml (resolved hydra) + eval_overrides.txt
code/GIT_BASE.txt commit the ckpts were trained with; code/uncommitted.patch = working-tree diff
on top of it (needed: image_gradient mode, log_density encoding, view conditioning, ...)
code/assets/ evaluation_index_{re10k,acid}[_ctx_{8,16,24}].json (the ctx_N files are untracked in git)
code/eval_arms.sh runner: one mode=test run per (arm, dataset) sweeping the 7 validation budget
rungs (per-view 1024..16384), chained per GPU; needs uncommitted.patch applied
code/aggregate_arms.py per-rung + AUC_log table over every finished run (+ --csv, --ref ARM for deltas)
code/compare_grpo_test.sh.reference the training-server script eval_arms.sh was derived from
Arms
All 1000-step arms share the ICLR ablation protocol: GSPO finetune from the 0901 base, 4 GPUs,
no grad accumulation, legacy view sampler, val every 100 steps on 7 budgets 1024..16384/view.
Reference row for them is 35b_alloc_gspo_ref_legacysampler. The 5000-step arms (27aa, 40a, 40b)
use the main recipe (4 GPU x accumulate 2 = 8-GPU batch).
| arm | steps | alloc mode | what it ablates |
|---|---|---|---|
27aa_gspo5k_lr1e5_head1e3_legacysampler |
5000 | softmax (GSPO) | Table 5 ours: GSPO, main recipe, legacy sampler |
40a_alloc_uniform_5000 |
5000 | uniform | Table 5: uniform allocation, same 5000 renderer steps |
40b_alloc_sobel_5000 |
5000 | image_gradient | Table 5: Sobel high-frequency heuristic (power 1.0, eps 0.05) |
30a_alloc_uniform_ctrl |
1000 | uniform | allocation control (ZipSplat-style sampler; superseded by 35b/40a) |
30b_alloc_gspo_ref |
1000 | softmax (GSPO) | GSPO reference on the ZipSplat-style sampler (superseded by 35b) |
31a_est_grpo_s1 / 31d_est_grpo_s2 / 31g_est_grpo_s3 |
1000 | softmax (GRPO) | estimator = GRPO (token-level ratio), seeds 1/2/3 |
31b_est_reinforce_s1 / 31e_est_reinforce_s2 / 31h_est_reinforce_s3 |
1000 | softmax (REINFORCE) | estimator = REINFORCE, seeds 1/2/3 |
31c_est_gspo_s2 / 31f_est_gspo_s3 |
1000 | softmax (GSPO) | estimator = GSPO, seeds 2/3 (seed 1 = 35b) |
34a_loss_noproj |
1000 | softmax (GSPO) | loss: projection weight 0 |
34b_loss_novoronoi |
1000 | softmax (GSPO) | loss: anchor-distance (Voronoi) term 0 |
34c_loss_nodisp |
1000 | softmax (GSPO) | loss: position-delta (displacement) term 0 |
35a_struct_norefine |
1000 | softmax (GSPO) | structure: no gaussian residual refinement |
35b_alloc_gspo_ref_legacysampler |
1000 | softmax (GSPO) | reference row for every 1000-step arm |
36a_cond_none |
1000 | softmax (GSPO) | head: no budget conditioning (one ranking for every budget) |
36b_cond_shift / 36c_cond_concat / 36d_cond_film2 |
1000 | softmax (GSPO) | head conditioning mode shift / concat / film2 (depth 2); ref = film |
37a_recon_sampled |
1000 | softmax (GSPO) | recon target rendered from a sampled candidate instead of deterministic |
37b_group3 / 37c_group8 |
1000 | softmax (GSPO) | GSPO group size 3 / 8 (ref 5) |
37d_tau1.0 / 37e_tau1.5 |
1000 | softmax (GSPO) | rollout temperature 1.0 / 1.5 |
38a_cond_logdensity |
1000 | softmax (GSPO) | budget encoding log_density (fix candidate for the high-budget regime) |
38b_cond_logdensity_views |
1000 | softmax (GSPO) | log_density + view-count conditioning |
39a_sh3_expanded |
1000 | softmax (GSPO) | SH degree 3 (from the sh3-expanded base) |
Per-arm rationale (verbatim from the sweep env): arms/<arm>/sweep.env or manifest.json["arms"][arm]["note"].
Every checkpoint is ~1.4-1.5 GB; 30 arms + base = ~45 GB.
Loading a checkpoint
checkpointing.load=<ckpt> restores the full Lightning state, but the architecture flags are NOT
stored in it, so always pass the arm's eval_overrides (from manifest.json or
arms/<arm>/eval_overrides.txt): uniform / image_gradient arms have no logit head, 36d has head
depth 2, 39a has sh_degree 3, 36a has no budget conditioning. uniform / image_gradient arms need
train.gaussian_allocation_rank_loss=0.0 (already included). The base uses recipe
rlsplat_b200_random_up504, every arm uses rlsplat_softmax_grpo.