Skip to content

Update ultralytics to 8.4.20#673

Open
pyup-bot wants to merge 1 commit intomasterfrom
pyup-update-ultralytics-8.3.47-to-8.4.20
Open

Update ultralytics to 8.4.20#673
pyup-bot wants to merge 1 commit intomasterfrom
pyup-update-ultralytics-8.3.47-to-8.4.20

Conversation

@pyup-bot
Copy link
Collaborator

@pyup-bot pyup-bot commented Mar 5, 2026

This PR updates ultralytics from 8.3.47 to 8.4.20.

Changelog

8.4.20

📊 Key Changes
- **(Most important) Ray Tune cleanup in current PR 23772** 🧹  
- Removed hardcoded `tuner_callbacks` and dropped built-in W&B callback wiring from `RunConfig` in tuning.
- Version bumped from `8.4.19` → `8.4.20`.

- **RKNN export reliability improved (23802)** 📦  
- Added ONNX version guard (`onnx<1.19.0`) and enforced ONNX opset cap (`<=19`) for RKNN conversion.
- Explicitly supports smoother export paths for **YOLO26** models on Rockchip toolchains.

- **FastSAM prompt accuracy fix (23766)** 🎯  
- CLIP prompting now masks non-target neighboring segments before scoring.
- Reduces false positives in overlapping/contained regions (for example, object-inside-background cases).

- **ByteTracker consistency update (23771)** 🛠️  
- Optional score fusion now also applies in second-stage association (when `fuse_score=True`), aligning behavior across tracking stages.

- **Better YAML error messages (23767)** ✅  
- Failed YAML loads now return clearer syntax errors with file context and validation guidance, instead of ambiguous fallback failures.

- **Jetson/JetPack 6 stack refresh (23788 + 23801)** 🤖  
- Updated Jetson Docker/runtime stack to newer Torch/Torchvision/ONNX Runtime GPU versions.
- Compatibility checks now recognize `torch 2.10` + `torchvision 0.25`.

- **Docs and platform improvements** 📚  
- New SAM vs YOLO segmentation benchmark section includes **YOLO26n-seg** comparisons (23782).
- Platform docs expanded for **pose skeleton templates** and **dataset versioning** workflows (23787, 23796).
- YOLOE tutorial embed updated (23798).
- CI/workflow dependency/auth updates (23763, 23799).

🎯 Purpose & Impact
- **More robust tuning workflows** ⚙️  
- By removing tightly coupled callback logic, Ray Tune runs are less fragile in mixed environments (especially distributed tuning setups).

- **Fewer deployment surprises** 🚀  
- RKNN export safeguards reduce version mismatch errors and manual troubleshooting for edge deployment users.

- **Higher output quality in segmentation/tracking** 👀  
- FastSAM text prompts become more trustworthy in crowded scenes.  
- ByteTracker behavior is more consistent when confidence fusion is enabled.

- **Smoother setup for modern environments** 🔧  
- Jetson and PyTorch compatibility updates reduce install/runtime friction for developers upgrading dependencies.

- **Better onboarding and reproducibility** 🧠  
- Clearer YAML errors help users fix configs faster.  
- Platform dataset versioning and skeleton-template docs improve team workflows and repeatable training.

What's Changed
* Use github.Auth.Token in merge action by glenn-jocher in https://github.com/ultralytics/ultralytics/pull/23763
* Better YAML error introspection by glenn-jocher in https://github.com/ultralytics/ultralytics/pull/23767
* Fix for 23765 FastSAM CLIP prompting by orcinus in https://github.com/ultralytics/ultralytics/pull/23766
*  Apply  to ByteTracker second association by ahmet-f-gumustas in https://github.com/ultralytics/ultralytics/pull/23771
* Update `sam-3.md` speed comparison by Laughing-q in https://github.com/ultralytics/ultralytics/pull/23782
* Platform Skeleton templates docs by glenn-jocher in https://github.com/ultralytics/ultralytics/pull/23787
* Update JetPack 6 Docker image with `torch 2.10` by lakshanthad in https://github.com/ultralytics/ultralytics/pull/23788
* Platform dataset versioning docs by glenn-jocher in https://github.com/ultralytics/ultralytics/pull/23796
* Bump docker/login-action from 3 to 4 in /.github/workflows by dependabot[bot] in https://github.com/ultralytics/ultralytics/pull/23799
* Add https://youtu.be/JcZsqUc8PMM to docs by RizwanMunawar in https://github.com/ultralytics/ultralytics/pull/23798
* Update `torch` and `torchvision` compatibility table to latest by lakshanthad in https://github.com/ultralytics/ultralytics/pull/23801
* Fix RKNN exports to support YOLO26 models by lakshanthad in https://github.com/ultralytics/ultralytics/pull/23802
* `ultralytics 8.4.20` Remove redundant hardcoded `tuner_callbacks` by Laughing-q in https://github.com/ultralytics/ultralytics/pull/23772

New Contributors
* orcinus made their first contribution in https://github.com/ultralytics/ultralytics/pull/23766

**Full Changelog**: https://github.com/ultralytics/ultralytics/compare/v8.4.19...v8.4.20

8.4.19

📊 Key Changes
- **🔴 Most important (current PR 23761 by glenn-jocher): Platform training `model_id` fix**
- Training callbacks now **consistently pass `model_id`** during model uploads and training events.
- Platform callback state was refactored into a single `trainer.platform` context (instead of scattered trainer fields), including:
 - `model_id`
 - last upload time
 - cancellation status
 - console/system loggers
- Upload and event flow was tightened for better session continuity, cancellation handling, and final result linking.
- Platform URL handling now better supports server-adjusted model slugs (for example when names auto-increment).

- **🧠 SAM prediction cleanup (23751 by Laughing-q)**
- Added NMS in `SAM3SemanticPredictor` postprocessing and feature-inference paths.
- Reduces duplicate overlapping detections and keeps boxes/masks aligned.

- **🛡️ PSA attention edge-case fix (23758 by Y-T-G)**
- Prevents zero attention heads in `PSABlock` for very small channel configs.
- Improves robustness for lightweight/custom model scales.

- **📘 Docs clarification for end-to-end models (23720 by raimbekovm)**
- Clarifies that in end-to-end mode (YOLO26, YOLOv10), `max_det` and `agnostic_nms` are supported directly.
- Notes that setting `end2end=False` is mainly for enabling traditional `iou`-based NMS behavior.

- **⚙️ CI maintenance**
- GitHub Actions artifact upload/download actions were bumped to newer major versions (23748, 23749).
- African Wildlife dataset tutorial video embed updated in docs (23757). 🎥

🎯 Purpose & Impact
- **For Ultralytics Platform users:** ✅  
Training runs should now be **more reliable to track end-to-end**, with fewer mismatches between uploaded checkpoints and the correct model session. This is the biggest practical improvement in this release.

- **For production and team workflows:** 📡  
Better callback state management means cleaner event handling, better cancellation behavior, and improved confidence that results and artifacts land in the right place.

- **For segmentation users (SAM):** 🎯  
Cleaner predictions with fewer duplicate overlaps can improve downstream usability and visual quality.

- **For custom/small models:** 🧱  
Fewer architecture edge-case failures when using very small widths or low channel counts.

- **For all users reading docs:** 📚  
Clearer expectations around end-to-end inference/validation args in YOLO26 and YOLOv10 reduce confusion and setup mistakes.

What's Changed
* Document `max_det` and `agnostic_nms` support in end2end mode by raimbekovm in https://github.com/ultralytics/ultralytics/pull/23720
* Bump actions/download-artifact from 7 to 8 in /.github/workflows by dependabot[bot] in https://github.com/ultralytics/ultralytics/pull/23749
* Bump actions/upload-artifact from 6 to 7 in /.github/workflows by dependabot[bot] in https://github.com/ultralytics/ultralytics/pull/23748
* Add NMS to `SAM3SemanticPredictor` to eliminate overlapping boxes by Laughing-q in https://github.com/ultralytics/ultralytics/pull/23751
* Add https://youtu.be/EXYB-dbgJjY to docs by RizwanMunawar in https://github.com/ultralytics/ultralytics/pull/23757
* Fix division by zero in PSABlock `num_heads` by Y-T-G in https://github.com/ultralytics/ultralytics/pull/23758
* `ultralytics 8.4.19` Platform training pass model ID fix by glenn-jocher in https://github.com/ultralytics/ultralytics/pull/23761


