AI3D-382 · detection pass 8: diagnose first, then one knob ships and one gets thrown away

7 Sep 2026 · segments 018 / 060 / 066 / 085 · roots: r6pr (pass-7 code, per-record TCS — the reference) | r7 (low band + mrf hysteresis, pre-review code) | r8 (low band alone, reviewed code) · ablations r7a (low band only) / r7b (mrf hysteresis only) · code wt-vs-382 @ e926e017bd8792 · previous rounds: passes 2–3 · pass 4 · pass 5 · pass 6 · pass 7 · background: what the DEM (Digital Elevation Model) bias was

  1. This pass started with a diagnosis, not a knob. The 066 “carriageway streaks” are moving vehicles, 0.5–3.5 m above the road and smeared along the lane, admitted by the 0.3–10 m candidate slab sitting over a ~20 cm-low DEM and then merged into a 78 m verge mega-instance that owns 100 % of the window’s paint. On 085 the tree paint above 2 m is 100 % human-GT tree; the 0.3–1 m skirt holds 66 % of all painted GT points and 72 % of that is non-tree — but two thirds of it (bushes/grass) is in definition and only a third (guardrail / road / barrier) is a genuine error. The 060 billboard cell failed the multi-return cap by 0.0001.
  2. Knob 1 — hard-blob LOW BAND 0.3–1 m with a trunk-under-crown guard: keep, ON in the new-data config. 066 vehicle / lane-marking paint below 1 m −81 % (145 164 → 27 885) with every band ≥ 2 m bit-identical; 085 hard FP 52 311 → 46 519 with ZERO GT-tree loss, barrier class c76 −89 %, veg-tolerant precision 0.749 → 0.771; 060 billboard residual 1 228 → 0; 0 tree detections removed.
  3. Knob 2 — hard-blob mrf hysteresis: revert, stay at 0.0. Its entire measurable effect on this corpus is punching two axis-aligned 2 × 1 m rectangles out of a continuous green shrub bank on 018 — and it fired 0 cells on 060, i.e. it never once touched the billboard cell it was written for, because under the shipped per-record DEM that cell passes the strict test anyway.
  4. The M3 “improvement” it produced was fake. M3 28 556 → 11 851 in r7, and all 16 705 removed points are the shrub-bank cells. M3 cannot tell a dense single-return bush face from a panel. r8’s M3 is back at 28 556 — the honest number.
  5. Review found two blockers, both fixed before the confirmation run. (1) The low band had no cap-fallback rung — the cap fallback did not walk down the extra-membership rungs (74280e7). (2) The survivor test read the lowered low-band floor instead of the main elevation floor, so a bigger blob flipped an instance’s keep/reject decision (5d89c45, documented in 7bd8792).
  6. r8 — the confirmation run on the fixed code — keeps every win and gives back both losses. The shrub bank is intact to the point (E5 36 845, E7 32 921 = r6pr exactly), the one FP tree r7 had added is gone, det_diff is 0 added / 0 removed on all four segments, truth spots 12/12, recall 1.000, 0 FP, M1 / M1b / M2 / M4 identical to r6pr to 5 dp, clusters.csv and rail_halfposts.csv md5 SAME, 0 errors in the logs.

0. How to read the renders

Comparison renders are one spot in the raw no-scan-angle-filter cloud, left to right: true RGB | number_of_returns (grey = 1, orange = 2, red = ≥ 3) | r6pr (the BEFORE reference) | r7 | r8. The BEFORE column always comes first; top row oblique, bottom row the same points top-down; each column is labelled in the image itself. The pass-7-era renders (billboard, guardrail beam, the two shrub-bank zooms) carry only r6pr | r7; the diagnosis figures are plots and panels of their own, captioned individually.

unmaskedtreemedium_vegetationsign-ish (sign / pole / delineator)guardrailother

Click any image for full resolution; ← / → (or swipe) step through the images of that card only; Esc closes.

1. What changed

