Tasks/Computer Vision/3D Reconstruction

Budgeted Scene-Primitive Selection

Drop Gaussians to a budget while holding novel-view fidelity

gaussian_splatting_compression Computer Vision 3D Reconstruction
instruction.mdthis is what the agent is given

Improve an algorithm that selects a compact subset of anisotropic scene primitives while preserving the appearance of rendered views. You iterate against a visible scene collection; the same source code is later rerun on a separate scene collection and camera set.

Hard Constraints

  • Keep predict(export_dir: str) -> dict[str, numpy.ndarray] in /app/methods/main/solver.py as the entry point.
  • Return exactly one key per scene_id in export_dir/manifest.json. Each value must be a one-dimensional, non-empty integer array of unique in-range indices, no longer than that scene's budget. Missing, extra, empty, duplicated, out-of-range, over-budget, and floating-point outputs are rejected outright and score nothing — produce a valid array rather than clipping or filtering one after the fact.
  • CPU only, using the libraries already installed in the image. Do not use the network, train a separate scene model, or depend on files outside /app/methods/main.
  • Do not hard-code scene identifiers, primitive counts, camera counts, keep-sets, or scene-specific lookup tables; the evaluator supplies a different manifest with different aliases and dimensions. Tuning a general algorithm against visible PSNR is allowed.
  • The sealed predict() call has a 300-second wall-clock budget: at that point the evaluator requests a graceful stop, allows a 15-second grace window, and hard-stops the child at 330 seconds. A long-running method may atomically publish a best-so-far selection archive to the path in ARA_GS_CHECKPOINT_PATH — write a temporary NPZ beside it, flush and fsync, then replace it. The evaluator scores that state if shutdown interrupts the ordinary return.

What You Have

  • /app/methods/main/solver.py — an editable deterministic random selector. It makes the interface executable; it is not a calibrated benchmark level.
  • /app/methods/main/gs_render.py — the CPU renderer and PSNR helper the self-check uses.
  • /app/public/export/ — the visible scenes and their manifest. Each scene file carries the primitive arrays, a scalar budget, and training cameras.
  • /app/public/gt/ — visible evaluation images and cameras, used only by selfcheck.py.
  • /app/selfcheck.py — validates the output contract, renders the selected subsets, and prints per-scene and mean visible PSNR.

What You Submit

The edited /app/methods/main/solver.py, plus any ordinary .py modules under the same directory. The artifact is source code, not a stored selection: generated arrays, archives, models, binaries, symlinks, and files outside that directory are not accepted. Every selection must be derived at run time from the manifest and the arrays passed to predict().

How It Is Judged

The evaluator reruns your submitted source in a separate CPU-only process on a sealed scene pool. That process receives the full primitive arrays, training cameras, and budget for each scene, but not the evaluation cameras or target images.

For each scene the selected primitives are rendered from the evaluation cameras and compared against full-scene target renders using PSNR in decibels (higher is better). Camera scores are averaged within a scene, then across scenes. Output-contract violations receive no credit.

Metric

mean novel-view PSNR over the nine sealed scenes · higher is better

Kept subset rendered from 4 unseen cameras per scene against the full render; averaged per scene, then over scenes.

anchorvisible setheld-outreward
Bshipped random budget-sized subset18.625 dB18.156 dB0.00
Sreference: blending-weight ranking25.725 dB26.139 dB0.30
UPSNR ceiling at the 1e-12 MSE floor120 dB1.00
normalisation
m <= B0
B < m <= S0.3 * (m - B) / (S - B)
S < m < U0.3 + 0.7 * (m - S) / (U - S)
m >= U1

m = this run's held-out metric  ·  B = shipped random budget-sized subset  ·  S = reference: blending-weight ranking  ·  U = PSNR ceiling at the 1e-12 MSE floor

Linear in dB. B and S are each scene's own anchors, U = 120 dB. Mapped per scene, then the nine rewards averaged; anchors above are means.

Rollouts

