π Summary
Ultralytics v8.4.96 strengthens NDJSON dataset security and dramatically improves conversion speed, while adding YOLO26 depth deployment guidance, On Premise Platform documentation, and numerous reliability fixes. π
π Key Changes
-
π Faster and safer NDJSON conversion
- Reverts the previous overbuilt validation approach and validates records during the existing hash scan.
- Generates collision-free filenames from stable record indexes instead of trusting potentially unsafe source names.
- Uses dense numeric class directories for classification datasets, while preserving original class names through a hidden metadata map.
- Removes the extra full-dataset validation pass and avoids unnecessary path-object allocations.
- Reported performance improves by approximately 7.8Γ for detection and 6.8Γ for classification compared with the reverted implementation.
-
π YOLO26 depth support in Rust inference
- Adds depth estimation as a supported task with
yolo26n-depth.onnx. - Supports depth visualization options such as
--colormapand--depth-viz. - Adds Rust API examples for reading per-pixel depth maps, valid ranges, and center-pixel depth values.
- Updates
ultralytics-inferencedocumentation to version0.0.29.
- Adds depth estimation as a supported task with
-
π New Intel deployment guide
- Documents YOLO26 deployment with Intel DL Streamer, OpenVINO, GStreamer, and Docker.
- Includes FP32, FP16, and INT8 export examples for Intel CPUs, GPUs, and NPUs.
- Covers GPU/NPU inference, video output, and multi-stream processing.
-
π’ Expanded Ultralytics Platform On Premise documentation
- Explains how Enterprise users can connect Linux, macOS, or Windows workers.
- Documents local dataset browsing, annotation, training, and model storage while keeping image and video pixels on the customerβs computer.
- Adds plan metadata across Platform documentation and clarifies Enterprise capabilities.
-
π§© Reliability and correctness fixes
Results.update(probs=...)now correctly wraps probabilities inProbs, restoring methods such assummary(),plot(), and exports.- RT-DETR standalone validation now honors
single_clsandclasses. - Keypoints and segmentation polygons remain aligned with boxes after letterbox resizing.
- Classification confusion matrices no longer include an irrelevant background class.
- FastSAM no longer overwrites the first detection when handling full-image boxes.
- Segmentation loss no longer silently skips images when instances are fewer than the batch size.
save_one_box()now returns crops in the requested format regardless of whether the crop is saved.- End-to-end NMS now correctly returns original detection indexes when
return_idxs=True. - Tracker motion compensation, trainer recovery logic, TensorBoard channel handling, YOLOE visual-prompt training, and configuration validation receive targeted fixes.
-
π Documentation improvements
- Adds clearer semantic segmentation dataset guidance, including the
masks/folder fallback behavior. - Corrects augmentation and export argument tables and updates the tracker default to
tracktrack.yaml. - Labels many documentation examples as
textfor improved rendering and readability. - Updates CoreML and LiteRT mobile benchmarks to include YOLO26 Depth results.
- Adds clearer semantic segmentation dataset guidance, including the
π― Purpose & Impact
- Safer dataset processing: Untrusted NDJSON filenames and class names can no longer control generated filesystem paths, reducing traversal and collision risks. π‘οΈ
- Faster large-dataset workflows: NDJSON conversion avoids redundant scans and scales much better for millions of records.
- Broader YOLO26 deployment: Users can now more easily run depth estimation on Rust, Apple, Android, and Intel hardware.
- Better production flexibility: Enterprise customers can train through the Ultralytics Platform while keeping sensitive data and compute on premise.
- More dependable APIs and results: Several fixes prevent confusing runtime errors, incorrect metrics, misaligned outputs, and silently dropped training data.
- Clearer documentation: Updated examples, defaults, benchmarks, and platform plan labels make setup and deployment easier for both new and experienced users. β
What's Changed
- Fix augmentation-args and export-args doc macro cells by @raimbekovm in #25163
- Document masks/-folder fallback in semantic task faq by @raimbekovm in #25161
- Fix
Results.update(probs=...)to wrap probs inProbslike the other attributes by @JESUSROYETH in #25157 - Fix RT-DETR standalone val ignoring
single_clsandclassesby @JESUSROYETH in #25158 - Fix
scale_coordsletterbox pad so keypoints and mask polygons stay aligned with boxes by @JESUSROYETH in #25156 - Fix classify
ConfusionMatrixgaining a phantombackgroundclass by @JESUSROYETH in #25155 - Fix stale tracker default and dropped row in object-blurring solutions table by @raimbekovm in #25170
- Document Enterprise On Premise workers by @glenn-jocher in #25167
- Use dataset channels for TensorBoard graph tracing by @Laughing-q in #25160
- Forward validation compile mode to attempt_compile by @Laughing-q in #25162
- Validate CopyPaste mode explicitly by @Laughing-q in #25168
- Add guide for deploying Ultralytics YOLO26 on Intel Core Ultra Series3 using DL Streamer and OpenVINO. by @tbujewsk in #25078
- Rewrite On Premise docs for customers by @glenn-jocher in #25174
- Fix
v8SegmentationLosssilently dropping images whenoverlap_mask=Falseand instances < batch size by @JESUSROYETH in #25173 - Fix
save_one_boxto return the crop in the requested BGR format regardless ofsaveby @JESUSROYETH in #25172 - Update CoreML and LiteRT mobile depth benchmarks by @glenn-jocher in #25177
- Improve Platform code example readability by @glenn-jocher in #25179
- Remove obsolete docs workflow badge by @glenn-jocher in #25180
- Fix FastSAM
postprocessoverwriting the first box by @JESUSROYETH in #25175 - Fix ECC camera-motion translation not rescaled after downscale in
GMCby @JESUSROYETH in #25181 - Fix best_fitness falsy check and NaN recovery dead-code branches in trainer by @Zenka737 in #25176
- Fix
YOLOESegModel.lossmixing text prompts into visual-prompt training by @JESUSROYETH in #25178 - Validate CLI choice arguments in config by @glenn-jocher in #25182
- Fix stale package imports in Python subprocesses by @raimbekovm in #24447
- Revert overbuilt subprocess import fix by @glenn-jocher in #25190
- Update ultralytics-inference version to 0.0.28 in rust docs by @onuralpszr in #25192
- Document the depth task in the Rust inference docs by @onuralpszr in #25193
- fix: validate NDJSON image and split output paths by @amanharshx in #25188
- Fix non_max_suppression dropping return_idxs for end-to-end models and remove dead ConfusionMatrix.matrix() method by @Zenka737 in #25187
- Fix uint8 overflow in
polygons2masks_overlapdropping instances past 128 overlaps by @JESUSROYETH in #25185 - Update rust docs for the jet and disparity depth defaults and version 0.0.29 by @onuralpszr in #25195
- Revert #25188 and secure NDJSON paths without a prepass by @glenn-jocher in #25196
New Contributors
Full Changelog: v8.4.95...v8.4.96