featureknobverdictreason (one line)
hard-blob low band 0.3–1 mtree_detection.hard_blob_low_band_min_elev_m = 0.3keep — ship ON066 sub-1 m streak layer −80.8 %, 085 hard FP −5 792 with 0 GT-tree points lost, billboard residual → 0, 0 detections removed; every band ≥ 2 m bit-identical.
trunk-under-crown guard (canopy column)hard_blob_canopy_column_min_points = 50, ..._min_mrf = 0.2keep — load-bearingThis is why no crown base was touched: M1b unchanged to 5 dp and both truth crowns clean. Must not be relaxed at the same time as the band.
hard-blob mrf hysteresistree_detection.hard_blob_mrf_hysteresis (tried 0.02, ships 0.0)revert — keep the code, default offWhole corpus effect = two rectangular holes in an 018 shrub bank whose removed material is greener than what stays (ExG 0.176/0.208 removed vs 0.175/0.152 kept); 0 cells on 060, so it never helped its own target.
M3 as a proxy for hard contamination— (metric fault)do not optimiseThe r7 M3 gain (−16 705, −58.5 %) is exactly the deleted shrub-bank cells. M3 cannot separate a dense single-return bush face from a panel; r8’s 28 556 is the truthful value.
cap fallback rung ladder74280e7review fixThe low band was an extra membership rung with no fallback step of its own; the cap fallback now walks down every rung instead of jumping to the strict set.
survivor test elevation anchor5d89c45, documented 7bd8792review fix — validatedThe survivor test measured against the lowered low-band floor, so a larger blob flipped cid16 into the mixed-unpaint branch and emitted an FP tree. Anchored to the main min_elev floor: r8 has 0 mixed-unpaints and the FP is gone.
tcs_ground.per_segmentstays false (pass-7 verdict)unchangedThe 2.4 cm DEM drop that tipped cid93’s mrf is the per-segment surface; keeping per-record holds M3 at 28 556 rather than 39 222.
mega-instance merge (verge + rail + deck)— (open)still openThe remaining 46 519 hard FP on 085 is 25 772 guardrail + 19 947 road inside the same two instances that hold every true positive. No elevation gate reaches it.

2. Diagnosis — what the three failures actually were

Diagnosis only, no detector runs: DEMs rebuilt from the TCS ground-classified NPZs with the detector’s own streaming p8 / 0.75 m GroundModel. Full write-up in diag/DIAG_treepaint.md.

Q1 · the 066 “streaks” are moving vehicles, let in by a 20 cm-low DEM 149 168 pts below 2 m, nr≥2 = 0.047

Three facts, one mechanism. (1) The candidate slab’s min height is the admission gate — the road deck sits below 0.30 m, the streaks sit just above it. (2) A ~20 cm-low DEM on this carriageway is why they clear it: true height ≈ TCS height − 0.22 m, so anything 8–15 cm above the asphalt reads as 0.30–0.37 m. Against the raw 2 m p5 they would have missed the slab entirely (painted p5 = 0.15 m). (3) Cluster merging is why they stay tree: they are not a rejectable cluster, they are _point_indices of a 3.5 M-point, 78 m instance.

Q1 · 066 cross-section y∈[327,328]: z (top) and height above the TCS DEM (bottom), dashed line = candidates.min_height_m = 0.30 · the grey road deck sits below the gate, the green streaks sit just above it — 34 447 painted points live in the 0.3–0.5 m sliver
Q1 &middot; 066 cross-section y&isin;[327,328]: z (top) and height above the TCS DEM (bottom), dashed line = <code>candidates.min_height_m = 0.30</code> &middot; the grey road deck sits <b>below</b> the gate, the green streaks sit <b>just above</b> it &mdash; 34 447 painted points live in the 0.3&ndash;0.5 m sliver
Q1 · 066 window x∈[685,706] y∈[317,338], tree paint · thin diagonal green streaks lie along the lane on the carriageway deck, plus the verge mass SE. 3 387 256 raw pts, 257 679 painted (7.61 %), 100 % of them owned by one 78 × 76 m instance
Q1 &middot; 066 window x&isin;[685,706] y&isin;[317,338], tree paint &middot; thin diagonal green streaks lie <b>along the lane</b> on the carriageway deck, plus the verge mass SE. 3 387 256 raw pts, 257 679 painted (7.61 %), <b>100 % of them owned by one 78 &times; 76 m instance</b>

Spot cell (695, 327): 11 843 pts, 8.5 % tree-painted, nr≥2 = 0.0003, DEM −0.220 m below the road median; neighbours repeat it at 17–23 cm. Height bands of the 257 679 painted pts: 0.3–0.5 m 34 447 · 0.5–1 m 110 717 · 1–2 m 4 004 · 2–4 m 12 798 · 4–10 m 31 180 · > 10 m 64 533. Zero painted points below 0.3 m — not canopy extension, not a DEM hole: slab min-height + 20 cm bias, locked in by the mega-merge.

Q2 · 085 precision 0.49 is a 0.3–1 m skirt problem, and two thirds of it is the product definition definition 108 498 vs genuine 52 311

