๐ Summary
v8.4.105 improves reliability for distillation checkpoints, expands YOLO26 deployment options, and enhances CoreML, mobile, Hailo, QNN, Platform, and documentation workflows.
๐ Key Changes
- ๐ ๏ธ Fixed distillation checkpoint crashes by adding
fuse()delegation toDistillationModel. Checkpoints saved during or after interrupted training can now be used withyolo export,predict, andvalwithout failing because the training-only wrapper lacks a fusion method. By @glenn-jocher. - ๐ Added YOLO26 depth deployment support for Hailo and Qualcomm QNN, enabling depth estimation on Hailo-8L and Snapdragon devices. Depth outputs are decoded into metric depth maps on the host.
- ๐ฑ Standardized mobile model input sizes:
- Classification:
224 - Detection, segmentation, semantic segmentation, depth, pose, and OBB:
640
- Classification:
- ๐ Improved CoreML dynamic-shape exports for YOLO26 segmentation and depth models by replacing unsupported dynamic-size upsampling with fixed scale-based operations.
- โ๏ธ Improved AutoBatch with multi-scale training by aligning memory-profiling sizes to valid model strides, preventing silent fallback or shape errors.
- ๐ง Added opt-in CUDA
channels_lastsupport for training and native PyTorch prediction, providing reported throughput improvements while preserving accuracy. Standard NCHW behavior remains unchanged by default. - ๐ง Improved model fusion and quantization reliability:
- Fixed convolution fusion for
channels_lastweights. - Corrected ConvTranspose2d + BatchNorm fusion along the proper weight axis.
- Preserved DFL operations in floating point during OpenVINO INT8 quantization.
- Fixed CUDA calibration failures caused by inference tensors.
- Fixed convolution fusion for
- ๐ฆ Expanded export compatibility and documentation with more accurate
opsetandsimplifyoptions for ONNX-backed formats such as MNN, RKNN, QNN, DEEPX, Edge TPU, and TensorFlow exports. - ๐งช Improved testing and performance internals:
- Added targeted depth-loss fuzz combinations.
- Removed redundant WorldDetect feature-map cloning.
- Vectorized tracker Kalman-filter operations.
- Reduced heatmap memory usage and removed unnecessary validator device transfers.
- ๐งฐ Improved training and dataset workflows:
- Fixed RMSprop incorrectly selecting MuSGD.
- Fixed single-class depth training.
- Added class-name aliases for better fine-tuning weight transfer.
- Consolidated dataset label-cache logic across detection, depth, and semantic datasets.
- ๐ Expanded Ultralytics Platform capabilities and documentation:
- Added clearer YOLO26 depth API responses and configurable 8-, 12-, or 16-bit depth maps.
- Improved annotation with automatic saving and YOLO-assisted predictions.
- Added activity export, updated billing and team behavior, and clarified deployment and API limits.
- Updated Platform documentation and examples to reflect current behavior.
๐ฏ Purpose & Impact
- โ More checkpoints remain usable: Interrupted or mid-training distillation checkpoints can now flow through validation, prediction, and export normally.
- ๐ Broader edge deployment: YOLO26 depth models can run on additional accelerators, including Hailo hardware and Snapdragon NPUs, making on-device depth estimation more practical.
- ๐ Better performance potential: CUDA
channels_last, tracker vectorization, lighter heatmap storage, and optimized loss calculations can improve throughput or reduce memory and CPU overhead. - ๐งฉ More dependable exports: CoreML dynamic exports, model fusion, calibration, and quantization are less likely to crash or produce incorrect results.
- ๐ฑ Simpler mobile integration: Consistent input-size guidance and refreshed CoreML, LiteRT, and QNN documentation reduce deployment ambiguity.
- ๐งช Safer future changes: Expanded fuzz coverage and cleaner shared dataset infrastructure improve regression detection and maintainability.
- โน๏ธ User action: Existing users should update with
pip install -U ultralyticsto receive the checkpoint, export, and deployment fixes.
What's Changed
- Fix CoreML dynamic=True segment export upsample mapping error by @glenn-jocher in #25347
- Document YOLO26-Depth task in Platform docs and API reference by @glenn-jocher in #25349
- Fix CoreML dynamic=True depth export bilinear upsample mapping error by @glenn-jocher in #25350
- Stride-align AutoBatch probe size to true multi-scale maximum by @glenn-jocher in #25352
- Document depth predict bits parameter and model-resolution maps by @glenn-jocher in #25354
- Advertise Platform after export failures by @glenn-jocher in #25353
- Update fuzz coverage for depth task by @glenn-jocher in #25357
- fix: align ONNX-backed export arguments by @amanharshx in #25356
- Keep the DFL float during OpenVINO INT8 quantization by @synml in #25306
- Delete duplicate Python setup from CI by @glenn-jocher in #25366
- Fix conv/bn fusion crash on channels_last weights by @raimbekovm in #25363
- Store the
Heatmapaccumulator single-channel by @JESUSROYETH in #25342 - Return the validator
correctmatrix withtorch.from_numpyinstead of a device round-trip by @JESUSROYETH in #25344 - Drop the redundant per-forward feature-map clone in
WorldDetect.forwardby @JESUSROYETH in #25345 - Vectorize the per-frame
multi_predictandmulti_gmctrack loops by @JESUSROYETH in #25343 - Add gated channels_last memory format for CUDA train and predict by @raimbekovm in #25362
- Refactor dataset label caching into shared template with per-class hooks by @Laughing-q in #25359
- Fix fuse_deconv_and_bn scaling the wrong weight axis for ConvTranspose2d by @raimbekovm in #25364
- Fix
Model.calibrate()inference-tensor crash on CUDA by @JESUSROYETH in #25351 - Compute
BboxLossweights and pose keypoint strides on matched anchors only by @JESUSROYETH in #25346 - Add Hailo export and inference for the YOLO26 depth task by @JESUSROYETH in #25348
- Collapse conv/bn fusion to broadcast form and delete input-side channels_last conversions by @glenn-jocher in #25367
- Fix depth training with single-class mode by @glenn-jocher in #25370
- Build Docker runner before export image by @glenn-jocher in #25371
- Point README banner link to YOLO Vision 2026 registration by @raimbekovm in #25377
- Add https://youtu.be/7d1XWgh1pmk to docs by @RizwanMunawar in #25374
- Fix optimizer=RMSprop silently building MuSGD by @raimbekovm in #25376
- Point remaining banner links to YOLO Vision 2026 registration by @raimbekovm in #25381
- Fix reCamera links and refine core contribution principles by @onuralpszr in #25380
- docs: clarify YOLOE export workflow for C++ ONNX Runtime inference by @23z156-wq in #25373
- Ruff 0.16.0 compatibility changes by @glenn-jocher in #25390
- Threshold SAM3 semantic masks at the model logit threshold by @Y-T-G in #25386
- Add CPU ONNX and T4 TensorRT10 speed columns to depth perf table by @Bovey0809 in #25382
- Preserve falsey activation arguments by @glenn-jocher in #25391
- Resolve MuSGD only through the explicit optimizer path by @raimbekovm in #25383
- Gather end2end top-k results with a zero-copy expand instead of a materialised repeat by @JESUSROYETH in #25369
- Add cross-dataset class-row weight transfer for RT-DETR by @artest08 in #24423
- Add stable Platform screenshot markers by @glenn-jocher in #25388
- Add T4 TensorRT speed comparison against Depth Anything V2 to depth docs by @raimbekovm in #25399
- Fix shared export table rendering by @glenn-jocher in #25401
- Standardize mobile exports at 224/640 by @glenn-jocher in #25387
- Fix yolo26-seg semantic target labelling empty images as class 0 when
overlap_mask=Falseby @JESUSROYETH in #25392 - Build TAL get_box_metrics gather indices on device by @raimbekovm in #25397
- fix(coreml): record NMS effective precision by @amanharshx in #25389
- Vectorize GMC point filter loops with boolean masks by @raimbekovm in #25398
- Fix gmc docstring examples to run as written by @raimbekovm in #25402
- Make GMC outlier filter reject deviations on both sides of the mean by @raimbekovm in #25404
- Pad all multispectral channels in
RandomPerspectivewarps by @JESUSROYETH in #25411 - Fix
TRACKTRACK.updateIndexError on a single torch-backed detection by @JESUSROYETH in #25394 - Fix
intel:gpudevice alias resolution on multi-GPU OpenVINO machines by @JESUSROYETH in #25393 - Bake the semantic argmax class map into the OpenVINO export graph by @JESUSROYETH in #25395
- fix: derive export argument validation from format table by @amanharshx in #25368
- Document class-alias weight transfer for fine-tuning by @artest08 in #25409
- Add colorization options for depth maps in documentation by @onuralpszr in #25400
- Validate pose, kobj, rle, angle and erasing at the cfg layer by @usegitdivyansh in #25384
- Fix NCNN inference dropping all but the first image of a batch by @JESUSROYETH in #25412
- Skip the redundant float32 input copy in the OpenVINO and Paddle backends by @JESUSROYETH in #25413
- Remove redundancy from AGENTS.md Core Principles by @glenn-jocher in #25414
- Fuse distillation checkpoints to the student model by @glenn-jocher in #25415
New Contributors
- @23z156-wq made their first contribution in #25373
- @usegitdivyansh made their first contribution in #25384
Full Changelog: v8.4.104...v8.4.105