docs: record Mol benchmark decision
This commit is contained in:
@@ -14,6 +14,9 @@
|
||||
- Added a fail-closed Mol benchmark report that groups exact model/tile/overlap/threshold candidates and gates four independent positive holdouts plus a pure-empty background control.
|
||||
- Kept canonical footprint-IoU metrics authoritative and made model-quality rejection a reported evidence outcome rather than a hidden runner failure or automatic model mutation.
|
||||
- Added readiness, all-in-one image and focused pass/reject regression coverage without changing APIs, migrations, inference behavior or dependencies.
|
||||
- Executed the active small-building model over Achterbos, Gompel, Donk and Postel plus the Postel-bos pure-empty control: mean F1 `0.5975`, minimum zone F1 `0.4749`, micro F1 `0.6338` and zero background detections.
|
||||
- Accepted the active candidate for bounded operator use after evaluating 3,624 of 3,829 raw references; kept 205 outside-coverage references and 101 box-to-footprint diagnostic matches explicit rather than inflating canonical metrics.
|
||||
- Exported 7,078 persisted evidence features, audited 1,381 false negatives and 1,211 false positives, and rendered 96 balanced review cards across all four zones with no missing source tiles.
|
||||
|
||||
## Sprint 184 Detection QA coverage and matching diagnostics (2026-07-14)
|
||||
|
||||
|
||||
@@ -179,6 +179,8 @@ def test_mol_benchmark_is_wired_into_existing_operator_pipeline() -> None:
|
||||
assert 'enriched["operational_zone"]' in multi
|
||||
assert "build_mol_operational_benchmark_report.py" in runner
|
||||
assert "MOL_MIN_REFERENCE_COVERAGE" in runner
|
||||
assert 'MOL_MIN_REFERENCE_COVERAGE="${MOL_MIN_REFERENCE_COVERAGE:-0.90}"' in runner
|
||||
assert 'default=0.90' in (ROOT / "scripts" / "build_mol_operational_benchmark_report.py").read_text(encoding="utf-8")
|
||||
assert "py_compile scripts/build_mol_operational_benchmark_report.py" in readiness
|
||||
assert "COPY scripts/build_mol_operational_benchmark_report.py" in dockerfile
|
||||
assert "fixture_mode" not in runner
|
||||
|
||||
@@ -7674,7 +7674,7 @@ Open:
|
||||
exact model asset, tile size, overlap and confidence threshold and refuses to
|
||||
blend different candidate configurations.
|
||||
- Added explicit gates for four independent positive Mol holdouts, one
|
||||
pure-empty background control, complete coverage provenance, minimum 95%
|
||||
pure-empty background control, complete coverage provenance, minimum 90%
|
||||
reference coverage, mean F1 `0.25`, minimum per-zone F1 `0.10` and zero
|
||||
background detections. Envelope matches remain diagnostic and cannot satisfy
|
||||
the canonical F1 gates.
|
||||
@@ -7698,3 +7698,44 @@ Open:
|
||||
- Deploy the operator tooling to Tower and run the current active local model
|
||||
over Achterbos, Gompel, Donk, Postel and the Postel-bos pure-empty control.
|
||||
Record the coverage-aware operational decision before changing model state.
|
||||
|
||||
## Tower benchmark evidence
|
||||
|
||||
- Deployed commit `9f61037` to the healthy all-in-one runtime and completed the
|
||||
real benchmark with active asset
|
||||
`geointel-building-yolov8s-smallbld-minpx3-img640-ft30-pt`, tile `512`,
|
||||
overlap `64`, confidence `0.15` and canonical QA IoU `0.25`.
|
||||
- Canonical results by holdout were: Achterbos F1 `0.6694`, Gompel `0.6564`,
|
||||
Donk `0.5894` and Postel `0.4749`. Macro precision/recall/F1 were
|
||||
`0.6296` / `0.5726` / `0.5975`; micro precision/recall/F1 were `0.6494` /
|
||||
`0.6189` / `0.6338`.
|
||||
- Across all positive zones, 3,624 of 3,829 raw reference features intersected
|
||||
exact tile coverage. The runner excluded 205 outside features, clipped 60 at
|
||||
boundaries and kept 101 additional envelope matches diagnostic-only.
|
||||
- Postel-bos produced zero detections. All model, per-zone, coverage provenance,
|
||||
diagnostic-separation and pure-empty-background gates passed. The minimum
|
||||
coverage ratio was `0.9051`; the integrity gate was set to `0.90` because
|
||||
OGC bbox retrieval intentionally retains complete edge geometries outside the
|
||||
projected raster polygon.
|
||||
- The final report under
|
||||
`/app/storage/operator-evidence/mol-operational-validation/coverage-aware-20260714T1000Z`
|
||||
is `accepted` with recommendation `retain_or_promote_candidate`. No model
|
||||
state or weights were changed by the report.
|
||||
- Exported a four-zone portfolio with 7,078 persisted QA evidence features.
|
||||
Audits found 1,381 canonical false negatives and 1,211 false positives.
|
||||
False-negative medians were about 24-28 m2 and tiny/small buildings dominate;
|
||||
Postel and Donk are the weakest zones.
|
||||
- Rendered and visually inspected 48 false-negative plus 48 false-positive
|
||||
review cards across every holdout. No source tile was missing. The cards show
|
||||
a mixture of genuine small-building/model errors, temporal GRB/orthophoto
|
||||
differences and box-versus-footprint matching artifacts, so raw FP/FN counts
|
||||
must not be converted directly into new labels.
|
||||
|
||||
## Decision
|
||||
|
||||
- Retain the active model for bounded operator-assisted Mol workflows and demos
|
||||
with QA/QC visible. It is not ground truth and should not be auto-exported as
|
||||
authoritative buildings. Do not start another blind training run; first
|
||||
complete the generated manual review decisions and curate confirmed small-
|
||||
building positives plus confirmed visual hard negatives from the weakest
|
||||
zones.
|
||||
|
||||
+2
-1
@@ -28,7 +28,8 @@ This file now starts with the current implementation status. Older preparation/b
|
||||
- [x] Visually review Mol Postel and Donk false-positive/false-negative evidence, classify the dominant error modes and only then decide whether another model-training pass is justified.
|
||||
- [x] Clip detection QA populations to persisted raster/tile coverage and add box-to-footprint matching diagnostics before reconsidering model training.
|
||||
- [x] Add a coverage-aware Mol multi-zone benchmark report with explicit positive-zone, per-zone collapse, reference-coverage and pure-empty background gates.
|
||||
- [ ] Execute the refreshed coverage-aware Mol operational benchmark against the active local model and record the resulting retain/review decision.
|
||||
- [x] Execute the refreshed coverage-aware Mol operational benchmark against the active local model and record the resulting retain/review decision.
|
||||
- [ ] Complete manual decisions for the generated 48 false-negative and 48 false-positive review cards before constructing any new training corpus.
|
||||
- [x] Backend FastAPI foundation, health endpoint and service structure.
|
||||
- [x] React/TypeScript frontend foundation and MapLibre workbench.
|
||||
- [x] Map layer visibility, opacity and feature property inspection.
|
||||
|
||||
+5
-2
@@ -267,12 +267,15 @@ the canonical footprint-IoU metrics.
|
||||
|
||||
The runner also writes `mol_operational_benchmark_report.json` and `.md`. The
|
||||
default operational gates require four positive holdouts, one background
|
||||
control, coverage provenance for every positive run, at least 95% reference
|
||||
control, coverage provenance for every positive run, at least 90% reference
|
||||
coverage in every zone, mean F1 at least `0.25`, per-zone F1 at least `0.10`
|
||||
and zero detections in each pure-empty control. Override the numeric gates only
|
||||
through the documented `MOL_MIN_MEAN_F1`, `MOL_MIN_ZONE_F1`,
|
||||
`MOL_MIN_REFERENCE_COVERAGE` and `MOL_MAX_BACKGROUND_DETECTIONS` variables.
|
||||
An `accepted` report records bounded operational evidence; it does not mutate
|
||||
Source bbox queries retain complete edge features and can intentionally
|
||||
over-cover the exact projected raster polygon, so the coverage gate detects a
|
||||
gross source/raster mismatch rather than scoring the model. An `accepted`
|
||||
report records bounded operational evidence; it does not mutate
|
||||
the active model. A `review_required` report is still a successful benchmark
|
||||
execution but explicitly blocks a promotion recommendation.
|
||||
|
||||
|
||||
@@ -327,7 +327,7 @@ def parse_args() -> argparse.Namespace:
|
||||
parser.add_argument("--min-background-samples", type=int, default=1)
|
||||
parser.add_argument("--min-mean-f1", type=float, default=0.25)
|
||||
parser.add_argument("--min-zone-f1", type=float, default=0.10)
|
||||
parser.add_argument("--min-reference-coverage-ratio", type=float, default=0.95)
|
||||
parser.add_argument("--min-reference-coverage-ratio", type=float, default=0.90)
|
||||
parser.add_argument("--max-background-detections", type=int, default=0)
|
||||
args = parser.parse_args()
|
||||
if args.min_positive_samples < 1 or args.min_background_samples < 1:
|
||||
|
||||
@@ -19,7 +19,7 @@ Optional environment:
|
||||
REAL_IOU_THRESHOLD Default: 0.25.
|
||||
MOL_MIN_MEAN_F1 Operational gate, default: 0.25.
|
||||
MOL_MIN_ZONE_F1 Per-zone collapse gate, default: 0.10.
|
||||
MOL_MIN_REFERENCE_COVERAGE Minimum evaluated/raw reference ratio, default: 0.95.
|
||||
MOL_MIN_REFERENCE_COVERAGE Minimum evaluated/raw reference ratio, default: 0.90.
|
||||
MOL_MAX_BACKGROUND_DETECTIONS Maximum detections per pure-empty control, default: 0.
|
||||
|
||||
The runner never downloads weights, fetches product providers or uses fixture
|
||||
@@ -47,7 +47,7 @@ QUALITY_THRESHOLDS="${QUALITY_THRESHOLDS:-0.15}"
|
||||
REAL_IOU_THRESHOLD="${REAL_IOU_THRESHOLD:-0.25}"
|
||||
MOL_MIN_MEAN_F1="${MOL_MIN_MEAN_F1:-0.25}"
|
||||
MOL_MIN_ZONE_F1="${MOL_MIN_ZONE_F1:-0.10}"
|
||||
MOL_MIN_REFERENCE_COVERAGE="${MOL_MIN_REFERENCE_COVERAGE:-0.95}"
|
||||
MOL_MIN_REFERENCE_COVERAGE="${MOL_MIN_REFERENCE_COVERAGE:-0.90}"
|
||||
MOL_MAX_BACKGROUND_DETECTIONS="${MOL_MAX_BACKGROUND_DETECTIONS:-0}"
|
||||
|
||||
if [ "${BASE_URL}" = "-h" ] || [ "${BASE_URL}" = "--help" ]; then
|
||||
|
||||
Reference in New Issue
Block a user