1 872 942 GT points, 100.000 % matched to a raw point within 5 cm. Above 2 m the paint is 100 % GT tree — 34 133 points, zero non-tree. Everything wrong lives in the skirt. And 085 emits only four trees, of which two touch any GT point at all: instance 0 holds every TP and 58 850 FP, instance 3 holds 101 959 FP and zero TP.

Q2 · 085 human GT: painted-GT counts per annotator class (left) and the stacked elevation bands (right) · above 2 m the tree paint is 100 % GT tree (31 522 + 2 611 points, zero non-tree); the 0.3–1 m skirt holds 209 502 pts = 66 % of all painted GT and 72 % of it is non-tree
Q2 &middot; 085 human GT: painted-GT counts per annotator class (left) and the stacked elevation bands (right) &middot; <b>above 2 m the tree paint is 100 % GT tree</b> (31 522 + 2 611 points, zero non-tree); the 0.3&ndash;1 m skirt holds <b>209 502 pts = 66 %</b> of all painted GT and <b>72 % of it is non-tree</b>
Q2 · 085 instance 3 (2288.69, 1263.25), 6.9 M points · 101 959 GT matches, 100 % of them non-tree, zero GT trees. RGB shows a real crown upper-left and a white rail; GT paints the rail cyan and the deck brown; our paint greens the crown and the rail and the verge. 60 460 bushes (in-definition) vs 16 995 road + 14 823 guardrail (genuine)
Q2 &middot; 085 instance 3 (2288.69, 1263.25), 6.9 M points &middot; <b>101 959 GT matches, 100 % of them non-tree, zero GT trees</b>. RGB shows a real crown upper-left and a white rail; GT paints the rail cyan and the deck brown; our paint greens the crown <b>and</b> the rail <b>and</b> the verge. 60 460 bushes (in-definition) vs 16 995 road + 14 823 guardrail (genuine)

Split of the 160 809 FP: definition (74 low_veg + 75 medium_veg) = 108 498 (67 %) — the product says tree includes attached shrub/hedge/low veg, which is exactly the 0.49 → 0.75 jump. Chasing 0.49 as if bushes were bugs fights the definition.

Genuine hard error: 52 311 (33 %) = guardrail 26 922 + road 20 013 + c76 barrier 5 147 + c70 229 — and it sits in the same two mega-instances as the real trees, which is why no per-cluster rejection can reach it.

Q3 · the 060 billboard cell missed the multi-return cap by 0.0001 0.04996 vs 0.05005

Cell (98, 103) at (296.31, −67.15), 13.8 k points at h ≥ 1 m — far above the 300-point floor, so the existing point-count hysteresis can never fire. It fails mrf < 0.05, and only under the per-segment DEM: a 2.4 cm lower surface recruits 15 extra skirt points, +2 multi-returns, and the fraction tips from 0.04996 to 0.05005. Lowering hard_blob_min_elev_m to 0.5 m makes it worse (mrf 0.061) — that alternative was measured and rejected.

Q3 · 060 billboard cell (296.31, −67.15) · RGB | r6pr panel unpainted | r6 panel still green. The cell’s multi-return fraction is 0.04996 under the per-record DEM and 0.05005 under the per-segment DEM — it fails mrf < 0.05 by 0.0001 after a 2.4 cm DEM shift, which is what put 10.9k points into M3 in pass 7
Q3 &middot; 060 billboard cell (296.31, &minus;67.15) &middot; RGB | r6pr panel <b>unpainted</b> | r6 panel <b>still green</b>. The cell&rsquo;s multi-return fraction is <b>0.04996</b> under the per-record DEM and <b>0.05005</b> under the per-segment DEM &mdash; it fails <code>mrf &lt; 0.05</code> by <b>0.0001</b> after a <b>2.4 cm</b> DEM shift, which is what put 10.9k points into M3 in pass 7

This is the measurement that motivated the mrf hysteresis — and the round-8 ablation then showed the whole premise was moot on the shipped configuration: under per-record TCS the cell passes the strict test anyway, so the slack is never needed and only does damage elsewhere. The diagnosis was right; the knob it suggested was not.

3. What got better — the low band

The vehicles and the painted lines go, the crowns do not move −80.8 % below 1 m, ≥ 2 m bit-identical

Same window as Q1, same 3 387 256 raw points in every root. The removed material carries the achromatic signature: excess-green 0.007–0.020 for the removed blobs against 0.06–0.18 for the tree paint retained a metre away — a clean 10× margin.

