diff --git a/models/active/production.json b/models/active/production.json index e4db1a6b..9d234ead 100644 --- a/models/active/production.json +++ b/models/active/production.json @@ -1,37 +1,37 @@ { - "version": "yolo26s-seg-v5-s-noflip-mask1-2026-10-25", + "version": "yolo26n-seg-v7-noflip-mask1-2026-11-06", "export": "weights.pt", - "promoted_on": "2026-10-25", + "promoted_on": "2026-11-06", "promoted_by": "gate", - "run": "2026-10-23_v5-s-noflip-mask1", + "run": "2026-11-05_v7-noflip-mask1", "gate": { - "baseline": "/home/jungfrau/AareLC_train/models/registry/yolo26n-seg-v4-noflip-mask1-2026-10-02/gold_report.json", - "f1_delta": 0.0207, - "mask_iou_delta": 0.0104, - "mask_score": 0.6831, - "mask_score_baseline": 0.6726, - "matched_only_iou_delta": -0.002, + "baseline": "/home/jungfrau/AareLC_train/models/registry/yolo26s-seg-v5-s-noflip-mask1-2026-10-25/gold_report.json", + "f1_delta": -0.0052, + "mask_iou_delta": 0.0096, + "mask_score": 0.6901, + "mask_score_baseline": 0.6805, + "matched_only_iou_delta": -0.005, "class_f1_delta": { - "loop_all": -0.0085, - "pin": 0.0064 + "loop_all": -0.0038, + "pin": -0.0143 }, - "pass_point_rule": true, + "pass_point_rule": false, "rule": "paired bootstrap", "bootstrap": { - "frames": 335, - "mounts": 300, + "frames": 337, + "mounts": 311, "draws": 2000, "f1": { - "delta": 0.0207, - "lo": -0.0028, - "hi": 0.0438, - "win": 0.961 + "delta": -0.0052, + "lo": -0.0215, + "hi": 0.0112, + "win": 0.27 }, "mask_score": { - "delta": 0.0104, - "lo": -0.0053, - "hi": 0.027, - "win": 0.9 + "delta": 0.0096, + "lo": -0.0032, + "hi": 0.0225, + "win": 0.926 } }, "pass": true diff --git a/models/registry/yolo26n-seg-v7-noflip-mask1-2026-11-06/gold_report.json b/models/registry/yolo26n-seg-v7-noflip-mask1-2026-11-06/gold_report.json new file mode 100644 index 00000000..7f1788dc --- /dev/null +++ b/models/registry/yolo26n-seg-v7-noflip-mask1-2026-11-06/gold_report.json @@ -0,0 +1,108 @@ +{ + "per_class": { + "loop_all": { + "tp": 245, + "fp": 15, + "fn": 5, + "precision": 0.9423076923076923, + "recall": 0.98, + "f1": 0.9607843137254902, + "mean_mask_iou": 0.9227624593344829, + "n_matched": 245 + }, + "pin": { + "tp": 91, + "fp": 13, + "fn": 2, + "precision": 0.875, + "recall": 0.978494623655914, + "f1": 0.9238578680203046, + "mean_mask_iou": 0.9331309475721057, + "n_matched": 91 + }, + "crystal": { + "tp": 159, + "fp": 88, + "fn": 93, + "precision": 0.6437246963562753, + "recall": 0.6309523809523809, + "f1": 0.6372745490981964, + "mean_mask_iou": 0.7691015625744835, + "n_matched": 159 + }, + "loop_face": { + "tp": 215, + "fp": 55, + "fn": 24, + "precision": 0.7962962962962963, + "recall": 0.899581589958159, + "f1": 0.8447937131630647, + "mean_mask_iou": 0.8917443658770515, + "n_matched": 215 + }, + "ice": { + "tp": 9, + "fp": 11, + "fn": 73, + "precision": 0.45, + "recall": 0.10975609756097561, + "f1": 0.1764705882352941, + "mean_mask_iou": 0.7897870919615065, + "n_matched": 9 + } + }, + "overall": { + "tp": 719, + "fp": 182, + "fn": 197, + "precision": 0.7980022197558269, + "recall": 0.7849344978165939, + "f1": 0.7914144193725923, + "mean_mask_iou": 0.879154366768529, + "n_matched": 719 + }, + "dataset": { + "gold_images": 337, + "pred_images": 337, + "missing_predictions": 0, + "iou_threshold": 0.5, + "ignored_objects": 242 + }, + "environment": { + "host": "mx-spark-01", + "ultralytics": "8.4.160", + "torch": "2.14.0+cu130" + }, + "gate": { + "baseline": "/home/jungfrau/AareLC_train/models/registry/yolo26s-seg-v5-s-noflip-mask1-2026-10-25/gold_report.json", + "f1_delta": -0.0052, + "mask_iou_delta": 0.0096, + "mask_score": 0.6901, + "mask_score_baseline": 0.6805, + "matched_only_iou_delta": -0.005, + "class_f1_delta": { + "loop_all": -0.0038, + "pin": -0.0143 + }, + "pass_point_rule": false, + "rule": "paired bootstrap", + "bootstrap": { + "frames": 337, + "mounts": 311, + "draws": 2000, + "f1": { + "delta": -0.0052, + "lo": -0.0215, + "hi": 0.0112, + "win": 0.27 + }, + "mask_score": { + "delta": 0.0096, + "lo": -0.0032, + "hi": 0.0225, + "win": 0.926 + } + }, + "pass": true + } +} diff --git a/models/registry/yolo26n-seg-v7-noflip-mask1-2026-11-06/metadata.json b/models/registry/yolo26n-seg-v7-noflip-mask1-2026-11-06/metadata.json new file mode 100644 index 00000000..da70f1a4 --- /dev/null +++ b/models/registry/yolo26n-seg-v7-noflip-mask1-2026-11-06/metadata.json @@ -0,0 +1,71 @@ +{ + "model_id": "yolo26n-seg-v7-noflip-mask1-2026-11-06", + "family": "yolo26n", + "task": "segmentation", + "training_date": "2026-11-06", + "run": "2026-11-05_v7-noflip-mask1", + "dataset": "dataset/2026-11-04_v7", + "base_weights": "models/base/yolo26n-seg.pt", + "hyperparams": { + "epochs": 400, + "patience": 50, + "imgsz": 640, + "batch": 16, + "device": "0", + "overlap_mask": false, + "scale": 0.7, + "translate": 0.15, + "mosaic": 0.5, + "close_mosaic": 10, + "fliplr": 0, + "flipud": 0.3, + "shear": 5.0, + "perspective": 0.0, + "mask_ratio": 1 + }, + "export_formats": [ + "pt" + ], + "metrics": { + "tp": 719, + "fp": 182, + "fn": 197, + "precision": 0.7980022197558269, + "recall": 0.7849344978165939, + "f1": 0.7914144193725923, + "mean_mask_iou": 0.879154366768529, + "n_matched": 719 + }, + "gate": { + "baseline": "/home/jungfrau/AareLC_train/models/registry/yolo26s-seg-v5-s-noflip-mask1-2026-10-25/gold_report.json", + "f1_delta": -0.0052, + "mask_iou_delta": 0.0096, + "mask_score": 0.6901, + "mask_score_baseline": 0.6805, + "matched_only_iou_delta": -0.005, + "class_f1_delta": { + "loop_all": -0.0038, + "pin": -0.0143 + }, + "pass_point_rule": false, + "rule": "paired bootstrap", + "bootstrap": { + "frames": 337, + "mounts": 311, + "draws": 2000, + "f1": { + "delta": -0.0052, + "lo": -0.0215, + "hi": 0.0112, + "win": 0.27 + }, + "mask_score": { + "delta": 0.0096, + "lo": -0.0032, + "hi": 0.0225, + "win": 0.926 + } + }, + "pass": true + } +} diff --git a/models/registry/yolo26n-seg-v7-noflip-mask1-2026-11-06/weights.pt b/models/registry/yolo26n-seg-v7-noflip-mask1-2026-11-06/weights.pt new file mode 100644 index 00000000..88f1c814 --- /dev/null +++ b/models/registry/yolo26n-seg-v7-noflip-mask1-2026-11-06/weights.pt @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1fe64d514036b59fa769888017893ebe10239e3bb03287dab053eb378d907e4a +size 6591965 diff --git a/runs/2026-11-05_v7-noflip-mask1/latency.json b/runs/2026-11-05_v7-noflip-mask1/latency.json new file mode 100644 index 00000000..c3c035ce --- /dev/null +++ b/runs/2026-11-05_v7-noflip-mask1/latency.json @@ -0,0 +1 @@ +{"weights": "runs/2026-11-05_v7-noflip-mask1/ultralytics/train/weights/best.pt", "frames": 150, "imgsz": 640, "infer_scale": 0.5, "half": true, "ms_median": 3.98, "ms_p90": 4.08, "ms_max": 6.7, "fps_median": 251.2, "device": "0", "backend": "pytorch", "gpu": "NVIDIA GB10", "ultralytics": "8.4.160", "torch": "2.14.0+cu130"} diff --git a/runs/2026-11-05_v7-noflip-mask1/metrics.json b/runs/2026-11-05_v7-noflip-mask1/metrics.json new file mode 100644 index 00000000..cd1e9add --- /dev/null +++ b/runs/2026-11-05_v7-noflip-mask1/metrics.json @@ -0,0 +1,57 @@ +{ + "overall": { + "tp": 719, + "fp": 182, + "fn": 197, + "precision": 0.7980022197558269, + "recall": 0.7849344978165939, + "f1": 0.7914144193725923, + "mean_mask_iou": 0.879154366768529, + "n_matched": 719 + }, + "gate": { + "baseline": "/home/jungfrau/AareLC_train/models/registry/yolo26s-seg-v5-s-noflip-mask1-2026-10-25/gold_report.json", + "f1_delta": -0.0052, + "mask_iou_delta": 0.0096, + "mask_score": 0.6901, + "mask_score_baseline": 0.6805, + "matched_only_iou_delta": -0.005, + "class_f1_delta": { + "loop_all": -0.0038, + "pin": -0.0143 + }, + "pass_point_rule": false, + "rule": "paired bootstrap", + "bootstrap": { + "frames": 337, + "mounts": 311, + "draws": 2000, + "f1": { + "delta": -0.0052, + "lo": -0.0215, + "hi": 0.0112, + "win": 0.27 + }, + "mask_score": { + "delta": 0.0096, + "lo": -0.0032, + "hi": 0.0225, + "win": 0.926 + } + }, + "pass": true + }, + "training": { + "epochs_run": 233, + "precision(B)": 0.67594, + "recall(B)": 0.75992, + "mAP50(B)": 0.76383, + "mAP50-95(B)": 0.57244, + "precision(M)": 0.67677, + "recall(M)": 0.75905, + "mAP50(M)": 0.76589, + "mAP50-95(M)": 0.55224 + }, + "version": "yolo26n-seg-v7-noflip-mask1-2026-11-06", + "measured_at": "2026-11-06T03:13:57" +} diff --git a/runs/2026-11-05_v7-noflip-mask1/run.json b/runs/2026-11-05_v7-noflip-mask1/run.json index b2ae9a89..90de0a07 100644 --- a/runs/2026-11-05_v7-noflip-mask1/run.json +++ b/runs/2026-11-05_v7-noflip-mask1/run.json @@ -2,18 +2,66 @@ "id": "2026-11-05_v7-noflip-mask1", "dataset": "dataset/2026-11-04_v7", "base_weights": "models/base/yolo26n-seg.pt", - "status": "exported", + "status": "promoted", "created": "2026-11-05T14:01:49", "created_by": "jungfrau@mx-spark-01", - "hyperparams": {}, - "version": null, - "metrics": {}, + "hyperparams": { + "epochs": 400, + "patience": 50, + "imgsz": 640, + "batch": 16, + "device": "0", + "overlap_mask": false, + "scale": 0.7, + "translate": 0.15, + "mosaic": 0.5, + "close_mosaic": 10, + "fliplr": 0, + "flipud": 0.3, + "shear": 5.0, + "perspective": 0.0, + "mask_ratio": 1 + }, + "version": "yolo26n-seg-v7-noflip-mask1-2026-11-06", + "metrics": { + "f1": 0.7914144193725923, + "mean_mask_iou": 0.879154366768529, + "gate_pass": true, + "baseline": "/home/jungfrau/AareLC_train/models/registry/yolo26s-seg-v5-s-noflip-mask1-2026-10-25/gold_report.json", + "measured_at": "2026-11-06T03:13:57" + }, "history": [ { "status": "exported", "at": "2026-11-05T14:01:49", "by": "jungfrau@mx-spark-01", "note": "promoted recipe (fliplr 0, mask_ratio 1) on dataset v7: candidate for the beamlines, Spark" + }, + { + "status": "training", + "at": "2026-11-05T14:01:49", + "by": "jungfrau@mx-spark-01", + "note": "train_run.py" + }, + { + "status": "measured", + "at": "2026-11-06T03:13:57", + "by": "jungfrau@mx-spark-01", + "note": "" + }, + { + "status": "gate_passed", + "at": "2026-11-06T03:13:57", + "by": "jungfrau@mx-spark-01", + "note": "{\"baseline\": \"/home/jungfrau/AareLC_train/models/registry/yolo26s-seg-v5-s-noflip-mask1-2026-10-25/gold_report.json\", \"f1_delta\": -0.0052, \"mask_iou_delta\": 0.0096, \"mask_score\": 0.6901, \"mask_score_baseline\": 0.6805, \"matched_only_iou_delta\": -0.005, \"class_f1_delta\": {\"loop_all\": -0.0038, \"pin\": -0.0143}, \"pass_point_rule\": false, \"rule\": \"paired bootstrap\", \"bootstrap\": {\"frames\": 337, \"mounts\": 311, \"draws\": 2000, \"f1\": {\"delta\": -0.0052, \"lo\": -0.0215, \"hi\": 0.0112, \"win\": 0.27}, \"mask_score\": {\"delta\": 0.0096, \"lo\": -0.0032, \"hi\": 0.0225, \"win\": 0.926}}, \"pass\": true}" + }, + { + "status": "promoted", + "at": "2026-11-06T03:13:57", + "by": "jungfrau@mx-spark-01", + "note": "by the gate" } - ] + ], + "host": "mx-spark-01", + "started": "2026-11-05T14:01:49" } diff --git a/runs/README.md b/runs/README.md index 9cec066f..c989a6cb 100644 --- a/runs/README.md +++ b/runs/README.md @@ -32,6 +32,7 @@ Generated by `python tools/ledger.py render`; do not edit by hand. | 2026-11-03_crop1-s | registered | dataset/2026-11-03_crop1 | yolo26s-seg.pt | yolo26s-seg-crop1-s-2026-11-04 | - | - | - | 2026-11-04T02:39 | | 2026-11-04_v7-s-noflip-mask1 | gate_failed | dataset/2026-11-04_v7 | models/base/yolo26s-seg.pt | yolo26s-seg-v7-s-noflip-mask1-2026-11-05 | 0.791 | 0.874 | no | 2026-11-05T05:26 | | 2026-11-05_v7-crop-s | registered | dataset/2026-11-04_v7crop | models/base/yolo26s-seg.pt | yolo26s-seg-v7-crop-s-2026-11-05 | - | - | - | 2026-11-05T14:01 | +| 2026-11-05_v7-noflip-mask1 | promoted | dataset/2026-11-04_v7 | models/base/yolo26n-seg.pt | yolo26n-seg-v7-noflip-mask1-2026-11-06 | 0.791 | 0.879 | yes | 2026-11-06T03:13 | States: exported → queued → training → measured → registered → gate_passed → gate_failed → promoted → deployed (or aborted). @@ -259,3 +260,11 @@ States: exported → queued → training → measured → registered → gate_pa - 2026-11-05T05:26:46 · exported · jungfrau@mx-spark-01 — loop-head crop model (yolo26s) for the studio second pass on the v7 pool: crops 1.6x the face, min 512 px, head classes only; promoted recipe; no gold gate, measured as a two-pass behind the first-pass models, Spark - 2026-11-05T05:26:46 · training · jungfrau@mx-spark-01 — train_run.py - 2026-11-05T14:01:38 · registered · jungfrau@mx-spark-01 — --no-gate: no gold measure + +## 2026-11-05_v7-noflip-mask1 + +- 2026-11-05T14:01:49 · exported · jungfrau@mx-spark-01 — promoted recipe (fliplr 0, mask_ratio 1) on dataset v7: candidate for the beamlines, Spark +- 2026-11-05T14:01:49 · training · jungfrau@mx-spark-01 — train_run.py +- 2026-11-06T03:13:57 · measured · jungfrau@mx-spark-01 +- 2026-11-06T03:13:57 · gate_passed · jungfrau@mx-spark-01 — {"baseline": "/home/jungfrau/AareLC_train/models/registry/yolo26s-seg-v5-s-noflip-mask1-2026-10-25/gold_report.json", "f1_delta": -0.0052, "mask_iou_delta": 0.0096, "mask_score": 0.6901, "mask_score_baseline": 0.6805, "matched_only_iou_delta": -0.005, "class_f1_delta": {"loop_all": -0.0038, "pin": -0.0143}, "pass_point_rule": false, "rule": "paired bootstrap", "bootstrap": {"frames": 337, "mounts": 311, "draws": 2000, "f1": {"delta": -0.0052, "lo": -0.0215, "hi": 0.0112, "win": 0.27}, "mask_score": {"delta": 0.0096, "lo": -0.0032, "hi": 0.0225, "win": 0.926}}, "pass": true} +- 2026-11-06T03:13:57 · promoted · jungfrau@mx-spark-01 — by the gate