**Full Changelog**: https://github.com/ultralytics/ultralytics/compare/v8.4.18...v8.4.19

8.4.18

🌟 Summary
Ultralytics `v8.4.18` is a reliability-focused release that improves downloads and dependency installs, while also adding stronger ExecuTorch export support (including Pose) for smoother edge/mobile deployment 🚀.

📊 Key Changes
- **🔧 Priority fix (current PR): `safe_download()` now handles URLs with spaces** by encoding spaces as `%20` (PR 23736 by glenn-jocher).
- Prevents broken downloads from links like file paths or hosted assets containing spaces.
- **📱 Major export upgrade: ExecuTorch refactor + first-class utility module** (PR 23734 by lakshanthad).
- New `ultralytics/utils/export/executorch.py` with reusable `torch2executorch()` and `executorch_wrapper()`.
- Export pipeline now uses this shared utility.
- Added Pose-safe decoding patch for better XNNPACK compatibility.
- Benchmarks no longer block Pose + ExecuTorch inference.
- New reference docs page for ExecuTorch export.
- **📦 Dependency handling improvement for `git+` requirements with version constraints** (PR 23737 by fcakyon).
- Fixes invalid install behavior by cleaning git URL requirement strings before install.
- **📒 Notebook/API modernization** (PR 23745 by ahmet-f-gumustas).
- Object tracking notebook updated from deprecated `Annotator.seg_bbox()` to modern `Results.plot(color_mode="instance")`.
- **📚 Docs updates**
- OBB docs now point to a newer YOLO26 tutorial video (PR 23738 by RizwanMunawar).
- Vercel Web Analytics added to docs site template for usage insights (PR 23746 by glenn-jocher).

🎯 Purpose & Impact
- **More reliable downloads for everyone** ✅  
The `safe_download()` fix is small but high-impact: fewer random failures when fetching models/assets from imperfect URLs.
- **Better edge deployment path** 📲  
ExecuTorch export is now cleaner, more maintainable, and better for Pose workflows—helpful for teams deploying YOLO26 on mobile/embedded targets.
- **Fewer setup headaches** 🧩  
Git-based dependency auto-update now works more as users expect, reducing installation friction in custom environments.
- **Examples stay working and easier to follow** 🎥  
Notebook/API updates reduce breakage from old methods and keep learning materials aligned with current Ultralytics usage.
- **Docs quality can improve faster over time** 📈  
Analytics and refreshed tutorials help the team prioritize what users need most.

What's Changed
* Add version constraint support for git URL requirements by fcakyon in https://github.com/ultralytics/ultralytics/pull/23737
* Refactor ExecuTorch export to `executorch.py` by lakshanthad in https://github.com/ultralytics/ultralytics/pull/23734
* Fix outdated `Annotator.seg_bbox` in object tracking notebook by ahmet-f-gumustas in https://github.com/ultralytics/ultralytics/pull/23745
* Add https://youtu.be/128JhhR2DlM to docs by RizwanMunawar in https://github.com/ultralytics/ultralytics/pull/23738
* Docs analytics by glenn-jocher in https://github.com/ultralytics/ultralytics/pull/23746
* `ultralytics 8.4.18` `safe_download()` URLs with spaces by glenn-jocher in https://github.com/ultralytics/ultralytics/pull/23736


**Full Changelog**: https://github.com/ultralytics/ultralytics/compare/v8.4.17...v8.4.18

8.4.17

📊 Key Changes
- **NDJSON dataset re-split support (priority change)** ♻️🧹  
- Detects when the dataset output folder already exists and **reuses previously downloaded images** when you change `train/val/test` splits.  
- For non-classification tasks (detect/segment/pose), **removes the existing `labels/` directory** before reconversion to prevent stale annotations.  
- If an image is missing from the current split, it will **move (rename) it from another split** (train/val/test) *before* downloading from the URL.  
- Adds a **content hash** (ignoring signed/rotating URLs) stored in `data.yaml` to **skip reconversion when nothing meaningful changed** 🧾🔒  
- **Deletes orphaned images** that are no longer part of the dataset after a resplit, reducing “stale background files” that can silently affect training 🗑️
- **More reliable EdgeTPU exports** 🧩⚙️  
- Automatically **disables `end2end` mode for EdgeTPU** exports (and logs a warning), aligning EdgeTPU with other limited backends that don’t support required ops.
- **OpenVINO INT8 export dependency handling improved** 📦✅  
- Adds PyTorch **2.3 detection** and adjusts `nncf` requirements to reduce install/export conflicts across Torch versions.
- **Clearer disk space error messages** 💾🔎  
- Fixes incorrect “GB” reporting and now shows **MB for sizes under 1GB**, making download/asset errors easier to understand.

🎯 Purpose & Impact
- **Faster dataset iteration for NDJSON workflows** ⚡  
Resplitting a dataset no longer forces full re-downloads—saving time, bandwidth, and friction when you’re refining splits during curation.
- **Fewer training gotchas from stale files** 🧼  
Clearing old labels and removing orphaned images helps prevent subtle mismatches (images/labels out of sync) that can degrade training quality.
- **More dependable deployment exports** 📤  
EdgeTPU exports should fail less often due to unsupported `end2end` behavior, and OpenVINO INT8 export setups are smoother across PyTorch versions.
- **Better user experience when storage is low** 🧰  
Disk space errors now communicate real numbers, reducing confusion during downloads and conversions.

What's Changed
* Fix incorrect disk space in error message by Y-T-G in https://github.com/ultralytics/ultralytics/pull/23727
* Pin `nncf<3` for PyTorch 2.2 and below by Y-T-G in https://github.com/ultralytics/ultralytics/pull/23726
* Disable `end2end` for EdgeTPU by Y-T-G in https://github.com/ultralytics/ultralytics/pull/23724
* `ultralytics 8.4.17` NDJSON dataset re-split support by glenn-jocher in https://github.com/ultralytics/ultralytics/pull/23735


**Full Changelog**: https://github.com/ultralytics/ultralytics/compare/v8.4.16...v8.4.17

8.4.16

📊 Key Changes
- 🪟🖥️ **Cross-platform `.pt` loading fix (PR 23725 by glenn-jocher):**
- Updated `torch_safe_load()` to **remap `pathlib.WindowsPath` ↔ `pathlib.PosixPath`** during unpickling, preventing common load failures when models are created on one OS and loaded on another.
- 🧵 **Checkpoint metadata made safer/more consistent:**
- `model.pt_path` is now stored as a **plain string** (`str(weight)`), not a `Path` object (applies in general checkpoint loading and YOLO NAS model wrapper code).
- 🔢 **Version bump:** `8.4.15` → `8.4.16`.
- 📸 **Docs + format clarity (PR 23717):**
- Docs now reflect that **HEIC/HEIF uses `pi-heif` (auto-installed on first use)** and **AVIF is supported natively by Pillow**.
- `.heif` is explicitly listed among supported image formats.

🎯 Purpose & Impact
- ✅ **Fewer “can’t unpickle WindowsPath/PosixPath” errors** when sharing trained `.pt` weights between teammates or CI systems running different operating systems.
- 🔁 **More reliable export and tooling workflows** that depend on `model.pt_path` (strings behave consistently across platforms and serialization).
- 👥 **Better collaboration & reproducibility** for teams training on Linux servers and deploying/testing on Windows machines (or vice versa).
- 📸 **Smoother HEIC/HEIF user experience** thanks to clearer docs and explicit `.heif` support visibility (less dependency confusion).