152 minwall clock
$18.37spend
24.1Mtokens
10versions, 8 kept
28.62 28.65 28.68 28.71 28.74 28.77 $0 $4 $8 $12 $16 cumulative spend on the run selfcheck visible mean PSNR (dB), 6 scenes, higher better reference: blending-weight ra… · visible: 25.725 dB · off this scale v1 v2 v3 v4 v5 v6 v7 v8 v9 v10
keptrevertedno scoreturning point
  1. v1Exact sparse renderer plus closed-form greedy forward selectionInsertion delta a*(Tpre[j]*rgb - Rem[j]) is closed form, so scoring every candidate is one sparse pass.28.63210 min · $2.14
  2. v2Infer the camera rig, optimise against 12 extra sampled virtual viewsEval cameras are unseen, so it recovered the rig's look-at point, pole and radius band and fitted sampled viewpoints instead.28.733$4.31
  3. v3Incremental row updates and footprint truncation; selections identical to v228.733$6.47
  4. v4Model the rig's aim/roll noise; escalating 8/16/32/48 virtual-camera schedule28.72977 min · $8.64
  5. v5Memory hardening: Monte-Carlo pixel subsampling under a 300 MB working set28.739107 min · $11.59
  6. v6Rank the schedule's candidates on validation cameras never optimised againstModel selection off training fit: the schedule yields about five keep-sets, picked with 24 held-out cameras on a separate seed.28.762115 min · $13.01
  7. v7Hold the schedule at its last step and let 16 candidates compete28.72120 min · $13.42
  8. v8Remove experiment-only helpers; greedy returns bit-identical selections28.762129 min · $14.85
  9. v9Fix the silently disabled validation checker; rank candidates by mean log MSE28.761134 min · $15.72
  10. v10Run the richer schedule passes largest-affordable-first28.74149 min · $17.57

v1 reached 28.632 dB in 10 minutes for $2.14; the remaining 142 minutes and $16 bought 0.13 dB. The v2 and v3 snapshots were written only at step 148.

On the hidden set

held-out metricreward
shipped random budget-sized subset18.156 dB0.00
reference: blending-weight ranking26.139 dB0.30
PSNR ceiling at the 1e-12 MSE floor120 dB1.00
this run29.351 dB0.3239
48 minwall clock
$7.69spend
10.2Mtokens
29versions, 13 kept
20.0 22.5 25.0 27.5 $0 $2 $4 $6 cumulative spend on the run selfcheck visible mean PSNR (dB), 6 scenes, higher better reference: blending-weight ra… · visible · 25.725 dB v0 v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28
keptrevertedno scoreturning point
  1. v0Shipped deterministic random budget-sized subset18.62540 min · $0.13
  2. v1Rank primitives by accumulated blending weight over the training camerasThe first real ranking: how much each primitive contributes to the training renders. It hits the reference anchor to six digits.25.72521 min · $0.16
  3. v2Weight each contribution by 0.1 + mean(rgb) for the black render background26.13612 min · $0.27
  4. v3Exact squared-error cost of removing one splat from the full composite25.10982 min · $0.34
  5. v4Iterative pruning: keep 70% per round, recompute visibility until the budgetA one-shot ranking cannot see that a redundant splat turns necessary once its neighbours go. Recomputing visibility fixed v3.27.26374 min · $0.43
  6. v5Gentler 85%-retention pruning schedule27.46574 min · $0.49
  7. v693%-retention pruning; +0.032 dB for 39 s, the later branch stayed on v527.49774 min · $0.57
  8. v7Ablate the brightness factor, pure blending weight at 93% retention27.32486 min · $0.68
  9. v8Squared blending weight times squared colour at 85% retention26.52417 min · $0.84
  10. v9Concave sqrt aggregation of per-camera contribution27.05888 min · $0.99
  11. v10Add geometry-derived midpoint cameras at equal weight27.28839 min · $1.17
  12. v11Downweight the synthesized midpoint cameras to 0.2527.419610 min · $1.27
  13. v12Midpoint-camera weight 0.127.441110 min · $1.37
  14. v13Exact single-toggle add/remove exchanges after pruning, up to 8 acceptedPruning only removes. The exchange pass lets a dropped splat return when the exact toggle says so, verified on log camera MSE.28.153213 min · $1.64
  15. v14Exchanges from 8 to 16, unbatched; superseded by the batched branch off v1328.529514 min · $1.82
  16. v15Batch up to four verified exchanges per toggle pass, 16 total28.49316 min · $2.07
  17. v16Extend batched exchanges from 16 to 3228.620717 min · $2.21
  18. v17Extend batched exchanges to 64 with no-improvement early stop28.654518 min · $2.43
  19. v1893%-retention initial pruning before the 64 exchanges28.634920 min · $2.69
  20. v19Ablate the colour weight in the initial pruning only28.647622 min · $3.07
  21. v20Reduce the exchange batch from four to two28.609724 min · $3.39
  22. v21Optimise against 8-bit rounded training renders instead of float28.635427 min · $3.76
  23. v22Raise the exchange allowance to 128; output bit-identical to v1728.654529 min · $4.09
  24. v23Contract hardening: immediate fallback, checkpoints, 30 s deadline margin28.654531 min · $4.54
  25. v24Move the 270 s soft-deadline origin to the first line of predict()28.654536 min · $5.51
  26. v25Bounded exact 4x4 pairing search at the coordinate-search plateau28.650838 min · $5.89
  27. v26Midpoint-camera renders as a 0.1-weight regulariser during exchange28.626741 min · $6.43
  28. v27Cache per-camera projected alpha footprints; 103 s to 61 s, same picks28.654544 min · $6.98
  29. v28Scene-wide 8M-float cache budget split across the manifest camera count28.654546 min · $7.31

