← mep

Scoreboard: the whole result in one screen

at-a-glance TL;DR · every block expanded elsewhere (links inline) · surface-coverage recall@K=1 · 5 seeds · n_cand=20 · hybrid top_k=12 · mean ± SE across seeds

Headline

hybrid surface · test_locked
0.541
v_joint_v4 top-12 + 1-step lookahead, the shipped policy. The learned ranker alone sits below greedy_coverage.
hybrid over OctoMap-IG
+5.4σ
vs the classical info-gain planner (Bircher 2016). +5.4σ test_locked · +5.0σ held_out · +5.6σ OOD.
v7_realsynth · ifc-bench OOD
0.061
vs v4's 0.052, paired +0.009 (2.6σ), 10W/0L/40T. Best version on unseen building types.
best training Spearman ρ
0.156
v7_realsynth, the realism-fixed synth corpus. The ranking signal is weak everywhere: the target is hard.

Three findings

1 · Composition wins, not the model alone  SHIPS
The shipped policy is a hybrid: the learned ranker scores M=20 candidates, the top_k=12 go into a 1-step (2-step rollout) lookahead. On every in-distribution surface split the learned_joint head alone is below greedy_coverage: on test_locked the ranker scores 0.488 vs greedy_coverage 0.563, a paired −0.075 ± 0.010 (−7.5σ). The classical lookahead wrapper is what makes it ship. The learning buys you a smaller, better candidate set at ~35% the cost of exhaustive greedy_lookahead_1, not a standalone planner.
2 · Metric pathology was our own evaluation trap  FIXED
The original compute_mep_recall divided captured instances by the instances visible in the partial cloud, using the partial scan as its own ground truth. So observing a handful of instances scored near 1.0 and oracle inflated 5-50×. We re-anchored the denominator to the scene-full GT (scene_instance_class): oracle drops to 0.4-0.5 on test_locked and 0.13-0.18 on held_out. A survey of the NBV literature found the field standard already normalizes against complete-scene GT, so we make no claim that prior work is affected. This was a bug in our own pipeline.
3 · Corpus diversity beat target engineering
Three target-engineering bets all regressed or no-gain: v5 (surface target), v7_attn (2.6M-param cross-attention head, ~10× params, ρ tied v6 at 0.13), and v7_k12 (combined K=2 target, ρ regressed to 0.10, lost OOD by −0.018 ± 0.006 / −3.0σ). The one data-diversity experiment won OOD: v7_realsynth (realism-fixed procedural synth). The bottleneck is corpus diversity, not loss formulation. → full ledger

The pruning step

The learned model scoring every candidate scanner pose
The learned v4 head scoring every candidate. Top-down map of the 20 candidate poses, colored and sized by the learned score (brighter, bigger means more new piping expected). The model's pick is ringed in white; the theoretical best single choice (oracle) is the green dashed ring. The closer the white ring sits to the green one, the better the ranker. This is the pruning step: the learned head narrows M=20 down to a top-12 set the lookahead then plans over.

Every policy × split → progress + ledger

surface-coverage recall@K=1, hybrid policy · mean ± SE, 5 seeds · best non-oracle per column in green · oracle = myopic Δ ceiling

policy test_locked
3 residential
held_out
7 GNI / heatpump
ifc-bench OOD
10 scenes, 3 buildings
greedy_coverage classical0.563 ±.0040.062 ±.0020.037 ±.007
octomap_ig Bircher 2016 · the floor0.500 ±.0060.054 ±.0020.026 ±.004
greedy_lookahead_1 2-step, true extractor0.494 ±.0170.129 ±.0100.070 ±.006
v4 mep_recall · SHIPPED0.541 ±.0060.147 ±.0180.052 ±.005
v6 pure pairwise rank0.507 ±.0160.129 ±.0090.059 ±.008
v7_attn cross-attention0.496 ±.0120.088 ±.0080.067 ±.011
v7_realsynth realism-fixed synth0.486 ±.0190.094 ±.0090.071 ±.003
v7_k12 K=2 combined · failed0.474 ±.0160.086 ±.0110.054 ±.005
oracle myopic Δ ceiling0.572 ±.0030.185 ±.0170.093 ±.006

