Pre-register the YOLO-baseline evaluation & checkpoint-selection protocol (#71) - #80
Merged
Merged
Conversation
) Committed before any benchmark evaluation of any YOLO checkpoint — the five recovery runs (jobs 37745358-363) are still training on ckpt-g2 and the only numbers observed anywhere are the internal val-split curves already in this record. That timing is the whole point: selection rules written down first, test bundles touched once. The protocol section in the training record fixes, in writing: 1. Checkpoint selection: best.pt as Ultralytics saves it (best val fitness, 0.1*mAP50 + 0.9*mAP50-95, patience=20) — refines #71's "best val mAP50" draft to the artifact the runs actually keep; verified both rules pick the same epoch (1) on all five committed curves. RampNet parity noted: its checkpoint was likewise best-val (loss), never a benchmark number. 2. Config/headline selection on val only; controls emphasis only — every trained config's benchmark row is reported regardless. 3. Benchmark eval through the identical compare.py path as the whole roster (boxes -> centers -> detection_eval matcher, radius 0.022, 0.05 cache floor; tiles via the perspective rig at 1024, pano whole-pano at 1280). 4. Headline operating point fixed in advance: F1 at conf 0.25, Ultralytics' own default — not tuned on test. Sweep still reported with the tune-on-test flag as usual. 5. AP with the standing truncation caveat vs RampNet's 0.5-peak extraction. 6. Instability-affected best.pt is reportable only as a lower bound, superseded by the #70 rerun under this same protocol, unchanged. 7. Seeds aspirational (all runs seed=0). Cross-referenced from compare.py's module docstring and from the baseline-in-progress note in docs/model_comparison.md, per the issue's deliverable list. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #71.
Why now, specifically
The five YOLO recovery runs (jobs
37745358–363) are still training on ckpt-g2, and no YOLO checkpoint has been scored on any benchmark bundle — the only numbers anyone has seen are the internal val-split curves already committed in the training record and mirrored in #51''s status comments. Pre-registration only counts if it lands before test numbers exist, so this was a race against those jobs finishing.What this adds
A "Pre-registered evaluation & checkpoint-selection protocol" section in
scripts/model_comparison/yolo_baseline/README.md(the training record), fixing in writing:best.ptexactly as Ultralytics saves it (best val fitness = 0.1·mAP50 + 0.9·mAP50-95,patience=20). This refines the issue''s draft wording ("best val mAP50") to the artifact the runs actually keep — and the two rules pick the same epoch (1) on all five committed curves, verified fromruns/*/results.csv. RampNet parity stated: its published checkpoint was likewise selected on val (best validation loss,stage_two/train.py), never a benchmark number.compare.pyyolo provider → box centers →rampnet/detection_eval.pymatcher at radius 0.022, 0.05 cache floor; tiles configs through the same perspective rig as the VLMs (imgsz 1024), pano configs whole-pano (imgsz 1280).best.ptis reportable only as a lower bound, superseded by the Rerun the collapsed YOLOv11 pano baselines with a stabilized (larger physical batch) config #70 stabilized rerun evaluated under this same protocol, unchanged.Cross-references added per the issue''s deliverable list:
compare.py''s module docstring points at the protocol, anddocs/model_comparison.md''s baseline-in-progress note now links to the committed section instead of just citing #71. The paper''s appendix "Baseline protocol" paragraph is the section, condensed.pytest -q: 188 passed.🤖 Generated with Claude Code (claude-fable-5)