Twenty-nine snapshots in 46 minutes for $7.69. The visible mean stopped at v17, 18 minutes in; seven of the eleven later versions were rejected.

On the hidden set

held-out metricreward
shipped random budget-sized subset18.156 dB0.00
reference: blending-weight ranking26.139 dB0.30
PSNR ceiling at the 1e-12 MSE floor120 dB1.00
this run29.259 dB0.3232
75 minwall clock
-spend
-tokens
9versions, 9 kept
18 20 22 24 26 28 0 20 40 60 80 agent step (this harness reports no tokens or timestamps) selfcheck visible mean PSNR (dB), 6 scenes, higher better reference: blending-weight ra… · visible · 25.725 dB v0 v1 v2 v3 v4 v5 v6 v7 v8
keptrevertedno scoreturning point
  1. v0Shipped deterministic random budget-sized subset18.6254
  2. v1Incremental colour-aware matching pursuit plus synthetic orbit midpoint camerasBuild the keep-set by residual gain instead of ranking, and score it on interpolated orbit poses the training set never saw.28.0457
  3. v2Robust polar orbit-centroid extras; 3x4 PSNR coordinate-descent single swapsOne pursuit pass cannot undo an early pick; single add/remove swaps accepted on training PSNR repair it.28.2072
  4. v3Five-tap colour-aware centre gain; drop the batch-swap pass28.2356
  5. v4Mix 0.05 * train-view full-scene contribution * vol^0.5 into the residual gainA global contribution prior regularises the greedy residual; the held-out two scenes gain 0.20 dB, the tuned four stay flat.28.2978
  6. v5Drop extra cameras whose render is under 25% of train mean luminance28.2978
  7. v6PCA-plane extras, no Z-up assumption; rgb-range and budget-array guards28.2886
  8. v7Weight interpolated extra views 0.6 against the real training views28.3063
  9. v8Wrap extra-camera construction in try/except for degenerate pose SVD28.3063

Nine snapshots in 75 minutes; this harness reports no token or cost data. Nothing was reverted, and v1 to v8 moved the visible mean 0.26 dB.

On the hidden set