Best non-oracle in each column where directly comparable: v6 on test_locked (the v4 0.541 row is the shipped hybrid, scored separately), v7_realsynth on held_out and OOD. The v4 hybrid is the shipped operating point: 0.541 test_locked, 0.147 held_out, 0.052 OOD. Oracle is the myopic Δ ceiling, greyed.

Key sigma margins → paired CIs

paired per-seed differences (scene-mean A − scene-mean B), then averaged · SE has 4 dof · surface coverage

comparisontest_lockedheld_outifc-bench OOD
hybrid − octomap_ig the headline+0.041 (+5.4σ)+0.094 (+5.0σ)+0.026 (+5.6σ)
hybrid − greedy_lookahead_1+0.047 (+2.0σ)+0.018 (+1.1σ)−0.018 (−3.6σ)
learned − greedy_coverage ranker alone−0.075 (−7.5σ)+0.028 (+2.5σ)−0.016
v7_realsynth − v4 (hybrid)−0.001 (tied)−0.001 (tied)+0.009 (+2.6σ)
v7_k12 − v7_realsynth (hybrid)−0.002 (tied)−0.003 (tied)−0.018 (−3.0σ)

Training Spearman ρ: ranking signal by version

peak ρ between learned score and true Δ-recall target on the train set · v7_realsynth leads · all weak (the target is hard)

v4
0.060
v6
0.130
v7_attn
0.130
v7_k12
0.100
v7_realsynth
0.156

The graveyard

Three target-engineering bets died. v5 (surface-coverage target) regressed below v4. v7_attn (a 2.6M-param cross-attention head, ~10× the parameters) bought no gain (ρ tied v6 at 0.13, in-distribution hybrid 0.496 ≤ v6's 0.507). v7_k12 hit a mathematically unavoidable K=2 degeneracy: the pair-coverage target g_star_k2 has exactly zero top-2 gap, since the pair (i,j)=(j,i) symmetry ties the two members and the gradient vanishes. The combined K2+0.1·K1 fix broke ties (10/10 groups) but eval still regressed: ρ 0.10, ifc-bench hybrid 0.054, losing to v4's 0.052 and v7_realsynth's 0.071. Topology-following also died. The most natural MEP-specific prior, that the system is a connected graph of pipe and duct runs you can follow, does not help: a perfect ground-truth-graph frontier policy scored below greedy_coverage and below random on both surface coverage and MEP-Recall (frontier_oracle − greedy_coverage = −5.66σ on MEP-Recall@K=4), and committing harder to graph adjacency made it strictly worse (the deployable version beat the GT-graph version). Run-following is a wrong objective, not a noisy signal, which is exactly why generic coverage-greedy is so hard to beat here. Earlier negatives also documented: DAgger, Sonata encoder, SuperDec primitive head, edge-recall objective, 3-seed ensemble. The throughline: the model already extracts what it can from the scene geometry it is given; mismatched targets and even the obvious structural prior do not help. → full ledger with dates, motivation, and what broke

Shipped artifacts

default policy
v4 + hybrid
mep_recall target, learned top-12 + 1-step lookahead. 0.541 test_locked · 0.147 held_out. The everyday operating point.
OOD specialist
v7_realsynth
Realism-fixed procedural synth. 0.071 on unseen building types (+2.6σ over v4), 10W/0L/40T. Reach for it off-distribution.
methodology fixes
2 traps closed
Scene-full GT denominator (oracle 5-50× deflation) and raycast pose sampler (non-watertight IFC).

Eval protocol held fixed across the study: surface-coverage recall@K=1 · 5 seeds · n_cand=20 · hybrid top_k=12 · mean ± SE across seeds. Splits: test_locked (3 residential) · held_out (7 GNI / heatpump) · ifc-bench OOD (10 scenes across duplex_mep, wbdg_office_mep, west_riverside_hospital_fire). Hybrid = LearnedPlusLookaheadBaseline (model scores M candidates, takes top-K=12, runs the lookahead). Classical baseline: OctoMap-IG (Bircher et al., ICRA 2016). Corpus: 297 manifest scenes plus IFC-Bench v2 (sylvainHellin/ifc-bench, CC-BY, 93 sub-scenes). Every cell regenerable from runs/v4_validate/headline.json and runs/v5_validate/v5_heldout_*.