66 Commits
Author SHA1 Message Date
jungfrauandClaude Fable 5.1 ddaa5a99e6 dedup study: suppressing nested duplicate outlines on the unseen gold frames
CI / ledger-and-tools (push) Successful in 20s
Containment (intersection over the smaller area) between human-drawn crystal pairs never
exceeds 0.42, while the model-drawn duplicates sit at 0.96-1.0, so a rule at 0.9 cannot
lose a real pair. On 231 unseen frames, v4: precision 0.831 -> 0.876, recall 0.881 -> 0.869,
F1 0.855 -> 0.873, 46 outlines removed, 8 true positives lost where the less confident of
two outlines was the one matching the label.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-05 22:26:18 +02:00
jungfrauandClaude Fable 5.1 8c3c538244 gold: 285 frames (batch 8 added by mount: 83 corrected frames, 2-per-mount cap, 20 siblings held out); every model re-measured
CI / ledger-and-tools (push) Successful in 20s
231 frames unseen by every model (core 148), 82 crystals on them. v4-noflip-mask1 stays
the best: F1 0.855, mask score 0.798; v3-noflip-mask1 0.848 / 0.793, within noise;
the small cluster model now clearly loses on masks (-0.021, won in 0 % of draws).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-05 15:49:30 +02:00
jungfrauandClaude Fable 5.1 e8804c7762 gold: 202 frames (tpi_14688 dropped: same image as tpi_14689), mount groups and light states; comparison drawn by mount
CI / ledger-and-tools (push) Successful in 18s
11 mounts hold 40 of the 202 frames (largest 12); 6 saturated and 29 dark frames.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-02 15:48:02 +02:00
GotthardGandClaude Fable 5.1 82f0d9099b gate: bootstrap by mount, light states and excluded frames of the gold set
CI / ledger-and-tools (push) Successful in 19s
Frames of one mount are the same loop seen again, so the paired bootstrap now draws
mounts (data/gold/groups.json, built by tools/gold_groups.py from the mount ids the
studio writes in the gold manifest). The comparison also reports the unseen core without
the saturated frames, and frames the studio dropped from the gold set are pruned.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-02 15:46:31 +02:00
jungfrauandClaude Fable 5.1 c7d53646ce small cluster model re-gated on the Spark in one environment: gate_passed against v3; comparison after cycle 4
CI / ledger-and-tools (push) Successful in 19s
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-02 13:30:10 +02:00
jungfrau f37604f87a run 2026-10-01_v4-noflip-mask1: promoted; comparison updated
CI / ledger-and-tools (push) Successful in 19s
2026-10-02 13:25:46 +02:00
jungfrauandClaude Fable 5.1 95e6ccad86 ledger: 2026-09-29_v3-noflip-mask1 deployed at the beamlines
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-02 13:25:45 +02:00
GotthardGandClaude Fable 5.1 d0cc67cb7e compare_unseen: per-frame counts for head-to-head comparisons of any two models
Written to runs/_unseen_per_frame.json (not tracked): overall and crystal
tp/fp/fn and matched IoU per unseen gold frame and model, which lets the
monitor page bootstrap the difference between any pair.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-02 13:25:45 +02:00
GotthardGandClaude Fable 5.1 62f568b0f6 gate: baseline and candidate measured in the same environment
The cluster's first run was gated against a baseline measured on the Spark.
The same weights score lower there (F1 0.840 vs 0.861, mask score 0.706 vs
0.757 on the 203 gold frames), so the gate failed a model that beats the
active one on F1 in 98.7 % of bootstrap draws when both are measured on one
machine.

Gold reports now record the environment (ultralytics, torch, host). When the
active model's report comes from other versions, train_run.py measures its
weights again in the job and gates against that; the predictions feed the
paired bootstrap. Without the weights there is no verdict and no promotion.
The SLURM scripts pull the active model's weights.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-02 13:25:45 +02:00
GotthardGandClaude Fable 5.1 831367d35d noise-aware gate, frozen core of unseen frames, and a cycle script for the Spark
A paired bootstrap over the 149 unseen gold frames (2026-10-02) showed that a
difference between two models carries about +-0.023 of noise in F1, +-0.018 in
the mask score and +-0.10 in crystal F1, while the gate's tolerance was 0.005.

- tools/gate_stats.py: per-frame counts and a paired bootstrap (pure Python).
- train_run.py: when the baseline's gold predictions exist, the gate requires
  the candidate to beat it on F1 or the mask score in 90 % of the draws and
  not to lose the other in more than 90 %; the point rule is the fallback and
  is always reported (pass_point_rule).
