serve a promoted model at the post-processing it was gated on
scripts/evaluate_belgium_building_candidate.py freezes its post-processing before the protected test — NMS IoU and a containment threshold selected during calibration, defaulting to 1.0. The runtime applied a hardcoded 0.85, so a promoted candidate was served under suppression its evaluation never measured and dropped detections the gate had counted. Neither report showed the difference. That constant was mine, added without noticing the evaluation pipeline already had a tuned value for the same concept. Containment is now configuration, recorded on every run beside the duplicate IoU threshold, so an operator can serve a candidate at the value it was gated at and afterwards see which value produced a given score. Two runs that post-processed differently produced different candidate sets from the same model output, so the comparison endpoint refuses to rank them. Runs recorded before those values were persisted carry none, and absence is not treated as a difference. The remaining gap is deliberate and documented rather than closed: the gate scores the model on its protected test set, the workbench scores the whole pipeline including coverage clipping and the tile-edge filter. A promoted candidate will not reproduce its gate F1 exactly, and pretending otherwise would be the worse answer. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -1891,8 +1891,11 @@ two readings is auditable rather than hidden.
|
||||
|
||||
Comparability is reported before any ranking. Runs over different source
|
||||
rasters, scored against different references, without a proven inference
|
||||
footprint, or covering a different evaluated population are not alternatives to
|
||||
one another, and `comparability.blocking_reasons` names which of those applies.
|
||||
footprint, covering a different evaluated population, or post-processed with a
|
||||
different containment / duplicate-IoU threshold are not alternatives to one
|
||||
another, and `comparability.blocking_reasons` names which of those applies.
|
||||
Runs recorded before those thresholds were persisted carry none of them, and
|
||||
absence is not treated as a difference.
|
||||
The numbers are still returned — they are simply not a ranking.
|
||||
|
||||
Each run is scored through the same QA path the workbench uses, so a comparison
|
||||
|
||||
Reference in New Issue
Block a user