What's Changed
* Update HEIC/HEIF dependency info and add .heif format to docs by raimbekovm in https://github.com/ultralytics/ultralytics/pull/23717
* `ultralytics 8.4.16` Windows<>Linux model compatibility fix by glenn-jocher in https://github.com/ultralytics/ultralytics/pull/23725


**Full Changelog**: https://github.com/ultralytics/ultralytics/compare/v8.4.15...v8.4.16

8.4.15

📊 Key Changes
- **HEIC/HEIF image support (priority change)** 🖼️📱  
- Added `ultralytics.utils.patches.image_open` and **monkey-patched `PIL.Image.open`** to lazily enable HEIC/HEIF decoding via **`pi-heif` only when needed** (i.e., on first decode failure) ⏱️  
- Expanded supported extensions to include **`.heif`** (in addition to `.heic`) ✅  
- Removed HEIC-specific loading code from dataset loaders (now unified through the standard image reading pathway) 🧹
- **Better plotting for non‑Latin text** 🈶🖋️  
- Improves matplotlib defaults by prioritizing **Arial Unicode MS** and auto-registering `.ttf` fonts from the Ultralytics user config directory for stronger multilingual rendering.
- **EXIF auto-rotation fix for list-of-path sources** 🔄🖼️  
- Applies `ImageOps.exif_transpose()` when loading images from **lists of paths/URLs**, reducing “sideways phone photo” issues.
- **Validation/metrics correctness fix (important for accuracy reporting)** 🎯📈  
- Fixes SciPy-based matching (`match_predictions`) to **maximize IoU** during assignment (previously could choose the worst matches), which can affect TP/FP classification and **mAP when `use_scipy=True`**.
- **IMX (Sony IMX500) export improvements** 📦🤖  
- **Enables IMX export on Linux ARM64** (removes an ARM64 block), adds dependency support, and improves test gating.  
- Adds **segmentation** as a supported IMX export/benchmark task ✅
- **Usability improvement: `Results.save()`** 💾📁  
- Adds `create_dir` parameter (default `True`) to control auto-creation of parent directories when saving annotated outputs.
- **Dev/CI reliability updates** 🧪🏗️  
- CI now tests newer PyTorch versions (2.8/2.9) and makes export tests less flaky by skipping TFLite export tests unless `torch>=1.13` on Linux.

🎯 Purpose & Impact
- **More “it just works” image input** 🖼️✅  
- HEIC/HEIF (common on iPhones) can be used directly for training/inference with fewer manual conversions, while lazy loading avoids paying the dependency cost unless you actually need it.
- **Fewer confusing orientation bugs** 📱➡️🖥️  
- EXIF transpose handling reduces rotated/sideways images that can break visualization, training data review, and inference outputs.
- **More trustworthy evaluation metrics** 📈🧠  
- The IoU matching fix ensures SciPy-based evaluation behaves as intended, preventing artificially worse results or incorrect TP/FP assignment when that path is enabled.
- **Better edge/export support on ARM** 🧩🚀  
- IMX export on ARM64 + segmentation support expands deployment options for embedded and edge workflows.
- **Smoother workflows & sharing outputs** 💾✨  
- `Results.save(create_dir=True)` makes saving predictions into new folders simpler (fewer “directory not found” errors).
- **Improved global documentation and plots** 🈶📚  
- Better multilingual font defaults help teams with non‑Latin labels produce clearer charts/figures.

If you’re deploying/training with mixed photo sources (phones, HEIC libraries, multilingual labels), **8.4.15** is a practical upgrade 🛠️🚀

What's Changed
* Add guide on customizing the YOLO trainer by raimbekovm in https://github.com/ultralytics/ultralytics/pull/23579
* Add YOLO26 vs YOLO11 performance charts for Raspberry Pi 5 by lakshanthad in https://github.com/ultralytics/ultralytics/pull/23625
* test: 🧪 Add TFLite export requirement for Torch version 1.13 by onuralpszr in https://github.com/ultralytics/ultralytics/pull/23618
* Fix typos and grammar errors in documentation by him2him2 in https://github.com/ultralytics/ultralytics/pull/23617
* feat: improve `Results.save()` with pathlib and optional directory creation by ShuaiLYU in https://github.com/ultralytics/ultralytics/pull/23592
* fix: 🐞 add ExecuTorch version during model export into logging by onuralpszr in https://github.com/ultralytics/ultralytics/pull/23620
* ci: 👷 move Conda Builds CI to monitor from conda-forge/ultralytics-feedstock to ultralytics  repo by onuralpszr in https://github.com/ultralytics/ultralytics/pull/23600
* Add https://youtu.be/GAFlmuk0fZI to docs by RizwanMunawar in https://github.com/ultralytics/ultralytics/pull/23624
* Apply EXIF transpose when list of paths is used as source by Y-T-G in https://github.com/ultralytics/ultralytics/pull/23631
* Fix scipy matching in `match_predictions` to maximize IoU by Mr-Neutr0n in https://github.com/ultralytics/ultralytics/pull/23634
* Enable IMX export for ARM64 by lakshanthad in https://github.com/ultralytics/ultralytics/pull/23636
* Enable segmentation models in IMX benchmarks by lakshanthad in https://github.com/ultralytics/ultralytics/pull/23635
* Fix: get the correct package name for `metadata.distribution` by Laughing-q in https://github.com/ultralytics/ultralytics/pull/23641
* docs: 📝 update hyperlink for hyperparameter tuning in custom trainer guide by onuralpszr in https://github.com/ultralytics/ultralytics/pull/23644
* Fix broken YOLO26 documentation link in vision-eye guide by raimbekovm in https://github.com/ultralytics/ultralytics/pull/23646
* Fix docstrings by glenn-jocher in https://github.com/ultralytics/ultralytics/pull/23648
* docs: 📝 fix conda badge link in CI documentation by onuralpszr in https://github.com/ultralytics/ultralytics/pull/23661
* docs: 📝 remove unneeded tokenizer_ve documentation file by onuralpszr in https://github.com/ultralytics/ultralytics/pull/23662
* Delete orphan markdown files in `build_reference.py` by glenn-jocher in https://github.com/ultralytics/ultralytics/pull/23666
* docs: 📝 remove non-existed dataset generation section from COCO12-Formats documentation by onuralpszr in https://github.com/ultralytics/ultralytics/pull/23667
* Simplify `CustomSaveTrainer` example in custom trainer guide by raimbekovm in https://github.com/ultralytics/ultralytics/pull/23668
* Add custom trainer guide cross-reference in train.md by raimbekovm in https://github.com/ultralytics/ultralytics/pull/23649
* Add PyTorch 2.8 and 2.9 tests to slow CI by Y-T-G in https://github.com/ultralytics/ultralytics/pull/23683
* Update platform docs by glenn-jocher in https://github.com/ultralytics/ultralytics/pull/23688
* Update Platform docs by glenn-jocher in https://github.com/ultralytics/ultralytics/pull/23692
* Added max concurrency 16 to link checker workflow for the HTTP/2 error by banica-ultralytics in https://github.com/ultralytics/ultralytics/pull/23690
* Add https://youtu.be/pJLXmhyuHzA to docs by RizwanMunawar in https://github.com/ultralytics/ultralytics/pull/23658
* Platform Docs screenshots by sergiuwaxmann in https://github.com/ultralytics/ultralytics/pull/23697
* Add https://youtu.be/cxU5E2SkivU to docs by RizwanMunawar in https://github.com/ultralytics/ultralytics/pull/23701
* Update platform API docs by glenn-jocher in https://github.com/ultralytics/ultralytics/pull/23704
* Platform Rate Limit docs by glenn-jocher in https://github.com/ultralytics/ultralytics/pull/23706
* Fix uv conflicts between export and solutions extras by fcakyon in https://github.com/ultralytics/ultralytics/pull/23686
* Add YOLOE agnostic_nms default behavior note by raimbekovm in https://github.com/ultralytics/ultralytics/pull/23707
* Document CUDA OOM auto-retry in batch-size settings by raimbekovm in https://github.com/ultralytics/ultralytics/pull/23708
* Document Results.save() automatic directory creation by raimbekovm in https://github.com/ultralytics/ultralytics/pull/23709
* Banica ultralytics http2 changes undone by banica-ultralytics in https://github.com/ultralytics/ultralytics/pull/23712
* `ultralytics 8.4.15` HEIC/HEIF image support by glenn-jocher in https://github.com/ultralytics/ultralytics/pull/23714

New Contributors
* him2him2 made their first contribution in https://github.com/ultralytics/ultralytics/pull/23617
* banica-ultralytics made their first contribution in https://github.com/ultralytics/ultralytics/pull/23690

**Full Changelog**: https://github.com/ultralytics/ultralytics/compare/v8.4.14...v8.4.15

8.4.14

📊 Key Changes
- **Platform-driven training cancellation (priority change)** 🛑  
- Detects cancellation **even before training starts** (during session registration) and prevents wasted startup time.
- Checks for cancellation at **epoch end** via a send-and-check response flow, then sets `trainer.stop=True` when `cancelled=true`.
- Tracks cancellation state with `trainer._platform_cancelled` and logs clear messages.
- Continues to **upload partial artifacts/metadata** when a run is cancelled (so you don’t lose everything).
- **Faster responsiveness to stop requests between batches** ⚡  
- Training loop now breaks if `self.stop` is set, allowing external stops (like Platform cancellation) to take effect sooner.
- **YOLO26 Pose training stability fix** 🧍‍♂️📈  
- Clamps negative `rle_loss` to zero to prevent loss from going negative and destabilizing training (helps avoid mAP dropping across epochs).
- **Segmentation → bounding box conversion edge-case fix** 🖼️📦  
- `segment2box()` now excludes points exactly on the image border after clipping, avoiding boxes incorrectly snapping to edges (better box regression + mask quality).
- **Hyperparameter tuning crash fix** 🧪🔧  
- Prevents `TypeError` when `fitness` is present but `None` during tuning (safer/cleaner tuning runs).
- **Docs clarity: Params/FLOPs reporting after `model.fuse()`** 📚  
- Adds notes explaining why Params/FLOPs in docs may differ from what you see locally (fused inference vs full training architecture).

🎯 Purpose & Impact
- **Better control on Ultralytics Platform** 🎛️  
- If you hit **Cancel** in the Platform, training should stop reliably and promptly—without waiting for a long delay.
- **Lower wasted compute + cost** 💸  
- Cancelled jobs exit earlier and more predictably, especially helpful for long training runs.
- **Keeps useful outputs even when cancelling** 📦  
- Partial uploads mean you can still inspect progress, logs, and intermediate artifacts after stopping.
- **More stable YOLO26 Pose training** ✅  
- Reduces risk of training “going backwards” due to negative loss behavior; improves consistency of pose metrics over epochs.
- **Higher-quality results for segmentation-derived boxes** 🎯  
- Fewer edge-snapped boxes after augmentations can improve both training quality and final predictions.
- **Fewer interruptions in automated workflows** 🤖  
- Tuning and reporting are more robust, reducing flaky failures in pipelines.

If you train via the **[Ultralytics Platform](https://platform.ultralytics.com)**, this release is especially impactful due to the new cancellation behavior 🛑.

What's Changed
* Fix TypeError when fitness is None during hyperparameter tuning by Mr-Neutr0n in https://github.com/ultralytics/ultralytics/pull/23603
* Clamp negative rle_loss to zero in Pose26 training by Mr-Neutr0n in https://github.com/ultralytics/ultralytics/pull/23604
* Fix `segment2box` boundary condition for edge-snapped segment points by Mr-Neutr0n in https://github.com/ultralytics/ultralytics/pull/23602
* Add footnote clarifying param/FLOP counts after `model.fuse()` by raimbekovm in https://github.com/ultralytics/ultralytics/pull/23601
* `ultralytics 8.4.14` Platform training cancel feature by glenn-jocher in https://github.com/ultralytics/ultralytics/pull/23614


**Full Changelog**: https://github.com/ultralytics/ultralytics/compare/v8.4.13...v8.4.14

8.4.13

📊 Key Changes
- **Auto-retry on CUDA OOM during training (major change)** 🔥🛠️  
- If a CUDA OOM happens in the **first epoch on single-GPU**, Ultralytics will retry up to **3 times**, **halving the batch size each time** (down to 1).  
- Training pipeline is rebuilt after batch reduction (dataloaders + optimizer + scheduler) to continue cleanly.
- **New internal training helper** 🧩  
- Adds a `_build_train_pipeline()` method to rebuild loaders/optimizer/scheduler when batch size changes (used by the new OOM recovery flow).
- **More reliable ONNX export for OBB + NMS** 📦✅  
- When exporting **OBB (oriented bounding boxes)** to ONNX **with NMS enabled**, `simplify=True` is now forced to avoid a known runtime issue (TopK-related error in some ONNX Runtime versions).
- **DGX system detection + TensorRT handling** 🖥️⚙️  
- Adds `is_dgx()` detection and uses it (along with Jetson JetPack 7) to trigger a TensorRT version check/reinstall path for better export reliability on those systems.
- **Packaging stability fix: pin setuptools** 🧰🔒  
- Pins build requirements to `setuptools<=81.0.0` to avoid breakages introduced by newer setuptools versions (notably affecting `tensorflow.js` export tooling).
- **Docs & examples refresh (YOLO26 messaging + tracking content)** 📚🎥  
- Tracking docs now embed a newer multi-object tracking video featuring **YOLO26** + BoT-SORT/ByteTrack.
- Exporter docs/examples updated to show **YOLO26** (`yolo26n.pt`) and mention ExecuTorch/Axelera export options (documentation signposting).
- **Example dependency update** 🔄  
- Updates `protobuf` in the RT-DETR ONNX Runtime Python example.

🎯 Purpose & Impact
- **Fewer training crashes for everyday users** 🙌🔥  
- If you start training with a batch size that’s slightly too large for your GPU, Ultralytics can now **self-correct and continue** instead of failing immediately—especially helpful for beginners and for “first-epoch spikes” in memory use.
- **Less manual trial-and-error** 🎯  
- Reduces the common loop of “OOM → lower batch → restart training,” saving time and frustration.
- **More dependable deployment exports** 🚀  
- ONNX exports for OBB models with embedded NMS should work **more reliably out of the box**, with fewer runtime surprises.
- **More predictable builds/CI** 🧱  
- Pinning setuptools helps prevent sudden packaging/tooling failures across environments.
- **Clearer guidance aligned with YOLO26** 🧭  
- Docs and examples increasingly steer users toward **YOLO26** as the recommended model for training, tracking, and export workflows.

What's Changed
* feat: 🚀 NVIDIA DGX device variants check by onuralpszr in https://github.com/ultralytics/ultralytics/pull/23573
* Add https://youtu.be/qQkzKISt5GE to docs by RizwanMunawar in https://github.com/ultralytics/ultralytics/pull/23582
* Bump protobuf from 6.31.1 to 6.33.5 in /examples/RTDETR-ONNXRuntime-Python in the pip group across 1 directory by dependabot[bot] in https://github.com/ultralytics/ultralytics/pull/23572
* docs: 📝 exporter documentation for new model formats and examples updated by onuralpszr in https://github.com/ultralytics/ultralytics/pull/23585
* Force `simplify=True` for OBB export with NMS by Y-T-G in https://github.com/ultralytics/ultralytics/pull/23580
* Pin `setuptools` version by Burhan-Q in https://github.com/ultralytics/ultralytics/pull/23589
* `ultralytics 8.4.13` Retry smaller batch on training CUDA OOM by glenn-jocher in https://github.com/ultralytics/ultralytics/pull/23590


**Full Changelog**: https://github.com/ultralytics/ultralytics/compare/v8.4.12...v8.4.13

8.4.12

📊 Key Changes (major updates)
- **YOLOE-26: Skip redundant `set_classes()` when prompts already match** 🧠⚡️  
- Adds a guard in `ultralytics/models/yolo/model.py` to **avoid re-running `set_classes()`** if `model.names` already matches the requested `classes`.  
- Only regenerates text embeddings (`get_text_pe(classes)`) **when a real class change is needed**.  
- Ensures the **predictor stays in sync** by setting `self.predictor.model.names = self.model.names`.
- **More robust GPU auto-selection under multi-process starts** 🎲🖥️  
- Adds a random tie-break when GPUs look equally idle, reducing the chance that multiple jobs pick the same GPU at launch (`ultralytics/utils/autodevice.py`).
- **Fix disk caching for grayscale/multispectral images** 💾🖼️  
- Disk cache now respects the dataset’s OpenCV read mode (`flags=self.cv2_flag`), preventing cached `.npy` files from silently changing input format (`ultralytics/data/base.py`).
- **Fix AutoBatch for non-RGB inputs (grayscale/multispectral)** 🧪⚙️  
- AutoBatch profiling now uses the model’s configured input channels (`model.yaml["channels"]`) instead of assuming 3-channel RGB (`ultralytics/utils/autobatch.py`).
- **Tests: better grayscale coverage + cleanup** 🧪🧹  
- Adds CUDA training coverage for `coco8-grayscale.yaml`, uses `cache="disk"` in grayscale tests, and cleans up cached `.npy` files to prevent flaky test interactions.
- **Docs/examples updated to YOLO26 naming** 📝🚀  
- Exporter and error-message examples now reference **YOLO26** (recommended) instead of YOLO11 (e.g., `yolo26n.onnx`, `yolo26n_openvino_model`, etc.).
- **Confusion matrix plot fixes for classification** 📉✅  
- Removes unintended “background” labeling behavior for classification confusion matrices and makes tick labeling more robust for large class counts (`ultralytics/utils/metrics.py`).
- **Minor tracker cleanup** 🧩  
- Simplifies `deque` initialization in BoT-SORT tracker (`ultralytics/trackers/bot_sort.py`).
- **Docker dependency tweak** 🐳  
- Swaps `wandb` for `nvidia-ml-py` in the Dockerfile to better support NVIDIA GPU querying/metrics in container builds.

🎯 Purpose & Impact (why it matters)
- **Faster, more stable YOLOE-26 inference loops** 🚀  
If you repeatedly run predictions with the same text prompts/classes, v8.4.12 avoids unnecessary reconfiguration and embedding regeneration—improving performance and reducing potential side effects.
- **More reliable multi-job GPU usage** 🖥️  
When launching multiple trainings/inference processes at once, GPU selection is less likely to “pile onto” the same device due to tie conditions.
- **Better support for grayscale/multispectral workflows** 🖤🤍  
Training with `cache="disk"` and using AutoBatch on non-3-channel inputs is now more correct and consistent—reducing mismatches, mis-profiling, and possible crashes.
- **Clearer docs aligned with the recommended model** 📘  
Updated examples reduce copy/paste confusion by pointing users to **YOLO26**, the latest stable and recommended Ultralytics model family.

What's Changed
* Round-robin GPU autoselect by glenn-jocher in https://github.com/ultralytics/ultralytics/pull/23544
* Fix disk caching with multispectral images by Y-T-G in https://github.com/ultralytics/ultralytics/pull/23545
* Fix AutoBatch with multispectral images by Y-T-G in https://github.com/ultralytics/ultralytics/pull/23546
* Remove cached `*.npy` files in grayscale tests by Laughing-q in https://github.com/ultralytics/ultralytics/pull/23554
* docs: 📝 update exporter file yolo11 terms to newest yolo26 by onuralpszr in https://github.com/ultralytics/ultralytics/pull/23556
* Remove "background" class from classification confusion matrix by Y-T-G in https://github.com/ultralytics/ultralytics/pull/23547
* `ultralytics 8.4.12` YOLOE-26 skip `set_classes` if text prompts already set by Laughing-q in https://github.com/ultralytics/ultralytics/pull/23552


**Full Changelog**: https://github.com/ultralytics/ultralytics/compare/v8.4.11...v8.4.12

8.4.11

📊 Key Changes
- **Robust Platform upload + metrics retries (PR 23538 by glenn-jocher)** 🔁
- Added a new utility: `ultralytics/utils/uploads.py` with `safe_upload()` that supports **retries, timeouts, and optional progress bars** ⏳📦
- Platform callback networking hardened:
 - `_send()` now **retries transient failures**, uses a **longer timeout (30s)**, and **does not retry most 4xx client errors** (except common transient ones like timeout/rate-limit) 🛡️
 - `_upload_model()` now **retries signed-URL retrieval** and uses `safe_upload()` for the actual upload to cloud storage ☁️
- Platform now receives **only the remote cloud path (`gcsPath`)** as `modelPath` (instead of accidentally sending a local filesystem path) ✅
- Training end now uploads the best model **with a progress bar** enabled by default 📊
- Added a new reference doc page for uploads utilities and linked it into the docs nav 📚
- **Windows OpenVINO export test stability fix (PR 23528 by lakshanthad)** 🪟✅
- Ensures OpenVINO export tests use **unique output filenames** on Windows to prevent file locking/collision issues in CI 🧪

🎯 Purpose & Impact
- **Fewer failed Platform syncs** during training due to flaky networks or transient API/upload hiccups 📶➡️✅  
*Impact:* your experiment tracking, logs, metrics, and model artifacts are more likely to show up correctly on the **[Ultralytics Platform](https://platform.ultralytics.com)**.
- **More reliable large checkpoint uploads** (with retries + progress feedback) 📦⏫  
*Impact:* less manual re-running/re-uploading when training finishes, especially on slower or unstable connections.
- **Cleaner, safer metadata sent to Platform** 🧹  
*Impact:* Platform gets a **downloadable cloud path**, not a meaningless local path like `C:\...` or `/home/...`.
- **Improved CI stability on Windows for OpenVINO exports** 🪟  
*Impact:* no change for most end users, but faster/cleaner releases and fewer flaky test failures.

What's Changed
* Fix OpenVINO failures on Windows fast CI tests by lakshanthad in https://github.com/ultralytics/ultralytics/pull/23528
* `ultralytics 8.4.11` Platform model uploads retries by glenn-jocher in https://github.com/ultralytics/ultralytics/pull/23538


**Full Changelog**: https://github.com/ultralytics/ultralytics/compare/v8.4.10...v8.4.11

8.4.10

📊 Key Changes
- 🧠 **YOLOE-26 inference default change (most important):** YOLOE predictions now default to `agnostic_nms=True`, reducing overlapping duplicate boxes across different classes (set in `ultralytics/models/yolo/model.py`).
- 📦 **Version bump:** `8.4.9` → `8.4.10`.
- 🍏 **CoreML export feature:** CoreML export now correctly honors `agnostic_nms` (previously the argument existed but wasn’t applied in the CoreML NMS pipeline).
- ⚙️ **TensorRT setup reliability:** added `check_tensorrt()` helper and used it in export + tests to reduce missing-dependency failures; also adds special handling to pin compatible TensorRT on **Jetson JetPack 7 / CUDA 13 ARM** for RT-DETR exports.
- 🏎️ **OpenVINO bugfix:** fixes an `UnboundLocalError` risk by making the inference-mode check safe when `dynamic` is false.
- ☁️ **Ultralytics HUB robustness:** HUB session now raises clearer `HUBModelError` (instead of generic `ValueError` or silently returning `None`) when loading/creating HUB models fails.
- 🧩 **SAM results metadata fix:** improves how class `names` are generated (especially for single-object outputs and “visual” naming mode).
- 🛡️ **Instances safety + debugging:** avoids crashes when `segments=None` during zero-area filtering, and adds a helpful `Instances.__repr__()` for easier debugging.
- 📚 **Docs improvements:** YOLOE examples simplified to `model.set_classes(["person", "bus"])` (no manual text embedding handling), ExecuTorch docs updated with **YOLO26** benchmarks, and Benchmark docs video link refreshed.

🎯 Purpose & Impact
- 🎯 **More consistent YOLOE predictions by default:** class-agnostic NMS helps suppress duplicate overlapping detections across classes, improving “it just works” behavior for new users.
- ⚠️ **Behavior change to expect:** YOLOE outputs may differ vs. 8.4.9 (some boxes previously kept may now be suppressed). If you relied on per-class duplicates, explicitly set `agnostic_nms=False`.
- 🍏 **More predictable exports across formats:** CoreML now matches other exporters when `agnostic_nms` is enabled—fewer surprises when deploying to Apple devices.
- 🤖 **Smoother Jetson/TensorRT experience:** fewer export failures and less manual dependency wrangling, especially on newer Jetson stacks (JetPack 7).
- 🧯 **Fewer runtime errors:** OpenVINO, Instances filtering, HUB model handling, and SAM naming fixes reduce “random crash” scenarios and make failures easier to diagnose.
- 🧼 **Cleaner onboarding + examples:** YOLOE prompting is easier to copy/paste, and YOLO26 guidance in docs stays aligned with the recommended models.

You can update with: `pip install -U ultralytics` ⬆️✅

What's Changed
* fix: 🐞 Add requirement check for TensorRT in `test_export_engine_matrix` by onuralpszr in https://github.com/ultralytics/ultralytics/pull/23496
* Add https://youtu.be/UF7pYdLSMng to docs by RizwanMunawar in https://github.com/ultralytics/ultralytics/pull/23497
* Fix `autobackend.py` when using OpenVINO by zboszor in https://github.com/ultralytics/ultralytics/pull/23505
* Force update `tensorrt` on CUDA 13 ARM to `10.15.x` to fix a bug with RT-DETR exports by lakshanthad in https://github.com/ultralytics/ultralytics/pull/23499
* Update `executorch` doc with YOLO26 benchmarks on Raspberry Pi 5 by lakshanthad in https://github.com/ultralytics/ultralytics/pull/23500
* 🐞 fix `remove_zero_area_boxes` instance when segment is `None` by Bovey0809 in https://github.com/ultralytics/ultralytics/pull/23495
* Add repr for Instance Class for devlopers who needs better debugging … by Bovey0809 in https://github.com/ultralytics/ultralytics/pull/23473
* Update YOLOE docs example by Laughing-q in https://github.com/ultralytics/ultralytics/pull/23526
* Remove debug asserts from TVP loss classes by raimbekovm in https://github.com/ultralytics/ultralytics/pull/23523
* Improve HUB session error handling with HUBModelError by ahmet-f-gumustas in https://github.com/ultralytics/ultralytics/pull/23512
* Fix names generation for single object detection in SAM3SemanticPredictor by Y-T-G in https://github.com/ultralytics/ultralytics/pull/23513
* CoreML Export: Add Support for Class-Agnostic NMS by K-saif in https://github.com/ultralytics/ultralytics/pull/23493
* `ultralytics 8.4.10` YOLOE-26 default `agnostic_nms=True` by Laughing-q in https://github.com/ultralytics/ultralytics/pull/23525

New Contributors
* K-saif made their first contribution in https://github.com/ultralytics/ultralytics/pull/23493
* zboszor made their first contribution in https://github.com/ultralytics/ultralytics/pull/23505

**Full Changelog**: https://github.com/ultralytics/ultralytics/compare/v8.4.9...v8.4.10

8.4.9

📊 Key Changes
- 🧪 **(Priority) Segmentation CopyPaste mask fix** in `ultralytics/data/augment.py`:
- Builds the contour mask as a **2D (H×W) array** instead of matching the full image tensor shape.
- Draws contours onto a **single-channel mask** using value `1` (instead of `(1,1,1)`), avoiding channel mismatches.
- 🧾 **Version bump:** `8.4.8 → 8.4.9` 🔢
- 📦 **NDJSON datasets always re-download** when using `ul://...` URIs (instead of silently reusing a cached `.ndjson`) 🧹⬇️
- ⚙️ **ExecuTorch support improvements**:
- Removes the `<2.10` PyTorch upper bound in dependencies (Windows still excludes `torch==2.4.0`) 🔓
- Centralizes ExecuTorch install checks via `check_executorch_requirements()` to reduce platform-specific install failures 🧩
- ⚡ **Training + compile coverage:** CUDA test now trains with `compile=True`, and stride calculation is simplified for more predictable behavior 🧠🔥
- 📚 **Docs refresh:** Export docs video updated to a more relevant **YOLO26 export/deployment** tutorial 🎥

🎯 Purpose & Impact
- 🧩 **More robust segmentation augmentation**: prevents mask shape/channel bugs that can break or silently degrade CopyPaste-based training—especially when images are **single-channel** (common in grayscale and some hyperspectral pipelines) 📷✅
- 📈 **More reliable segmentation training**: fewer augmentation edge cases means smoother training runs and more consistent results 🏋️‍♂️📊
- 🧹 **Less “stale dataset” confusion**: always refreshing `.ndjson` metadata helps ensure you train/evaluate on the **latest Ultralytics-hosted dataset state** when using `ul://...` 🔄🧪
- 🚀 **Better export/inference readiness on modern stacks**: improved ExecuTorch requirement handling + Torch 2.10+ compatibility reduces install friction and improves deployment workflows 📦⚙️
- ⚡ **Safer `compile=True` usage**: better test coverage helps catch regressions for users relying on PyTorch compile for potential speedups 🧠🛠️

What's Changed
* Always redownload NDJSON datasets by glenn-jocher in https://github.com/ultralytics/ultralytics/pull/23458
* feat(executorch): Add support for Torch 2.10 in ExecuTorch requirements and imports and remove torch<2.10  pin by onuralpszr in https://github.com/ultralytics/ultralytics/pull/23344
* Add missing type hints to `checks.py` and `dist.py` by ahmet-f-gumustas in https://github.com/ultralytics/ultralytics/pull/23485
* Add https://youtu.be/KGHYU-MKYeE to docs by RizwanMunawar in https://github.com/ultralytics/ultralytics/pull/23463
* Fix training with `compile` by Y-T-G in https://github.com/ultralytics/ultralytics/pull/23479
* refactor: ♻️  Simplify requirement checks for executorch by onuralpszr in https://github.com/ultralytics/ultralytics/pull/23475
* `ultralytics 8.4.9` Hyperspectral CopyPaste augmentation by Y-T-G in https://github.com/ultralytics/ultralytics/pull/23471


**Full Changelog**: https://github.com/ultralytics/ultralytics/compare/v8.4.8...v8.4.9

8.4.8

📊 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 like `end2end`, `max_det`, `agnostic_nms` 🧩  
- When `end2end=True`, **`predict` and `val` now push `max_det` + `agnostic_nms` into the model head**, so these flags *actually take effect* ⚙️  
- Adds **`agnostic_nms` support inside the `Detect` head** (affects top-k selection logic used in end-to-end mode) 🎯  
- Export pipeline also carries `agnostic_nms` into the exported head for better parity between Python and exported models 📦
- **Clearer `end2end` controls across CLI/docs** 📚  
- Adds `end2end` to config/defaults and docs for predict/val/export args 🧾  
- Expands tests to run export/predict/val with `end2end=True/False` ✅🧪
- 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 `end2end` in 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 🔧

🎯 Purpose & Impact
- **More predictable end-to-end inference results** 🧠  
- `max_det` now reliably limits outputs in end2end mode (no more “why didn’t it cap?” confusion).
- **Better class-agnostic behavior when you need it** 🧹  
- `agnostic_nms` becomes 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 `end2end` mode 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-formats` predict 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_gts` by PT0X0E in https://github.com/ultralytics/ultralytics/pull/23369
* Add note about SAM3 tokenizer error due to incorrect `clip` package by Y-T-G in https://github.com/ultralytics/ultralytics/pull/23368
* Fix `stride_val` type issue in STAL by Laughing-q in https://github.com/ultralytics/ultralytics/pull/23390
* Export non-e2e version by default for `rknn/executorch/paddle/imx` formats 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_grad` for `torch==1.9.0` to 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_mosaic` as integer in `best_hyperparameters.yaml` by Y-T-G in https://github.com/ultralytics/ultralytics/pull/23435
* Feat: support multiple data config via yaml for YOLOE training by ShuaiLYU in https://github.com/ultralytics/ultralytics/pull/23427
* Fix YOLOE training test by Laughing-q in https://github.com/ultralytics/ultralytics/pull/23448
* Fix SMTP port parameter syntax in SecurityAlarm by ahmet-f-gumustas in https://github.com/ultralytics/ultralytics/pull/23453
* Disable shuffle only if batch shapes mismatch with `rect=True` by Y-T-G in https://github.com/ultralytics/ultralytics/pull/23419
* `ultralytics 8.4.8` Support `max_det` and `agnostic_nms` for end2end by Y-T-G in https://github.com/ultralytics/ultralytics/pull/23396

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

8.4.7

📊 Key Changes
- **AVIF is now a supported training image format** ✅📷  
- `IMG_FORMATS` expanded to include **`avif`**
- **More robust image decoding for modern formats** 🛡️  
- Adds a **Pillow-based fallback image reader** (`_imread_pil`) for cases where **OpenCV can’t decode AVIF/HEIC**
- **New “COCO12-Formats” dataset + generator script** 🧰  
- A tiny 12-image dataset covering **all supported extensions** (AVIF, BMP, DNG, HEIC, JP2, JPEG, JPG, MPO, PNG, TIF, TIFF, WebP)
- Includes a **dataset YAML** and a **generator** (`generate_coco12_formats.py`) to build the set for testing/validation
- Adds a dedicated docs page and links it in the dataset index 📚
- **Training and tooling reliability improvements** 🔧  
- Fixes loss image-size calculation for **OBB and Pose26** multi-scale training 📐
- Fixes **semantic segmentation masking/indexing** for overlapping instances 🧩
- More accurate **optimizer parameter-group logging** 🧾
- Adds **retry + validation** for dataset image downloads (NDSON) 🔁📥
- **Install/export stability & experiment tracking** 📦📈  
- Pins **torch < 2.10** to prevent ExecuTorch export incompatibilities 🧷
- Saves runs under `runs/` by default for relative projects + improves **W&B traceability** 🗂️
- **Docs updates (large)** 📝⚡  
- Docs images migrated to a CDN and improved alt text for accessibility/SEO

🎯 Purpose & Impact
- **Train directly on AVIF images** without manual conversion 🎉  
- Useful for modern web/phone pipelines where AVIF is common
- **Fewer “it works on my machine” image-loading failures** 🧯  
- The new COCO12-Formats dataset is designed to catch format-specific decoding issues early, especially in CI/CD
- **Better resilience across environments** 🌍  
- Pillow fallback reduces dependence on how OpenCV was built (many prebuilt OpenCV wheels lack AVIF support)
- **More reliable training & clearer debugging** 🔍  
- Fixes reduce subtle scaling bugs (Pose/OBB), segmentation masking issues, and misleading optimizer logs
- **Smoother installs/exports and cleaner run management** 🚀  
- Dependency pin helps prevent breakage; run folder changes improve organization and experiment tracking

What's Changed
* Fix docs images content disposition by glenn-jocher in https://github.com/ultralytics/ultralytics/pull/23322
* Docs images cleanup by glenn-jocher in https://github.com/ultralytics/ultralytics/pull/23323
* Fix the length of optimizer params group print by Laughing-q in https://github.com/ultralytics/ultralytics/pull/23314
* Platform docs by glenn-jocher in https://github.com/ultralytics/ultralytics/pull/23338
* Route outputs to `runs/` by default and improve W&B run traceability by artest08 in https://github.com/ultralytics/ultralytics/pull/23026
* fix image size calculation in OBB and Pose26 loss for multi-scale training by lmycross in https://github.com/ultralytics/ultralytics/pull/23342
* fix: 🐞 pin torch version to <2.10 for executorch export by onuralpszr in https://github.com/ultralytics/ultralytics/pull/23353
* fix semantic segmentation loss indexing error by lmycross in https://github.com/ultralytics/ultralytics/pull/23330
* Retry NDSON download failures by glenn-jocher in https://github.com/ultralytics/ultralytics/pull/23354
* Fix `multi_scale` range sampling and clarify docs by artest08 in https://github.com/ultralytics/ultralytics/pull/23284
* `ultralytics 8.4.7` AVIF training and new COCO12-Formats dataset by glenn-jocher in https://github.com/ultralytics/ultralytics/pull/23358

New Contributors
* artest08 made their first contribution in https://github.com/ultralytics/ultralytics/pull/23026

**Full Changelog**: https://github.com/ultralytics/ultralytics/compare/v8.4.6...v8.4.7

8.4.6

📊 Key Changes
- **✅ Fixed DDP multi-GPU training crash (PR 23301 by pfabreu)**  
- Added missing `PosixPath` import to the generated temporary DDP training script (`ultralytics/utils/dist.py`).  
- Prevents `NameError: name 'PosixPath' is not defined` when model paths are passed as `PosixPath` objects (common on Linux) during Distributed Data Parallel training 🧩🧯
- **⏱️ More robust dataset URI resolution for large Ultralytics HUB/Platform datasets (PR 23305 by glenn-jocher)**  
- `ul://...` dataset URLs now allow a much longer server-side preparation time (NDJSON generation) to avoid premature timeouts 🐢📦
- **🧹 Developer quality: BYTETracker typing modernized (PR 23304)**  
- Switched legacy ` type:` comments to inline type annotations in `BYTETracker` (no behavior change) 🧠🔧
- **📚 Docs + Platform guidance improvements (PR 23294, 23298)**  
- Added new docs for **Activity Feed** and **Trash/Restore**, refreshed **billing/GPU pricing**, added “Try on Ultralytics Platform” callouts for **YOLO11 / YOLO26 / YOLOv5 / YOLOv8**, plus small typo fixes ✍️🚀

🎯 Purpose & Impact
- **DDP training is stable again on multi-GPU setups** 🎛️✅  
- If you upgraded to 8.4.5 and saw failures when launching DDP training (especially with models like `yolo26n.pt` passed as a `Path/PosixPath`), this release removes that blocker—less downtime, fewer confusing crashes.
- **Fewer flaky failures when using `ul://...` datasets from Ultralytics HUB/Platform** 🌐✅  
- Large datasets can take longer to prepare; the smarter timeout reduces false “timeout” errors during dataset resolution.
- **Better usability and discoverability in docs** 🧭📘  
- Clearer Platform workflows (Activity Feed, Trash/Restore) and more direct “try it now” paths for major YOLO models.

For more context, see the **[v8.4.6 release tag on GitHub](https://github.com/ultralytics/ultralytics/releases/tag/v8.4.6)**.

What's Changed
* Improve Platform docs by glenn-jocher in https://github.com/ultralytics/ultralytics/pull/23294
* Fix typos in YOLO26 and YOLOE docs by raimbekovm in https://github.com/ultralytics/ultralytics/pull/23298
* Longer NDJSON generation timeout by glenn-jocher in https://github.com/ultralytics/ultralytics/pull/23305
* Modernize type comments to inline annotations in `byte_tracker.py` by ahmet-f-gumustas in https://github.com/ultralytics/ultralytics/pull/23304
* `ultralytics 8.4.6` Add missing PosixPath import in DDP train file gen by pfabreu in https://github.com/ultralytics/ultralytics/pull/23301

New Contributors
* ahmet-f-gumustas made their first contribution in https://github.com/ultralytics/ultralytics/pull/23304

**Full Changelog**: https://github.com/ultralytics/ultralytics/compare/v8.4.5...v8.4.6

8.4.5

📊 Key Changes
- 🧩 **Pose Results summary now supports keypoints missing visibility**: `Results.summary()` checks `kpt.has_visible` and only outputs `"visible"` when it exists (otherwise returns just `"x"` and `"y"`), preventing crashes in mixed keypoint formats.
- 🔖 **Version bump**: `8.4.4` → `8.4.5`.
- 📚 **Docs & examples shift to YOLO26**: Kaggle links, Ultralytics Platform docs, and multiple notebooks now point to **YOLO26** as the recommended current model family 🚀.
- 🗂️ **NDJSON dataset docs improved**: clearer per-task examples/tabs for Detect/Segment/Pose/OBB/Classify, including pose visibility explanations 🧾👀.
- 🧹 **Dependency cleanup**: removed optional `hub-sdk` extra from `pyproject.toml` (simplifies installs for users who don’t need it) 📦✂️.

🎯 Purpose & Impact
- 🛡️ **Fewer runtime errors in pose pipelines**: exporting/logging/serving pose outputs as JSON via `Results.summary()` won’t fail when datasets/models omit visibility/confidence per keypoint (common in non-COCO formats).
- 🔄 **More robust downstream integrations**: safer summaries improve reliability for APIs, analytics, logging, and dataset export workflows that depend on consistent serialization.
- 📈 **Clearer “recommended model” guidance**: shifting docs and notebooks toward **YOLO26** reduces confusion for new users and aligns examples with the current default direction.
- 🧰 **Better dataset onboarding**: expanded NDJSON docs help users format annotations correctly across tasks, reducing trial-and-error when building datasets.

What's Changed
* Add YOLO26 Kaggle models by glenn-jocher in https://github.com/ultralytics/ultralytics/pull/23289
* YOLO26 Google Colab notebook by glenn-jocher in https://github.com/ultralytics/ultralytics/pull/23290
* Update YOLO26 Colab Notebook by glenn-jocher in https://github.com/ultralytics/ultralytics/pull/23291
* Update NDJSON docs by glenn-jocher in https://github.com/ultralytics/ultralytics/pull/23292
* `ultralytics 8.4.5` 2D Pose `Result.summary()` support by glenn-jocher in https://github.com/ultralytics/ultralytics/pull/23293


**Full Changelog**: https://github.com/ultralytics/ultralytics/compare/v8.4.4...v8.4.5

8.4.4

📊 Key Changes
- 🧠 **MuSGD optimizer scaling update (PR 23279 by Laughing-q)**  
MuSGD scale factors are now chosen more appropriately based on total training iterations:
- **> 10,000 iterations:** `(muon=0.1, sgd=1.0)`
- **≤ 10,000 iterations:** `(muon=0.5, sgd=0.5)`  
This is a *behavior change* in `ultralytics/engine/trainer.py`.

- 📷 **Sony IMX500 export compatibility improved (PR 23266 by Laughing-q)**  
- IMX exporter now accepts **multiple valid layer counts** (a set of allowed values) instead of requiring exactly one, reducing false “unsupported model” failures ✅  
- IMX500 docs/examples are refreshed to focus on **YOLO11** (model names and paths updated).

- 🧩 **Segmentation proto/output handling fixed across backends (PR 23241 by Laughing-q)**  
- Segmentation post-processing now pulls the **proto masks from the correct output index** for both PyTorch and exported models.
- TensorFlow segmentation handling in AutoBackend now triggers based on **task == "segment"** (more reliable than guessing from output shape/length).

- 📁 **No more empty run folders when `save=False` (PR 23268 by Y-T-G)**  
`get_save_dir()` no longer auto-creates directories while computing a unique run path—reduces unwanted “predict” folders appearing on disk 🧹

- 📈 **TensorBoard OBB graph logging made safer (PR 23276 by Y-T-G)**  
TensorBoard graph logging now uses `smart_inference_mode()` to avoid gradient tracking—often **less memory/overhead** and fewer callback edge cases ⚙️

- 🔗 **Docs branding/link refresh (PR 23283 by glenn-jocher)**  
Multiple repo/docs links now point to the **Ultralytics Platform** entry point (and wording updated accordingly) 🧭

🎯 Purpose & Impact
- 🚀 **More consistent training dynamics with MuSGD**  
If you use MuSGD (muon/sgd), you may see **improved stability and convergence** depending on whether your run is short or long—especially around the 10k-iteration threshold 🧠📉

- ✅ **Fewer export surprises (IMX500 + segmentation exports)**  
IMX500 exports should fail less often due to minor layer-count differences, and segmentation outputs should be **more consistent across PyTorch/exported/TF backends** 📦🧩

- 🧹 **Cleaner local runs and tooling behavior**  
Computing a save directory no longer creates folders prematurely, which is especially helpful for **dry runs**, scripts, and `save=False` predictions 📁✨

- ⚡ **More robust logging during training**  
TensorBoard graph logging becomes less intrusive and more reliable (particularly for OBB setups) 📊🛡️

What's Changed
* Fix `YOLOv8/YOLO11` IMX export by Laughing-q in https://github.com/ultralytics/ultralytics/pull/23266
* Disable automatic directory creation with `mkdir` by Y-T-G in https://github.com/ultralytics/ultralytics/pull/23268
* Use `YOLO26n` for benchmark tests by Laughing-q in https://github.com/ultralytics/ultralytics/pull/23241
* Fix TensorBoard error with OBB by Y-T-G in https://github.com/ultralytics/ultralytics/pull/23276
* Replace HUB -> Platform links by glenn-jocher in https://github.com/ultralytics/ultralytics/pull/23283
* `ultralytics 8.4.4` MuSGD optimizer scale factor update by Laughing-q in https://github.com/ultralytics/ultralytics/pull/23279


**Full Changelog**: https://github.com/ultralytics/ultralytics/compare/v8.4.3...v8.4.4

8.4.3

🌟 Summary (single-line synopsis)
Ultralytics `v8.4.3` boosts **Ultralytics Platform NDJSON dataset downloads/conversion speed** 🚀, improves **training metric correctness** 🧠, and refreshes defaults/docs around **YOLO26** 📚.

📊 Key Changes
- 🚀 **Faster NDJSON → YOLO dataset conversion (Ultralytics Platform data) — PR 23257 by glenn-jocher**
- Lazy-loads `aiohttp` only when NDJSON conversion is used (faster startup, fewer unnecessary deps) 📦
- Simplifies async image download code and improves concurrency scaling to match dataset size ⚡
- Small robustness improvement for Platform URL handling 🌐
- Version bump: `8.4.2 → 8.4.3` 🔖
- 🌐 **Configurable Platform base URL — PR 23256 by glenn-jocher**
- Adds `ULTRALYTICS_PLATFORM_URL` to point callbacks/links to staging or local environments 🧪
- 🏷️ **Defaults and examples move to YOLO26 — PR 23242 by Laughing-q**
- Default `YOLO()`/CLI fallback model becomes `yolo26n.pt` and many docs/examples follow suit ✅
- ⚙️ **Training optimizer and warmup logic made more reliable — PR 23234 by Laughing-q**
- Parameter groups are explicitly labeled; warmup LR now targets the **bias** group by name (not by position) 🔥
- “Auto” optimizer strategy simplified around MuSGD with improved defaults 🎛️
- 🧍 **Pose training logs are more accurate — PR 23230 by lmycross**
- Only reports `rle_loss` when the model actually supports it (avoids confusing metrics) 🧾
- 🧩 **IMX inference/export consistency improvements — PR 23235 by Laughing-q**
- Anchor/stride refresh is more robust for changing input shapes; IMX decode path simplified 🔧
- ✅ **Fix duplicated `Results.summary()` entries — PR 23218 by xusuyong**
- Prevents duplicated rows in summaries (cleaner analytics/logging) 🧹
- 📈 **Benchmark tables clarified with end-to-end (e2e) metrics — PR 23238**
- README tables now clearly distinguish e2e evaluation metrics for YOLO26 tasks 📊
- 🍓 **Raspberry Pi 5 guide updated with YOLO26 benchmarks — PR 23227**
- Refreshes benchmark formats and adds ExecuTorch results 📌

🎯 Purpose & Impact
- 🚀 **If you use Ultralytics Platform datasets (NDJSO

@coderabbitai
Copy link

coderabbitai bot commented Mar 5, 2026

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 2f117fd5-d14b-47ff-85a3-9b3eb63cb00a

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch pyup-update-ultralytics-8.3.47-to-8.4.20

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

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