Skip to content

Add RF100-VL training and evaluation harness - #6

Merged
EHxuban11 merged 9 commits into
mainfrom
rf100vl-harness
Jul 30, 2026
Merged

EHxuban11 merged 9 commits into
mainfrom
rf100vl-harness

Conversation

@EHxuban11

Copy link
Copy Markdown
Contributor

What does this PR do?

  • Adds replayable name-addressed RF100-VL version locks and a canonical 100-dataset domain manifest.
  • Adds resumable per-dataset evaluation at IoU 0.65/maxDet 500 with direct COCO tensor metrics and strict provenance/validity checks.
  • Adds rf100vl-train: isolated dataset children, one queue consumer per GPU, atomic state/failure/rerun files, safe resume, timeouts, RF-DETR dense/OOM fallback, and 13 recipes.
  • Carries the branch prerequisites: TensorRT/precision support, reproducibility blocks, registry corrections, and hardened train-throughput metadata.
  • Packages recipes, manifest, Apache-2.0 license, and third-party notices.

Code provenance

Original orchestration/cache/CLI code was written for this harness. Permissive sources documented in THIRD_PARTY_NOTICES.txt:

  • COCO metric extraction: ppwwyyxx/cocoapi ac87f5077ad6b8864c2dc5e93d14cae62d1db05a, BSD-2-Clause.
  • RF100-VL domain map: roboflow/rf100-vl 1c1ecd84cf2865270702121311e1d9e5f2a861aa, Apache-2.0.
  • Family recipe knobs: LibreYOLO/libreyolo 3e3c9dffc9e4bd41a363f1dd6ca1c736e145a5d8, MIT.

How was this tested?

  • Ruff passes; complete suite: 67 passed.
  • Wheel audit includes all 13 recipes, domain manifest, LICENSE, and notices.
  • RTX 5070 Ti YOLO9-S train/eval and eval-cache resume pass.
  • Forced-timeout YOLO9-T resume vs control: AP50:95 delta 0.00125.
  • RF-DETR-S dense fallback passes; independent AP50:95 delta < 0.00012.
  • Secret-literal scan and diff check pass.

EHxuban11 and others added 9 commits July 29, 2026 21:22
Mirror the ONNX backend path with a new `--format tensorrt` that drives
LibreYOLO's native TensorRT backend.

- cli.py: add `tensorrt` to --format choices; require --weights-dir for it.
- models.py: add resolve_tensorrt_weights() (looks for `{stem}.engine`,
  clear FileNotFoundError) and load_tensorrt() returning a TensorRTBackend.
- benchmark.py: add _benchmark_tensorrt() as a faithful copy of the ONNX
  black-box path (total wall time/image, no phase split, no VRAM), calling
  the callable backend(image, ...) interface, plus a TensorRT warmup.
- output.py: parameterize runtime.precision (default fp32, unchanged for
  pytorch/onnx); TensorRT emits format=tensorrt, precision=fp16,
  provider=cuda, device=gpu.
- README: document the TensorRT/CUDA support row; drop it from out-of-scope.

PyTorch/ONNX paths unchanged.
Each result JSON now carries a `repro` block so a published number can be
reproduced without guessing how it was run:

- harness_commit + dirty flag (the harness side of the pin; a dirty tree is
  flagged rather than passed off as pinned)
- verbatim argv and a copy-pasteable command line
- dataset.image_id_sha256: a verifiable fingerprint of the evaluated image-id
  set (mini500 vs full val2017 vs any subset), plus the HF dataset label/revision
- weights sha256 for user-supplied ONNX/TensorRT artifacts, plus an export
  manifest read from a <weights>.json sidecar and the detected ONNX opset

Also records onnx + tensorrt versions in software info, adds --dataset-id and
--dataset-revision flags, and bumps the harness to 2.1.0. New provenance.py is
covered by tests/test_provenance.py; assemble_result threading is covered in
tests/test_output.py.
Adds a "Reproducing a published result" section, requires the repro block in
the output checklist (harness_commit real + not dirty, dataset image_id
fingerprint, weights sha256 / export manifest for ONNX/TensorRT), and notes the
<weights>.json export-manifest sidecar convention.
Fine-tuned protocol: per-dataset checkpoints via --weights-root, test-split
COCO eval per dataset, unweighted mean AP across datasets, per-dataset
breakdown in the submission JSON (dataset id rf100_vl). Download helper
wraps the rf100vl package. Pretrained runs require an explicit flag and
are marked non-submittable.
@EHxuban11
EHxuban11 merged commit f55a528 into main Jul 30, 2026
1 check passed
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