🌟 Summary
Ultralytics v8.4.91 improves YOLO26 deployment quality—especially TensorRT INT8 confidence calibration—while adding stronger automated CLI fuzz testing, better export reliability, and many training/inference bug fixes 🚀
📊 Key Changes
-
Improved TensorRT INT8 exports for YOLO26 confidence scores ⚡
- Excludes the
Sigmoidoperation from INT8 quantization in TensorRT export paths. - Applies higher precision for
Sigmoidacross TensorRT 7 through TensorRT 11+ using the appropriate backend mechanisms. - Adds GPU export test coverage for static INT8 detection exports.
- Excludes the
-
Added daily YOLO CLI fuzz testing 🧪
- Introduces a new Monte Carlo fuzzing workflow for the
yoloCLI across train, export, predict, validation, and chaos-style command variations. - Automatically classifies failures, confirms reproducible issues, deduplicates findings, and can file GitHub issues for confirmed bugs.
- Introduces a new Monte Carlo fuzzing workflow for the
-
Improved ONNX INT8 export reliability 🔧
- ONNX INT8 quantization now focuses only on weighted operations such as
Conv,Gemm, andMatMul. - INT8 ONNX exports are capped to a compatible opset to avoid unsupported ONNX Runtime static quantization paths.
- ONNX INT8 quantization now focuses only on weighted operations such as
-
Better pretrained fine-tuning behavior 🎯
- Adds class-name-based remapping for pretrained detection heads when fine-tuning on datasets with reordered or partially matching class names.
- Helps transfer learned weights more accurately instead of relying only on class index order.
-
Multiple inference, validation, and tracking fixes ✅
- Fixes
track()crashes caused by CPU/GPU tensor mismatches when using exported models with the default tracker. - Fixes
classesfiltering being applied aftermax_dettruncation for end-to-end NMS models, which could return too few or zero detections. - Fixes pose validation
save_txt=Truekeypoint scaling so saved keypoints correctly align with original image coordinates. - Fixes several Ultralytics Solutions crashes with OBB models, including
HeatmapandObjectBlurrer.
- Fixes
-
Improved support for non-RGB and custom-channel workflows 🌈
- Fixes knowledge distillation warmup for grayscale and other non-3-channel datasets.
- Fixes TensorBoard graph logging for multispectral or custom-channel training.
- Fixes classification transforms so custom interpolation is respected for non-square image sizes.
-
Export and platform reliability improvements 🧩
- Edge TPU compiler failures now raise clear errors instead of returning corrupt stub files.
- ExecuTorch and ARM export dependencies are pinned more safely to avoid upstream Torch compatibility breakage.
- Version comparison logic now handles 4-part package versions like
4.13.0.90correctly. - Windows OpenVINO CI coverage is kept while limiting CPU instruction dispatch for more stable tests.
-
Documentation refreshes 📚
- Large updates to classification, detection, and OBB dataset docs with verified image counts, split details, clearer usage examples, and better dataset descriptions.
- Adds or updates YOLO26 tutorial videos, including semantic segmentation documentation.
- Clarifies Ultralytics Platform data residency details and improves Hailo docs formatting.
-
CI and Docker workflow hardening 🐳
- Codecov uploads are now best-effort, so external reporting outages do not fail otherwise successful test jobs.
- Docker validation containers are auto-removed and test assets are pre-cached before running tests.
🎯 Purpose & Impact
-
More accurate TensorRT INT8 confidence calibration 📈
- Keeping
Sigmoidat higher precision helps prevent confidence-score compression in YOLO26 TensorRT INT8 exports. - This can improve F1 calibration and reduce deployment surprises for users relying on INT8 acceleration.
- Keeping
-
More reliable production exports 🚀
- ONNX, TensorRT, Edge TPU, ExecuTorch, OpenVINO, and ARM-related fixes reduce export failures and make deployment behavior clearer across platforms.
-
Fewer silent or confusing failures 🛡️
- Invalid CLI/config values, failed Edge TPU compilers, unsupported dependency combinations, and broken tracking/device paths are now handled more robustly.
-
Better results when fine-tuning custom datasets 🎓
- Class-name-aware head remapping helps users reuse pretrained models more effectively when dataset class order differs from the original model.
-
Stronger support for specialized vision data 🛰️
- Grayscale, multispectral, OBB, pose, and custom-channel workflows receive important fixes, helping users working beyond standard RGB detection.
-
Higher long-term stability through fuzzing 🧪
- The new scheduled CLI fuzz workflow should uncover edge-case bugs that normal test matrices miss, improving future release quality for both developers and end users.
-
Clearer learning and dataset guidance 📖
- Refreshed docs make it easier to choose datasets, understand dataset structure, train YOLO26 models, and use Ultralytics Platform for annotation, training, and deployment.
What's Changed
- Use text fence for hailortcli device output in Hailo docs by @glenn-jocher in #25041
- Fix
track()device mismatch with exported models under the defaulttracktracktracker by @JESUSROYETH in #25042 - Add https://youtu.be/_fvGA9LPXzs to docs by @raimbekovm in #25048
- Fix
classify_transformsignoringinterpolationfor non-square sizes by @ahmet-f-gumustas in #25047 - Fix crashes on invalid copy_paste_mode and optimizer values by @glenn-jocher in #25052
- Update data region warning with additional details by @sokrisba in #25050
- Fix
classesfilter applied aftermax_dettruncation in end-to-end NMS by @JESUSROYETH in #25043 - Remap pretrained cls head by class name when fine-tuning by @Y-T-G in #25051
- Quantize only weighted ops for ONNX INT8 by @Y-T-G in #25046
- Fix
Heatmap,ObjectBlurrerand other solutions crash with OBB models by @JESUSROYETH in #25058 - Fix
save_txtkeypoint scaling inPoseValidatorby @JESUSROYETH in #25053 - Fix incorrect bin indexing in plt_color_scatter by @dorianboille in #25064
- Refactor OBB dataset documentation by @raimbekovm in #25061
- Refactor classification dataset documentation by @raimbekovm in #25003
- Refactor detect dataset documentation by @raimbekovm in #25013
- Fix ExecuTorch ARM torch compatibility by @glenn-jocher in #25069
- Reject None for typed CLI defaults by @glenn-jocher in #25070
- Raise Edge TPU compiler failures instead of returning corrupt stub by @glenn-jocher in #25068
- Bump onnx from 1.21.0 to 1.22.0 in /examples/RTDETR-ONNXRuntime-Python in the pip group across 1 directory by @dependabot[bot] in #25071
- Skip OpenVINO inference on Windows CI by @glenn-jocher in #25072
- Keep Windows OpenVINO inference tests by @glenn-jocher in #25073
- Make Codecov uploads best effort by @glenn-jocher in #25075
- Fix
DistillationModelwarmup for single-channel datasets by @JESUSROYETH in #25067 - Pre-cache Docker test assets by @glenn-jocher in #25074
- Fix Tensorboard logging with multi-spectral training by @Y-T-G in #25076
- Fix version comparisons for 4-segment pins like opencv-python!=4.13.0.90 by @glenn-jocher in #25079
- Pin ARM export torch below 2.13 by @glenn-jocher in #25080
- Add Fuzz workflow: daily Monte Carlo fuzzing of the yolo CLI by @glenn-jocher in #25049
- Handle v-prefixed versions in check_version by @glenn-jocher in #25083
- Exclude
Sigmoid/Softmaxfrom TensorRT INT8 quantization by @davidnichols-ops in #25020
New Contributors
- @sokrisba made their first contribution in #25050
- @davidnichols-ops made their first contribution in #25020
- @dorianboille made their first contribution in #25064
Full Changelog: v8.4.90...v8.4.91