Suppress duplicate YOLO tile detections
This commit is contained in:
@@ -1,3 +1,35 @@
|
||||
## Sprint 149 YOLO duplicate suppression evidence (2026-07-09)
|
||||
|
||||
Changed:
|
||||
- Added configured-YOLO cross-tile duplicate suppression after pixel boxes are converted to EPSG:4326 geometries and before `Detection` rows are persisted.
|
||||
- Added backend setting `YOLO_DUPLICATE_IOU_THRESHOLD` with default `0.5`; `0` disables the GeoIntel-side pass for debugging.
|
||||
- Detection run `result_json` now records:
|
||||
- `raw_detection_count`
|
||||
- `suppressed_detection_count`
|
||||
- `duplicate_iou_threshold`
|
||||
- Updated `.env.example`, Docker Compose, Unraid env examples and the Dockerman run script.
|
||||
- Updated calibration and quality matrix scripts to fetch detection run details and include raw/suppressed counts in per-run and aggregate summaries.
|
||||
- Updated backend/API/AI/pipeline documentation.
|
||||
|
||||
Why:
|
||||
- Dense overlapping tile inference can produce duplicate candidate buildings, which inflates persisted false positives before QA/QC.
|
||||
- The previous Sprint 148 cap fix allowed dense AOIs to persist more candidates, but made duplicate pressure more visible.
|
||||
- This pass keeps all outputs honest: no model activation, no fake detections and no migration. It only removes lower-confidence same-class geometric duplicates before persistence.
|
||||
|
||||
Tested:
|
||||
- Red step: `python -m pytest backend\tests\test_sprint8b_yolo_foundation.py::test_yolo_run_suppresses_cross_tile_duplicate_detections -q` failed with `detection_count == 2`.
|
||||
- `python -m pytest backend\tests\test_sprint8b_yolo_foundation.py::test_yolo_run_suppresses_cross_tile_duplicate_detections -q` (`1 passed`)
|
||||
- Red step: Docker runtime config tests failed before `.env.example` and Unraid runner exposed `YOLO_DUPLICATE_IOU_THRESHOLD`.
|
||||
- `python -m pytest backend\tests\test_sprint8b_yolo_foundation.py backend\tests\test_docker_runtime_config.py::test_env_example_uses_runtime_env_names_read_by_backend_and_frontend backend\tests\test_docker_runtime_config.py::test_unraid_deploy_passes_ai_build_arg_and_yolo_runtime_env -q` (`17 passed`)
|
||||
- Red step: calibration/matrix script tests failed before detection-run raw/suppressed metadata was included.
|
||||
- `python -m pytest backend\tests\test_sprint124_detection_calibration_sweep.py backend\tests\test_sprint126_detection_quality_matrix.py backend\tests\test_sprint127_operator_sample_quality_matrix.py::test_multi_sample_detection_quality_matrix_runs_existing_matrix_for_each_sample -q` (`3 passed`)
|
||||
- `bash -n scripts/run_detection_calibration_sweep.sh`
|
||||
- `bash -n scripts/run_detection_quality_matrix.sh`
|
||||
- `bash -n scripts/run_multi_sample_detection_quality_matrix.sh`
|
||||
|
||||
Next:
|
||||
- Run full readiness, then deploy Tower and rerun the dense Westerlo/Turnhout sweeps with duplicate suppression enabled to quantify quality impact versus the Sprint 148 uncapped baseline.
|
||||
|
||||
## Sprint 148 YOLO max-detection cap hardening (2026-07-09)
|
||||
|
||||
Changed:
|
||||
|
||||
Reference in New Issue
Block a user