a model is not measured on the gold frames it pre-labelled itself
CI / ledger-and-tools (push) Successful in 21s

Where a reviewer keeps an outline the model proposed, the gold holds the model's own mask,
which overlaps itself perfectly: on the 50 gold frames v4 had pre-labelled it scored a
matched IoU of 0.959 against 0.905 elsewhere, every other model 0.93, and that alone
produced the "mask dip" that failed all three v5 runs. tools/gold_prelabel.py records
which model proposed each gold frame (data/gold/prelabel.json, 265 of 335 frames);
gate_stats.without_own_proposals drops those frames from that model's measure; the unseen
comparison and the gate's paired bootstrap use it, so two models are compared on the
frames neither of them touched. The three v5 runs are re-gated on that basis, without
promotion.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
jungfrauandClaude Fable 5.1 committed 2026-10-25 02:48:09 +02:00
1 parent 0ed13a361c
commit 845bd87bb3
21 files changed
+1515 -680

No files matched your search

+273
View File
@@ -0,0 +1,273 @@
{
"built": "2026-10-25T02:46:41",
"frames": {
"tpi_10130": "yolo26n-seg-overlap-false-2026-04-12",
"tpi_10697": "yolo26n-seg-overlap-false-2026-04-12",
"tpi_14689": "yolo26n-seg-overlap-false-2026-04-12",
"tpi_14698": "yolo26n-seg-overlap-false-2026-04-12",
"tpi_14711": "yolo26n-seg-overlap-false-2026-04-12",
"tpi_14715": "yolo26n-seg-overlap-false-2026-04-12",
"tpi_16092": "yolo26n-seg-v3-noflip-mask1-2026-09-30",
"tpi_16223": "yolo26n-seg-overlap-false-2026-04-12",
"tpi_16235": "yolo26n-seg-overlap-false-2026-04-12",
"tpi_16252": "yolo26n-seg-overlap-false-2026-04-12",
"tpi_16321": "yolo26n-seg-overlap-false-2026-04-12",
"tpi_16325": "yolo26n-seg-overlap-false-2026-04-12",
"tpi_16361": "yolo26n-seg-overlap-false-2026-04-12",
"tpi_16747": "yolo26n-seg-overlap-false-2026-04-12",
"tpi_16766": "yolo26n-seg-overlap-false-2026-04-12",
"tpi_16770": "yolo26n-seg-overlap-false-2026-04-12",
"tpi_16956": "yolo26n-seg-overlap-false-2026-04-12",
"tpi_17889": "yolo26n-seg-overlap-false-2026-04-12",
"tpi_20221": "yolo26n-seg-overlap-false-2026-04-12",
"tpi_21693": "yolo26n-seg-overlap-false-2026-04-12",
"tpi_24512": "yolo26n-seg-v3-noflip-mask1-2026-09-30",
"tpi_2869": "yolo26n-seg-v4-noflip-mask1-2026-10-02",
"tpi_31669": "yolo26n-seg-overlap-false-2026-04-12",
"tpi_31928": "yolo26n-seg-overlap-false-2026-04-12",
"tpi_31929": "yolo26n-seg-overlap-false-2026-04-12",
"tpi_32422": "yolo26n-seg-v3-noflip-mask1-2026-09-30",
"tpi_32690": "yolo26n-seg-v3-noflip-mask1-2026-09-30",
"tpi_32762": "yolo26n-seg-overlap-false-2026-04-12",
"tpi_33849": "yolo26n-seg-overlap-false-2026-04-12",
"tpi_34038": "yolo26n-seg-overlap-false-2026-04-12",
"tpi_34389": "yolo26n-seg-overlap-false-2026-04-12",
"tpi_36563": "yolo26n-seg-alc-v1-noflip-mask1-2026-09-29",
"tpi_3943": "yolo26n-seg-v3-noflip-mask1-2026-09-30",
"tpi_4053": "yolo26n-seg-overlap-false-2026-04-12",
"tpi_44119": "yolo26n-seg-v3-noflip-mask1-2026-09-30",
"tpi_45649": "yolo26n-seg-overlap-false-2026-04-12",
"tpi_46469": "yolo26n-seg-v3-noflip-mask1-2026-09-30",
"tpi_48284": "yolo26n-seg-v3-noflip-mask1-2026-09-30",
"tpi_48572": "yolo26n-seg-v3-noflip-mask1-2026-09-30",
"tpi_48994": "yolo26n-seg-v3-noflip-mask1-2026-09-30",
"tpi_49016": "yolo26n-seg-v4-noflip-mask1-2026-10-02",
"tpi_49039": "yolo26n-seg-v4-noflip-mask1-2026-10-02",
"tpi_50822": "yolo26n-seg-v3-noflip-mask1-2026-09-30",
"tpi_51387": "yolo26n-seg-v3-noflip-mask1-2026-09-30",
"tpi_51699": "yolo26n-seg-v4-noflip-mask1-2026-10-02",
"tpi_51773": "yolo26n-seg-v4-noflip-mask1-2026-10-02",
"tpi_52248": "yolo26n-seg-v3-noflip-mask1-2026-09-30",
"tpi_52402": "yolo26n-seg-overlap-false-2026-04-12",
"tpi_53961": "yolo26n-seg-v3-noflip-mask1-2026-09-30",
"tpi_5421": "yolo26n-seg-v3-noflip-mask1-2026-09-30",
"tpi_54266": "yolo26n-seg-v3-noflip-mask1-2026-09-30",
"tpi_54621": "yolo26n-seg-v4-noflip-mask1-2026-10-02",
"tpi_55277": "yolo26n-seg-v3-noflip-mask1-2026-09-30",
"tpi_55303": "yolo26n-seg-overlap-false-2026-04-12",
"tpi_55371": "yolo26n-seg-alc-v1-noflip-mask1-2026-09-29",
"tpi_55383": "yolo26n-seg-overlap-false-2026-04-12",
"tpi_55408": "yolo26n-seg-overlap-false-2026-04-12",
"tpi_55416": "yolo26n-seg-overlap-false-2026-04-12",
"tpi_55565": "yolo26n-seg-overlap-false-2026-04-12",
"tpi_55896": "yolo26n-seg-alc-v1-noflip-mask1-2026-09-29",
"tpi_55912": "yolo26n-seg-overlap-false-2026-04-12",
"tpi_55941": "yolo26n-seg-overlap-false-2026-04-12",
"tpi_55958": "yolo26n-seg-overlap-false-2026-04-12",
"tpi_56012": "yolo26n-seg-overlap-false-2026-04-12",
"tpi_56096": "yolo26n-seg-overlap-false-2026-04-12",
"tpi_56104": "yolo26n-seg-alc-v1-noflip-mask1-2026-09-29",
"tpi_56715": "yolo26n-seg-overlap-false-2026-04-12",
"tpi_56717": "yolo26n-seg-overlap-false-2026-04-12",
"tpi_56840": "yolo26n-seg-overlap-false-2026-04-12",
"tpi_57070": "yolo26n-seg-overlap-false-2026-04-12",
"tpi_57071": "yolo26n-seg-v3-noflip-mask1-2026-09-30",
"tpi_57300": "yolo26n-seg-overlap-false-2026-04-12",
"tpi_57342": "yolo26n-seg-overlap-false-2026-04-12",
"tpi_57654": "yolo26n-seg-overlap-false-2026-04-12",
"tpi_57684": "yolo26n-seg-overlap-false-2026-04-12",
"tpi_57702": "yolo26n-seg-overlap-false-2026-04-12",
"tpi_57833": "yolo26n-seg-v3-noflip-mask1-2026-09-30",
"tpi_57991": "yolo26n-seg-overlap-false-2026-04-12",
"tpi_58097": "yolo26n-seg-overlap-false-2026-04-12",
"tpi_58229": "yolo26n-seg-overlap-false-2026-04-12",
"tpi_58417": "yolo26n-seg-overlap-false-2026-04-12",
"tpi_58588": "yolo26n-seg-overlap-false-2026-04-12",
"tpi_58595": "yolo26n-seg-overlap-false-2026-04-12",
"tpi_58842": "yolo26n-seg-overlap-false-2026-04-12",
"tpi_59004": "yolo26n-seg-overlap-false-2026-04-12",
"tpi_59011": "yolo26n-seg-overlap-false-2026-04-12",
"tpi_59080": "yolo26n-seg-v3-noflip-mask1-2026-09-30",
"tpi_59120": "yolo26n-seg-overlap-false-2026-04-12",
"tpi_59182": "yolo26n-seg-overlap-false-2026-04-12",
"tpi_59312": "yolo26n-seg-overlap-false-2026-04-12",
"tpi_59412": "yolo26n-seg-overlap-false-2026-04-12",
"tpi_59496": "yolo26n-seg-overlap-false-2026-04-12",
"tpi_59564": "yolo26n-seg-overlap-false-2026-04-12",
"tpi_59570": "yolo26n-seg-overlap-false-2026-04-12",
"tpi_59868": "yolo26n-seg-v3-noflip-mask1-2026-09-30",
"tpi_59911": "yolo26n-seg-overlap-false-2026-04-12",
"tpi_59935": "yolo26n-seg-v3-noflip-mask1-2026-09-30",
"tpi_59988": "yolo26n-seg-overlap-false-2026-04-12",
"tpi_60052": "yolo26n-seg-overlap-false-2026-04-12",
"tpi_60116": "yolo26n-seg-v3-noflip-mask1-2026-09-30",
"tpi_60129": "yolo26n-seg-v3-noflip-mask1-2026-09-30",
"tpi_60568": "yolo26n-seg-v3-noflip-mask1-2026-09-30",
"tpi_60625": "yolo26n-seg-overlap-false-2026-04-12",
"tpi_60637": "yolo26n-seg-v4-noflip-mask1-2026-10-02",
"tpi_61066": "yolo26n-seg-overlap-false-2026-04-12",
"tpi_61069": "yolo26n-seg-overlap-false-2026-04-12",
"tpi_61087": "yolo26n-seg-overlap-false-2026-04-12",
"tpi_61136": "yolo26n-seg-v3-noflip-mask1-2026-09-30",
"tpi_61317": "yolo26n-seg-overlap-false-2026-04-12",
"tpi_61327": "yolo26n-seg-overlap-false-2026-04-12",
"tpi_61334": "yolo26n-seg-overlap-false-2026-04-12",
"tpi_61340": "yolo26n-seg-overlap-false-2026-04-12",
"tpi_61343": "yolo26n-seg-overlap-false-2026-04-12",
"tpi_61344": "yolo26n-seg-overlap-false-2026-04-12",
"tpi_61350": "yolo26n-seg-overlap-false-2026-04-12",
"tpi_61358": "yolo26n-seg-overlap-false-2026-04-12",
"tpi_61361": "yolo26n-seg-overlap-false-2026-04-12",
"tpi_61364": "yolo26n-seg-overlap-false-2026-04-12",
"tpi_61372": "yolo26n-seg-overlap-false-2026-04-12",
"tpi_61374": "yolo26n-seg-overlap-false-2026-04-12",
"tpi_61379": "yolo26n-seg-overlap-false-2026-04-12",
"tpi_61380": "yolo26n-seg-overlap-false-2026-04-12",
"tpi_61381": "yolo26n-seg-overlap-false-2026-04-12",
"tpi_61385": "yolo26n-seg-overlap-false-2026-04-12",
"tpi_61392": "yolo26n-seg-overlap-false-2026-04-12",
"tpi_61411": "yolo26n-seg-overlap-false-2026-04-12",
"tpi_61419": "yolo26n-seg-overlap-false-2026-04-12",
"tpi_61428": "yolo26n-seg-overlap-false-2026-04-12",
"tpi_61430": "yolo26n-seg-overlap-false-2026-04-12",
"tpi_61436": "yolo26n-seg-overlap-false-2026-04-12",
"tpi_61437": "yolo26n-seg-overlap-false-2026-04-12",
"tpi_61439": "yolo26n-seg-overlap-false-2026-04-12",
"tpi_61441": "yolo26n-seg-overlap-false-2026-04-12",
"tpi_61442": "yolo26n-seg-overlap-false-2026-04-12",
"tpi_61443": "yolo26n-seg-overlap-false-2026-04-12",
"tpi_61445": "yolo26n-seg-overlap-false-2026-04-12",
"tpi_61447": "yolo26n-seg-overlap-false-2026-04-12",
"tpi_61449": "yolo26n-seg-overlap-false-2026-04-12",
"tpi_61450": "yolo26n-seg-overlap-false-2026-04-12",
"tpi_61452": "yolo26n-seg-overlap-false-2026-04-12",
"tpi_61457": "yolo26n-seg-overlap-false-2026-04-12",
"tpi_61565": "yolo26n-seg-alc-v1-noflip-mask1-2026-09-29",
"tpi_61572": "yolo26n-seg-alc-v1-noflip-mask1-2026-09-29",
"tpi_61579": "yolo26n-seg-alc-v1-noflip-mask1-2026-09-29",
"tpi_61581": "yolo26n-seg-alc-v1-noflip-mask1-2026-09-29",
"tpi_61594": "yolo26n-seg-alc-v1-noflip-mask1-2026-09-29",
"tpi_61610": "yolo26n-seg-alc-v1-noflip-mask1-2026-09-29",
"tpi_61613": "yolo26n-seg-alc-v1-noflip-mask1-2026-09-29",
"tpi_61618": "yolo26n-seg-alc-v1-noflip-mask1-2026-09-29",
"tpi_61627": "yolo26n-seg-alc-v1-noflip-mask1-2026-09-29",
"tpi_61629": "yolo26n-seg-alc-v1-noflip-mask1-2026-09-29",
"tpi_61633": "yolo26n-seg-alc-v1-noflip-mask1-2026-09-29",
"tpi_61635": "yolo26n-seg-alc-v1-noflip-mask1-2026-09-29",
"tpi_61651": "yolo26n-seg-alc-v1-noflip-mask1-2026-09-29",
"tpi_61653": "yolo26n-seg-alc-v1-noflip-mask1-2026-09-29",
"tpi_61658": "yolo26n-seg-alc-v1-noflip-mask1-2026-09-29",
"tpi_61670": "yolo26n-seg-alc-v1-noflip-mask1-2026-09-29",
"tpi_61686": "yolo26n-seg-alc-v1-noflip-mask1-2026-09-29",
"tpi_61702": "yolo26n-seg-alc-v1-noflip-mask1-2026-09-29",
"tpi_61769": "yolo26n-seg-alc-v1-noflip-mask1-2026-09-29",
"tpi_61834": "yolo26n-seg-alc-v1-noflip-mask1-2026-09-29",
"tpi_61839": "yolo26n-seg-alc-v1-noflip-mask1-2026-09-29",
"tpi_61865": "yolo26n-seg-alc-v1-noflip-mask1-2026-09-29",
"tpi_62017": "yolo26n-seg-v3-noflip-mask1-2026-09-30",
"tpi_62033": "yolo26n-seg-v3-noflip-mask1-2026-09-30",
"tpi_62361": "yolo26n-seg-v4-noflip-mask1-2026-10-02",
"tpi_62413": "yolo26n-seg-v3-noflip-mask1-2026-09-30",
"tpi_62598": "yolo26n-seg-v3-noflip-mask1-2026-09-30",
"tpi_62617": "yolo26n-seg-v3-noflip-mask1-2026-09-30",
"tpi_62621": "yolo26n-seg-v3-noflip-mask1-2026-09-30",
"tpi_62622": "yolo26n-seg-v3-noflip-mask1-2026-09-30",
"tpi_62623": "yolo26n-seg-v3-noflip-mask1-2026-09-30",
"tpi_62631": "yolo26n-seg-v3-noflip-mask1-2026-09-30",
"tpi_62634": "yolo26n-seg-v3-noflip-mask1-2026-09-30",
"tpi_62640": "yolo26n-seg-v3-noflip-mask1-2026-09-30",
"tpi_62645": "yolo26n-seg-v3-noflip-mask1-2026-09-30",
"tpi_62646": "yolo26n-seg-v3-noflip-mask1-2026-09-30",
"tpi_62649": "yolo26n-seg-v3-noflip-mask1-2026-09-30",
"tpi_62656": "yolo26n-seg-v3-noflip-mask1-2026-09-30",
"tpi_62669": "yolo26n-seg-v3-noflip-mask1-2026-09-30",
"tpi_62678": "yolo26n-seg-v3-noflip-mask1-2026-09-30",
"tpi_62682": "yolo26n-seg-v3-noflip-mask1-2026-09-30",
"tpi_62687": "yolo26n-seg-v3-noflip-mask1-2026-09-30",
"tpi_62692": "yolo26n-seg-v3-noflip-mask1-2026-09-30",
"tpi_62697": "yolo26n-seg-v3-noflip-mask1-2026-09-30",
"tpi_62700": "yolo26n-seg-v3-noflip-mask1-2026-09-30",
"tpi_62703": "yolo26n-seg-v3-noflip-mask1-2026-09-30",
"tpi_62711": "yolo26n-seg-v3-noflip-mask1-2026-09-30",
"tpi_62717": "yolo26n-seg-v3-noflip-mask1-2026-09-30",
"tpi_62718": "yolo26n-seg-v3-noflip-mask1-2026-09-30",
"tpi_62719": "yolo26n-seg-v3-noflip-mask1-2026-09-30",
"tpi_62720": "yolo26n-seg-v3-noflip-mask1-2026-09-30",
"tpi_62739": "yolo26n-seg-v3-noflip-mask1-2026-09-30",
"tpi_62740": "yolo26n-seg-v3-noflip-mask1-2026-09-30",
"tpi_62742": "yolo26n-seg-v3-noflip-mask1-2026-09-30",
"tpi_62745": "yolo26n-seg-v3-noflip-mask1-2026-09-30",
"tpi_62746": "yolo26n-seg-v3-noflip-mask1-2026-09-30",
"tpi_62747": "yolo26n-seg-v3-noflip-mask1-2026-09-30",
"tpi_62749": "yolo26n-seg-v3-noflip-mask1-2026-09-30",
"tpi_62751": "yolo26n-seg-v3-noflip-mask1-2026-09-30",
"tpi_62754": "yolo26n-seg-v3-noflip-mask1-2026-09-30",
"tpi_62755": "yolo26n-seg-v3-noflip-mask1-2026-09-30",
"tpi_62756": "yolo26n-seg-v3-noflip-mask1-2026-09-30",
"tpi_62757": "yolo26n-seg-v3-noflip-mask1-2026-09-30",
"tpi_62758": "yolo26n-seg-v3-noflip-mask1-2026-09-30",
"tpi_62759": "yolo26n-seg-v3-noflip-mask1-2026-09-30",
"tpi_62760": "yolo26n-seg-v3-noflip-mask1-2026-09-30",
"tpi_62761": "yolo26n-seg-v3-noflip-mask1-2026-09-30",
"tpi_62762": "yolo26n-seg-v3-noflip-mask1-2026-09-30",
"tpi_62763": "yolo26n-seg-v3-noflip-mask1-2026-09-30",
"tpi_62764": "yolo26n-seg-v3-noflip-mask1-2026-09-30",
"tpi_62766": "yolo26n-seg-v3-noflip-mask1-2026-09-30",
"tpi_62767": "yolo26n-seg-v3-noflip-mask1-2026-09-30",
"tpi_62768": "yolo26n-seg-v3-noflip-mask1-2026-09-30",
"tpi_62769": "yolo26n-seg-v3-noflip-mask1-2026-09-30",
"tpi_62772": "yolo26n-seg-v3-noflip-mask1-2026-09-30",
"tpi_62773": "yolo26n-seg-v3-noflip-mask1-2026-09-30",
"tpi_62775": "yolo26n-seg-v3-noflip-mask1-2026-09-30",
"tpi_62776": "yolo26n-seg-v3-noflip-mask1-2026-09-30",
"tpi_62779": "yolo26n-seg-v3-noflip-mask1-2026-09-30",
"tpi_62910": "yolo26n-seg-v4-noflip-mask1-2026-10-02",
"tpi_62927": "yolo26n-seg-v4-noflip-mask1-2026-10-02",
"tpi_62928": "yolo26n-seg-v4-noflip-mask1-2026-10-02",
"tpi_62965": "yolo26n-seg-v4-noflip-mask1-2026-10-02",
"tpi_63041": "yolo26n-seg-v4-noflip-mask1-2026-10-02",
"tpi_63088": "yolo26n-seg-v4-noflip-mask1-2026-10-02",
"tpi_63105": "yolo26n-seg-v4-noflip-mask1-2026-10-02",
"tpi_63202": "yolo26n-seg-v4-noflip-mask1-2026-10-02",
"tpi_63206": "yolo26n-seg-v4-noflip-mask1-2026-10-02",
"tpi_63207": "yolo26n-seg-v4-noflip-mask1-2026-10-02",
"tpi_63223": "yolo26n-seg-v4-noflip-mask1-2026-10-02",
"tpi_63226": "yolo26n-seg-v4-noflip-mask1-2026-10-02",
"tpi_63228": "yolo26n-seg-v4-noflip-mask1-2026-10-02",
"tpi_63234": "yolo26n-seg-v4-noflip-mask1-2026-10-02",
"tpi_63239": "yolo26n-seg-v4-noflip-mask1-2026-10-02",
"tpi_63376": "yolo26n-seg-v4-noflip-mask1-2026-10-02",
"tpi_63389": "yolo26n-seg-v4-noflip-mask1-2026-10-02",
"tpi_63390": "yolo26n-seg-v4-noflip-mask1-2026-10-02",
"tpi_63416": "yolo26n-seg-v4-noflip-mask1-2026-10-02",
"tpi_63417": "yolo26n-seg-v4-noflip-mask1-2026-10-02",
"tpi_63420": "yolo26n-seg-v4-noflip-mask1-2026-10-02",
"tpi_63426": "yolo26n-seg-v4-noflip-mask1-2026-10-02",
"tpi_63434": "yolo26n-seg-v4-noflip-mask1-2026-10-02",
"tpi_63436": "yolo26n-seg-v4-noflip-mask1-2026-10-02",
"tpi_63461": "yolo26n-seg-v4-noflip-mask1-2026-10-02",
"tpi_63463": "yolo26n-seg-v4-noflip-mask1-2026-10-02",
"tpi_63479": "yolo26n-seg-v4-noflip-mask1-2026-10-02",
"tpi_63481": "yolo26n-seg-v4-noflip-mask1-2026-10-02",
"tpi_63484": "yolo26n-seg-v4-noflip-mask1-2026-10-02",
"tpi_63490": "yolo26n-seg-v4-noflip-mask1-2026-10-02",
"tpi_63492": "yolo26n-seg-v4-noflip-mask1-2026-10-02",
"tpi_63516": "yolo26n-seg-v4-noflip-mask1-2026-10-02",
"tpi_63517": "yolo26n-seg-v4-noflip-mask1-2026-10-02",
"tpi_63518": "yolo26n-seg-v4-noflip-mask1-2026-10-02",
"tpi_63520": "yolo26n-seg-v4-noflip-mask1-2026-10-02",
"tpi_63522": "yolo26n-seg-v4-noflip-mask1-2026-10-02",
"tpi_63535": "yolo26n-seg-v4-noflip-mask1-2026-10-02",
"tpi_63540": "yolo26n-seg-v4-noflip-mask1-2026-10-02",
"tpi_63546": "yolo26n-seg-v4-noflip-mask1-2026-10-02",
"tpi_63548": "yolo26n-seg-v4-noflip-mask1-2026-10-02",
"tpi_63554": "yolo26n-seg-v4-noflip-mask1-2026-10-02",
"tpi_8285": "yolo26n-seg-v4-noflip-mask1-2026-10-02",
"tpi_8378": "yolo26n-seg-v3-noflip-mask1-2026-09-30",
"tpi_8507": "yolo26n-seg-overlap-false-2026-04-12",
"tpi_8744": "yolo26n-seg-overlap-false-2026-04-12"
},
"gold_frames": 335,
"source": "/home/jungfrau/AareLC_studio/data/pipeline_prod",
"with_a_proposal": 265
}
@@ -96,20 +96,20 @@
"pass_point_rule": false,
"rule": "paired bootstrap",
"bootstrap": {
"frames": 335,
"mounts": 300,
"frames": 285,
"mounts": 250,
"draws": 2000,
"f1": {
"delta": 0.0022,
"lo": -0.0127,
"hi": 0.0176,
"win": 0.604
"delta": 0.0024,
"lo": -0.0143,
"hi": 0.0204,
"win": 0.595
},
"mask_score": {
"delta": -0.0099,
"lo": -0.0222,
"hi": 0.0033,
"win": 0.063
"delta": 0.0009,
"lo": -0.0127,
"hi": 0.0145,
"win": 0.553
}
},
"pass": false
@@ -10,14 +10,14 @@
"epochs": 400,
"patience": 50,
"imgsz": 1024,
"batch": 8,
"batch": 16,
"device": "0",
"overlap_mask": false,
"scale": 0.7,
"translate": 0.15,
"mosaic": 0.5,
"close_mosaic": 10,
"fliplr": 0,
"fliplr": 0.0,
"flipud": 0.3,
"shear": 5.0,
"perspective": 0.0,
@@ -50,20 +50,20 @@
"pass_point_rule": false,
"rule": "paired bootstrap",
"bootstrap": {
"frames": 335,
"mounts": 300,
"frames": 285,
"mounts": 250,
"draws": 2000,
"f1": {
"delta": 0.0022,
"lo": -0.0127,
"hi": 0.0176,
"win": 0.604
"delta": 0.0024,
"lo": -0.0143,
"hi": 0.0204,
"win": 0.595
},
"mask_score": {
"delta": -0.0099,
"lo": -0.0222,
"hi": 0.0033,
"win": 0.063
"delta": 0.0009,
"lo": -0.0127,
"hi": 0.0145,
"win": 0.553
}
},
"pass": false
@@ -0,0 +1,117 @@
{
"per_class": {
"loop_all": {
"tp": 309,
"fp": 25,
"fn": 8,
"precision": 0.9251497005988024,
"recall": 0.9747634069400631,
"f1": 0.9493087557603687,
"mean_mask_iou": 0.9252735800942133,
"n_matched": 309
},
"pin": {
"tp": 214,
"fp": 15,
"fn": 10,
"precision": 0.9344978165938864,
"recall": 0.9553571428571429,
"f1": 0.944812362030905,
"mean_mask_iou": 0.9373156284625324,
"n_matched": 214
},
"crystal": {
"tp": 96,
"fp": 67,
"fn": 53,
"precision": 0.588957055214724,
"recall": 0.6442953020134228,
"f1": 0.6153846153846153,
"mean_mask_iou": 0.7870228886885559,
"n_matched": 96
},
"loop_face": {
"tp": 269,
"fp": 53,
"fn": 26,
"precision": 0.8354037267080745,
"recall": 0.911864406779661,
"f1": 0.8719611021069691,
"mean_mask_iou": 0.9008181510928498,
"n_matched": 269
},
"ice": {
"tp": 3,
"fp": 10,
"fn": 40,
"precision": 0.23076923076923078,
"recall": 0.06976744186046512,
"f1": 0.10714285714285714,
"mean_mask_iou": 0.8444813717997576,
"n_matched": 3
},
"needle": {
"tp": 0,
"fp": 0,
"fn": 1,
"precision": 0.0,
"recall": 0.0,
"f1": 0.0,
"mean_mask_iou": 0.0,
"n_matched": 0
}
},
"overall": {
"tp": 891,
"fp": 170,
"fn": 138,
"precision": 0.8397737983034873,
"recall": 0.8658892128279884,
"f1": 0.8526315789473684,
"mean_mask_iou": 0.9056148202172515,
"n_matched": 891
},
"dataset": {
"gold_images": 335,
"pred_images": 335,
"missing_predictions": 0,
"iou_threshold": 0.5
},
"environment": {
"host": "mx-spark-01",
"ultralytics": "8.4.160",
"torch": "2.14.0+cu130"
},
"gate": {
"baseline": "/home/jungfrau/AareLC_train/models/registry/yolo26n-seg-v4-noflip-mask1-2026-10-02/gold_report.json",
"f1_delta": 0.0049,
"mask_iou_delta": -0.0125,
"mask_score": 0.7842,
"mask_score_baseline": 0.7967,
"matched_only_iou_delta": -0.0063,
"class_f1_delta": {
"loop_all": -0.0133,
"pin": 0.0121
},
"pass_point_rule": false,
"rule": "paired bootstrap",
"bootstrap": {
"frames": 285,
"mounts": 250,
"draws": 2000,
"f1": {
"delta": 0.0017,
"lo": -0.0137,
"hi": 0.0179,
"win": 0.592
},
"mask_score": {
"delta": -0.0056,
"lo": -0.0174,
"hi": 0.0056,
"win": 0.174
}
},
"pass": false
}
}
@@ -0,0 +1,71 @@
{
"model_id": "yolo26n-seg-v5-noflip-mask1-2026-10-25",
"family": "yolo26n",
"task": "segmentation",
"training_date": "2026-10-25",
"run": "2026-10-22_v5-noflip-mask1",
"dataset": "dataset/2026-10-22_v5",
"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.0,
"flipud": 0.3,
"shear": 5.0,
"perspective": 0.0,
"mask_ratio": 1
},
"export_formats": [
"pt"
],
"metrics": {
"tp": 891,
"fp": 170,
"fn": 138,
"precision": 0.8397737983034873,
"recall": 0.8658892128279884,
"f1": 0.8526315789473684,
"mean_mask_iou": 0.9056148202172515,
"n_matched": 891
},
"gate": {
"baseline": "/home/jungfrau/AareLC_train/models/registry/yolo26n-seg-v4-noflip-mask1-2026-10-02/gold_report.json",
"f1_delta": 0.0049,
"mask_iou_delta": -0.0125,
"mask_score": 0.7842,
"mask_score_baseline": 0.7967,
"matched_only_iou_delta": -0.0063,
"class_f1_delta": {
"loop_all": -0.0133,
"pin": 0.0121
},
"pass_point_rule": false,
"rule": "paired bootstrap",
"bootstrap": {
"frames": 285,
"mounts": 250,
"draws": 2000,
"f1": {
"delta": 0.0017,
"lo": -0.0137,
"hi": 0.0179,
"win": 0.592
},
"mask_score": {
"delta": -0.0056,
"lo": -0.0174,
"hi": 0.0056,
"win": 0.174
}
},
"pass": false
}
}
@@ -0,0 +1,117 @@
{
"per_class": {
"loop_all": {
"tp": 308,
"fp": 19,
"fn": 9,
"precision": 0.9418960244648318,
"recall": 0.9716088328075709,
"f1": 0.9565217391304348,
"mean_mask_iou": 0.9229619481348076,
"n_matched": 308
},
"pin": {
"tp": 214,
"fp": 23,
"fn": 10,
"precision": 0.9029535864978903,
"recall": 0.9553571428571429,
"f1": 0.9284164859002169,
"mean_mask_iou": 0.9392434589975192,
"n_matched": 214
},
"crystal": {
"tp": 93,
"fp": 61,
"fn": 56,
"precision": 0.6038961038961039,
"recall": 0.6241610738255033,
"f1": 0.6138613861386139,
"mean_mask_iou": 0.7860551169622239,
"n_matched": 93
},
"loop_face": {
"tp": 274,
"fp": 52,
"fn": 21,
"precision": 0.8404907975460123,
"recall": 0.9288135593220339,
"f1": 0.8824476650563607,
"mean_mask_iou": 0.9017649910336784,
"n_matched": 274
},
"ice": {
"tp": 5,
"fp": 18,
"fn": 38,
"precision": 0.21739130434782608,
"recall": 0.11627906976744186,
"f1": 0.15151515151515152,
"mean_mask_iou": 0.8077960211591213,
"n_matched": 5
},
"needle": {
"tp": 0,
"fp": 0,
"fn": 1,
"precision": 0.0,
"recall": 0.0,
"f1": 0.0,
"mean_mask_iou": 0.0,
"n_matched": 0
}
},
"overall": {
"tp": 894,
"fp": 173,
"fn": 135,
"precision": 0.837863167760075,
"recall": 0.8688046647230321,
"f1": 0.8530534351145038,
"mean_mask_iou": 0.9054766149636467,
"n_matched": 894
},
"dataset": {
"gold_images": 335,
"pred_images": 335,
"missing_predictions": 0,
"iou_threshold": 0.5
},
"environment": {
"host": "mx-spark-01",
"ultralytics": "8.4.160",
"torch": "2.14.0+cu130"
},
"gate": {
"baseline": "/home/jungfrau/AareLC_train/models/registry/yolo26n-seg-v4-noflip-mask1-2026-10-02/gold_report.json",
"f1_delta": 0.0053,
"mask_iou_delta": -0.01,
"mask_score": 0.7867,
"mask_score_baseline": 0.7967,
"matched_only_iou_delta": -0.0064,
"class_f1_delta": {
"loop_all": -0.0061,
"pin": -0.0043
},
"pass_point_rule": false,
"rule": "paired bootstrap",
"bootstrap": {
"frames": 285,
"mounts": 250,
"draws": 2000,
"f1": {
"delta": 0.006,
"lo": -0.0112,
"hi": 0.0239,
"win": 0.771
},
"mask_score": {
"delta": -0.0004,
"lo": -0.0133,
"hi": 0.0122,
"win": 0.494
}
},
"pass": false
}
}
@@ -0,0 +1,71 @@
{
"model_id": "yolo26s-seg-v5-s-noflip-mask1-2026-10-25",
"family": "yolo26s",
"task": "segmentation",
"training_date": "2026-10-25",
"run": "2026-10-23_v5-s-noflip-mask1",
"dataset": "dataset/2026-10-22_v5",
"base_weights": "models/base/yolo26s-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.0,
"flipud": 0.3,
"shear": 5.0,
"perspective": 0.0,
"mask_ratio": 1
},
"export_formats": [
"pt"
],
"metrics": {
"tp": 894,
"fp": 173,
"fn": 135,
"precision": 0.837863167760075,
"recall": 0.8688046647230321,
"f1": 0.8530534351145038,
"mean_mask_iou": 0.9054766149636467,
"n_matched": 894
},
"gate": {
"baseline": "/home/jungfrau/AareLC_train/models/registry/yolo26n-seg-v4-noflip-mask1-2026-10-02/gold_report.json",
"f1_delta": 0.0053,
"mask_iou_delta": -0.01,
"mask_score": 0.7867,
"mask_score_baseline": 0.7967,
"matched_only_iou_delta": -0.0064,
"class_f1_delta": {
"loop_all": -0.0061,
"pin": -0.0043
},
"pass_point_rule": false,
"rule": "paired bootstrap",
"bootstrap": {
"frames": 285,
"mounts": 250,
"draws": 2000,
"f1": {
"delta": 0.006,
"lo": -0.0112,
"hi": 0.0239,
"win": 0.771
},
"mask_score": {
"delta": -0.0004,
"lo": -0.0133,
"hi": 0.0122,
"win": 0.494
}
},
"pass": false
}
}
+12 -12
View File
@@ -23,20 +23,20 @@
"pass_point_rule": false,
"rule": "paired bootstrap",
"bootstrap": {
"frames": 335,
"mounts": 300,
"frames": 285,
"mounts": 250,
"draws": 2000,
"f1": {
"delta": 0.0049,
"lo": -0.009,
"hi": 0.0203,
"win": 0.761
"delta": 0.0017,
"lo": -0.0137,
"hi": 0.0179,
"win": 0.592
},
"mask_score": {
"delta": -0.0125,
"lo": -0.0235,
"hi": -0.0014,
"win": 0.009
"delta": -0.0056,
"lo": -0.0174,
"hi": 0.0056,
"win": 0.174
}
},
"pass": false
@@ -52,6 +52,6 @@
"mAP50(M)": 0.76038,
"mAP50-95(M)": 0.60896
},
"version": "yolo26n-seg-v5-noflip-mask1-2026-10-23",
"measured_at": "2026-10-23T03:53:38"
"version": "yolo26n-seg-v5-noflip-mask1-2026-10-25",
"measured_at": "2026-10-25T02:47:47"
}
+22 -4
View File
@@ -16,19 +16,19 @@
"translate": 0.15,
"mosaic": 0.5,
"close_mosaic": 10,
"fliplr": 0,
"fliplr": 0.0,
"flipud": 0.3,
"shear": 5.0,
"perspective": 0.0,
"mask_ratio": 1
},
"version": "yolo26n-seg-v5-noflip-mask1-2026-10-23",
"version": "yolo26n-seg-v5-noflip-mask1-2026-10-25",
"metrics": {
"f1": 0.8526315789473684,
"mean_mask_iou": 0.9056148202172515,
"gate_pass": false,
"baseline": "/home/jungfrau/AareLC_train/models/registry/yolo26n-seg-v4-noflip-mask1-2026-10-02/gold_report.json",
"measured_at": "2026-10-23T03:53:38"
"measured_at": "2026-10-25T02:47:47"
},
"history": [
{
@@ -54,8 +54,26 @@
"at": "2026-10-23T03:53:38",
"by": "jungfrau@mx-spark-01",
"note": "{\"baseline\": \"/home/jungfrau/AareLC_train/models/registry/yolo26n-seg-v4-noflip-mask1-2026-10-02/gold_report.json\", \"f1_delta\": 0.0049, \"mask_iou_delta\": -0.0125, \"mask_score\": 0.7842, \"mask_score_baseline\": 0.7967, \"matched_only_iou_delta\": -0.0063, \"class_f1_delta\": {\"loop_all\": -0.0133, \"pin\": 0.0121}, \"pass_point_rule\": false, \"rule\": \"paired bootstrap\", \"bootstrap\": {\"frames\": 335, \"mounts\": 300, \"draws\": 2000, \"f1\": {\"delta\": 0.0049, \"lo\": -0.009, \"hi\": 0.0203, \"win\": 0.761}, \"mask_score\": {\"delta\": -0.0125, \"lo\": -0.0235, \"hi\": -0.0014, \"win\": 0.009}}, \"pass\": false}"
},
{
"status": "training",
"at": "2026-10-25T02:47:39",
"by": "jungfrau@mx-spark-01",
"note": "train_run.py"
},
{
"status": "measured",
"at": "2026-10-25T02:47:47",
"by": "jungfrau@mx-spark-01",
"note": ""
},
{
"status": "gate_failed",
"at": "2026-10-25T02:47:47",
"by": "jungfrau@mx-spark-01",
"note": "{\"baseline\": \"/home/jungfrau/AareLC_train/models/registry/yolo26n-seg-v4-noflip-mask1-2026-10-02/gold_report.json\", \"f1_delta\": 0.0049, \"mask_iou_delta\": -0.0125, \"mask_score\": 0.7842, \"mask_score_baseline\": 0.7967, \"matched_only_iou_delta\": -0.0063, \"class_f1_delta\": {\"loop_all\": -0.0133, \"pin\": 0.0121}, \"pass_point_rule\": false, \"rule\": \"paired bootstrap\", \"bootstrap\": {\"frames\": 285, \"mounts\": 250, \"draws\": 2000, \"f1\": {\"delta\": 0.0017, \"lo\": -0.0137, \"hi\": 0.0179, \"win\": 0.592}, \"mask_score\": {\"delta\": -0.0056, \"lo\": -0.0174, \"hi\": 0.0056, \"win\": 0.174}}, \"pass\": false}"
}
],
"host": "mx-spark-01",
"started": "2026-10-22T11:40:13"
"started": "2026-10-25T02:47:39"
}
+11 -11
View File
@@ -23,20 +23,20 @@
"pass_point_rule": false,
"rule": "paired bootstrap",
"bootstrap": {
"frames": 335,
"mounts": 300,
"frames": 285,
"mounts": 250,
"draws": 2000,
"f1": {
"delta": 0.0022,
"lo": -0.0127,
"hi": 0.0176,
"win": 0.604
"delta": 0.0024,
"lo": -0.0143,
"hi": 0.0204,
"win": 0.595
},
"mask_score": {
"delta": -0.0099,
"lo": -0.0222,
"hi": 0.0033,
"win": 0.063
"delta": 0.0009,
"lo": -0.0127,
"hi": 0.0145,
"win": 0.553
}
},
"pass": false
@@ -53,5 +53,5 @@
"mAP50-95(M)": 0.62865
},
"version": "yolo26n-seg-v5-n-1024px-2026-10-25",
"measured_at": "2026-10-25T02:13:24"
"measured_at": "2026-10-25T02:48:09"
}
+22 -4
View File
@@ -9,14 +9,14 @@
"epochs": 400,
"patience": 50,
"imgsz": 1024,
"batch": 8,
"batch": 16,
"device": "0",
"overlap_mask": false,
"scale": 0.7,
"translate": 0.15,
"mosaic": 0.5,
"close_mosaic": 10,
"fliplr": 0,
"fliplr": 0.0,
"flipud": 0.3,
"shear": 5.0,
"perspective": 0.0,
@@ -28,7 +28,7 @@
"mean_mask_iou": 0.9045394224676367,
"gate_pass": false,
"baseline": "/home/jungfrau/AareLC_train/models/registry/yolo26n-seg-v4-noflip-mask1-2026-10-02/gold_report.json",
"measured_at": "2026-10-25T02:13:24"
"measured_at": "2026-10-25T02:48:09"
},
"history": [
{
@@ -54,11 +54,29 @@
"at": "2026-10-25T02:13:24",
"by": "jungfrau@mx-spark-01",
"note": "{\"baseline\": \"/home/jungfrau/AareLC_train/models/registry/yolo26n-seg-v4-noflip-mask1-2026-10-02/gold_report.json\", \"f1_delta\": 0.0022, \"mask_iou_delta\": -0.0099, \"mask_score\": 0.7867, \"mask_score_baseline\": 0.7967, \"matched_only_iou_delta\": -0.0073, \"class_f1_delta\": {\"loop_all\": -0.0115, \"pin\": 0.0066}, \"pass_point_rule\": false, \"rule\": \"paired bootstrap\", \"bootstrap\": {\"frames\": 335, \"mounts\": 300, \"draws\": 2000, \"f1\": {\"delta\": 0.0022, \"lo\": -0.0127, \"hi\": 0.0176, \"win\": 0.604}, \"mask_score\": {\"delta\": -0.0099, \"lo\": -0.0222, \"hi\": 0.0033, \"win\": 0.063}}, \"pass\": false}"
},
{
"status": "training",
"at": "2026-10-25T02:47:59",
"by": "jungfrau@mx-spark-01",
"note": "train_run.py"
},
{
"status": "measured",
"at": "2026-10-25T02:48:09",
"by": "jungfrau@mx-spark-01",
"note": ""
},
{
"status": "gate_failed",
"at": "2026-10-25T02:48:09",
"by": "jungfrau@mx-spark-01",
"note": "{\"baseline\": \"/home/jungfrau/AareLC_train/models/registry/yolo26n-seg-v4-noflip-mask1-2026-10-02/gold_report.json\", \"f1_delta\": 0.0022, \"mask_iou_delta\": -0.0099, \"mask_score\": 0.7867, \"mask_score_baseline\": 0.7967, \"matched_only_iou_delta\": -0.0073, \"class_f1_delta\": {\"loop_all\": -0.0115, \"pin\": 0.0066}, \"pass_point_rule\": false, \"rule\": \"paired bootstrap\", \"bootstrap\": {\"frames\": 285, \"mounts\": 250, \"draws\": 2000, \"f1\": {\"delta\": 0.0024, \"lo\": -0.0143, \"hi\": 0.0204, \"win\": 0.595}, \"mask_score\": {\"delta\": 0.0009, \"lo\": -0.0127, \"hi\": 0.0145, \"win\": 0.553}}, \"pass\": false}"
}
],
"train_args": {
"imgsz": 1024
},
"host": "mx-spark-01",
"started": "2026-10-23T18:54:46"
"started": "2026-10-25T02:47:59"
}
+12 -12
View File
@@ -23,20 +23,20 @@
"pass_point_rule": false,
"rule": "paired bootstrap",
"bootstrap": {
"frames": 335,
"mounts": 300,
"frames": 285,
"mounts": 250,
"draws": 2000,
"f1": {
"delta": 0.0053,
"lo": -0.0099,
"hi": 0.0204,
"win": 0.753
"delta": 0.006,
"lo": -0.0112,
"hi": 0.0239,
"win": 0.771
},
"mask_score": {
"delta": -0.01,
"lo": -0.0217,
"hi": 0.0014,
"win": 0.053
"delta": -0.0004,
"lo": -0.0133,
"hi": 0.0122,
"win": 0.494
}
},
"pass": false
@@ -52,6 +52,6 @@
"mAP50(M)": 0.78928,
"mAP50-95(M)": 0.64104
},
"version": "yolo26s-seg-v5-s-noflip-mask1-2026-10-23",
"measured_at": "2026-10-23T18:53:02"
"version": "yolo26s-seg-v5-s-noflip-mask1-2026-10-25",
"measured_at": "2026-10-25T02:47:58"
}
+22 -4
View File
@@ -16,19 +16,19 @@
"translate": 0.15,
"mosaic": 0.5,
"close_mosaic": 10,
"fliplr": 0,
"fliplr": 0.0,
"flipud": 0.3,
"shear": 5.0,
"perspective": 0.0,
"mask_ratio": 1
},
"version": "yolo26s-seg-v5-s-noflip-mask1-2026-10-23",
"version": "yolo26s-seg-v5-s-noflip-mask1-2026-10-25",
"metrics": {
"f1": 0.8530534351145038,
"mean_mask_iou": 0.9054766149636467,
"gate_pass": false,
"baseline": "/home/jungfrau/AareLC_train/models/registry/yolo26n-seg-v4-noflip-mask1-2026-10-02/gold_report.json",
"measured_at": "2026-10-23T18:53:02"
"measured_at": "2026-10-25T02:47:58"
},
"history": [
{
@@ -54,8 +54,26 @@
"at": "2026-10-23T18:53:02",
"by": "jungfrau@mx-spark-01",
"note": "{\"baseline\": \"/home/jungfrau/AareLC_train/models/registry/yolo26n-seg-v4-noflip-mask1-2026-10-02/gold_report.json\", \"f1_delta\": 0.0053, \"mask_iou_delta\": -0.01, \"mask_score\": 0.7867, \"mask_score_baseline\": 0.7967, \"matched_only_iou_delta\": -0.0064, \"class_f1_delta\": {\"loop_all\": -0.0061, \"pin\": -0.0043}, \"pass_point_rule\": false, \"rule\": \"paired bootstrap\", \"bootstrap\": {\"frames\": 335, \"mounts\": 300, \"draws\": 2000, \"f1\": {\"delta\": 0.0053, \"lo\": -0.0099, \"hi\": 0.0204, \"win\": 0.753}, \"mask_score\": {\"delta\": -0.01, \"lo\": -0.0217, \"hi\": 0.0014, \"win\": 0.053}}, \"pass\": false}"
},
{
"status": "training",
"at": "2026-10-25T02:47:48",
"by": "jungfrau@mx-spark-01",
"note": "train_run.py"
},
{
"status": "measured",
"at": "2026-10-25T02:47:58",
"by": "jungfrau@mx-spark-01",
"note": ""
},
{
"status": "gate_failed",
"at": "2026-10-25T02:47:58",
"by": "jungfrau@mx-spark-01",
"note": "{\"baseline\": \"/home/jungfrau/AareLC_train/models/registry/yolo26n-seg-v4-noflip-mask1-2026-10-02/gold_report.json\", \"f1_delta\": 0.0053, \"mask_iou_delta\": -0.01, \"mask_score\": 0.7867, \"mask_score_baseline\": 0.7967, \"matched_only_iou_delta\": -0.0064, \"class_f1_delta\": {\"loop_all\": -0.0061, \"pin\": -0.0043}, \"pass_point_rule\": false, \"rule\": \"paired bootstrap\", \"bootstrap\": {\"frames\": 285, \"mounts\": 250, \"draws\": 2000, \"f1\": {\"delta\": 0.006, \"lo\": -0.0112, \"hi\": 0.0239, \"win\": 0.771}, \"mask_score\": {\"delta\": -0.0004, \"lo\": -0.0133, \"hi\": 0.0122, \"win\": 0.494}}, \"pass\": false}"
}
],
"host": "mx-spark-01",
"started": "2026-10-23T03:53:49"
"started": "2026-10-25T02:47:48"
}
+12 -3
View File
@@ -20,10 +20,10 @@ Generated by `python tools/ledger.py render`; do not edit by hand.
| 2026-09-30_v3-s-640px | gate_passed | dataset/2026-09-29_v3 | models/base/yolo26s-seg.pt | yolo26s-seg-v3-s-640px-2026-10-01 | 0.861 | 0.886 | yes | 2026-10-02T13:29 |
| 2026-10-01_v4-noflip-mask1 | promoted | dataset/2026-10-01_v4 | models/base/yolo26n-seg.pt | yolo26n-seg-v4-noflip-mask1-2026-10-02 | 0.852 | 0.891 | yes | 2026-10-02T13:25 |
| 2026-10-01_v4-recipeA | gate_failed | dataset/2026-10-01_v4 | models/base/yolo26n-seg.pt | yolo26n-seg-v4-recipeA-2026-10-02 | 0.832 | 0.884 | no | 2026-10-02T04:12 |
| 2026-10-22_v5-noflip-mask1 | gate_failed | dataset/2026-10-22_v5 | models/base/yolo26n-seg.pt | yolo26n-seg-v5-noflip-mask1-2026-10-23 | 0.853 | 0.906 | no | 2026-10-23T03:53 |
| 2026-10-22_v5-noflip-mask1 | gate_failed | dataset/2026-10-22_v5 | models/base/yolo26n-seg.pt | yolo26n-seg-v5-noflip-mask1-2026-10-25 | 0.853 | 0.906 | no | 2026-10-25T02:47 |
| 2026-10-23_v5-m-noflip-mask1 | aborted | dataset/2026-10-22_v5 | models/base/yolo26m-seg.pt | - | - | - | - | 2026-10-23T18:53 |
| 2026-10-23_v5-n-1024px | gate_failed | dataset/2026-10-22_v5 | models/base/yolo26n-seg.pt | yolo26n-seg-v5-n-1024px-2026-10-25 | 0.850 | 0.905 | no | 2026-10-25T02:13 |
| 2026-10-23_v5-s-noflip-mask1 | gate_failed | dataset/2026-10-22_v5 | models/base/yolo26s-seg.pt | yolo26s-seg-v5-s-noflip-mask1-2026-10-23 | 0.853 | 0.905 | no | 2026-10-23T18:53 |
| 2026-10-23_v5-n-1024px | gate_failed | dataset/2026-10-22_v5 | models/base/yolo26n-seg.pt | yolo26n-seg-v5-n-1024px-2026-10-25 | 0.850 | 0.905 | no | 2026-10-25T02:48 |
| 2026-10-23_v5-s-noflip-mask1 | gate_failed | dataset/2026-10-22_v5 | models/base/yolo26s-seg.pt | yolo26s-seg-v5-s-noflip-mask1-2026-10-25 | 0.853 | 0.905 | no | 2026-10-25T02:47 |
States: exported → queued → training → measured → gate_passed → gate_failed → promoted → deployed (or aborted).
@@ -154,6 +154,9 @@ States: exported → queued → training → measured → gate_passed → gate_f
- 2026-10-22T11:40:13 · training · jungfrau@mx-spark-01 — train_run.py
- 2026-10-23T03:53:38 · measured · jungfrau@mx-spark-01
- 2026-10-23T03:53:38 · gate_failed · jungfrau@mx-spark-01 — {"baseline": "/home/jungfrau/AareLC_train/models/registry/yolo26n-seg-v4-noflip-mask1-2026-10-02/gold_report.json", "f1_delta": 0.0049, "mask_iou_delta": -0.0125, "mask_score": 0.7842, "mask_score_baseline": 0.7967, "matched_only_iou_delta": -0.0063, "class_f1_delta": {"loop_all": -0.0133, "pin": 0.0121}, "pass_point_rule": false, "rule": "paired bootstrap", "bootstrap": {"frames": 335, "mounts": 300, "draws": 2000, "f1": {"delta": 0.0049, "lo": -0.009, "hi": 0.0203, "win": 0.761}, "mask_score": {"delta": -0.0125, "lo": -0.0235, "hi": -0.0014, "win": 0.009}}, "pass": false}
- 2026-10-25T02:47:39 · training · jungfrau@mx-spark-01 — train_run.py
- 2026-10-25T02:47:47 · measured · jungfrau@mx-spark-01
- 2026-10-25T02:47:47 · gate_failed · jungfrau@mx-spark-01 — {"baseline": "/home/jungfrau/AareLC_train/models/registry/yolo26n-seg-v4-noflip-mask1-2026-10-02/gold_report.json", "f1_delta": 0.0049, "mask_iou_delta": -0.0125, "mask_score": 0.7842, "mask_score_baseline": 0.7967, "matched_only_iou_delta": -0.0063, "class_f1_delta": {"loop_all": -0.0133, "pin": 0.0121}, "pass_point_rule": false, "rule": "paired bootstrap", "bootstrap": {"frames": 285, "mounts": 250, "draws": 2000, "f1": {"delta": 0.0017, "lo": -0.0137, "hi": 0.0179, "win": 0.592}, "mask_score": {"delta": -0.0056, "lo": -0.0174, "hi": 0.0056, "win": 0.174}}, "pass": false}
## 2026-10-23_v5-m-noflip-mask1
@@ -167,6 +170,9 @@ States: exported → queued → training → measured → gate_passed → gate_f
- 2026-10-23T18:54:46 · training · jungfrau@mx-spark-01 — train_run.py
- 2026-10-25T02:13:24 · measured · jungfrau@mx-spark-01
- 2026-10-25T02:13:24 · gate_failed · jungfrau@mx-spark-01 — {"baseline": "/home/jungfrau/AareLC_train/models/registry/yolo26n-seg-v4-noflip-mask1-2026-10-02/gold_report.json", "f1_delta": 0.0022, "mask_iou_delta": -0.0099, "mask_score": 0.7867, "mask_score_baseline": 0.7967, "matched_only_iou_delta": -0.0073, "class_f1_delta": {"loop_all": -0.0115, "pin": 0.0066}, "pass_point_rule": false, "rule": "paired bootstrap", "bootstrap": {"frames": 335, "mounts": 300, "draws": 2000, "f1": {"delta": 0.0022, "lo": -0.0127, "hi": 0.0176, "win": 0.604}, "mask_score": {"delta": -0.0099, "lo": -0.0222, "hi": 0.0033, "win": 0.063}}, "pass": false}
- 2026-10-25T02:47:59 · training · jungfrau@mx-spark-01 — train_run.py
- 2026-10-25T02:48:09 · measured · jungfrau@mx-spark-01
- 2026-10-25T02:48:09 · gate_failed · jungfrau@mx-spark-01 — {"baseline": "/home/jungfrau/AareLC_train/models/registry/yolo26n-seg-v4-noflip-mask1-2026-10-02/gold_report.json", "f1_delta": 0.0022, "mask_iou_delta": -0.0099, "mask_score": 0.7867, "mask_score_baseline": 0.7967, "matched_only_iou_delta": -0.0073, "class_f1_delta": {"loop_all": -0.0115, "pin": 0.0066}, "pass_point_rule": false, "rule": "paired bootstrap", "bootstrap": {"frames": 285, "mounts": 250, "draws": 2000, "f1": {"delta": 0.0024, "lo": -0.0143, "hi": 0.0204, "win": 0.595}, "mask_score": {"delta": 0.0009, "lo": -0.0127, "hi": 0.0145, "win": 0.553}}, "pass": false}
## 2026-10-23_v5-s-noflip-mask1
@@ -174,3 +180,6 @@ States: exported → queued → training → measured → gate_passed → gate_f
- 2026-10-23T03:53:49 · training · jungfrau@mx-spark-01 — train_run.py
- 2026-10-23T18:53:02 · measured · jungfrau@mx-spark-01
- 2026-10-23T18:53:02 · gate_failed · jungfrau@mx-spark-01 — {"baseline": "/home/jungfrau/AareLC_train/models/registry/yolo26n-seg-v4-noflip-mask1-2026-10-02/gold_report.json", "f1_delta": 0.0053, "mask_iou_delta": -0.01, "mask_score": 0.7867, "mask_score_baseline": 0.7967, "matched_only_iou_delta": -0.0064, "class_f1_delta": {"loop_all": -0.0061, "pin": -0.0043}, "pass_point_rule": false, "rule": "paired bootstrap", "bootstrap": {"frames": 335, "mounts": 300, "draws": 2000, "f1": {"delta": 0.0053, "lo": -0.0099, "hi": 0.0204, "win": 0.753}, "mask_score": {"delta": -0.01, "lo": -0.0217, "hi": 0.0014, "win": 0.053}}, "pass": false}
- 2026-10-25T02:47:48 · training · jungfrau@mx-spark-01 — train_run.py
- 2026-10-25T02:47:58 · measured · jungfrau@mx-spark-01
- 2026-10-25T02:47:58 · gate_failed · jungfrau@mx-spark-01 — {"baseline": "/home/jungfrau/AareLC_train/models/registry/yolo26n-seg-v4-noflip-mask1-2026-10-02/gold_report.json", "f1_delta": 0.0053, "mask_iou_delta": -0.01, "mask_score": 0.7867, "mask_score_baseline": 0.7967, "matched_only_iou_delta": -0.0064, "class_f1_delta": {"loop_all": -0.0061, "pin": -0.0043}, "pass_point_rule": false, "rule": "paired bootstrap", "bootstrap": {"frames": 285, "mounts": 250, "draws": 2000, "f1": {"delta": 0.006, "lo": -0.0112, "hi": 0.0239, "win": 0.771}, "mask_score": {"delta": -0.0004, "lo": -0.0133, "hi": 0.0122, "win": 0.494}}, "pass": false}
File diff suppressed because it is too large. Load diff
+17 -2
View File
@@ -9,6 +9,10 @@ Two sets of frames:
(``data/gold/unseen_core.json``). It never changes, so the progression of the models over time
stays comparable;
* **all unseen** frames: the core plus every gold frame added since that no dataset has used.
A frame a model pre-labelled (``data/gold/prelabel.json``) is unseen by every other model but not
by that one: where the reviewer kept a proposed outline, the gold holds the model's own mask. It is
left out of that model's measure, and a pair is compared on the frames neither of them touched.
It grows with the gold set and is the one to judge a candidate on.
A model is listed when its predictions on the current gold set exist under
@@ -107,10 +111,16 @@ def main(argv: Optional[List[str]] = None) -> int:
frames: Dict[str, Dict[str, gate_stats.FrameCounts]] = {}
label_of: Dict[str, str] = {}
prelabel = gate_stats.load_prelabel(gold.parent)
own: Dict[str, int] = {}
for d in sorted((root / "runs").glob("_measure_*/gold_predictions")):
ver = d.parent.name[len("_measure_"):]
label = ("beamline " + ver) if ver.startswith(BEAMLINE_PREFIX) else ver2run.get(ver, ver)
frames[label] = gate_stats.per_frame(d, gold, stems=unseen)
measured = gate_stats.per_frame(d, gold, stems=unseen)
# a frame the model pre-labelled holds its own outlines wherever the reviewer kept them:
# it is "seen" by that model and leaves its measure (gate_stats.without_own_proposals)
frames[label] = gate_stats.without_own_proposals(measured, ver, prelabel)
own[label] = len(measured) - len(frames[label])
label_of[ver] = label
order = sorted(frames, key=lambda k: (not k.startswith("beamline"), k))
reps = {k: report(frames[k]) for k in order}
@@ -121,8 +131,13 @@ def main(argv: Optional[List[str]] = None) -> int:
usable_reps = {k: report({s: f for s, f in frames[k].items() if s in core and s not in bad_light}) for k in order}
print(f"clean gold frames: {len(unseen)}" + (f" (core {len(core_now)})" if len(unseen) != len(core_now) else ""))
if any(own.values()):
print("frames a model pre-labelled itself, left out of its own measure: "
+ ", ".join(f"{k} {n}" for k, n in own.items() if n))
elif not prelabel:
print("!! data/gold/prelabel.json is missing (tools/gold_prelabel.py): a model is measured on frames it pre-labelled")
table("", reps)
short = [k for k in order if reps[k]["dataset"]["gold_images"] < len(unseen)]
short = [k for k in order if reps[k]["dataset"]["gold_images"] + own.get(k, 0) < len(unseen)]
if short:
print(f"!! measured on fewer frames than the current unseen set (re-measure them): {', '.join(short)}")
if len(unseen) != len(core_now):
+20
View File
@@ -33,6 +33,26 @@ def load_groups(gold_root) -> Dict[str, Dict[str, str]]:
return {"mount": dict(g.get("mount") or {}), "light": dict(g.get("light") or {}), "excluded": dict(g.get("excluded") or {})}
def load_prelabel(gold_root) -> Dict[str, str]:
"""``data/gold/prelabel.json`` (tools/gold_prelabel.py): frame -> version of the model that
proposed its labels before a reviewer saw them. Empty when the file is missing."""
p = Path(gold_root) / "prelabel.json"
if not p.exists():
return {}
return dict(json.loads(p.read_text(encoding="utf-8")).get("frames") or {})
def without_own_proposals(frames: Dict[str, FrameCounts], version: Optional[str],
prelabel: Mapping[str, str]) -> Dict[str, FrameCounts]:
"""The frames a model did not pre-label. Where a reviewer kept an outline the model proposed,
the gold holds the model's own mask, which overlaps itself perfectly: on the 50 frames v4 had
pre-labelled it scored a matched IoU of 0.959 against 0.905 elsewhere, and every other model
0.93. Such a frame says nothing about that model and is left out of its measure."""
if not version or not prelabel:
return frames
return {s: f for s, f in frames.items() if prelabel.get(s) != version}
def per_frame(pred_dir, gold_dir, iou_thr: float = 0.5, stems: Optional[Iterable[str]] = None) -> Dict[str, FrameCounts]:
"""Per gold frame and class: tp, fp, fn and the summed mask IoU of the matches.
+71
View File
@@ -0,0 +1,71 @@
"""Which model proposed each gold frame's labels before a reviewer saw them.
Written to ``data/gold/prelabel.json`` as ``{"frames": {stem: version}}`` from the studio's
batch annotations (``models.yolo`` of the frame's proposal). A frame with no batch annotation
(labelled before the loop) is absent: no model is excluded on it. The comparison and the gate
leave a frame out of the measure of the model that pre-labelled it (gate_stats.without_own_proposals).
python tools/gold_prelabel.py [--studio ~/AareLC_studio/data/pipeline_prod]
"""
from __future__ import annotations
import argparse
import json
import re
from collections import Counter
from datetime import datetime
from pathlib import Path
HERE = Path(__file__).resolve().parent
def version_of(weights_name: str) -> str:
"""``best_yolo26n-seg-overlap-false_2026-04-12.pt`` and ``yolo26n-seg-v4-noflip-mask1-2026-10-02.pt``
both name a registry version."""
v = Path(weights_name).name
v = v[:-3] if v.endswith(".pt") else v
v = v[len("best_"):] if v.startswith("best_") else v
return re.sub(r"_(\d{4}-\d{2}-\d{2})$", r"-\1", v)
def main() -> int:
ap = argparse.ArgumentParser(description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter)
ap.add_argument("--root", default=str(HERE.parent))
ap.add_argument("--studio", default=str(Path.home() / "AareLC_studio" / "data" / "pipeline_prod"))
args = ap.parse_args()
root, studio = Path(args.root).expanduser(), Path(args.studio).expanduser()
gold = root / "data" / "gold" / "labels"
stems = sorted(p.stem for p in gold.glob("*.txt"))
wanted = {}
for s in stems:
m = re.search(r"tpi_(\d+)", s)
if m:
wanted.setdefault("tpi_" + m.group(1), s)
frames, by_version, by_batch = {}, Counter(), Counter()
for f in sorted(studio.glob("20*/annotations/tpi_*.json")):
key = f.stem
if key not in wanted:
continue
try:
a = json.loads(f.read_text(encoding="utf-8"))
except (OSError, ValueError):
continue
w = (a.get("models") or {}).get("yolo")
if not w:
continue
v = version_of(str(w))
frames[wanted[key]] = v
by_version[v] += 1
by_batch[f.parent.parent.name] += 1
out = {"built": datetime.now().isoformat(timespec="seconds"), "source": str(studio),
"gold_frames": len(stems), "with_a_proposal": len(frames), "frames": frames}
dest = root / "data" / "gold" / "prelabel.json"
dest.write_text(json.dumps(out, indent=1, sort_keys=True) + "\n", encoding="utf-8")
print(f"{len(frames)} of {len(stems)} gold frames were pre-labelled by a model -> {dest}")
for v, n in by_version.most_common():
print(f" {n:4} {v}")
return 0
if __name__ == "__main__":
raise SystemExit(main())
+11
View File
@@ -237,6 +237,17 @@ def paired_with_baseline(run_dir: Path, baseline: Optional[Path]) -> Optional[Di
gold = ROOT / "data" / "gold" / "labels"
cand = gate_stats.per_frame(run_dir / "gold_predictions", gold)
base = gate_stats.per_frame(base_pred, gold)
# neither model is judged on frames it pre-labelled: the gold there holds its own outlines
prelabel = gate_stats.load_prelabel(gold.parent)
cand_version = (json.loads((run_dir / "run.json").read_text(encoding="utf-8")).get("version") if (run_dir / "run.json").exists() else None)
base_version = Path(baseline).parent.name
if base_version.startswith("_measure_"):
base_version = base_version[len("_measure_"):]
cand, base = (gate_stats.without_own_proposals(cand, cand_version, prelabel),
gate_stats.without_own_proposals(base, base_version, prelabel))
own = sum(1 for s in prelabel if prelabel[s] in (cand_version, base_version))
if own:
print(f"gate: {own} gold frames were pre-labelled by one of the two models and are left out of the pairing")
missing = len(cand) - len(set(cand) & set(base))
if missing:
print(f"gate: the baseline has no prediction for {missing} gold frames (gold grew since it was measured); pairing on the rest")