Releases: ultralytics/ultralytics
Release list
v8.4.120 - Avoid nondeterministic CUDA anchor cumsum (#25806)
🌟 Summary
Ultralytics 8.4.120 improves CUDA training determinism and TensorFlow export reliability, while expanding documentation for LLM workflows and AI coding-agent integrations. 🚀
📊 Key Changes
-
Deterministic CUDA anchor generation by @glenn-jocher
- Replaced CUDA cumulative-sum operations with deterministic
arange-based generation when creating detection anchors. - Removes recurring
cumsum_cuda_kernelwarnings during deterministic training. - Preserves runtime device handling for traced and TorchScript GPU models, avoiding device information being incorrectly fixed during tracing.
- Replaced CUDA cumulative-sum operations with deterministic
-
More reliable TensorFlow exports 🛠️
- Removed the obsolete NVIDIA package index from TensorFlow and non-YOLO export dependency installation.
onnx-graphsurgeoncan now be installed directly from PyPI, reducing DNS and connectivity issues—especially in CPU-based CI environments and isolated export setups.
-
New Ultralytics LLM documentation 🤖
- Documents the OpenAI-compatible
LLMinterface for text, image, streaming, asynchronous, provider-specific, and YOLO-combined workflows. - Provides examples for OpenAI-compatible services such as DeepSeek, Kimi, Z.AI GLM, OpenRouter, and local servers.
- Updates the default documented and runtime model to
gpt-5.6-luna.
- Documents the OpenAI-compatible
-
New Agent Skills integration guide 🧩
- Documents the official
ultralytics/skillsrepository. - Covers AI-agent skills for model selection, datasets, training, tuning, inference, and export.
- Includes installation guidance for Claude Code, Codex, and other compatible agents.
- Documents the official
-
Version update
- Bumped the Ultralytics package version from
8.4.119to8.4.120.
- Bumped the Ultralytics package version from
🎯 Purpose & Impact
- ✅ Cleaner deterministic training logs: Users no longer see repeated CUDA cumsum warnings that can obscure important training messages.
- ✅ More predictable model tracing: TorchScript and traced GPU models retain runtime device behavior without sacrificing the deterministic anchor-generation fix.
- ✅ Smoother TensorFlow export setup: Fewer external package-index dependencies should improve export reliability in restricted networks, CI pipelines, and CPU-only environments.
- ✅ Better LLM discoverability: Developers can more easily connect YOLO detection results with language and vision models through a consistent interface.
- ✅ Improved AI-assisted development: Agent Skills provide structured, workflow-specific guidance for using Ultralytics tools with supported coding agents.
- ℹ️ No major model architecture changes were introduced in this release; the primary technical improvement is improved determinism and export robustness.
What's Changed
- Document the OpenAI-compatible LLM interface by @onuralpszr in #25789
- Document Ultralytics Agent Skills by @JaviChulvi in #25787
- Avoid nondeterministic CUDA anchor cumsum by @glenn-jocher in #25806
New Contributors
- @JaviChulvi made their first contribution in #25787
Full Changelog: v8.4.119...v8.4.120
v8.4.119 - Enable OpenVINO NPU_TURBO for classification models on supported NPUs (#25784)
🌟 Summary
v8.4.119 improves Intel NPU classification performance with OpenVINO, strengthens detection and tracking reliability, expands Platform integration, and refreshes documentation and developer tooling. 🚀
📊 Key Changes
-
⚡ OpenVINO NPU_TURBO for classification
- Enables
NPU_TURBOautomatically for classification models running on supported Intel NPU devices. - Applies only when the device advertises support, preserving existing behavior for other tasks, devices, and drivers.
- Measured classification latency improvements of approximately 42–52% on an Intel Core Ultra 9 185H, with bit-identical accuracy across tested configurations.
- Turbo mode is intentionally limited to classification because larger image sizes showed little benefit and could consume unnecessary power.
- Enables
-
🔌 Platform SDK exposed from
ultralytics- Python 3.11+ users can access
Platform,AsyncPlatform,APIError, andAPIConnectionErrordirectly from the main package. - Imports are lazy, so the SDK is loaded only when needed.
- Python 3.8–3.10 users receive a clear compatibility message when requesting Platform exports.
- Python 3.11+ users can access
-
🛰️ More efficient Platform training callbacks
- Subsequent metrics, telemetry, and model uploads now reuse the registered model ID instead of repeatedly resolving project and model names.
- Reduces internal Platform traffic and improves reliability during long training runs.
-
🛡️ Improved tracking robustness
- BYTETracker now ignores detections with zero or negative width or height before creating tracks, preventing invalid Kalman filter states.
- Kalman filter operations were simplified to use direct slicing instead of unnecessary matrix operations.
- Removed redundant array copies in multi-object tracking paths.
-
🎯 Safer detection export postprocessing
- Detection top-k selection is now limited to the number of available anchors.
- Prevents export failures on very small input sizes while preserving normal behavior for standard inputs.
-
🧩 Corrected CopyPaste augmentation probability
- The
CopyPastetransform now respects its configured probability in flip mode. - Previously, eligible images could receive the augmentation unconditionally.
- The
-
📚 Documentation and usability updates
- Updated supported-task banners to cover all seven supported tasks, including semantic segmentation and depth estimation.
- Added the
Cmd/Ctrl+Deleteimage-deletion shortcut to the Platform annotation guide. - Added a YOLO26 LiteRT export and mobile deployment tutorial video.
- Restored light, dark, and system theme controls in the documentation.
- Removed documentation embeds that did not render correctly on the live site.
- Improved ASCII string checks using Python’s built-in string operation for faster annotation rendering.
-
🧰 CI maintenance
- Updated the self-hosted runner cleanup action used across several CI jobs.
🎯 Purpose & Impact
- 🚀 Faster edge inference: Supported Intel NPU users running classification models should see substantially lower latency without sacrificing accuracy.
- 🔋 Better power awareness: Restricting turbo mode to classification avoids enabling a potentially costly optimization where it provides little practical benefit.
- 🤝 Simpler Platform development: Python 3.11+ applications can use Platform SDK functionality through familiar top-level
ultralyticsimports. - 📈 More reliable training runs: Model ID reuse reduces repeated lookup work and supports smoother metric streaming and checkpoint uploads.
- 🛡️ Fewer runtime and export failures: Invalid tracking boxes and small-input detection exports are handled safely instead of producing corrupted states or indexing errors.
- 🎛️ More predictable augmentation: CopyPaste now behaves according to its documented probability setting.
- 🌐 Improved user experience: Refreshed documentation, working theme controls, clearer task coverage, and better Platform guidance make the ecosystem easier to use for both new and experienced users.
What's Changed
- Update supported tasks banner by @raimbekovm in #25788
- Document Platform image delete shortcut by @glenn-jocher in #25791
- Use model IDs for Platform training callbacks by @glenn-jocher in #25793
- Bump eviden-actions/clean-self-hosted-runner from v1.4.36 to v1.4.37 in /.github/workflows by @UltralyticsAssistant in #25797
- Add https://youtu.be/FmgrfmZlhpY to docs by @RizwanMunawar in #25795
- Expose Platform SDK from ultralytics by @glenn-jocher in #25800
- Restore dark theme palette in docs configuration by @onuralpszr in #25802
- Replace the per-character
is_asciiloop withstr.isascii()by @raimbekovm in #25801 - Remove the two docs embeds that do not render on the live site by @raimbekovm in #25792
- fix: add probability guard to CopyPaste in flip mode by @Rahulbiradar9 in #25796
- Clamp detection top-k to available anchors by @Dorablank in #25771
- Replace selection-matrix matmuls with direct slicing in the Kalman filter by @JESUSROYETH in #25770
- Reject zero/negative-height detections before track creation in
BYTETrackerby @JESUSROYETH in #25769 - Enable OpenVINO NPU_TURBO for classification models on supported NPUs by @synml in #25784
New Contributors
- @Dorablank made their first contribution in #25771
Full Changelog: v8.4.118...v8.4.119
v8.4.118 - Add standalone LLM model interface (#25761)
🌟 Summary
Ultralytics v8.4.118 introduces a standalone OpenAI-compatible LLM interface alongside YOLO, while improving OBB training, dataset handling, model training reliability, and documentation workflows. 🚀
📊 Key Changes
-
🤖 New standalone
LLMmodel interface by @glenn-jocher- Add
from ultralytics import LLMfor text and image-based language-model requests. - Supports OpenAI Responses and Chat Completions APIs, including synchronous and asynchronous calls.
- Accepts images from local paths, URLs, data URLs, NumPy arrays, and PIL images.
- Supports reusable prompts, request overrides, conversation state, API keys, and OpenAI-compatible service endpoints.
- Uses the optional
openaidependency and remains independent of Ultralytics Platform and workflow-runtime components.
- Add
-
📐 Improved oriented bounding box training
- Mosaic, CutMix, and RandomPerspective now preserve OBB orientation when objects are clipped by image boundaries.
- Prevents clipped objects from receiving incorrect rotation angles during training.
-
⚡ Faster CopyPaste augmentation
- Batches instance concatenation instead of repeatedly copying growing arrays.
- Reduces unnecessary processing overhead, especially when many objects are copied.
-
🧠 More reliable YOLOE behavior
- Validates visual prompts before modifying model state.
- Accepts flat prompts for supported batched image sources.
- Rejects invalid string class labels and mismatched vocabularies earlier with clearer errors.
- Preserves gradient settings when converting YOLOE convolution layers to linear layers.
-
🏋️ Training and inference stability fixes
- Correctly resets dataloader workers when resuming after Mosaic augmentation is closed.
- Allows repeated
train()andtune()calls on the same model object. - Prevents duplicate World model callbacks across multi-dataset training.
- Fixes classification prediction for models without predefined transforms.
- Ensures classification validation loaders do not discard samples when compiling.
- Fixes SAM and related predictor models being created with incompatible inference-only tensors.
-
🗂️ Dataset and prediction improvements
- Classification auto-splitting now recognizes all supported image formats, including JPEG, BMP, WebP, TIFF, AVIF, HEIC, and uppercase extensions.
- Missing classification images now raise a clear
FileNotFoundErrorinstead of failing later with an unrelated directory error. - Preserves original filenames when loading images after EXIF correction.
- Keeps bounding-box fallbacks for malformed grounding segmentation labels.
-
📚 Documentation and deployment updates
- Standardizes strict documentation validation on Zensical and updates contributor instructions.
- Documentation redeployment now detects Python docstring and all configuration-file changes.
- Restores model benchmark chart placeholders, including for YOLO26, while moving production site features to the centralized publisher.
- Documents replacing the model behind an existing deployment without changing its endpoint URL, API key, or deployment identity.
- Updates Albumentations examples for current 2.x constructor names and refreshes the Rust inference dependency to
0.0.34. - Adds API reference documentation for the new
LLMinterface.
🎯 Purpose & Impact
- 🚀 Broader AI capabilities: Developers can now use Ultralytics as a unified entry point for YOLO vision models and OpenAI-compatible language models, including multimodal image understanding.
- 🔌 Flexible integration: The new
LLMclass works with OpenAI and compatible providers without requiring Platform or workflow features. - 🎯 Better OBB accuracy: Rotated-object datasets should receive more consistent training targets when augmentation crops objects at image edges.
- ⚡ Improved performance: CopyPaste augmentation can run more efficiently, particularly on images containing many instances.
- 🛡️ More predictable training: Resume, compile, repeated training, World models, SAM, and classification workflows are less likely to produce silent errors or invalid results.
- 🧰 Easier maintenance: Broader dataset format support, clearer validation errors, and more accurate documentation reduce setup and debugging time for users.
What's Changed
- Preserve OBB orientation through clipped augmentations by @Nikhi00718 in #25723
- Redeploy docs when Python or cfg sources change by @glenn-jocher in #25733
- Standardize Docs validation on Zensical by @glenn-jocher in #25736
- Simplify strict Docs validation and restore model charts by @glenn-jocher in #25738
- Document deployment model replacement by @glenn-jocher in #25745
- Remove the YOLO11 podcast audio embed by @raimbekovm in #25765
- Align grounding segmentation fallback by @raimbekovm in #25743
- Batch the concatenation loop in CopyPaste.apply_instances to avoid O(n^2) growth by @JESUSROYETH in #25732
- Update the Albumentations examples to the 2.x constructor arguments by @raimbekovm in #25759
- Standardize export data defaults by @raimbekovm in #25742
- Cache external test assets before pytest by @glenn-jocher in #25737
- Accept all image formats in classification auto-split and report missing images instead of crashing by @doublecurry in #25749
- Validate yoloe visual prompts by @raimbekovm in #25744
- Reject a short YOLOE vocabulary before the head is re-parameterized by @raimbekovm in #25747
- Build loaded models outside inference mode by @raimbekovm in #25748
- Register the World pretrain hook once per model by @raimbekovm in #25758
- Build the name=model save directory from the model stem by @raimbekovm in #25763
- Reset dataloader workers when resuming after mosaic closure by @JESUSROYETH in #25762
- Restore the model override after training by @raimbekovm in #25760
- Fix:
autocast_listloses image filename afterexif_transposeby @Q-qqq in #25741 - Fix classification predict crash when the model has no transforms by @ahmet-f-gumustas in #25735
- Build SAM predictor models outside inference mode by @raimbekovm in #25756
- fix: only apply
drop_lastto the classify train loader undercompile, not val by @JESUSROYETH in #25734 - Revert "Build loaded models outside inference mode" by @glenn-jocher in #25768
- Name the ImageNet pseudo-label teacher checkpoints and correct stored dtype by @Bovey0809 in #25754
- Bump ultralytics-inference docs version to 0.0.34 by @onuralpszr in #25778
- Add standalone LLM model interface by @glenn-jocher in #25761
New Contributors
- @doublecurry made their first contribution in #25749
Full Changelog: v8.4.117...v8.4.118
v8.4.117 - Route spatial Albumentations by type and carry masks, polygons and keypoints through it (#25633)
🌟 Summary
v8.4.117 improves augmentation correctness, model reliability, deployment safety, and documentation across Ultralytics YOLO and YOLO26. 🚀
📊 Key Changes
-
🧩 Albumentations now handles spatial transforms by type
- PR #25633 replaces the fragile hardcoded transform-name list with recursive type detection, so wrapped transforms such as
OneOfcorrectly update annotations. - Spatial augmentations now carry bounding boxes, polygons, masks, depth maps, and keypoints through the pipeline.
- Background-only images receive pixel-level augmentations even when they have no annotations.
- Keypoint flipping respects the configured
flip_idxmapping. - Probability handling now makes a zero probability a reliable off switch.
- Unsupported topology-changing transforms, such as grid shuffling with polygons or keypoints, are detected instead of silently corrupting labels.
- PR #25633 replaces the fragile hardcoded transform-name list with recursive type detection, so wrapped transforms such as
-
🔐 Improved security for dependency installation
check_requirements()now prevents untrusted requirement strings from being interpreted as shell commands.- This protects workflows that automatically install missing dependencies while loading model files.
-
🛡️ More reliable dataset and mask processing
- Fixed Windows semantic-mask shape handling so grayscale masks remain two-dimensional and semantic training no longer fails during Mosaic augmentation.
- COCO conversion now keeps one consistent label format per file, warns about unusable polygons, and falls back to box-shaped polygons when necessary.
- Mixed detection and segmentation rows are rejected instead of being silently misread.
- Grounding dataset caching and validation were improved, including clearer errors for empty or invalid annotation sets.
- Degenerate polygon contours are skipped when exporting labels.
-
🧠 Depth estimation improvements
- Depth postprocessing now aligns PyTorch, Hailo, and exported-model outputs before removing padding, producing more consistent results across inference backends.
- Depth validation no longer inherits rectangular batching behavior that conflicts with its intentional square stretching.
- The KITTI depth configuration now uses the canonical 652-frame left-camera evaluation split, avoiding test-set overlap and making reported results more reproducible.
- Depth metrics and documentation were updated to reflect per-image evaluation behavior.
-
⚡ Faster and more consistent inference
- YOLO26 end-to-end postprocessing uses grouped top-k selection, improving TensorRT FP16 latency by approximately 1.8% to 8.1% without changing mAP.
- RT-DETR FLOPs profiling is faster and now supports attention-based decoder architectures correctly.
- SavedModel INT8 calibration avoids an unnecessary NumPy copy.
- GMC tracking now handles textureless frames and incomplete feature matches without stopping, allowing tracking to recover cleanly.
- SAM3 video masks use the model’s configured threshold consistently instead of a fixed threshold.
-
🎯 Expanded model and training support
- Pose training now accepts dataset-defined
kpt_oks_sigmas, with validation that the configuration matches the model’s keypoint count. - OBB utilities handle empty inputs more safely, and documentation clarifies long-edge canonicalization and prediction formats.
- Predictors now report unsupported options such as augmentation, embeddings, and visualization instead of silently ignoring them.
- Cached predictors are refreshed after training so predictions use the newly trained weights and class names.
- Embedding requests now provide clearer errors for exported or third-party models that do not expose compatible internal layers.
- YOLOE class and visual-prompt validation was strengthened, supporting more reliable prompt-free vocabulary workflows.
- Pose training now accepts dataset-defined
-
📚 Documentation and platform updates
- Export documentation now covers additional options such as
name,split,conf,iou,max_det, andagnostic_nms. - Classification dataset inputs are consistently documented as directories or built-in dataset names rather than YAML files.
- Added reusable depth-speed comparison documentation and a new YAML2ModelGraph integration guide for generating YOLO architecture diagrams from model YAML files.
- Added Platform troubleshooting guidance for datasets, training, deployment, billing, and common questions.
- FAQ and supporting sections were reorganized for more consistent documentation rendering.
- Rust inference documentation now references
ultralytics-inferenceversion0.0.33. - Documentation publishing is now restricted to the
mainbranch to prevent accidental production releases.
- Export documentation now covers additional options such as
🎯 Purpose & Impact
- ✅ More trustworthy augmentation: Labels and auxiliary data remain aligned when using custom or nested Albumentations pipelines, reducing silent training errors.
- 🧪 Better training stability: Depth, semantic segmentation, pose, OBB, grounding, and tracking workflows handle edge cases more gracefully.
- 🚀 Improved deployment performance: YOLO26 TensorRT exports can achieve lower postprocessing latency, while depth predictions behave more consistently across backends.
- 🔒 Safer model loading: Dependency checks no longer expose shell execution risks through malicious requirement strings.
- 📊 More reproducible evaluation: The corrected KITTI split and clarified depth metrics make comparisons easier to interpret, although results from older downloaded datasets may require rebuilding.
- 📖 Clearer user experience: Updated documentation explains task-specific inputs, export controls, model limitations, and platform troubleshooting in more practical terms.
What's Changed
- Bump eviden-actions/clean-self-hosted-runner from v1.4.35 to v1.4.36 in /.github/workflows by @UltralyticsAssistant in #25711
- Bump ultralytics-inference version to 0.0.33 in documentation by @onuralpszr in #25712
- Publish docs only from main by @glenn-jocher in #25713
- Move the Depth Anything V2 speed table into a docs macro by @raimbekovm in #25715
- Fix Windows semantic mask shape regression by @Y-T-G in #25721
- Document the predictor data attribute as the args copy it holds by @raimbekovm in #25692
- Threshold SAM3 video semantic masks at the model logit threshold by @JESUSROYETH in #25643
- Fix shell injection in check_requirements() via untrusted requirement strings by @Zenka737 in #25720
- Document max_det, iou, conf export arguments by @raimbekovm in #25675
- feat: clarify confusion matrix confidence threshold during validation by @Rahulbiradar9 in #25677
- fix GMC empty descriptor handling by @Nikhi00718 in #25709
- Fix redundant SavedModel INT8 calibration copy by @amanharshx in #25639
- Fix depth val silently overriding its own stretch letterbox with inherited
rect=Trueby @JESUSROYETH in #25646 - Document the OBB long-edge canonicalization, convert empty box inputs, and skip degenerate segment contours by @raimbekovm in #25655
- Use the Hailo Model Zoo quantization recipe for YOLO26 HEF export by @nivosco in #25687
- Document the confidence threshold used for the val confusion matrix (#25674) by @Parth1353 in #25722
- Write one label format per file in convert_coco and document the classification data input by @raimbekovm in #25672
- Grouped topk e2e postprocess by @artest08 in #25666
- Speed up RT-DETR FLOPs profiling by @Daniiiil1 in #25652
- Document missing export and predict arguments and the classification data directory by @raimbekovm in #25690
- Support optional kpt_oks_sigmas in v8PoseLoss for training by @cosmo-gb in #25656
- Name the classification input in the export calibration, benchmark and tuner data rows by @raimbekovm in #25698
- Report unimplemented predict arguments, refresh the predictor after training, and register tracker callbacks once per model by @raimbekovm in #25688
- Remove brittle Hailo model-specific recipe by @glenn-jocher in #25728
- Move documentation FAQs to page ends by @glenn-jocher in #25730
- Use Ultralytics YOLO in task page titles and lead copy by @miles-deans-ultralytics in #25705
- Align depth postprocessing across inference backends by @JESUSROYETH in #25628
- Validate YOLOE classes and enable prompt-free vocabulary workflows by @raimbekovm in #25691
- Fix grounding label scanning, caching, and reporting by @raimbekovm in #25678
- Fix the KITTI Eigen test split: 3 test drives were in train by @JESUSROYETH in #25650
- Fix unbounded per-track solution state in continuous streams by @JESUSROYETH in https://github.com/ultralytics/ultralytics/...
v8.4.116 - Raise minimum `opencv-python` to 4.7.0 (#25702)
🌟 Summary
🚀 v8.4.116 improves installation reliability, expands YOLOE and Platform workflows, strengthens tracking and export support, and refreshes YOLO26 documentation.
📊 Key Changes
-
🔧 OpenCV compatibility fix — current PR #25702 by @Y-T-G
- Raises the minimum
opencv-pythonversion from4.6.0to4.7.0. - Keeps the exclusion for
4.13.0.90, which is affected by a FIPS self-test crash. - Removes an outdated ONNX DNN backend requirement check.
- This aligns the dependency with
cv2.imdecodemulti, which Ultralytics uses internally.
- Raises the minimum
-
🧠 Reusable YOLOE prompt embeddings
- Adds
save_prompt_embeddings()andload_prompt_embeddings()for storing text or visual prompt configurations in NPZ files. - Profiles are validated against the source YOLOE model and can be reused before exporting to formats such as ONNX, OpenVINO, TensorRT, CoreML, LiteRT, and RKNN.
- Exported models remain standard single-input models and do not require the NPZ file at runtime.
- Adds
-
📚 Improved model guidance
- Reworks the model index into a task-and-mode comparison table.
- Positions YOLO26 as the recommended model for new projects, with YOLO11 as a mature production alternative.
- Clarifies support for YOLO12, OBB, SAM models, YOLOE, YOLO-World, RT-DETR, and other model families.
- Adds a YOLO26 custom-dataset training video and highlights monocular depth estimation.
-
🎯 Broader and safer tracking support
- Documents and supports OBB tracking alongside detection, segmentation, and pose.
- Rejects unsupported semantic and depth tracking tasks with a clear error before processing begins.
- Skips unnecessary camera-motion compensation work when
gmc_method: none. - Keeps OC-SORT observation history bounded on all track lifecycle paths.
-
📦 More efficient model export
- Streams ONNX and QNN calibration data instead of retaining all transformed images in memory.
- Reduces calibration memory usage substantially for large datasets.
- Updates anchor creation to use CoreML-friendly tensor operations, improving dynamic CoreML export compatibility.
-
🧪 Depth and segmentation fixes
- Excludes ground-truth depth values outside the configured valid range during calibration, keeping calibration consistent with validation metrics.
- Fixes FP16 segmentation with class-agnostic NMS.
- Preserves YOLOE one-to-one classifier weights during linear probing, preventing a severe accuracy drop.
- Makes pose activation-map gradients compatible with autograd and
torch.compile.
-
🖼️ Visualization and analytics improvements
- Restores percentage labels in analytics pie charts.
- Speeds up semantic-mask overlay rendering by replacing repeated full-image scans with a palette lookup.
-
☁️ Expanded Ultralytics Platform workflows
- Adds documented custom metadata support for datasets, images, projects, and models.
- Supports nested metadata, metadata search, NDJSON image metadata, and Dataset Ingest API uploads.
- Refreshes Platform integration screenshots and documents native Platform support for YOLOv8 and YOLOv5.
- Refactors Platform callbacks to load only where needed, reducing unnecessary imports in prediction, validation, and export paths.
-
🛡️ Reliability and infrastructure
- Makes downloads atomic, preventing concurrent test or application processes from reading partially written files.
- Updates CI runner images to Node.js 24 for compatibility with newer tooling.
- Refreshes OpenVINO benchmark data across Intel CPUs and NPUs.
- Improves documentation deployment detection when configuration defaults change.
🎯 Purpose & Impact
- ✅ Fewer installation failures: Users relying on OpenCV image decoding now receive a compatible version automatically.
- 🚀 Simpler YOLOE deployment: Prompt configurations can be prepared once and reused across multiple export targets.
- 💾 Lower memory usage: Large ONNX and QNN calibration jobs are more practical, especially on limited-memory systems.
- 🎥 More capable tracking: OBB tracking is now clearly supported, while unsupported tasks fail with actionable messages instead of obscure runtime errors.
- 📈 Better model fine-tuning: YOLOE linear probing and depth calibration now preserve pretrained performance more reliably.
- 🧩 Improved deployment compatibility: Dynamic CoreML exports and FP16 segmentation workflows are more robust.
- 🔍 Better Platform organization: Custom metadata helps teams track provenance, review status, equipment, projects, and deployment context.
- 📖 Clearer onboarding: The refreshed model documentation makes it easier to choose the right Ultralytics model and understand its supported modes.
What's Changed
- Fix analytics pie chart percentage labels by @rudrakumar07 in #25600
- Prevent concurrent download cache corruption by @glenn-jocher in #25612
- Fix dynamic CoreML anchor export by @glenn-jocher in #25619
- Refactor Ultralytics Platform integration by @glenn-jocher in #25622
- Fix FP16 end-to-end segmentation with class-agnostic NMS by @JESUSROYETH in #25613
- Preserve YOLOE one-to-one classifiers during linear probing by @Y-T-G in #25607
- Name the PyPI version check step by @MGPOCKY in #25606
- Stream ONNX and QNN calibration data by @amanharshx in #25617
- Exclude out-of-range ground truth from depth calibration by @JESUSROYETH in #25614
- Build semantic overlays in a single pass by @JESUSROYETH in #25585
- Add reusable YOLOE prompt embedding profiles by @zgh2022 in #25572
- Remove stale reproduce command from Chinese depth notes by @glenn-jocher in #25624
- Refresh Platform integration screenshots by @glenn-jocher in #25627
- Update
openvino 2026.2.1benchmarks with Intel 155H, 258V and 358H systems by @lakshanthad in #25360 - Docs: Update "What is Ultralytics Platform?" section (include YOLOv8 & YOLOv5) by @sergiuwaxmann in #25641
- Add https://youtu.be/7lZa3Yi2kbo to docs by @RizwanMunawar in #25642
- Update docs landing new banner to depth estimation by @raimbekovm in #25645
- docs: Update depth estimation tip to specify monocular depth estimation by @onuralpszr in #25649
- Bump eviden-actions/clean-self-hosted-runner from 1 to 1.4.34 in /.github/workflows by @dependabot[bot] in #25651
- Include OBB in the tracking task summaries by @raimbekovm in #25661
- Skip the GMC warp when a tracker sets
gmc_method: noneby @raimbekovm in #25636 - Bound the OC-SORT observation history on every recording path by @raimbekovm in #25638
- Refuse semantic and depth tracking instead of crashing by @raimbekovm in #25665
- Upgrade CI runner images to Node 24 by @glenn-jocher in #25673
- Bump eviden-actions/clean-self-hosted-runner from v1.4.34 to v1.4.35 in /.github/workflows by @UltralyticsAssistant in #25680
- Reorder the models nav and replace the index list with a task and mode chooser by @raimbekovm in #25659
- Document image upload metadata by @glenn-jocher in #25697
- Deploy docs when
ultralytics/cfg/default.yamlchanges by @raimbekovm in #25663 - Fix pose activation map gradients by @glenn-jocher in #25694
- Document custom metadata for platform resources by @glenn-jocher in #25700
- Raise minimum
opencv-pythonto 4.7.0 by @Y-T-G in #25702
New Contributors
Full Changelog: v8.4.115...v8.4.116
v8.4.115 - Deprecate HUB in favor of Ultralytics Platform (#25608)
🌟 Summary
v8.4.115 transitions Ultralytics from legacy HUB integrations to the streamlined Ultralytics Platform experience, with simpler authentication and a leaner training codebase. 🚀
📊 Key Changes
-
🔐 Introduced validated Platform CLI authentication
- Log in with
yolo login API_KEY - Remove credentials with
yolo logout - API keys are checked against the Platform before being saved.
- Log in with
-
🔄 Added settings migration to schema
0.0.7- Existing compatible settings, such as custom dataset and run directories, are preserved.
- Legacy HUB configuration and incompatible HUB API keys are removed automatically.
- Users with old credentials are directed to create a Platform API key.
-
🧹 Removed the legacy
ultralytics.hubpackage- HUB authentication, remote training sessions, model loading, exports, dataset utilities, callbacks, and HUB-specific exceptions have been retired.
- HUB-related API references, documentation pages, navigation entries, and the HUB example notebook were also removed.
-
🧠 Simplified model and trainer workflows
- Models no longer load directly from HUB URLs.
- Training no longer manages HUB sessions, remote checkpoints, heartbeats, or HUB-specific training arguments.
- Platform callbacks remain available for streaming training information.
-
📚 Updated documentation and examples
- Guides, notebooks, CLI help, and API documentation now reference the Ultralytics Platform instead of HUB.
- Platform authentication and login commands are included in the quickstart and CLI documentation.
-
✅ Expanded test coverage
- Added tests for settings migration, API-key validation, login, and logout behavior.
🎯 Purpose & Impact
- ✨ A clearer user experience: Platform is now the primary destination for dataset management, training, and deployment, avoiding confusion between HUB and Platform services.
- ⚡ Simpler authentication: The new
yolo logincommand validates credentials directly and provides a more intuitive alternative to manually editing settings. - 🛠️ Cleaner and easier-to-maintain code: Removing obsolete HUB components reduces dependencies, integration complexity, and potential maintenance issues.
- 🔒 Safer upgrades: Existing user settings are migrated instead of being reset, while outdated or incompatible HUB keys are discarded.
⚠️ Compatibility consideration: Applications that importultralytics.hub, use HUB training sessions, load models from HUB URLs, or rely on HUB-specific utilities must migrate to Ultralytics Platform workflows.- 🚀 Recommended next step: Create a Platform API key and authenticate with:
yolo login YOUR_API_KEYFor no-code dataset annotation, training, and deployment, use the Ultralytics Platform.
What's Changed
- Deprecate HUB in favor of Ultralytics Platform by @sergiuwaxmann in #25608
Full Changelog: v8.4.114...v8.4.115
v8.4.114 - Surface Platform error messages and stop the console-output retry loop (#25581)
🌟 Summary
v8.4.114 improves reliability across Platform workflows, exported models, validation, edge inference, and advanced vision tasks—while delivering clearer errors and faster, more robust execution. 🚀
📊 Key Changes
-
Clearer Ultralytics Platform errors and quieter retries — PR #25581 by @glenn-jocher:
- Platform URI resolution now uses
GETinstead ofHEAD, preserving the detailed error messages returned by the Platform. - API errors such as invalid credentials, inaccessible datasets, and malformed pose labels now include actionable details.
- Console-output upload failures no longer create a feedback loop where logged retry warnings trigger additional failed uploads.
- Platform requests now stop early when no API key is available, and invalid credentials disable further attempts.
- Platform URI resolution now uses
-
Improved exported-model validation:
- Static ONNX, TensorRT, OpenVINO, and similar models now automatically reuse the image size stored in export metadata.
- Users no longer need to manually provide the exact export
imgszduring validation. ✅
-
More reliable model export and deployment:
- Fixed GPU device mismatches during TorchScript inference by ensuring generated anchors follow the runtime device.
- Prompt-free YOLOE exports now work correctly with NCNN and Paddle formats.
- Loading a TorchScript archive as if it were a PyTorch checkpoint now produces a clearer error message.
- Paddle export compatibility was improved for newer Python and x2paddle environments.
-
Faster LiteRT CPU inference:
- LiteRT now uses the configured number of CPU threads, enabling multi-core inference.
- Raspberry Pi 5 LiteRT benchmarks were corrected for YOLO26n and YOLO26s, showing substantially lower latency than previously reported. ⚡
-
Fixes for SAM3, visualization, and pose rendering:
- SAM3 semantic prediction now defines the required mask threshold and avoids an
AttributeError. - Class activation maps safely handle class IDs outside a model’s output range.
- Pose keypoints and limbs located exactly on image borders are now rendered correctly instead of being silently dropped.
- SAM3 semantic prediction now defines the required mask threshold and avoids an
-
Improved training and data pipelines:
- BGR augmentation now applies correctly to semantic segmentation and depth training.
- Distributed validation no longer crashes when the total batch size exceeds the number of validation images.
- Dataset YAML validation handles empty
namesfields more safely. - Analytics line charts now accumulate counts across the configured update window instead of resetting every frame.
-
Documentation and maintenance updates:
- Added missing validation documentation for
channels_last. - Documented class remapping and depth-loss training parameters.
- Updated augmentation support tables for semantic and depth tasks.
- Fixed Intel DL Streamer installation links and similarity-search examples.
- Removed several redundant regression tests to reduce test-suite maintenance overhead. 📚
- Added missing validation documentation for
🎯 Purpose & Impact
- 🛠️ Faster troubleshooting: Platform failures now explain what went wrong, helping users fix dataset, authorization, and configuration issues without repeated trial and error.
- 🔁 More stable automation: Console logging will no longer feed failed messages back into Platform upload retries, reducing noisy logs and unnecessary network traffic.
- ✅ Simpler validation: Exported models can generally be validated without manually matching their original image size and batch settings.
- 🚀 Better edge performance: Multi-core LiteRT support can significantly improve CPU inference speed on devices such as Raspberry Pi 5.
- 📦 Broader deployment compatibility: TorchScript, NCNN, Paddle, and other export paths are more dependable across devices and Python environments.
- 🎯 More robust vision workflows: SAM3, pose visualization, CAM generation, depth, semantic segmentation, and distributed validation now handle common edge cases more gracefully.
- 📖 Clearer documentation: Users can more easily discover supported arguments and follow current Intel and similarity-search setup instructions.
What's Changed
- Enable multi-core Google LiteRT CPU inference by @lakshanthad in #25562
- Update Raspberry Pi 5 benchmarks with Google LiteRT using multi-cores by @lakshanthad in #25564
- Fix
AttributeErroronmask_thresholdin SAM3 semantic prediction by @JESUSROYETH in #25563 - Fix installation guide links in Intel DL Streamer documentation by @onuralpszr in #25574
- Remove tests added alongside small bug-fix PRs by @Laughing-q in #25578
- Reuse imgsz from export metadata when validating static exported models by @synml in #25559
- Document channels_last in the validation args table by @synml in #25561
- Apply the bgr augmentation to semantic and depth training by @raimbekovm in #25580
- Fix IndexError in class_activation_map with out-of-range classes by @leoventuroso in #25582
- Fix
Annotator.kpts()dropping keypoints and limbs on image borders by @JESUSROYETH in #25565 - Fix: Analytics line chart total_counts resets before update_graph consumes it by @Zenka737 in #25567
- Fix NCNN and Paddle export of prompt-free YOLOE models by @Y-T-G in #25568
- Fix DDP error when total batch size is higher than validation images by @Y-T-G in #25576
- Document depth loss gains and attribute semantic and depth in the argument tables by @raimbekovm in #25577
- fix
Pythonsyntax error insimilarity-searchsolution by @RizwanMunawar in #25579 - Fix TorchScript GPU inference device mismatch by @Y-T-G in #25569
- Surface Platform error messages and stop the console-output retry loop by @glenn-jocher in #25581
New Contributors
- @leoventuroso made their first contribution in #25582
Full Changelog: v8.4.113...v8.4.114
v8.4.113 - Add Dragonwing IQ-8275 QNN export target (#25558)
🌟 Summary
🚀 Ultralytics 8.4.113 expands Qualcomm QNN deployment to Dragonwing IQ-8275 devices, improves model visualization and export reliability, and standardizes task support documentation across the project.
📊 Key Changes
-
Qualcomm Dragonwing IQ-8275 QNN export
- Adds
iq-8275andqcs8275as QNN export targets using Qualcomm SoC model 82. - Centralizes the mapping between supported QNN targets and their HTP or SoC provider options.
- Adds documentation for supported Snapdragon and Dragonwing targets, including the unsupported IQ-615.
- Enables QNN export testing on Linux x86-64 with
onnxruntime-qnn==2.4.0. - Example usage:
model.export(format="qnn", name="iq-8275"). - Requires a compatible Qualcomm/Yocto BSP and target-side QNN, FastRPC, DSP firmware, and driver components.
- Adds
-
New class activation heatmaps for prediction 🔥
- Replaces the previous
visualize=Truefeature-map dump with a more useful LayerCAM-style heatmap. - Saves one heatmap image per input, showing which image regions influenced the predicted class scores.
- Respects confidence and class filters and is available for PyTorch models.
- Reduces output clutter compared with the former multi-file feature-map visualization.
- Replaces the previous
-
More accurate attention FLOPs reporting 📊
- THOP-based profiling now counts functional attention matrix multiplications in YOLO12 attention blocks.
- Models containing area attention are measured at the requested image size rather than extrapolated from a small stride-sized input.
- Reported GFLOPs should better reflect the real computational cost of attention-heavy models.
-
Improved RKNN and quantized export support
- Normalizes detection and pose coordinates during INT8 RKNN export to preserve class-score precision.
- Restores coordinates at runtime for RKNN inference.
- Adds compatibility handling for current
rknn-toolkit2dependencies, includingsetuptools<82. - Improves ONNX compatibility and cleans up temporary normalized graphs after export.
-
Export and runtime reliability fixes 🛠️
- Resets detection shape caches at TorchScript, ONNX, and OpenVINO export boundaries.
- Avoids redundant TorchScript retracing.
- Replaces ONNX advanced indexing with
gatherwhere needed. - Fixes YOLOE-26 prompt-free RKNN export for detection and segmentation.
- Corrects pose loss selection for end-to-end models using non-Pose26 heads.
- Prevents C2PSA failures when its channel count is below 64.
- Fixes MuSGD handling of custom model head locations and higher-rank parameters.
-
Performance and stability improvements ⚡
- Vectorizes Deep OC-SORT global motion compensation operations.
- Reduces temporary memory usage and plotting time for segmentation masks by processing them in row bands.
- Keeps accumulated heatmap overlays visible when a tracking frame temporarily contains no detections.
- Prevents grayscale video stream failures from killing readers or crashing inference.
- Makes mixed-text ordering deterministic across processes and distributed workers.
- Keeps profiler samples when runtime variance reaches zero.
-
Documentation consistency and accuracy 📚
- Establishes one canonical task and mode order across code, documentation, tables, and the Ultralytics Platform.
- Consolidates supported-task tables into a shared macro and reports model-family-specific support more accurately.
- Corrects multiple docstrings, doctest examples, export claims, task descriptions, and API references.
- Updates Hailo, QNN, GraphDef, RKNN, and other integration pages with clearer model and hardware limitations.
🎯 Purpose & Impact
- For Qualcomm users: IQ-8275 and QCS8275 devices can now be targeted directly during QNN export, simplifying deployment to Dragonwing hardware. Hardware-side BSP compatibility must still be verified.
- For model developers: Heatmaps provide a clearer way to understand model decisions, while corrected FLOPs estimates make performance comparisons more trustworthy.
- For edge deployment: RKNN and QNN improvements increase export compatibility and improve quantized inference reliability on specialized accelerators.
- For training workflows: MuSGD, pose-loss, C2PSA, and higher-rank tensor fixes reduce silent training errors and improve support for custom architectures.
- For tracking and streaming applications: Video recovery, heatmap persistence, and Deep OC-SORT updates improve robustness in real-world, imperfect inputs.
- For documentation users: Shared and empirically validated compatibility tables make it easier to determine which model family, task, and deployment target is supported. 🚀
What's Changed
- Fix the dangling chi2inv95 reference in the Kalman gating distance docstring by @raimbekovm in #25516
- Set imgsz in SAM pre_transform docstring examples by @raimbekovm in #25512
- Consolidate export task tables into a shared macro and correct unproven claims by @glenn-jocher in #25523
- docs: fix missing 'to' in Probs description by @rudrakumar07 in #25522
- keep the mixed text order stable across processes by @raimbekovm in #25540
- Vectorize the Deep OC-SORT GMC warp and drop a redundant mean copy by @raimbekovm in #25534
- Fix MuSGD head grouping for custom backbones by @fcakyon in #25532
- Fix Docker CI failures and export warnings by @glenn-jocher in #25525
- Keep profiler samples when the run time variance is zero by @raimbekovm in #25513
- Fix MuSGD batching for higher-rank parameters by @songjiahao-wq in #25317
- Fix PoseModel using PoseLoss26 for non-Pose26 heads when end2end=True by @Zenka737 in #25261
- Replace pytube/pafy with
yt-dlpfor YouTube streams by @ambitious-octopus in #16336 - Keep stream reader alive when grayscale frame read fails by @raimbekovm in #24709
- Revert "Replace pytube/pafy with
yt-dlpfor YouTube streams" by @glenn-jocher in #25546 - Count the attention matmuls YOLO12 area-attention runs functionally by @glenn-jocher in #25545
- Clarify IoA wording in Copy-Paste augmentation documentation by @gizembm in #25528
- fix: prevent C2PSA division by zero when c < 64 by @rudrakumar07 in #25517
- Fix supported-tasks table rendering on docs.ultralytics.com by @raimbekovm in #25544
- correct the declared output in fourteen docstring examples by @raimbekovm in #25543
- Remove the unmatchable printed output from the Kalman filter docstring examples by @raimbekovm in #25533
- Describe what emojis() does to the HUBModelError message by @raimbekovm in #25538
- Restore the supported-tasks macro and drop the dead model_name sets by @glenn-jocher in #25550
- Render supported tasks per model family by @glenn-jocher in #25551
- Use one canonical task and mode order everywhere by @glenn-jocher in #25552
- Replace predict feature-map dumps with class activation heatmaps by @Y-T-G in #25548
- Reduce
Annotator.masksin row bands to cut mask plotting time and memory by @JESUSROYETH in #25554 - Fix
Heatmapoverlay disappearing on frames without tracks by @JESUSROYETH in #25556 - Fix YOLOE-26 prompt-free RKNN export crash by @zgh2022 in #25536
- Fix RKNN export by pinning package versions by @lakshanthad in #25529
- Fix RKNN INT8 exports returning all-zero class scores by @JESUSROYETH in #25524
- Fix ECC global motion compensation warping against the first frame by @JESUSROYETH in #25555
- replace the set_logging stream handler instead of accumulating one per call by @raimbekovm in #25541
- Add Dragonwing IQ-8275 QNN export target by @glenn-jocher in #25558
New Contributors
- @songjiahao-wq made their first contribution in #25317
- @zgh2022 made their first contribution in #25536
Full Changelog: v8.4.112...v8.4.113
v8.4.112 - Document supported tasks for every export format (#25511)
🌟 Summary
Release v8.4.112 makes model export support much clearer and more reliable, with comprehensive task documentation across formats and a fix enabling DEEPX classification exports. 📦✅
📊 Key Changes
-
Documented supported tasks for every export format 📚
- Added consistent Supported Tasks tables to 20 integration pages.
- Clearly lists support for all seven Ultralytics tasks:
- Object detection
- Instance segmentation
- Semantic segmentation
- Pose estimation
- OBB detection
- Classification
- Depth estimation
- Documents model-family limitations, such as semantic segmentation and depth estimation being YOLO26-only for many formats.
- Explicitly identifies unsupported combinations, including:
- Axelera depth estimation
- Hailo YOLO26 instance segmentation, pose, and OBB
- Sony IMX500 semantic segmentation, OBB, and depth estimation
-
Verified export coverage across formats 🔍
- Completed 77 local export and inference checks across seven tasks.
- Coverage was verified for TorchScript, ONNX, OpenVINO, CoreML, TensorFlow formats, PaddlePaddle, MNN, NCNN, ExecuTorch, and LiteRT.
- TensorRT and RKNN support was confirmed through existing CI test matrices.
-
Fixed DEEPX classification export 🛠️
- Corrected calibration dataset discovery for classification models.
- Classification datasets store their image directory as
root, rather thanimg_path; the exporter now handles this correctly. - Updated DEEPX smoke tests to cover every task-specific default model instead of only YOLO26 detection.
-
Removed outdated GraphDef benchmark restrictions ⚡
- TensorFlow GraphDef benchmarks no longer reject OBB or pose models based on obsolete limitations.
-
Minor documentation and release updates ✨
- Updated the package version to
8.4.112. - Improved wording around Huawei Ascend, TensorFlow GraphDef, NCNN, RKNN, and Hailo support.
- Clarified that Edge TPU task support may still involve CPU execution for unsupported operations.
- Updated the package version to
🎯 Purpose & Impact
- Easier format selection: Users can now quickly determine whether their task and model family are compatible with a target export format. 🧭
- Fewer failed deployments: Explicit support tables reduce confusion caused by previously undocumented or implied limitations.
- Improved classification deployment: DEEPX users can now export classification models successfully, including through automated smoke testing.
- Better confidence in task support: Broad empirical validation helps ensure documentation reflects actual export and inference behavior.
- More accurate benchmarking: Removing outdated GraphDef checks allows supported OBB and pose workflows to be benchmarked properly.
- Important practical note: A task marked as supported does not always mean the entire model runs on the accelerator; formats such as Edge TPU may execute some operations on the CPU.
What's Changed
- Document supported tasks for every export format by @glenn-jocher in #25511
Full Changelog: v8.4.111...v8.4.112
v8.4.111 - Add Huawei Ascend NPU training support (#25500)
🌟 Summary
🚀 Ultralytics 8.4.111 expands hardware support with validated Huawei Ascend NPU training, broader accelerator compatibility, and important tracking, MPS, deployment, and documentation improvements.
📊 Key Changes
-
Huawei Ascend NPU training support 🧠
- Added single- and multi-NPU training and validation through
torch_npu. - Supports standard training features including AMP, checkpointing, resume, AutoBatch, profiling, memory management, and validation.
- Multi-NPU training uses Huawei’s HCCL distributed backend.
- Example device selections include
device=npu:0anddevice=npu:0,1. - Ascend documentation now covers the workflow from training through
.omexport and deployment.
- Added single- and multi-NPU training and validation through
-
Unified accelerator handling ⚙️
- Device behavior is now derived from the selected PyTorch device rather than being hard-coded for CUDA.
- Improves compatibility with:
- Huawei Ascend
npu - Intel
xpu - AMD ROCm through PyTorch’s standard CUDA-style device interface
- Huawei Ascend
- Distributed training now selects the appropriate backend: NCCL for NVIDIA, HCCL for Ascend, and XCCL for Intel.
-
AMD ROCm integration guide 🔴
- Added documentation for training, validation, and inference on supported AMD GPUs using PyTorch ROCm.
- Clarifies that ROCm uses
device=0ordevice=cuda:0, notdevice=rocm:0. - Clearly distinguishes supported ROCm workflows from currently unsupported or separate technologies such as MIGraphX, DirectML, and Ryzen AI NPU.
-
Improved accelerator-aware data loading and profiling 📈
- Dataloaders, pinned memory, synchronization, memory checks, profiling, automatic batch sizing, and mixed precision now account for more device types.
- NPU and XPU execution avoids unsupported operations such as torchvision NMS kernels where necessary.
-
Tracking and numerical stability improvements 🎯
- Object counting now detects objects that pass through polygon regions between frames, even when no centroid is sampled inside the region.
- Deep OC-SORT preserves homography precision.
- Kalman filter states consistently use float64.
- Re-identification features are stored safely as float32.
- GMC matching now retains valid zero-variance and boundary-distance matches.
- NumPy assignment now raises a clear error for infeasible cost matrices instead of potentially hanging.
-
Apple MPS reliability fixes 🍎
- Avoids problematic in-place operations on strided MPS tensors across affected macOS and PyTorch versions.
- Prevents autocast crashes on MPS with PyTorch versions older than 2.5.
-
Documentation and platform updates 📚
- Added LabelMe dataset import instructions for converting offline annotations to YOLO format and uploading them to the Ultralytics Platform.
- Updated Rust inference documentation for
ultralytics-inference0.0.32, including Intel CPU, GPU, and NPU device options. - Refreshed Raspberry Pi 5 YOLO26 benchmarks with LiteRT and clarified that LiteRT export must be performed off-device.
- Added a monocular depth estimation tutorial to the YOLO26 documentation.
- Normalized GPU names in usage telemetry to improve reporting consistency.
🎯 Purpose & Impact
- 🌍 Broader hardware choice: Users can train Ultralytics models on Huawei Ascend NPUs, AMD GPUs, Intel accelerators, and NVIDIA GPUs through more consistent device handling.
- 🚀 Easier enterprise and edge deployment: Ascend training now connects directly to existing export and deployment workflows, while AMD and Raspberry Pi guidance makes hardware-specific setup clearer.
- 🧩 Less backend-specific code: The shared PyTorch device abstraction reduces the need for separate trainers or parallel implementations for each accelerator.
- 📊 More dependable tracking: Object counters and trackers should behave more accurately in fast-motion, low-variance, and mixed-precision scenarios.
- 🛡️ Improved reliability: MPS fixes prevent crashes and inconsistent detections, while the assignment fallback now fails safely on impossible inputs.
- 📖 Better onboarding: New LabelMe, AMD, Ascend, Rust, Raspberry Pi, and depth resources help users move from dataset preparation to training and deployment more easily.
- 🔢 The package version is updated to 8.4.111.
What's Changed
- Document LabelMe Platform dataset import by @glenn-jocher in #25491
- Normalize GPU names in usage events by @glenn-jocher in #25503
- Bump ultralytics-inference version to 0.0.32 in documentation by @onuralpszr in #25502
- Refactor inference documentation to improve header placement and formatting by @onuralpszr in #25505
- Add https://youtu.be/i-V1kRCJD0M to docs by @RizwanMunawar in #25506
- Preserve the GMC homography precision in Deep OC-SORT by @raimbekovm in #25504
- Fix autocast crash on MPS with torch<2.5.0 by @Y-T-G in #25494
- Fix tracker docstring examples to run as written by @raimbekovm in #25509
- Keep gmc matches when the spatial distance variance is zero by @raimbekovm in #25507
- Declare the Kalman filter state dtype as float64 by @raimbekovm in #25499
- Fix PyTorch MPS strided tensor bugs in in-place operations by @Rahulbiradar9 in #25496
- Count objects that cross an
ObjectCounterregion between frames by @JESUSROYETH in #25492 - Store ReID appearance features as float32 by @raimbekovm in #25484
- Update Raspberry Pi 5 benchmarks with LiteRT by @lakshanthad in #25489
- Raise on an infeasible cost matrix in the NumPy
linear_sum_assignmentfallback by @ErenAta16 in #25508 - Add Huawei Ascend NPU training support by @glenn-jocher in #25500
New Contributors
- @Rahulbiradar9 made their first contribution in #25496
- @ErenAta16 made their first contribution in #25508
Full Changelog: v8.4.110...v8.4.111