held-out metricreward
shipped random budget-sized subset18.156 dB0.00
reference: blending-weight ranking26.139 dB0.30
PSNR ceiling at the 1e-12 MSE floor120 dB1.00
this run28.743 dB0.3193
13 minwall clock
$0.65spend
3.2Mtokens
13versions, 7 kept
18 20 22 24 26 28 $0 $0.2 $0.3 $0.5 $0.6 cumulative spend on the run selfcheck visible mean PSNR (dB), 6 scenes, higher better reference: blending-weight ra… · visible · 25.725 dB v0 v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12
keptrevertedno scoreturning point
  1. v0Shipped deterministic random budget-sized subset18.62541 min · $0.10
  2. v1Rank primitives by cumulative contribution across the training viewsScore each primitive by its summed alpha-compositing contribution; one pass lands on the reference anchor to six digits.25.72521 min · $0.09
  3. v2Iterative pruning, 20% of the active set removed per roundRecompute contribution between rounds so a splat that turns necessary once its neighbours go stops looking droppable.27.17712 min · $0.16
  4. v3Iterative pruning at 10% per round27.25813 min · $0.19
  5. v4Excess-based pruning: drop 0.4 of the over-budget surplus each roundPrune a fraction of active minus budget, not of active: coarse early, fine near the budget, 77 s down to 21 s.27.29587 min · $0.28
  6. v5L2-norm multi-view aggregation of contribution at f=0.426.929 min · $0.35
  7. v6L-infinity multi-view aggregation of contribution at f=0.426.28969 min · $0.34
  8. v7Excess fraction f=0.327.251211 min · $0.53
  9. v8Excess fraction f=0.527.228711 min · $0.54
  10. v9Excess fraction f=0.3527.297211 min · $0.51
  11. v10Excess fraction f=0.3827.29411 min · $0.54
  12. v11Excess fraction f=0.3327.280811 min · $0.55
  13. v12Random-init fallback, progressive checkpointing, error and timeout guards27.297212 min · $0.62

Thirteen snapshots in 13 minutes for $0.65. Everything after v4 is a one-parameter sweep worth 0.001 dB; the sealed run took 41 s.

On the hidden set