BEFORE first · 066 carriageway, panels RGB | number_of_returns | r6pr | r7 | r8 · r6pr paints tall green fins standing out of the deck (the moving vehicles) plus two bright green lane-marking lines; r7 leaves the deck fully grey; r8 leaves it grey with one short residual fragment. Belt and crowns bottom-right are the identical green mass in all three
BEFORE first &middot; 066 carriageway, panels <b>RGB | number_of_returns | r6pr | r7 | r8</b> &middot; r6pr paints tall green fins standing out of the deck (the moving vehicles) plus two bright green lane-marking lines; r7 leaves the deck fully grey; <b>r8 leaves it grey with one short residual fragment</b>. Belt and crowns bottom-right are the identical green mass in all three
BEFORE first · 085 (2289.72, 1229.92), 18 m of verge · guardrail + road-edge lines painted as one continuous green line in r6pr, fragmented in r7 and r8 (r8 a little more residual on the far rail). The conifer top-left is untouched in all three — 38 381 pts removed at excess-green 0.007 against 0.063 for the foliage beside it
BEFORE first &middot; 085 (2289.72, 1229.92), 18 m of verge &middot; guardrail + road-edge lines painted as one continuous green line in r6pr, <b>fragmented in r7 and r8</b> (r8 a little more residual on the far rail). The conifer top-left is untouched in all three &mdash; 38 381 pts removed at excess-green <b>0.007</b> against 0.063 for the foliage beside it

066 window, r6pr → r8: 0.3–0.5 m 34 447 → 10 468 · 0.5–1 m 110 717 → 17 417 · 1–2 m 4 004 → 3 801 · 2–4 m 12 798 → 12 798 · 4–10 m 31 180 → 31 180 · >10 m 64 533 → 64 533. Sub-1 m layer 145 164 → 27 885 (−80.8 %).

085 GT: hard FP 52 311 → 46 519, tp 156 209 → 156 209 (0 lost), precision 0.4927 → 0.5028, veg-tolerant 0.7491 → 0.7705. 99.2 % of the removed GT points are in 0.3–1 m; above 2 m: 0. Nothing is newly painted anywhere.

The two targeted structures: billboard residual and guardrail beam 1 228 → 0

The strict hard-blob rule already unpainted the billboard panel; what it left was a 1 228-point skirt below the elevation floor. The low band is exactly the rung that reaches it — and the same rung takes the guardrail beams and painted road-edge lines on all four segments (blobs E1–E4, E8–E10 in the collateral hunt: 7 of the 10 largest new unpainted blobs are road deck, edge line or rail).

BEFORE first · 060 billboard panel + frame beside a real conifer, cid93 · the panel is grey in both roots; the low band additionally sweeps the 1 228-point residual skirt the strict rule left behind (→ 0) and clears one support arm. cid93 unpainted 109 697 → 113 223
BEFORE first &middot; 060 billboard panel + frame beside a real conifer, cid93 &middot; the panel is grey in <b>both</b> roots; the low band additionally sweeps the <b>1 228-point residual skirt</b> the strict rule left behind (&rarr; <b>0</b>) and clears one support arm. cid93 unpainted 109 697 &rarr; 113 223
BEFORE first · 066 (697.01, 359.28), guardrail beam beside the belt · painted bright green in r6pr, grey after the low band; the belt behind it is identical. 12 977 pts at excess-green 0.015 vs 0.180 for the foliage — the cleanest single win of the round
BEFORE first &middot; 066 (697.01, 359.28), guardrail beam beside the belt &middot; painted <b>bright green</b> in r6pr, <b>grey</b> after the low band; the belt behind it is identical. 12 977 pts at excess-green <b>0.015</b> vs 0.180 for the foliage &mdash; the cleanest single win of the round

060 cell (98, 103): tree-painted points r6pr 1 228 → r7 0 → r8 0 (of 15 721 raw points in the cell in every root). cid93 unpainted 109 697 → 113 223. 066 E9 guardrail box, h < 1 m: 20 091 → 7 114, h ≥ 1 m unchanged at 33 512.

The one FP r7 added is gone in r8 0 added / 0 removed on all four

r7 emitted tree vegetation_rf (−3236.35, −2231.35) h 3.725 n 72 883 ml 0.6875 on 018. The mechanism was not the paint: the larger low-band blob raised cid16’s hard share to 0.9387 and flipped it from a hard_structure_returns reject into the mixed-unpaint branch, whose survivor test was reading the lowered floor. The ablation confirmed it was the low band’s (r7a produced it, r7b did not) — and the review fix removed it without touching a single win.

