Skip to content

Update RF100-VL skill with the 2026-08 campaign measurements - #710

Merged
EHxuban11 merged 1 commit into
devfrom
fix/rf100vl-campaign-guards
Aug 3, 2026
Merged

EHxuban11 merged 1 commit into
devfrom
fix/rf100vl-campaign-guards

Conversation

@EHxuban11

@EHxuban11 EHxuban11 commented Aug 3, 2026 •

Copy link
Copy Markdown
Contributor

Skill and packaging half of the 2026-08 RF100-VL campaign postmortem. Harness fixes landed in vision-analysis-benchmark#7.

Re-scoped (by the Cursor agent): the original push also carried non-strict load logging, the faster-coco-eval default flip, and backend provenance, written from a base that predated #707 and #708 — both of which merged the same features into dev ~80 minutes earlier (with CLI toggles and YOLO-NAS loader coverage that this branch lacked). Those hunks are dropped; this PR now contains only what dev does not have.

What

  • skills/run-rf100vl-benchmark/SKILL.md: rewritten with what the campaigns actually measured — scoring cost scales with box density not image count (496 s scoring vs 112 s training on gwhd2021), OMP thread pinning when packing (11,890 threads on 128 cores, 67.6% system time), packing vs makespan, measured VRAM per family (same param count, 1.7x apart), disk projection constants (~953 KB/image at 640px), multi-box operations, "stopped is not restartable", the sync-artifacts silence trap, and the selection-vs-test divergence check that would have caught the BN eps bug in seconds.
  • pyproject.toml: the fast-eval extra comment still said "Opt-in", which Make faster-coco-eval the default COCO metrics backend, with backend provenance #708 made stale; updated to describe the default-on-with-fallback behaviour and why it stays an extra.

Check