held-out metricreward
shipped random budget-sized subset18.156 dB0.00
reference: blending-weight ranking26.139 dB0.30
PSNR ceiling at the 1e-12 MSE floor120 dB1.00
this run27.700 dB0.3115
184 minwall clock
$44.14spend
73.9Mtokens
58versions, 24 kept
20.0 22.5 25.0 27.5 $0 $10 $20 $30 $40 cumulative spend on the run selfcheck visible mean PSNR (dB), 6 scenes, higher better reference: blending-weight ra… · visible · 25.725 dB v0 v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57
keptrevertedno scoreturning point
  1. v0Shipped deterministic random budget-sized subset18.62541 min · $0.21
  2. v1Rank primitives by summed alpha-compositing contribution over training cameras25.72522 min · $0.42
  3. v2Rank by exact squared deletion perturbation via backward suffix compositing25.10984 min · $0.59
  4. v3Flatten each camera's contribution with power p=0.25 before summing26.03815 min · $0.82
  5. v4Contribution aggregation power p=0.426.03166 min · $0.90
  6. v5Contribution aggregation power p=0.526.01866 min · $0.98
  7. v6Sum soft-saturated per-camera contributions, log1p at 0.1x positive mean26.146 min · $1.11
  8. v7Add synthetic circular midpoint cameras from interpolated centers and rotations25.38768 min · $1.34
  9. v8One exact swap per scene: 6 weakest members against 24 next ranks, 144 pairsOne-shot ranking cannot repair its mistakes; scoring all 144 exchange pairs on training PSNR turns selection into local search.26.330913 min · $1.94
  10. v9Second exact exchange round, recomputing weak members and the unselected pool26.438816 min · $2.37
  11. v10Third exact exchange round26.516620 min · $2.87
  12. v11Screened rounds: 18 removals to 6, 72 additions to 8, then 48 exact swaps26.751624 min · $3.41
  13. v12Fourth screened exchange round; 245 s leaves 55 s evaluator headroom26.864828 min · $4.07
  14. v13Analytical all-primitive toggle-SSE renderer, brute-force only the best 6x8 pairs27.035232 min · $4.63
  15. v14Raise analytical-screened exchange depth from 4 to 8 rounds27.568635 min · $5.22
  16. v15Request 11 rounds under the 255 s internal cutoff27.780340 min · $6.00
  17. v16Trade depth for broader 8x12 exact pairing over 6 rounds27.280945 min · $6.82
  18. v17Rank 6x8 pairs by summed toggle effect, validate the top 4 only, depth 24Toggle effects sum to a pair proxy correlated 0.999+ with exact scores, so validating only four pairs a round buys depth 24.28.453348 min · $7.44
  19. v18Cap at 48 rounds with per-scene early stop on no improving swap28.612451 min · $8.02
  20. v19Raise the cap to 96 rounds; every scene had already converged by 4828.612454 min · $8.60
  21. v20On plateau, exhaustively validate the remaining 44 pairs before stopping28.614557 min · $9.26
  22. v21Widen the plateau-only exhaustive neighborhood to 12x1628.307462 min · $10.16
  23. v22Cache training renders once and interleave one round per active scene28.614566 min · $11.03
  24. v23Initialization softlog contribution scale 0.3x positive mean, not 0.1x28.651470 min · $11.78
  25. v24Initialization softlog scale 1.0x positive mean28.632573 min · $12.58
  26. v25Initialization softlog scale 0.5x positive mean28.659777 min · $13.38
  27. v26Rank 2-for-2 exchanges by summed toggle effect at one-swap convergence28.659781 min · $14.27
  28. v27Restart from summed contribution^0.25 instead of softlog28.635385 min · $15.19
  29. v28Allow removal-only improvements and add-backs below the maximum budget28.659793 min · $17.11
  30. v29Quantize the training targets to 8-bit before the exact search28.659797 min · $18.04
  31. v30Residual-driven forward construction from empty over 16 batches, no exchangesAbandon the ranking start: build from empty by exact residual gain, reaching a comparable basin at 4.8x lower runtime.28.4882100 min · $18.75
  32. v31Add up to 48 exchange rounds after 16-batch forward construction28.6372103 min · $19.40
  33. v32Raise forward granularity from 16 to 32 batches, still no exchanges28.5869104 min · $19.90
  34. v3348 exchange rounds after 32-batch forward construction28.6689107 min · $20.61
  35. v3464-batch forward construction, no exchange rounds28.6408110 min · $21.40
  36. v35Add exchange refinement after the 64-batch construction28.649113 min · $22.41
  37. v3624-batch construction plus exchange refinement28.665116 min · $23.08
  38. v37Scale-aware schedule of about 5 additions per batch, then exchanges28.6552118 min · $23.84
  39. v38Power-1.5 early-fine batch schedule over 32 passes, then exchanges28.6527122 min · $24.71
  40. v39Multistart over equal and early-fine starts, pick the higher training PSNR28.6622126 min · $25.94
  41. v40Double the exchange cap from 48 to 96 rounds28.6689128 min · $26.67
  42. v41Seed 10% of the budget from the softlog ranking, fill the rest forward28.6618131 min · $27.50
  43. v42Audit a wider 12x16 toggle-ranked one-swap neighborhood after convergence28.661135 min · $28.74
  44. v43Stop immediately when the top 4 proxy-ranked pairs fail28.6623137 min · $29.42
  45. v44Limit the plateau fallback to the top 16 of 48 proxy-ranked pairs28.6623139 min · $30.09
  46. v45Extend the plateau fallback to the top 32 of 48 pairs28.6689141 min · $30.84
  47. v46Raise forward granularity from 32 to 40 batches28.6644144 min · $31.71
  48. v4732-batch backward pruning from the full scene, no exchanges28.5005148 min · $32.95
  49. v48Add exchange refinement after the backward pruning28.6191151 min · $33.91
  50. v49Run per-scene construction and refinement in up to 8 processes28.6689155 min · $34.64
  51. v50Refine both forward and softlog starts, pick the higher training PSNR28.6684158 min · $35.66
  52. v51128 residual-forward passes and no exchanges28.6477162 min · $36.78
  53. v52Add exchange refinement after the 128-pass construction28.6535165 min · $37.97
  54. v53Late-fine power-0.67 schedule over 32 passes, then refinement28.6564168 min · $38.90
  55. v54Cap worker processes at 4 instead of 828.6689171 min · $39.61
  56. v55Publish a metadata-importance fallback before rendering; sequential path on failure28.6689174 min · $40.55
  57. v56Rank forward additions by negative mean MSE instead of mean PSNR28.6426177 min · $41.62
  58. v57Dimension-aware schedule of round(2.6*sqrt(budget)) passes instead of fixed 3228.6638180 min · $42.94

Fifty-eight snapshots in 184 minutes for $44.14. The visible mean stopped at v33; the sealed run returned in 4.4 s, 2.6 dB under both other runs.

On the hidden set

held-out metricreward
shipped random budget-sized subset18.156 dB0.00
reference: blending-weight ranking26.139 dB0.30
PSNR ceiling at the 1e-12 MSE floor120 dB1.00
this run26.698 dB0.3041