diff --git a/CHANGELOG.md b/CHANGELOG.md index a9506a52..ecff8b0d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ - Added `scripts/export_operator_yolo_dataset.py` to convert prepared operator orthophoto/GRB sample pairs into a standard local YOLO detection dataset with `dataset.yaml`, train/validation image folders, label folders and `yolo_dataset_summary.json`. - Added `scripts/train_operator_yolo_detector.sh` as an operator-only training smoke wrapper that uses an existing local base `.pt` model and writes a trained local `.pt` artifact plus `training_summary.json`. +- Disabled Ultralytics plot generation in the training wrapper so the smoke path avoids auxiliary plot/font network behavior. - Added readiness coverage for the exporter Python compile check and training wrapper shell syntax. - Added regression coverage in `backend/tests/test_sprint129_operator_yolo_training_dataset.py`. - Updated operator documentation for dataset export, training smoke usage and the requirement to benchmark any trained model through the existing real-data Detection + QA matrix before treating it as useful. diff --git a/backend/tests/test_sprint129_operator_yolo_training_dataset.py b/backend/tests/test_sprint129_operator_yolo_training_dataset.py index 8af0ac3e..b4a5b1b1 100644 --- a/backend/tests/test_sprint129_operator_yolo_training_dataset.py +++ b/backend/tests/test_sprint129_operator_yolo_training_dataset.py @@ -63,6 +63,7 @@ def test_operator_yolo_train_smoke_script_contract() -> None: assert "dataset.yaml" in script assert "from ultralytics import YOLO" in script assert "model.train" in script + assert "plots=False" in script assert "training_summary.json" in script assert "download" not in script.lower() assert "fixture_mode" not in script diff --git a/docs/CODEX_EXECUTION_LOG.md b/docs/CODEX_EXECUTION_LOG.md index 4294342a..980768af 100644 --- a/docs/CODEX_EXECUTION_LOG.md +++ b/docs/CODEX_EXECUTION_LOG.md @@ -21,6 +21,9 @@ Tested: - `python scripts\export_operator_yolo_dataset.py --help` passed without requiring local GIS dependencies. - `python -m py_compile scripts\export_operator_yolo_dataset.py` passed. - `bash -n scripts/train_operator_yolo_detector.sh` passed. +- Live Tower export passed: `/app/storage/operator-data/yolo-building-dataset` contains 3 images and 1427 labels from the current Geel/Mol/Turnhout samples. +- Live Tower training smoke passed with the existing `/app/models/yolov8n.pt` base model and wrote `/app/models/geointel-building-yolov8n-smoke.pt`. +- The first live smoke showed Ultralytics fetching an auxiliary plot font. The wrapper now sets `plots=False` so the operator smoke path does not invoke plot/font network behavior. Open: - Run the exporter and training smoke inside the AI-enabled Tower runtime, then benchmark the trained artifact through the existing multi-sample Detection + QA matrix. diff --git a/scripts/train_operator_yolo_detector.sh b/scripts/train_operator_yolo_detector.sh index 068c7a5c..8eeea724 100644 --- a/scripts/train_operator_yolo_detector.sh +++ b/scripts/train_operator_yolo_detector.sh @@ -106,6 +106,7 @@ model.train( name=run_name, exist_ok=True, pretrained=True, + plots=False, verbose=True, )