v8.4.8 - `ultralytics 8.4.8` Support `max_det` and `agnostic_nms` for end2end (#23396)
π Summary (single-line synopsis)
Ultralytics v8.4.8 makes end-to-end (NMS-free) YOLO26/YOLOv10 inference actually honor max_det and agnostic_nms, giving you predictable control over how many detections you get and how classes are handled β
π
π Key Changes
- End2end now supports
max_det+agnostic_nms(PR #23396 by @Y-T-G) ποΈ- Adds a safe
set_head_attr(**kwargs)helper to set head/last-layer attributes likeend2end,max_det,agnostic_nmsπ§© - When
end2end=True,predictandvalnow pushmax_det+agnostic_nmsinto the model head, so these flags actually take effect βοΈ - Adds
agnostic_nmssupport inside theDetecthead (affects top-k selection logic used in end-to-end mode) π― - Export pipeline also carries
agnostic_nmsinto the exported head for better parity between Python and exported models π¦
- Adds a safe
- Clearer
end2endcontrols across CLI/docs π- Adds
end2endto config/defaults and docs for predict/val/export args π§Ύ - Expands tests to run export/predict/val with
end2end=True/Falseβ π§ͺ
- Adds
- Notable additional fixes included in this tag (smaller but impactful) π οΈ
- Export reliability: exporter auto-disables end2end for formats that donβt support required ops (RKNN/NCNN/ExecuTorch/Paddle/IMX) and stores
end2endin metadata π§° - YOLOE/YOLO-World training usability: allows passing a YAML file (or
Path) for multi-source data configs ποΈ - Docs improvements: new Compare section + cleaner navigation; sitemap auto-fills missing pages π§
- Stability fixes: rotated-OBB small-box robustness, DDP unwrap fixes for pose validation, PyTorch 1.9 compatibility adjustment, OpenVINO/ONNX example bugfixes π§
- Export reliability: exporter auto-disables end2end for formats that donβt support required ops (RKNN/NCNN/ExecuTorch/Paddle/IMX) and stores
π― Purpose & Impact
- More predictable end-to-end inference results π§
max_detnow reliably limits outputs in end2end mode (no more βwhy didnβt it cap?β confusion).
- Better class-agnostic behavior when you need it π§Ή
agnostic_nmsbecomes meaningful in end2end workflows, helpful when classes overlap heavily or you want βbest boxes regardless of classβ.
- Closer parity between Python and exported deployments π
- Exported models are less likely to behave differently from local inference due to missing head settings.
- Fewer surprises across formats & environments β
- Safer exporting to constrained runtimes, more robust training/validation in edge cases, and improved docs discoverability for new users.
If youβre using YOLO26 (the recommended model family) in end-to-end mode, this release is a practical quality-of-life upgrade. ππ
What's Changed
- Update optimizer selection strategy by @Laughing-q in https://github.com/ultralytics/ultralytics/pull/23350
- Fix broken links in NVIDIA Jetson documentation by @lakshanthad in https://github.com/ultralytics/ultralytics/pull/23362
- Add ability to override
end2endmode by @Y-T-G in https://github.com/ultralytics/ultralytics/pull/23333 - Update small obb candidates selection by @lmycross in https://github.com/ultralytics/ultralytics/pull/23378
- Update
coco12-formatspredict tests by @Laughing-q in https://github.com/ultralytics/ultralytics/pull/23374 - fix openvino sample for coordinates by @jules-ai in https://github.com/ultralytics/ultralytics/pull/23366
- Fix index issue of strides in
select_candidates_in_gtsby @PT0X0E in https://github.com/ultralytics/ultralytics/pull/23369 - Add note about SAM3 tokenizer error due to incorrect
clippackage by @Y-T-G in https://github.com/ultralytics/ultralytics/pull/23368 - Fix
stride_valtype issue in STAL by @Laughing-q in https://github.com/ultralytics/ultralytics/pull/23390 - Export non-e2e version by default for
rknn/executorch/paddle/imxformats by @Laughing-q in https://github.com/ultralytics/ultralytics/pull/23312 - fix: add unwrap_model to fix DDP AttributeError by @lmycross in https://github.com/ultralytics/ultralytics/pull/23392
- Fix: use
torch.no_gradfortorch==1.9.0to resolve training issue by @Laughing-q in https://github.com/ultralytics/ultralytics/pull/23395 - Simplify Docs nav by @glenn-jocher in https://github.com/ultralytics/ultralytics/pull/23398
- Fix swapped input_height and input_width in ONNX example - Fixes #23126 by @ahmet-f-gumustas in https://github.com/ultralytics/ultralytics/pull/23402
- Add models compare pages to Docs by @glenn-jocher in https://github.com/ultralytics/ultralytics/pull/23406
- Fix visual prompt training for YOLOE26 by @ShuaiLYU in https://github.com/ultralytics/ultralytics/pull/23401
- Add https://youtu.be/7lZa3Yi2kbo to docs by @RizwanMunawar in https://github.com/ultralytics/ultralytics/pull/23388
- Classify train fixes by @glenn-jocher in https://github.com/ultralytics/ultralytics/pull/23420
- Fix/yoloe text model attribute in yoloe trainer from scratch by @ShuaiLYU in https://github.com/ultralytics/ultralytics/pull/23428
- Fix names generation in SAM3VideoSemanticPredictor by @Y-T-G in https://github.com/ultralytics/ultralytics/pull/23434
- Update NVIDIA Jetson Thor benchmarks with YOLO26 by @lakshanthad in https://github.com/ultralytics/ultralytics/pull/23443
- Save
close_mosaicas integer in by @Y-T-G in https://github.com/ultralytics/ultralytics/pull/23435
New Contributors
- @PT0X0E made their first contribution in https://github.com/ultralytics/ultralytics/pull/23369
Full Changelog: https://github.com/ultralytics/ultralytics/compare/v8.4.7...v8.4.8