- tools/compare_unseen.py replaces the Spark's ~/fair_gate_all.py: all models
  on the frames none trained on, on the frozen core (data/gold/unseen_core.json,
  149 frames) and on all unseen frames once the gold set grows, with the
  interval and win share against the active model.
- measure_weights.py keeps a version's gate verdict when it re-measures it.
- tools/spark_cycle.sh: gold growth, export, re-measure, train, gate, compare,
  push, with what cycles 3 and 4 taught built in.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-02 13:25:45 +02:00
jungfrauandClaude Fable 5.1 591f7b0b31 train_run: a run that already has a gate verdict is not trained again without --force
The exit code 2 of a failed gate made the cycle script retry and train
2026-10-01_v4-recipeA twice.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-02 13:25:45 +02:00
jungfrau a67e6b8e8e run 2026-10-01_v4-recipeA: gate_failed; comparison updated 2026-10-02 13:25:45 +02:00
jungfrau ae889d1255 runs 2026-10-01_v4-recipeA and 2026-10-01_v4-noflip-mask1: exported on dataset/2026-10-01_v4 2026-10-02 13:25:45 +02:00
jungfrau 7688cfa713 dataset: 2026-10-01_v4 (1610 train / 285 val, 493 new pool images) 2026-10-02 13:25:44 +02:00
Duan a9192406d3 yolo26s-seg-v3-s-640px-2026-10-01
CI / ledger-and-tools (push) Successful in 22s
2026-10-02 10:47:39 +02:00
jungfrauandClaude Fable 5.1 28cbfa889d measure dir for yolo26n-seg-v3-noflip-mask1-2026-09-30; unseen-frame comparison includes the promoted v3 model
CI / ledger-and-tools (push) Successful in 25s
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
v1.3.0
2026-09-30 13:56:58 +02:00
jungfrau 2956303ffe run 2026-09-29_v3-noflip-mask1: promoted; comparison updated
CI / ledger-and-tools (push) Successful in 21s
2026-09-30 13:56:07 +02:00
duan_j 9941d8d456 add ra train script
CI / ledger-and-tools (push) Successful in 17s
2026-09-30 11:45:26 +02:00
Duan 8ff20f9f84 add train script on merlin
CI / ledger-and-tools (push) Successful in 18s
2026-09-30 10:40:32 +02:00
jungfrauandClaude Fable 5.1 f1a945528e cluster runs on dataset v3: resolution and model-size levers
CI / ledger-and-tools (push) Successful in 18s
Three ledger runs for the cluster, exported on dataset/2026-09-29_v3 with the
promoted recipe: nano at 1024 px, small at 640 px, small at 1024 px. A run can
now carry its own training arguments (train_args in run.json, set with
ledger new --kv), which train_run.py applies under any --set; train.sbatch
forwards extra arguments after the run id (e.g. --batch 8). yolo26s-seg.pt
joins the base weights under LFS. slurm/README lists the runs, the questions
they answer and the commands.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-30 07:18:06 +02:00
jungfrauandClaude Fable 5.1 09cb49a3a2 ledger: v3-noflip-mask1 training on the Spark (restarted 07:13 after a memory-starved hang); v2-noflip-mask1 aborted, superseded by v3
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-30 07:16:27 +02:00
jungfrau d562b94671 run 2026-09-29_v3-recipeA: gate_passed; comparison updated 2026-09-29 23:42:41 +02:00
jungfrau efba872cdf runs 2026-09-29_v3-recipeA and 2026-09-29_v3-noflip-mask1: exported on dataset/2026-09-29_v3 2026-09-29 22:41:13 +02:00
jungfrau a6da2aa4aa dataset: 2026-09-29_v3 (1181 train / 210 val, 366 new pool images) dataset/2026-09-29_v3 2026-09-29 22:41:12 +02:00
jungfrauandClaude Fable 5.1 486b077f24 ledger: 2026-09-29_alc-v1-noflip-mask1 deployed at the beamlines (weights only)
CI / ledger-and-tools (push) Successful in 18s
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-29 20:47:44 +02:00
GotthardGandClaude Fable 5.1 b4d86d3f31 experiments: loop-type classifier, first cross-validated test (broken loops AUROC 0.985)
CI / ledger-and-tools (push) Successful in 18s
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-29 18:18:28 +02:00
jungfrau 0ec5138409 all models re-measured on the 203-frame gold set; comparison on the unseen frames updated
CI / ledger-and-tools (push) Successful in 18s
2026-09-29 18:00:50 +02:00
GotthardGandClaude Fable 5.1 acaf09483e slurm: base weights via LFS, and the cluster run 2026-09-29_v2-noflip-mask1 spelled out
CI / ledger-and-tools (push) Successful in 17s
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-29 17:58:28 +02:00
jungfrau 3d39d40560 run 2026-09-29_v2-recipeA: gate_failed; comparison updated
CI / ledger-and-tools (push) Successful in 18s
2026-09-29 17:58:39 +02:00
jungfrau ad8ae0fce4 runs 2026-09-29_v2-recipeA and 2026-09-29_v2-noflip-mask1: exported on dataset/2026-09-29_v2 2026-09-29 17:58:39 +02:00
jungfrau 0742281af0 baseline: yolo26n-seg-alc-v1-noflip-mask1-2026-09-29 re-measured on the gold set grown to 203 frames 2026-09-29 17:58:39 +02:00
jungfrau a6efca1c10 base weights yolo26n-seg.pt under LFS, so a cluster clone needs no download 2026-09-29 17:58:39 +02:00
jungfrau 039cdcba1c dataset: 2026-09-29_v2 (876 train / 156 val, 315 new pool images) 2026-09-29 17:58:38 +02:00
GotthardGandClaude Fable 5.1 babe197cb2 recipe: no horizontal flip and full-resolution masks by default (winner of the 2026-09-28/29 comparison)
CI / ledger-and-tools (push) Successful in 16s
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-29 11:13:25 +02:00
jungfrau e7a02cd1ea run 2026-09-29_alc-v1-noflip-mask1: promoted (same detection as A, tightest masks); loop switches to it
CI / ledger-and-tools (push) Successful in 18s
v1.2.0
2026-09-29 11:13:44 +02:00
jungfrau 703bfc2e11 run 2026-09-29_alc-v1-noflip-mask1: gate_passed, comparison updated
CI / ledger-and-tools (push) Successful in 18s
2026-09-29 10:37:36 +02:00
jungfrau d4534fc66c run 2026-09-29_alc-v1-noflip-mask1: exported (noflip + mask_ratio 1) 2026-09-29 07:31:18 +02:00
GotthardG 308b4c7704 ignore Ultralytics label caches inside datasets
CI / ledger-and-tools (push) Successful in 19s
2026-09-29 00:35:06 +02:00
jungfrau d2d525487c experiments 2026-09-28: comparison on the unseen gold frames
CI / ledger-and-tools (push) Successful in 20s
2026-09-29 00:31:03 +02:00
jungfrau 40dc9e54e3 run 2026-09-28_alc-v1-800px: gate_failed 2026-09-29 00:31:02 +02:00
jungfrau 6000995228 run 2026-09-28_alc-v1-overlap: aborted on purpose (nested classes need overlap_mask off) 2026-09-28 23:55:33 +02:00
jungfrau be6f1d77a7 run 2026-09-28_alc-v1-800px: exported (training size 800 px) 2026-09-28 23:55:28 +02:00
jungfrau cc868e9856 run 2026-09-28_alc-v1-overlap: training 2026-09-28 23:55:28 +02:00
jungfrau b5a398ebb9 run 2026-09-28_alc-v1-overlap: exported (overlap_mask on) 2026-09-28 23:54:53 +02:00
jungfrau 13f4d6e3f7 run 2026-09-28_alc-v1-mask1: gate_failed 2026-09-28 23:54:53 +02:00
jungfrau 07716e7b0b run 2026-09-28_alc-v1-mask1: exported (full-resolution masks (mask_ratio=1)) 2026-09-28 21:30:31 +02:00
jungfrau e84bcfb658 run 2026-09-28_alc-v1-noflip: gate_passed 2026-09-28 21:30:31 +02:00
jungfrau 381680470c run 2026-09-28_alc-v1-noflip: exported (no horizontal flip (fliplr=0): the camera never shows the pin on the left) 2026-09-28 21:03:25 +02:00
GotthardGandClaude Fable 5.1 1bdf1fc6b1 train_run: --set KEY=VALUE overrides for Ultralytics train arguments, recorded in the ledger
CI / ledger-and-tools (push) Successful in 19s
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-28 21:01:34 +02:00
jungfrau ed208bff95 run 2026-09-28_alc-v1-humanonly: gate passed, not promoted (A/B on clean gold: masks no tighter without accepted-unchanged labels, crystal worse)
CI / ledger-and-tools (push) Successful in 17s
2026-09-28 20:44:27 +02:00