BEFORE first · 018 (−3236.35, −2231.35), 5 m zoom, panels r6pr | r7 | r8 · a central reservation with a double guardrail and a mesh fence — no tree anywhere. r6pr grey; r7 emitted a tree (n 72 883, ml 0.6875) whose 4 471 “survivors” are a fence post and weed specks; r8 grey again — the review fix removed it
BEFORE first &middot; 018 (&minus;3236.35, &minus;2231.35), 5 m zoom, panels r6pr | r7 | r8 &middot; a central reservation with a double guardrail and a mesh fence &mdash; <b>no tree anywhere</b>. r6pr grey; <b>r7 emitted a tree</b> (n 72 883, ml 0.6875) whose 4 471 &ldquo;survivors&rdquo; are a fence post and weed specks; <b>r8 grey again</b> &mdash; the review fix removed it

018 in r8: 2 hard_structure_returns rejects, 0 mixed-unpaints — the same shape as r6pr; reason bins identical. det_diff r6pr → r8: 0 REMOVED / 0 ADDED on 018, 060, 066 and 085. M4 trees back to 93 (r7 had 94).

4. What got thrown away — the mrf hysteresis

Two rectangles cut out of a live shrub bank removed material greener than what stays

The r7b ablation isolates the knob: on 018 its entire effect is these two blobs (r6pr 5 622 unpainted → r7b 31 749; E5 36 845 → 22 419 plus E7 32 921 → 21 220 = 26 127 points exactly). On 066 it adds 3 224 unpainted points with no visible effect. On 060 — the segment it was designed for — it fires 0 cells.

BEFORE first · 018 E5 (−3246.00, −2182.82), 4 m zoom, r6pr | r7 · a continuous green bush wall with a clean axis-aligned 2 × 1 m rectangle of grey cut out of the middle, top-down and in profile. 20 497 pts, 5 cells — excess-green of the removed material 0.176 vs 0.175 for the paint kept a metre away
BEFORE first &middot; 018 E5 (&minus;3246.00, &minus;2182.82), 4 m zoom, r6pr | r7 &middot; a continuous green bush wall with a clean <b>axis-aligned 2 &times; 1 m rectangle of grey</b> cut out of the middle, top-down and in profile. 20 497 pts, 5 cells &mdash; excess-green of the <i>removed</i> material <b>0.176</b> vs <b>0.175</b> for the paint kept a metre away
BEFORE first · 018 E7 (−3313.92, −2186.93), same bank line 68 m along · a second vertical grey notch through the bush wall, identical cell-shaped signature. 16 058 pts, 5 cells — removed excess-green 0.208 vs 0.152 kept: the deleted material is greener than what stays
BEFORE first &middot; 018 E7 (&minus;3313.92, &minus;2186.93), same bank line 68 m along &middot; a second vertical grey notch through the bush wall, identical cell-shaped signature. 16 058 pts, 5 cells &mdash; removed excess-green <b>0.208</b> vs <b>0.152</b> kept: <b>the deleted material is greener than what stays</b>

Excess-green, removed vs retained a metre away: E5 0.176 / 0.175, E7 0.208 / 0.152. An achromatic surface on this corpus sits near 0.01 and foliage at 0.06–0.18 — these are foliage, and the knob is deleting the greener half.

r8 puts both banks back, to the point = r6pr exactly

Same two spots on the confirmation run, with the knob at 0.0 and the low band still on. The point of these two renders is that the win and the damage are genuinely separable: the low band never touched this material at all (r7a left both boxes untouched), so turning off the hysteresis costs nothing.

BEFORE first · 018 E5 wide, panels RGB | nr | r6pr | r7 | r8 · dense yellow-green multi-return shrub bank. r6pr and r8 are the same green mass; only the r7 panel has the grey block punched out. r8 lo/hi = 10 323 / 36 845 = r6pr exactly
BEFORE first &middot; 018 E5 wide, panels RGB | nr | r6pr | r7 | r8 &middot; dense yellow-green multi-return shrub bank. <b>r6pr and r8 are the same green mass</b>; only the r7 panel has the grey block punched out. r8 lo/hi = <b>10 323 / 36 845 = r6pr exactly</b>
BEFORE first · 018 E7 wide · r7 thins the bush wall where the mrf-hysteresis cells fired; r8 is pixel-equivalent to r6pr. r8 lo/hi = 10 277 / 32 921 = r6pr exactly. Both banks are back
BEFORE first &middot; 018 E7 wide &middot; r7 thins the bush wall where the mrf-hysteresis cells fired; <b>r8 is pixel-equivalent to r6pr</b>. r8 lo/hi = <b>10 277 / 32 921 = r6pr exactly</b>. Both banks are back