Docs and a comment only; no code paths changed. The dropped features are covered on dev by tests/unit/test_nonstrict_load_logging.py and tests/unit/test_faster_coco_eval.py (including test_fallback_when_package_missing, which already asserts the default-on fallback this branch's extra test duplicated).

Code provenance

All content written for this PR. No third-party code is copied, ported, adapted, or derived.

Greptile Summary

The PR now updates the optional fast-evaluation dependency guidance and expands the RF100-VL benchmark runbook with measured evaluator, capacity-planning, and campaign-safety guidance.

  • Clarifies why faster-coco-eval remains an optional extra despite being preferred by default.
  • Documents evaluator parity and performance measurements.
  • Adds operational guidance for GPU packing, CPU thread limits, VRAM sizing, disk usage, artifact synchronization, and score validation.

Confidence Score: 5/5

The PR appears safe to merge.

No blocking failure remains; both previously reported issues are fixed in the current code.

Important Files Changed

Filename Overview
pyproject.toml Clarifies the rationale for keeping the preferred COCO evaluator as an optional dependency; no executable dependency constraint changed.
skills/run-rf100vl-benchmark/SKILL.md Expands the benchmark runbook with campaign measurements and operational safeguards without changing runtime code.

Reviews (2): Last reviewed commit: "Update RF100-VL skill with the 2026-08 c..." | Re-trigger Greptile

Comment on lines +1081 to +1083
backend = getattr(self.coco_evaluator, "last_backend", None)
if backend:
metrics["provenance/coco_backend"] = backend

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 String provenance breaks metric printing

When standalone detection validation runs with verbose output enabled by default, provenance/coco_backend reaches the inherited numeric-only metric printer, which formats every value with %.4f and emits a logging TypeError traceback to stderr.

Knowledge Base Used: Validation Pipeline

Fix in Cursor Fix in Codex

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Valid catch, resolved by removal: the branch was re-scoped after #707/#708 merged the code half from a fresher base. dev carries backend provenance as model.last_eval_backend plus the eval_backend field in the CLI JSON payload, keeping the metrics dict float-only, so the string never reaches the numeric printer. This PR no longer touches detection_validator.py.

Comment thread libreyolo/validation/config.py Outdated
Comment on lines +116 to +119
# opt-in only made every user pay for detection-dense datasets. Falls back
# to pycocotools automatically when the package is not installed; set False
# or LIBREYOLO_FASTER_COCO_EVAL=0 to force the reference implementation.
faster_coco_eval: bool = True

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 CLI overrides the faster default

When libreyolo val or libreyolo train is invoked without the evaluator option, the CLI supplies an explicit False that overrides these new True config defaults, causing ordinary CLI runs to keep using pycocotools instead of the advertised default backend.

Knowledge Base Used:

Fix in Cursor Fix in Codex

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Correct on this branch's base, but already fixed on dev: #708 flipped the CLI defaults to True with --faster-coco-eval/--no-faster-coco-eval toggles in both val and train, so the CLI no longer overrides the config default. The branch was re-scoped onto current dev and no longer touches the configs.

@EHxuban11

Copy link
Copy Markdown
Contributor Author

Follow-up on the "Not verified" note: the full unit suite has now finished green.

4463 passed, 169 skipped, 40 deselected, 1 xfailed in 753s

Run against this branch with pytest tests/unit -q -x. Nothing else in the suite depended on faster_coco_eval defaulting off, which was the main risk of flipping it.

Re-scoped from the original PR after #707 and #708 merged
the code half (non-strict load logging, faster-coco-eval default flip with
CLI toggles, backend provenance via model.last_eval_backend) from a fresher
base. What remains here is the part dev does not have: the skill rewrite
with measured numbers (scoring cost vs box density, OMP thread pinning,
packing vs makespan, per-family VRAM measurement, disk projection constants,
multi-box operations, stop-is-not-restartable, the sync-artifacts trap, the
selection-vs-test divergence check) plus the fast-eval extra comment that
still described the backend as opt-in.
@EHxuban11
EHxuban11 force-pushed the fix/rf100vl-campaign-guards branch from 629a47d to f75ad8d Compare August 3, 2026 16:08
@EHxuban11 EHxuban11 changed the title Guard the silent failures found in the RF100-VL yolox campaigns Update RF100-VL skill with the 2026-08 campaign measurements Aug 3, 2026
@EHxuban11

Copy link
Copy Markdown
Contributor Author

Review + re-scope (Cursor agent, on Xuban's behalf).

What was wrong: this branch was cut from dev 17b07e59, which predates #707 (merged 14:29 UTC) and #708 (merged 14:37 UTC). Roughly 80% of the original diff re-implemented what those PRs already landed, which is why GitHub reported the PR as conflicting:

  • _load_state_dict_checked duplicated dev's _load_state_dict_logged (Log missing/unexpected keys on non-strict checkpoint loads #707), minus the YOLO-NAS custom-loader coverage and debug-level full key lists dev has.
  • The TrainConfig/ValidationConfig default flips duplicated Make faster-coco-eval the default COCO metrics backend, with backend provenance #708, and missed the CLI — Greptile's "CLI overrides the faster default" P1 was real on this branch but already fixed on dev, where both commands default to True with --faster-coco-eval/--no-faster-coco-eval toggles.
  • provenance/coco_backend as a string inside the metrics dict was a genuine bug (Greptile's other P1: the inherited verbose printer formats every value with %.4f). dev's merged design deliberately keeps the metrics dict float-only and carries provenance as model.last_eval_backend + the eval_backend field in the CLI JSON.
  • tests/unit/models/test_non_strict_load_warns.py duplicated dev's tests/unit/test_nonstrict_load_logging.py, and the extra fallback test duplicated dev's test_fallback_when_package_missing.

What I did: rebuilt the branch as a single commit on current dev (5940958b), keeping the two things dev does not have — the SKILL.md rewrite (taken wholesale; dev had not touched the file since this branch's base) and the fast-eval extra comment, which still described the backend as "Opt-in" after #708 made it the default. Title and body updated to match.

The skill content itself is the most valuable part of the original PR and survives untouched: measured scoring cost vs box density, OMP pinning, packing vs makespan, per-family VRAM measurement, disk projection constants, multi-box ops, stop-is-not-restartable, the sync-artifacts trap, and the selection-vs-test divergence check.

@EHxuban11
EHxuban11 merged commit 841c5c4 into dev Aug 3, 2026
15 checks passed
@EHxuban11
EHxuban11 deleted the fix/rf100vl-campaign-guards branch August 3, 2026 16:23
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant