# ultralytics changelog > Ultralytics YOLO26, YOLO11, YOLOv8 — object detection, instance segmentation, semantic segmentation, image classification, pose estimation, object tracking - Vendor: ultralytics - Category: AI - Official site: https://platform.ultralytics.com/ - Tracked by: What's New (https://whatsnew.fyi/product/ultralytics) - Harvested from: GitHub (ultralytics/ultralytics) - Entries below: 10 (newest first) What's New is an index, not a publisher: every entry below links to the vendor's own release notes, which are the authoritative source. Entries are labelled where they are hand-curated sample data, pre-releases, or drawn from a secondary source such as a developer blog. Reuse: the summaries, labels and curation here are © What's New. Quote freely with attribution and a link back; wholesale republication of the corpus is not permitted — terms: https://whatsnew.fyi/terms. The vendors' own release notes remain their publishers'. ## Releases ### v8.4.137 — v8.4.137 - Auto-enable channels-last CUDA training (#26007) - Date: 2026-08-31 - Version: v8.4.137 - Original notes: https://github.com/ultralytics/ultralytics/releases/tag/v8.4.137 - Permalink: https://whatsnew.fyi/product/ultralytics/releases/v8.4.137 - **changed** — Automatically enable channels-last memory layout for CUDA training on PyTorch 1.11 and newer to improve GPU training performance - **changed** — Include channels_last setting among training options that can be updated when resuming a run - **changed** — Update training guides and argument references to describe the automatic CUDA channels-last behavior ##### 🌟 Summary **v8.4.137 automatically enables the faster channels-last memory layout for CUDA training on PyTorch 1.11+, improving GPU training performance while preserving clear opt-out and compatibility options.** 🚀 ##### 📊 Key Changes - **Automatic channels-last training:** The existing `channels_last=None` setting now automatically uses the NHWC memory format for CUDA training with **PyTorch 1.11 and newer**. - **Explicit control remains available:** - `channels_last=None`: Automatically selects channels-last when supported. - `channels_last=False`: Explicitly keeps the traditional NCHW format. - `channels_last=True`: Explicitly requests channels-last, preserving previous behavior. - **Safe compatibility behavior:** PyTorch 1.10 and older, CPU, and MPS training continue using NCHW by default. - **Improved resume handling:** The `channels_last` setting is now included among the training options that can be updated when resuming a run. - **Documentation updates:** Training guides and argument references now describe the automatic CUDA behavior. - **No model architecture changes:** This release focuses on training performance and memory layout rather than changing model structure or outputs. ##### 🎯 Purpose & Impact - ⚡ **Potentially faster CUDA training:** Channels-last can improve convolution performance on compatible GPUs, particularly modern Tensor Core hardware. - 🧠 **Better YOLO26 training defaults:** Users no longer need to manually enable the optimization when using a supported PyTorch and CUDA environment. - 🛡️ **Reduced compatibility risk:** Automatic activation begins at PyTorch 1.11, the first validated version that avoids known channels-last failures in YOLO26 training. - 🔧 **Full user control:** Workloads that require the traditional layout can disable the optimization with `channels_last=False`. - 🌍 **Broad validation:** The change was tested across CUDA 11.1–13.2, PyTorch 1.8–2.12, Python 3.8–3.13, and a wide range of modern NVIDIA GPUs. - 📦 **Minimal implementation impact:** The behavior is selected during trainer setup without adding new arguments, persistent state, helper utilities, or GPU-specific allowlists. ##### What's Changed * Auto-enable channels-last CUDA training by @glenn-jocher in https://github.com/ultralytics/ultralytics/pull/26007 **Full Changelog**: https://github.com/ultralytics/ultralytics/compare/v8.4.136...v8.4.137 ### v8.4.136 — v8.4.136 - Improve Tuner search with confidence-weighted covariance (#25996) - Date: 2026-08-31 - Version: v8.4.136 - Original notes: https://github.com/ultralytics/ultralytics/releases/tag/v8.4.136 - Permalink: https://whatsnew.fyi/product/ultralytics/releases/v8.4.136 - **changed** — Hyperparameter tuning now learns relationships between promising hyperparameters by analyzing best-performing results and uses confidence-weighted, correlated mutations when enough elite trial data is available - **changed** — AutoBackend now owns memory-layout selection during backend construction, avoiding duplicated or unsafe conversions - **changed** — Automatic channels-last selection is available for supported Linux and Windows x86 CPU environments using PyTorch 1.13 or newer with oneDNN - **changed** — PIL and NumPy image inputs now use more efficient OpenCV color conversions while avoiding unnecessary image copies - **fixed** — CLI classes filter for YOLOE and World models when class IDs are supplied numerically - **fixed** — TIFF loading now respects uppercase extensions and grayscale flags, preserving multispectral image channels correctly - **fixed** — Pose visualization now scales keypoint coordinates without incorrectly scaling confidence values - **fixed** — Matplotlib backend restoration is safer when the originally configured backend is unavailable - **fixed** — BoT-SORT sparse optical-flow tracking avoids unnecessary per-pixel grid allocation, reducing overhead on large frames - **fixed** — MongoDB-based distributed tuning now assigns iteration IDs atomically, preventing duplicate trial numbers from concurrent workers - **fixed** — PyTorch 1.9 and JetPack 6 compatibility issues affecting channels-last inference - **added** — Type validation for dataset YAML files with clearer error messages - **changed** — Hyperparameter tuning reflects correlated proposals at search boundaries to avoid repeatedly clipping values ##### 🌟 Summary Version **8.4.136** improves hyperparameter tuning, inference performance, backend compatibility, and data handling—making YOLO workflows more reliable and efficient. 🚀 ##### 📊 Key Changes - **🎯 Smarter hyperparameter tuning — Current PR #25996 by @glenn-jocher** - Keeps the existing Gaussian search behavior unchanged during the first 30 completed trials. - Learns relationships between promising hyperparameters by analyzing the best-performing results. - Uses confidence-weighted, correlated mutations only when enough elite trial data is available. - Reflects correlated proposals at search boundaries to avoid repeatedly clipping values. - Benchmarking on basketball-hoop detection reported a new best fitness of **0.60576**, outperforming the tested Ray Tune and previous custom Tuner configurations. - Updated the [hyperparameter tuning documentation](https://docs.ultralytics.com/guides/hyperparameter-tuning.md). - **🧠 More robust channels-last inference** - `AutoBackend` now owns memory-layout selection during backend construction, avoiding duplicated or unsafe conversions. - Automatic channels-last selection is available for supported Linux and Windows x86 CPU environments using PyTorch 1.13 or newer with oneDNN. - CUDA support remains available, while ARM64, MPS, older PyTorch versions, and exported backends retain their existing behavior. - Fixed compatibility issues affecting PyTorch 1.9 and JetPack 6 systems. - **⚡ Faster image preprocessing** - PIL and NumPy image inputs now use more efficient OpenCV color conversions. - Avoids unnecessary image copies while preserving correct channel order and contiguous memory layout. - **🔍 More reliable prediction filtering** - Fixed the CLI `classes` filter for YOLOE and World models when class IDs are supplied numerically. - Text-based class prompts continue to work as before. - **📷 Improved image and visualization handling** - TIFF loading now respects uppercase extensions and grayscale flags, preserving multispectral image channels correctly. - Pose visualization now scales keypoint coordinates without incorrectly scaling confidence values. - Matplotlib backend restoration is safer when the originally configured backend is unavailable. - **🏃 Tracking and distributed tuning improvements** - BoT-SORT sparse optical-flow tracking avoids an unnecessary per-pixel grid allocation, reducing overhead on large frames. - MongoDB-based distributed tuning now assigns iteration IDs atomically, preventing duplicate trial numbers from concurrent workers. - **🧪 Better validation and project maintenance** - Dataset YAML files now receive early type validation with clearer error messages. - Added CI and PyPI publishing status for the [Ultralytics SDK repository](https://github.com/ultralytics/sdk). - Updated the package version to **8.4.136**. ##### 🎯 Purpose & Impact - **Better tuning results:** The Tuner can discover useful relationships between hyperparameters instead of treating every parameter independently, potentially improving final model quality with fewer wasted trials. 📈 - **Safer inference across platforms:** Backend construction now handles memory formats and retained tensors more consistently, reducing regressions on older PyTorch versions, ARM64 devices, and JetPack environments. - **Faster predictions:** Common PIL and NumPy input paths require fewer copies and more efficient conversions, which can improve throughput in image-heavy applications. - **More predictable CLI behavior:** Class filtering now works consistently across standard, YOLOE, and World models. - **Improved dataset reliability:** Invalid YAML field types are reported earlier, making dataset configuration errors easier to diagnose. - **No architecture changes:** This release does not introduce a new model architecture; its primary benefits are improved tuning, compatibility, performance, and correctness. ##### What's Changed * Add Platfor _[Truncated at 4000 characters — full notes: https://github.com/ultralytics/ultralytics/releases/tag/v8.4.136]_ ### v8.4.135 — v8.4.135 - Respect dataset object counts when selecting max_det (#25993) - Date: 2026-08-29 - Version: v8.4.135 - Original notes: https://github.com/ultralytics/ultralytics/releases/tag/v8.4.135 - Permalink: https://whatsnew.fyi/product/ultralytics/releases/v8.4.135 - **changed** — Training and validation now automatically increase max_det if the default value is lower than the largest number of labeled objects found in a single image - **changed** — User-specified max_det values are preserved but a warning is shown when they may limit validation recall - **changed** — The resolved max_det value is propagated to native end-to-end model heads before validation for improved consistency with NMS-free models - **added** — Warnings notify users when images contain more objects than max_det allows, explaining that a low limit can cap recall and produce misleading validation metrics - **changed** — Fraction boundary behavior is now consistent, with fraction=1 and fraction=1.0 both meaning use the full dataset, integers greater than 1 representing image count, 0 and 0.0 for skipping optional test split - **changed** — Boolean values such as fraction=True are now rejected instead of being interpreted ambiguously - **added** — Additional tests cover configuration validation, dataset conversion, concatenated datasets, training pipelines, and end-to-end detection behavior ##### 🌟 Summary **v8.4.135 improves detection reliability by adapting `max_det` to dataset object counts and standardizing dataset fraction handling.** ##### 📊 Key Changes - 🚀 **Smarter `max_det` selection for detection, segmentation, pose, and OBB tasks** - Training and validation now inspect the largest number of labeled objects found in a single image. - If the default `max_det` is too low, it is automatically increased to match the observed dataset maximum. - User-specified `max_det` values are preserved, but a warning is shown when they may limit validation recall. - The resolved value is propagated to native end-to-end model heads before validation, improving consistency for NMS-free models. - ⚠️ **Clearer warnings for object-count mismatches** - Users are notified when images contain more objects than `max_det` allows. - Warnings explain that a low limit can cap recall and produce misleading validation metrics. - Increasing `max_det` may increase validation cost, and cannot exceed the model or export format’s own capacity. - 📏 **Consistent `fraction` boundary behavior** - `fraction=1` and `fraction=1.0` now both mean “use the full dataset.” - Integers greater than `1` continue to represent an image count. - `0` and `0.0` remain available for skipping an optional test split. - Training and validation splits must still contain at least one image. - Boolean values such as `fraction=True` are now rejected instead of being interpreted ambiguously. - 📚 **Documentation and validation updates** - Training, export, and cloud-training documentation now describe the normalized fraction semantics. - Additional tests cover configuration validation, dataset conversion, concatenated datasets, training pipelines, and end-to-end detection behavior. ##### 🎯 Purpose & Impact - ✅ **More trustworthy validation:** Large-object-count images are less likely to be truncated by an unnoticed default limit. - 📈 **Better recall measurement:** Automatically matching `max_det` to observed data helps prevent artificially low validation recall. - 🧩 **More predictable configuration:** Dataset behavior no longer depends on whether a serializer writes `1` as an integer or `1.0` as a float. - 🛠️ **Safer user overrides:** Custom `max_det` settings continue to work, with warnings when they may restrict results. - ⚡ **Potential performance trade-off:** A higher detection limit can increase validation and inference post-processing cost, while model or deployment-format limits may still cap the maximum number of predictions. ##### What's Changed * Normalize fraction boundary values by @glenn-jocher in https://github.com/ultralytics/ultralytics/pull/25994 * Respect dataset object counts when selecting max_det by @glenn-jocher in https://github.com/ultralytics/ultralytics/pull/25993 **Full Changelog**: https://github.com/ultralytics/ultralytics/compare/v8.4.134...v8.4.135 ### v8.4.134 — v8.4.134 - Reduce TaskAlignedAssigner OOM recovery cost (#25990) - Date: 2026-08-29 - Version: v8.4.134 - Original notes: https://github.com/ultralytics/ultralytics/releases/tag/v8.4.134 - Permalink: https://whatsnew.fyi/product/ultralytics/releases/v8.4.134 - **changed** — TaskAlignedAssigner now retries target assignment one image at a time on GPU instead of moving the entire operation to CPU when GPU memory runs out - **changed** — Remove unused trailing ground-truth padding before retrying target assignment to lower memory usage - **changed** — Preallocate retry outputs and reuse dense metric buffers during target assignment - **changed** — Keep candidate masks in compact integer format to reduce memory usage - **changed** — Compute box metrics only for valid anchor/ground-truth pairs instead of all pairs - **changed** — Use more memory-efficient in-place operations during target assignment where possible - **changed** — Streamline point-in-box checks and overlapping ground-truth resolution - **changed** — Hyperparameter tuning default increased from 10 trials to 300 trials for built-in tuner, direct Tuner usage, and Ray Tune ##### 🌟 Summary **v8.4.134 makes crowded-object training more resilient to GPU memory limits and increases the default hyperparameter search budget from 10 to 300 trials.** 🚀 ##### 📊 Key Changes - **Faster TaskAlignedAssigner OOM recovery** 🧠 - When GPU memory runs out during target assignment, Ultralytics now retries the work **one image at a time on the GPU** instead of moving the entire operation to the CPU. - The model’s forward-pass batch size remains unchanged. - A warning is shown only once per training run and reports the assignment dimensions. - **Lower memory usage during target assignment** 💾 - Removes unused trailing ground-truth padding before retrying. - Preallocates retry outputs and reuses dense metric buffers. - Keeps candidate masks in a compact integer format. - Computes box metrics only for valid anchor/ground-truth pairs. - Uses more memory-efficient in-place operations where possible. - **Improved geometric and assignment processing** ⚙️ - Streamlines point-in-box checks and overlapping-ground-truth resolution. - Preserves compatible output behavior while reducing temporary tensor allocations. - **Hyperparameter tuning now defaults to 300 trials** 🔍 - The built-in tuner, direct `Tuner` usage, and Ray Tune all now use **300 trials by default**, up from 10. - Documentation has been updated to reflect the shared default. - **Version update** 📦 - Package version updated to `8.4.134`. ##### 🎯 Purpose & Impact - **Much better recovery from GPU out-of-memory errors** ✅ Large or highly crowded batches can continue training without falling back to a very slow full-CPU assignment. In the reported xView benchmark, optimized single-image GPU assignment used about **1.56 GB** of peak memory and completed in **0.376 seconds**, compared with **194.86 seconds** and **85.62 GB** for the previous GPU-to-CPU fallback. - **More practical training on dense datasets** 🏙️ The changes are particularly valuable for aerial imagery, crowd analysis, and other datasets containing many objects per image. - **No need to reduce the model’s forward batch size after recovery** 📈 The fallback is isolated to target assignment, helping retain the intended training configuration while handling temporary memory pressure. - **More effective automatic hyperparameter tuning** 🎯 A 300-trial default gives the tuner substantially more opportunities to explore configurations and find stronger settings, especially for the broad YOLO26 search space. - **Higher tuning cost unless overridden** ⏱️ Users who rely on defaults should expect tuning jobs to run considerably longer and consume more compute. Smaller runs can still be requested explicitly when time or budget is limited. ##### What's Changed * Default hyperparameter tuning to 300 trials by @glenn-jocher in https://github.com/ultralytics/ultralytics/pull/25987 * Reduce TaskAlignedAssigner OOM recovery cost by @glenn-jocher in https://github.com/ultralytics/ultralytics/pull/25990 **Full Changelog**: https://github.com/ultralytics/ultralytics/compare/v8.4.133...v8.4.134 ### v8.4.133 — v8.4.133 - Improve hyperparameter Tuner mutation convergence (#25984) - Date: 2026-08-29 - Version: v8.4.133 - Original notes: https://github.com/ultralytics/ultralytics/releases/tag/v8.4.133 - Permalink: https://whatsnew.fyi/product/ultralytics/releases/v8.4.133 - **changed** — Replace coordinate-by-coordinate crossover with fitness-weighted selection of complete, high-performing configurations in hyperparameter tuning - **changed** — Mutate approximately half of the parameters in normalized search-space coordinates to allow parameters starting at zero to evolve more effectively - **changed** — Gradually reduce mutation size when tuning stops finding better results to encourage refinement after broad exploration - **fixed** — Prevent duplicate candidates after clipping, rounding, or integer conversion in hyperparameter tuning - **changed** — Set Ray Tune to default to Optuna multivariate TPE with parallel-aware suggestions instead of independent random search - **changed** — Move image channel reordering and tensor-contiguity operations from CPU-side NumPy processing to the inference device - **added** — Enable channels-last memory layout automatically for native PyTorch inference and standalone validation on supported x86 Linux and Windows CPUs with oneDNN - **fixed** — Fix fraction handling during classification and detection INT8 export calibration so scalar fractions apply directly to the selected calibration split - **added** — Custom detection datasets can now report small-, medium-, and large-object mAP when using save_json=True - **changed** — Simplify edge-device installation by installing the base ultralytics package instead of the larger [export] extra, with export dependencies installed automatically when an export is requested - **changed** — W&B model artifact uploads now follow the existing training save argument where save=False skips uploading the best checkpoint while retaining metrics and plots - **changed** — Convert saved models back to safe contiguous format and clear stale EMA data to improve compatibility with channels-last inference ##### 🌟 Summary **Ultralytics 8.4.133 improves hyperparameter tuning convergence, speeds up inference preprocessing, expands detection metrics, and simplifies edge-device setup.** 🚀 ##### 📊 Key Changes - **Smarter hyperparameter tuning — PR #25984 by @glenn-jocher** - Replaces coordinate-by-coordinate crossover with **fitness-weighted selection of complete, high-performing configurations**. - Preserves useful relationships between hyperparameters instead of mixing them independently. - Mutates approximately half of the parameters in normalized search-space coordinates, allowing parameters that start at zero—such as `degrees` or `shear`—to evolve more effectively. - Gradually reduces mutation size when tuning stops finding better results, encouraging refinement after broad exploration. - Prevents duplicate candidates after clipping, rounding, or integer conversion, including small and discrete search spaces. - Ray Tune now defaults to **Optuna multivariate TPE**, with parallel-aware suggestions rather than independent random search. - **Faster predictor preprocessing — PR #25982 by @jahsef** ⚡ - Moves image channel reordering and tensor-contiguity operations from CPU-side NumPy processing to the inference device. - Preserves output values while reducing unnecessary CPU copies. - Reported benchmarks show approximately **2.2–3.1× faster preprocessing on an RTX 5080**, with additional gains on CPU. - **Automatic channels-last CPU inference — PR #25983 by @JESUSROYETH** - Enables channels-last memory layout automatically for native PyTorch inference and standalone validation on supported x86 Linux and Windows CPUs with oneDNN. - Keeps training defaults and unsupported platforms unchanged. - Explicit `channels_last=True` remains available for supported CPU and CUDA paths. - Saved models are converted back to a safe contiguous format and stale EMA data is cleared to improve compatibility. - **More accurate INT8 calibration subsets — PR #25978 by @JESUSROYETH** - Fixes `fraction` handling during classification and detection INT8 export calibration. - Scalar fractions now apply directly to the selected calibration split, while list-based fractions retain train/validation/test behavior. - Prevents exports from unintentionally calibrating on an entire dataset when only a subset was requested. - **Size-specific mAP for custom detection datasets — PR #25981 by @fcakyon** 📈 - Custom detection datasets can now report small-, medium-, and large-object mAP when using `save_json=True`. - Builds temporary COCO-format annotations internally while preserving existing native metrics and prediction files. - Applies consistently during training validation, final-model validation, and standalone validation. - **Simpler edge-device installation** - Raspberry Pi, Jetson, DGX Spark, DeepStream, and related guides now install the base `ultralytics` package instead of the larger `[export]` extra. - Export dependencies are installed automatically when an export is requested, reducing installation size and dependency conflicts. - **Improved Weights & Biases artifact control — PR #25985 by @glenn-jocher** - W&B model artifact uploads now follow the existing training `save` argument. - `save=False` skips uploading the best checkpoint while retaining metrics and plots. - Default behavior remains unchanged with `save=True`. - **Package update** - Version bumped to **8.4.133**. ##### 🎯 Purpose & Impact - **Better tuning results:** Hyperparameter searches are more likely to preserve successful configurations, explore meaningful alternatives, and avoid wasting trials on duplicates. 🎯 - **Faster inference:** Device-side preprocessing can reduce latency, particularly for batched inference and CPU-bound pipelines. - **Broader performance optimization:** Supported x86 CPU users may benefit from channels-last inference without changing their existing commands. - **More reliable model export:** INT8 cali _[Truncated at 4000 characters — full notes: https://github.com/ultralytics/ultralytics/releases/tag/v8.4.133]_ ### v8.4.132 — v8.4.132 - Extend fraction to the test split (#25966) - Date: 2026-08-28 - Version: v8.4.132 - Original notes: https://github.com/ultralytics/ultralytics/releases/tag/v8.4.132 - Permalink: https://whatsnew.fyi/product/ultralytics/releases/v8.4.132 - **added** — List-based fraction now supports train, validation, and test splits with a third value to limit test data or skip test-image downloads entirely - **changed** — NMS now uses the optimized torchvision path on supported Ascend NPU setups - **changed** — Fraction-based sampling for local classification datasets now selects images across classes instead of taking a class-ordered prefix - **changed** — Ray Tune now uses its public context and reporting APIs - **changed** — ClearML, Comet, TensorBoard, MLflow, Ray Tune, and W&B instructions now better match current callback behavior - **changed** — MLflow environment-variable handling is more flexible - **changed** — TensorBoard setup is clearly documented as optional - **changed** — Documentation now more accurately describes NMS-free detection, segmentation, pose, and OBB models - **changed** — Export-format fallbacks, quantization limitations, Hailo behavior, detection limits, and expected accuracy trade-offs are now clarified - **changed** — Added guidance for using format-specific backend classes and explains input-layout, autograd, and post-processing differences - **changed** — RT-DETR documentation recommends disabling deterministic mode on CUDA - **changed** — Copy-Paste augmentation is correctly documented for both segment and OBB tasks - **changed** — Classification color-jitter settings are clarified when automatic augmentation is disabled - **fixed** — Repeated NMS time-limit warnings on Ascend NPU - **fixed** — Incomplete batches on Ascend NPU from producing incorrect mAP results - **fixed** — Classification fraction sampling to select representative subsets - **fixed** — IMX exports no longer reject end-to-end models at the exporter entry point - **fixed** — CLA workflow matching now accepts signature comments with surrounding whitespace or text - **removed** — Neptune integration and settings retired following the service shutdown ##### 🌟 Summary 🚀 Ultralytics v8.4.132 improves dataset efficiency, hardware compatibility, export workflows, and experiment-tracking documentation, with the headline feature being finer control over test-split downloads. ##### 📊 Key Changes - **🎯 Test-split control with `fraction`** *(PR #25966 — @fcakyon)* - List-based `fraction` now supports train, validation, and test splits. - Use a third value to limit test data or set it to `0` to skip test-image downloads entirely. - Existing two-value lists remain compatible and continue using the full test split. - The same split-selection behavior is shared across training, validation, dataset conversion, and export calibration. - **⚡ More efficient NDJSON workflows** - Platform NDJSON runs no longer need to download unused test images, which can significantly reduce transfer time, storage use, and bandwidth during multi-dataset sweeps. - **🩹 Corrected NMS and validation on Ascend NPU** - NMS now uses the optimized torchvision path on supported Ascend NPU setups while continuing to avoid unsupported XPU behavior. - Fixes repeated NMS time-limit warnings and prevents incomplete batches from producing incorrect mAP results. - **📚 Improved YOLO26 end-to-end and export guidance** - Documentation now more accurately describes NMS-free detection, segmentation, pose, and OBB models. - Clarifies export-format fallbacks, quantization limitations, Hailo behavior, detection limits, and expected accuracy trade-offs. - Updates performance claims and explains when custom post-processing or NMS is still required. - **🔄 Broader support for exported non-YOLO models** - Documents loading generic exported models through `YOLO()` when `task` and `imgsz` are supplied explicitly. - Adds guidance for using format-specific backend classes and explains input-layout, autograd, and post-processing differences. - Corrects TensorFlow SavedModel, LiteRT, and numerical-parity documentation. - **🧪 Better classification subset sampling** - Fraction-based sampling for local classification datasets now selects images across classes instead of taking a class-ordered prefix. - Produces more representative subsets for quick experiments and validation. - **📈 Updated experiment-tracking integrations** - Ray Tune now uses its public context and reporting APIs. - ClearML, Comet, TensorBoard, MLflow, Ray Tune, and W&B instructions now better match current callback behavior. - Neptune integration and settings were retired following the service shutdown. - MLflow environment-variable handling is more flexible, and TensorBoard setup is clearly documented as optional. - **🧩 Additional training and export corrections** - RT-DETR documentation recommends disabling deterministic mode on CUDA, since its attention operation cannot provide fully deterministic backward training. - Copy-Paste augmentation is correctly documented for both segment and OBB tasks. - Classification color-jitter settings are clarified when automatic augmentation is disabled. - IMX exports no longer reject end-to-end models at the exporter entry point. - CLA workflow matching now accepts signature comments with surrounding whitespace or text. ##### 🎯 Purpose & Impact - **💾 Lower data-transfer costs:** Users running Platform or NDJSON workflows can avoid downloading test data they do not need. - **⏱️ Faster experimentation:** Smaller, representative dataset subsets make tuning and iteration quicker without changing existing two-item `fraction` usage. - **📊 More trustworthy metrics:** Ascend NPU validation now processes complete batches, improving the reliability of reported mAP. - **🚀 Easier deployment:** Clearer YOLO26 export guidance helps users understand when NMS-free inference works and when a traditional NMS pipeline is necessary. - **🌍 Better hardware coverage:** NPU and export-path fixes improve compatibility across specialized accelerators and deployment formats. - **🧭 Smoother _[Truncated at 4000 characters — full notes: https://github.com/ultralytics/ultralytics/releases/tag/v8.4.132]_ ### v8.4.131 — v8.4.131 - Add Apple Core AI export (#25926) - Date: 2026-08-27 - Version: v8.4.131 - Original notes: https://github.com/ultralytics/ultralytics/releases/tag/v8.4.131 - Permalink: https://whatsnew.fyi/product/ultralytics/releases/v8.4.131 - **added** — Export models to Apple Core AI format with model.export(format="coreai") creating .aimodel assets that can be loaded with YOLO("yolo26n.aimodel") - **added** — Support FP32 and optional FP16 export for Apple Core AI through new export-coreai dependency group - **added** — Add dedicated Core AI backend, metadata handling, API references, and export-table support - **added** — Include model metadata such as class names, stride, and task information inside .aimodel assets - **added** — Support exporting YOLO26 with end2end=False to produce raw predictions and reduce inference latency - **changed** — YOLO26's end-to-end head is exported by default, returning finished detections directly - **changed** — Validation now consistently uses unaugmented validation pipeline instead of accidentally applying training augmentations like Mosaic, MixUp, and Random Perspective - **changed** — Dataset fractions are now selected according to the requested split during validation - **changed** — Model-scale overrides in parse_model now match exact scale letters, preventing unscaled or dictionary-based configurations from taking wrong architecture branch - **changed** — Documentation and logging now distinguish YOLO26's l1_loss from dfl_loss used by models with distribution-based box regression - **changed** — TQDM output no longer disappears in zero-width pseudo-terminals and notebook output is allowed to scroll naturally - **changed** — Truncated terminal lines now show ellipsis instead of being silently cut off - **fixed** — C3k2 configurations without explicitly provided optional argument no longer fail for medium, large, or extra-large variants - **fixed** — YOLOE.set_classes() now recognizes class-order changes and regenerates prompt embeddings when necessary - **fixed** — Class weights are now preserved on underlying model during DDP training and continue to target student model correctly during knowledge distillation - **fixed** — Fix crashes and unreliable metrics for detection, segmentation, OBB, RT-DETR, and YOLOE validation workflows caused by training augmentations - **added** — Add OBB task header image to documentation - **added** — Add continuous macOS CI coverage for Core AI export - **changed** — Correct documented run paths to match actual increment_path behavior for each product - **changed** — Architecture guide now explains scale-dependent behaviors more accurately ##### 🌟 Summary Ultralytics `v8.4.131` adds Apple Core AI export and inference support for YOLO26, alongside important validation, training, model-configuration, and documentation improvements. 🚀 ##### 📊 Key Changes - **🍎 Apple Core AI export and inference** - Export models with `model.export(format="coreai")` or the equivalent CLI command. - Creates Apple’s `.aimodel` asset format, which can be loaded again with `YOLO("yolo26n.aimodel")`. - Supports FP32 and optional FP16 export through the new `export-coreai` dependency group. - Adds a dedicated Core AI backend, metadata handling, API references, export-table support, and continuous macOS CI coverage. - Supports YOLO26 models on **Apple silicon with macOS 26 or later**; exported assets target iOS 27 and macOS 27. - Core AI export currently has important limitations: fixed input size, no dynamic shapes or NMS export, and no support in the Ultralytics iOS or Flutter SDKs yet. - **⚡ Core AI deployment options** - YOLO26’s end-to-end head is exported by default, returning finished detections directly. - Exporting with `end2end=False` produces raw predictions and can significantly reduce inference latency when post-processing is handled on the host. - Core AI export includes model metadata such as class names, stride, and task information inside the `.aimodel` asset. - **✅ More reliable validation with `split=train`** - Validation now consistently uses the unaugmented validation pipeline instead of accidentally applying training augmentations such as Mosaic, MixUp, and Random Perspective. - Dataset fractions are now selected according to the requested split. - This fixes crashes and unreliable metrics for detection, segmentation, OBB, RT-DETR, and YOLOE validation workflows. - **🧮 Correct YOLO26 loss terminology** - Documentation and logging now distinguish YOLO26’s `l1_loss` from `dfl_loss` used by models with distribution-based box regression. - Training guides, default configuration comments, tuning tables, experiment trackers, and tutorial output have been updated accordingly. - **🎯 Improved model configuration handling** - Model-scale overrides in `parse_model` now match exact scale letters, preventing unscaled or dictionary-based configurations from taking the wrong architecture branch. - `C3k2` configurations without an explicitly provided optional argument no longer fail for medium, large, or extra-large variants. - The architecture guide now explains these scale-dependent behaviors more accurately. - **🔤 YOLOE class reordering fixes** - `YOLOE.set_classes()` now recognizes class-order changes and regenerates prompt embeddings when necessary. - Reordering classes therefore updates class IDs and names correctly instead of being treated as a no-op. - **⚖️ Training robustness improvements** - Class weights are now preserved on the underlying model during DDP training and continue to target the student model correctly during knowledge distillation. - Fine-tuning guidance now recommends non-zero warmup while clarifying that the full three-epoch default is not always necessary. - Documentation now accurately describes automatic optimizer selection and module-name-based layer freezing. - **📟 Better progress bars in notebooks and narrow terminals** - TQDM output no longer disappears in zero-width pseudo-terminals such as those used by Colab. - Notebook output is allowed to scroll naturally, while truncated terminal lines now show an ellipsis instead of being silently cut off. - **📚 Documentation and presentation updates** - Corrects documented YOLOE and YOLOv5 run paths to match actual `increment_path` behavior. - Adds the missing OBB task header image. - Expands and updates Apple Core AI integration guidance, including deployment limitations and Core ML recommendations. ##### 🎯 Purpose & Impact - **Apple developers gain a new native deployment path** for YOLO26 models on the latest Apple silicon platfor _[Truncated at 4000 characters — full notes: https://github.com/ultralytics/ultralytics/releases/tag/v8.4.131]_ ### v8.4.130 — v8.4.130 - Enable fraction to limit dataset by image counts (#25951) - Date: 2026-08-26 - Version: v8.4.130 - Original notes: https://github.com/ultralytics/ultralytics/releases/tag/v8.4.130 - Permalink: https://whatsnew.fyi/product/ultralytics/releases/v8.4.130 - **added** — fraction parameter now accepts positive integer image counts such as fraction=1000 to train on exactly 1000 images - **added** — fraction parameter accepts list format [train_count, val_count] to limit training and validation splits independently - **added** — Count-based dataset subset selection now supported for YOLO, RTDETR, classification, validation, and INT8 calibration workflows - **changed** — fraction parameter now distinguishes between integer 1 meaning one image and float 1.0 meaning the complete split - **changed** — Count-based subsets are selected before images are downloaded for NDJSON and Platform datasets - **changed** — NDJSON records are now selected deterministically to ensure repeated runs use the same images - **changed** — Model.tune() now defaults to AdamW optimizer unless another optimizer is explicitly selected - **changed** — tune_fitness.png now displays overall fitness progression, best result achieved, and initial-versus-best fitness for each dataset - **changed** — Tracking documentation now lists six built-in trackers and documents TrackTrack as the default tracker - **changed** — Tracking documentation expanded to clarify confidence thresholds, low-confidence recovery, custom ReID models, and task-specific behavior for segmentation, pose, and OBB models - **added** — Added or corrected license information for MNIST, Global Wheat2020, PASCAL VOC, KITTI, and official depth datasets - **added** — Explicitly marked Depth8 and SUN RGB-D datasets as having no specified source license - **changed** — Export documentation across ONNX, TensorRT, OpenVINO, LiteRT, Hailo, QNN, Rockchip and other formats updated to reflect expanded fraction behavior - **fixed** — Fixed concurrent MongoDB tuner default claims in multi-worker tuning runs - **fixed** — Fixed tuning optimizer default to apply hyperparameter changes effectively ##### 🌟 Summary Version **v8.4.130** makes dataset subset selection far more flexible and efficient, while improving tuning, tracking guidance, and dataset metadata. 🚀 ##### 📊 Key Changes - **Count-based dataset limits** 🎯 - `fraction` now accepts a positive image count, such as `fraction=1000`, to train on exactly 1,000 images. - Use `fraction=[1000, 100]` to limit the training and validation splits independently. - Existing decimal ratio behavior remains unchanged, so `fraction=0.1` still uses 10% of the dataset. - Integer `1` means one image, while float `1.0` means the complete split. - Supports YOLO, RTDETR, classification, validation, and INT8 calibration workflows. - **More efficient NDJSON and Platform dataset downloads** ⚡ - Count-based subsets are selected before images are downloaded. - NDJSON records are selected deterministically, helping repeated runs use the same images. - This avoids downloading an entire dataset when only a fixed-size subset is needed. - **Improved hyperparameter tuning** 🧠 - `Model.tune()` now defaults to **AdamW** unless another optimizer is explicitly selected. - This ensures tuning parameters such as learning rate and momentum actually affect training instead of being ignored by automatic optimizer selection. - MongoDB-based tuning now uses safer atomic coordination, preventing multiple workers from incorrectly claiming the default configuration. - **Clearer tuning fitness plots** 📈 - `tune_fitness.png` now shows overall fitness progression, the best result achieved so far, and initial-versus-best fitness for each dataset. - The new layout is easier to interpret, especially for multi-dataset tuning runs. - **Expanded and clarified tracking documentation** 🎥 - Documentation now lists six built-in trackers: TrackTrack, BoT-SORT, ByteTrack, OC-SORT, Deep OC-SORT, and FastTracker. - **TrackTrack is documented as the default tracker**, with optional ReID and camera-motion compensation. - Tracking guidance now more clearly explains confidence thresholds, low-confidence recovery, custom ReID models, and task-specific behavior for segmentation, pose, and OBB models. - Tracker-specific training is clarified: users train a detection, segmentation, pose, or OBB model, then apply tracking during inference. - **More complete dataset license metadata** 📚 - Added or corrected license information for MNIST, Global Wheat2020, PASCAL VOC, KITTI, and official depth datasets. - Depth8 and SUN RGB-D are now explicitly marked as having no specified source license where applicable. - Export documentation across ONNX, TensorRT, OpenVINO, LiteRT, Hailo, QNN, Rockchip, and other formats now reflects the expanded `fraction` behavior. ##### 🎯 Purpose & Impact - **Faster experimentation:** Quickly train or calibrate on a known number of images without creating duplicate dataset copies. - **Lower storage and bandwidth usage:** Platform NDJSON datasets no longer need to download every image before applying a count-based limit. - **More reliable tuning:** AdamW makes the default tuning search spaces effective, while MongoDB coordination avoids duplicate baseline trials in concurrent runs. - **Better reproducibility:** Deterministic NDJSON subset selection makes repeated experiments more consistent. - **Improved deployment workflows:** Fixed-size calibration subsets are now easier to use across supported export formats, helping reduce INT8 calibration time. - **Clearer tracking decisions:** Users can more easily choose a tracker and understand the trade-offs between speed, ReID, camera-motion compensation, and occlusion handling. - **No major model architecture changes:** This release primarily improves data handling, tuning reliability, tracking usability, and documentation rather than introducing a new model family. ##### What's Changed * Fix concurrent MongoDB tuner default claims by @glenn-jocher in https://github.com/ultralytics/ultralytics/pull/25939 * Fix _[Truncated at 4000 characters — full notes: https://github.com/ultralytics/ultralytics/releases/tag/v8.4.130]_ ### v8.4.129 — v8.4.129 - Delegate multi-dataset tuning to MultiTrainer (#25937) - Date: 2026-08-25 - Version: v8.4.129 - Original notes: https://github.com/ultralytics/ultralytics/releases/tag/v8.4.129 - Permalink: https://whatsnew.fyi/product/ultralytics/releases/v8.4.129 - **changed** — Multi-dataset tuning is now managed by MultiTrainer, removing duplicated dataset orchestration from the tuner and running each dataset training job in an isolated YOLO CLI subprocess - **added** — BF16 mixed-precision training support with amp parameter accepting True, False, fp16, bf16, and fp32 - **changed** — Improved YOLO26 LiteRT exports for GPU delegates by reworking detection-head indexing and gathering to use operations better supported by GPU accelerators - **changed** — Parallelized large batch image decoding and FastSAM CLIP crop preprocessing for improved preprocessing speed - **changed** — ONNX CPU benchmarking now uses the shared ONNXBackend with configurable session options and multi-input model support - **added** — Added imread_unicode for image paths containing non-ASCII characters on Windows - **changed** — Progress-bar redraws are now transmitted as live state rather than ordinary log lines for more reliable progress reporting to the Ultralytics Platform - **changed** — TensorRT tests now validate exported engines on task-specific datasets - **changed** — Detection postprocessing is now shared across Detect, Segment, Pose, OBB, and related heads - **changed** — Disk cleanup is skipped for JetPack Docker builds to retain sufficient runner swap space for native Jetson builds ##### 🌟 Summary **v8.4.129** improves multi-dataset hyperparameter tuning, training precision, model export acceleration, data loading, and platform reliability—without introducing a new model architecture. 🚀 ##### 📊 Key Changes - **Multi-dataset tuning is now managed by `MultiTrainer`** *(PR #25937, @glenn-jocher)*: - Removes duplicated dataset orchestration from the tuner. - Runs each dataset training job in an isolated YOLO CLI subprocess. - Preserves YOLOWorld and YOLOE checkpoint filename handling. - Records individual dataset metrics, macro-mean metrics, and cleanup paths. - Improves distributed MongoDB tuning by safely assigning defaults and identifying winning runs by their result paths instead of worker-local indexes. - Validated with single-dataset and five-dataset MongoDB tuning runs. ✅ - **Added BF16 mixed-precision training** *(PR #25931, @artest08)*: - `amp` now accepts `True`, `False`, `"fp16"`, `"bf16"`, and `"fp32"`. - BF16 uses less memory than FP32 while offering greater numerical range than FP16. - Gradient scaling is correctly disabled for BF16. - Supported CUDA hardware is required for native BF16 training. - **Improved YOLO26 LiteRT exports for GPU delegates** *(PR #25914, @Y-T-G)*: - Reworked detection-head indexing and gathering to use operations better supported by GPU accelerators. - Helps keep more of the end-to-end, NMS-free detection head on the GPU instead of falling back to the CPU. - Also centralizes export-specific behavior outside the main detection head implementation. - **Faster image and FastSAM preprocessing** *(PRs #25935 and #25938, @JESUSROYETH)*: - Large batches of regular images can now be decoded in parallel while preserving input order. - FastSAM CLIP crop preprocessing is parallelized for sufficiently large CUDA workloads. - Small batches, unsupported image formats, CPU, and MPS paths retain the safer serial behavior. - **More consistent ONNX CPU benchmarking** *(PR #23924, @Laughing-q)*: - ONNX profiling now uses the shared `ONNXBackend`. - Adds configurable ONNX Runtime session options and multi-input model support. - Benchmarks now follow the same backend execution path used during inference. - **Stronger export and validation coverage**: - TensorRT tests now validate exported engines on task-specific datasets, not only through inference. - CoreML and LiteRT export helpers are documented in the API reference. - Detection postprocessing is shared across Detect, Segment, Pose, OBB, and related heads. - **Improved Windows image compatibility** *(PR #21070, @Laughing-q)*: - Added `imread_unicode` for image paths containing non-ASCII characters. - Preserves native OpenCV grayscale behavior and simplifies semantic-mask handling. - **More reliable progress reporting for Ultralytics Platform** *(PR #25905, @Y-T-G)*: - Progress-bar redraws are now transmitted as live state rather than ordinary log lines. - Reduces duplicated or cluttered logs and gives consumers a cleaner progress contract. - **Documentation and training guidance corrections**: - Clarifies YOLO26’s DFL-free `l1_loss`, pretrained-weight behavior, AutoBatch rules, AMP behavior, freezing, fine-tuning, K-Fold workflows, model YAML construction, and tuning output paths. - Adds guidance for class-name-based head weight remapping during fine-tuning. - Documents BF16 settings and supported distillation task limitations. - **Build reliability improvements for Jetson** *(PR #25930, @glenn-jocher)*: - Disk cleanup is skipped for JetPack Docker builds so native Jetson builds retain sufficient runner swap space. ##### 🎯 Purpose & Impact - **More dependable distributed tuning:** Multi-dataset experiments are now simpler to maintain, better isolated, and easier to analyze because results and output paths are tracked per dataset. MongoDB workers are also less likely to race when initializing defaults. 📈 - **More training options:** Users with compatible CUDA _[Truncated at 4000 characters — full notes: https://github.com/ultralytics/ultralytics/releases/tag/v8.4.129]_ ### v8.4.128 — v8.4.128 - Use synchronous OpenVINO batch inference (#25921) - Date: 2026-08-25 - Version: v8.4.128 - Original notes: https://github.com/ultralytics/ultralytics/releases/tag/v8.4.128 - Permalink: https://whatsnew.fyi/product/ultralytics/releases/v8.4.128 - **changed** — OpenVINO now submits each input batch as a single synchronous request and consistently uses the LATENCY performance hint instead of asynchronous requests - **changed** — TensorRT 7–10 now keeps only the detection-head Sigmoid layers in higher precision instead of affecting every matching activation - **changed** — ONNX export now caps the opset at 18 to avoid CUDA execution falling back to CPU for unsupported operations - **fixed** — RKNN INT8 export now clearly rejects unsupported non-detection tasks and recommends FP16 instead - **fixed** — Cached images are stored in a shared contiguous memory buffer to prevent DataLoader workers from duplicating the cache during forked training - **changed** — SAM auto-mask generation now encodes each crop once and reuses its features across point batches - **fixed** — FastSAM box and point prompts are clipped to image boundaries to prevent negative or out-of-range coordinates from selecting incorrect masks - **fixed** — DDP now ignores externally set RANK and LOCAL_RANK values unless a real multi-process environment is detected - **fixed** — Ray tuning correctly aggregates metrics across multiple datasets and reports the completed epoch - **fixed** — Scalar indexing now preserves bounding-box formats and instance dimensions - **fixed** — Ground-truth candidate selection is more consistent for very small boxes - **added** — NDJSON conversion now supports local image paths - **changed** — Documentation now describes tracking as a mode that runs on detection, segmentation, pose, or OBB models - **added** — Local Docker build instructions added to documentation - **added** — Task-specific K-Fold guidance expanded in documentation - **changed** — Augmentation behavior clarified in documentation - **added** — Android ExecuTorch setup documented - **changed** — YOLO26n weights used for AMP compatibility checks are now stored in the user configuration directory and reused across projects ##### 🌟 Summary **v8.4.128** improves OpenVINO reliability and batch inference, reduces RAM use during training, strengthens export behavior, and clarifies dataset, augmentation, and tracking workflows. 🚀 ##### 📊 Key Changes - **Synchronous OpenVINO batch inference — priority update** ⚡ OpenVINO now submits each input batch as a single synchronous request and consistently uses the `LATENCY` performance hint. Throughput implementations remain available internally, but mode selection is forced to latency-oriented execution to avoid hangs in `AsyncInferQueue`, particularly for dynamic INT8 batches on CPU systems. - **Improved OpenVINO efficiency and stability** 🧠 Benchmarks showed that one batched synchronous request was about twice as fast and used roughly one-third the RAM compared with splitting the batch into separate asynchronous requests. This should make OpenVINO exports more dependable in CI and production workloads, though throughput-focused applications may see different performance characteristics. - **TensorRT INT8 optimizations** 🔧 TensorRT 7–10 now keeps only the detection-head Sigmoid layers in higher precision instead of affecting every matching activation. TensorRT 11 no longer applies the unnecessary Sigmoid exclusion. This reduces model size and improves inference speed while preserving confidence calibration. - **More compatible ONNX exports** 📦 ONNX export now caps the opset at 18 to avoid CUDA execution falling back to CPU for unsupported operations. This prevents extra host-memory copies and should improve GPU inference consistency, especially for models such as RT-DETR. - **Safer RKNN exports** 📱 RKNN INT8 export now clearly rejects unsupported non-detection tasks and recommends FP16 instead. Documentation also adds updated YOLO26 FP16 and INT8 benchmarks for Rockchip devices. - **Lower RAM usage for `cache='ram'`** 💾 Cached images are stored in a shared contiguous memory buffer, preventing DataLoader workers from duplicating the cache during forked training. This should keep memory usage flatter when using multiple workers. - **SAM and FastSAM improvements** 🎯 - SAM auto-mask generation now encodes each crop once and reuses its features across point batches, reducing repeated computation. - FastSAM box and point prompts are clipped to image boundaries, preventing negative or out-of-range coordinates from silently selecting incorrect masks. - **More robust training and data utilities** 🛠️ - DDP now ignores externally set `RANK` and `LOCAL_RANK` values unless a real multi-process environment is detected. - Ray tuning correctly aggregates metrics across multiple datasets and reports the completed epoch. - Scalar indexing now preserves bounding-box formats and instance dimensions. - Ground-truth candidate selection is more consistent for very small boxes. - **Improved dataset workflows** 📚 NDJSON conversion now supports local image paths, while COCO JSON training documentation adds clearer requirements, cache warnings, and validation guidance. - **Documentation and usability updates** ✍️ Documentation now describes tracking as a **mode** that runs on detection, segmentation, pose, or OBB models; adds local Docker build instructions; expands task-specific K-Fold guidance; clarifies augmentation behavior; and documents Android ExecuTorch setup. - **AMP check weights are cached globally** 📥 The YOLO26n weights used only for AMP compatibility checks are now stored in the user configuration directory and reused across projects instead of being downloaded into the current working directory. ##### 🎯 Purpose & Impact - **More reliable deployment:** Synchronous OpenVINO execution reduces the risk of indefinite hangs and makes batch inference more predictable across Intel and AMD CPU environments. ✅ - **Better performance on supported hardware:** TensorRT and ONNX changes reduce unnecessary precision constraints and CPU fallback operations, p _[Truncated at 4000 characters — full notes: https://github.com/ultralytics/ultralytics/releases/tag/v8.4.128]_