E5 r8 lo/hi 10 323 / 36 845 = r6pr · E7 r8 10 277 / 32 921 = r6pr · r7 had them at 4 252/22 419 and 5 920/21 220. r8 above-1 m tree paint on 018+060 is 4 939 points below r6pr (0.05 %), versus 29 576 for r7 — the difference is the shrub bank.

And so the M3 number goes back up: 28 556 / 9 hard cells, cell for cell the r6pr list. That is the honest outcome — the low band contributes 0 to M3 by construction, because M3 starts at 1 m and the band ends there.

5. Results

Per segment — r6pr / r7 / r8

segmenthard-blob instances · points unpainted
r6pr → r8 (low-band cells)
detections
r6pr / r7 / r8
det_diff vs r6pr
r7 / r8
runtime s
r6pr / r7 / r8
0181 → 2 · 5 622 → 38 221 (9 cells)75 / 76 / 750 rem / 1 add  ·  0 / 0285.99 / 233.25 / 255.66
0602 → 4 · 136 882 → 162 480 (10 cells)80 / 80 / 800 / 0  ·  0 / 0299.59 / 270.91 / 293.53
0661 → 2 · 438 864 → 647 833 (144 cells)71 / 71 / 710 / 0  ·  0 / 0355.07 / 371.12 / 388.33
0851 → 1 · 52 575 → 122 742 (54 cells)9 / 9 / 90 / 0  ·  0 / 0357.97 / 362.25 / 376.49
pooledM3 (018+060) 28 556 / 11 851 / 28 556 · M1 hi 0.83264 in all three · M1b 0.898 · M2 0.90608235 / 236 / 235M6 truth spots 12/12, recall 1.000, 0 FP in every root · M4 6 signs / 56 delineators / 0 GHOSTmax 388 s = 6.5 min (budget 20 min/seg)

hysteresis-mrf cells = 0 and mixed-unpainted = 0 on all four segments in r8 (knob off, review fix in). Detections are 1 m, type-matched. All three roots share one tcs_cache_dir, so runtimes are not cleanly comparable between roots — the safe reading is that the worst is 6.5 min. returns stripper, canopy extension, Tree path and reject_rescue summary blocks are byte-identical r6pr vs r8 on all four; clusters.csv and rail_halfposts.csv md5 SAME; 0 ERROR / Traceback / Exception lines in any log.

085 human GT (1 872 942 annotated points, 100.000 % matched @ 5 cm)

metricr6prr7r8r8 − r6pr
tp (GT tree, class 5)156 209156 209156 2090
fp (all non-5)160 809154 462154 467−6 342
definition FP (74 low_veg + 75 medium_veg)108 498107 948107 948−550
hard FP (66 + 71 + 76 + 70)52 31146 51446 519−5 792
  — c76 barrier (nr≥2 = 0.007)5 147566571−4 576 (−89 %)
  — guardrail (66)26 92225 77225 772−1 150 (−4.3 %)
  — road (71)20 01319 94719 947−66
  — c702292292290
precision0.49270.50280.5028+0.0101
veg-tolerant precision0.74910.77060.7705+0.0214
recall0.75470.75470.75470

Unpainted by class r6pr → r8: {c76 4 576, guardrail 1 150, low_veg 504, road 66, medium_veg 46}; newly painted: {}. Bands of the 6 342 lost GT points: 0.3–1 m 6 292 (99.2 %), 1–2 m 50, > 2 m 0, tree lost 0 (budget was 782).

066 streak window x∈[685,706] y∈[317,338] — 3 387 256 raw points in every root

DEM height bandr6prr7r8r8 − r6pr
0.3–0.5 m34 44710 46810 468−23 979 (−69.6 %)
0.5–1 m110 71717 41717 417−93 300 (−84.3 %)
1–2 m4 0043 8013 801−203
2–4 m12 79812 79812 7980
4–10 m31 18031 18031 1800
> 10 m (canopy extension)64 53364 53364 5330
h < 1 m (the vehicle/marking layer)145 16427 88527 885−80.8 %
total257 679140 197140 197−117 482 (−45.6 %)

6. Next steps