🌟 Summary
🚀 Ultralytics 8.4.97 adds direct Hailo HEF export, making it much easier to compile YOLOv8, YOLO11, and YOLO26 detection models for Hailo edge accelerators while also delivering several export fixes, inference improvements, and documentation updates.
📊 Key Changes
-
Direct Hailo HEF export
- Added
model.export(format="hailo")and the equivalent CLI command. - Supports Hailo-8, Hailo-8L, Hailo-10H, Hailo-15H, and Hailo-15L.
- Supports standard YOLOv8, YOLO11, and YOLO26 detection models, including custom detection models.
- Automatically generates parser settings, calibration data, HailoRT post-processing, metadata, and the final
.heffile. - YOLOv8 and YOLO11 exports use HailoRT NMS, while YOLO26 retains its NMS-free output path.
- Replaces the previous lengthy manual ONNX-to-DFC workflow with Python, CLI, and Ultralytics Platform workflows.
- Hailo exports are INT8-only and recommend at least 1,024 representative calibration images for production accuracy.
from ultralytics import YOLO model = YOLO("yolo11n.pt") model.export(format="hailo", name="hailo8l", data="my_dataset.yaml")
- Added
-
CoreML export reliability improvements
- Embedded CoreML NMS is now restricted to object detection models.
- Segmentation and pose exports automatically disable incompatible NMS settings with a warning.
- CoreML NMS exports now preserve class names and other model metadata.
- NMS-based ML Program exports default to FP16 when no precision is specified, helping maintain Xcode Preview and Neural Engine compatibility.
-
Inference and export bug fixes
- Fixed TorchScript segmentation inference crashes caused by tensors being split between CPU and GPU.
save_crop=Truenow reliably writes crops even whensave,save_txt, andshoware disabled.- Reduced GPU-to-CPU synchronization overhead in
Results.plot(), improving visualization performance for detection, segmentation, and pose results. - Restored the user-selected
torch.compile()mode, includingmax-autotune. - Fixed custom PyTorch modules whose
fuse()method does not accept Ultralytics-specific arguments. - INT8 calibration now correctly validates the requested dataset split.
- Albumentations spatial transforms now correctly transform semantic masks.
- YOLOE-Seg visual-prompt training no longer crashes when using end-to-end loss settings.
- Dataset downloads now respect
HTTP_PROXYandHTTPS_PROXYenvironment variables.
-
Deployment and ecosystem updates
- LiteRT is now used in new export examples, while the historical TFLite guide is clearly marked deprecated.
- Added ROS2
rclpyexamples alongside the existing ROS1 workflow. - Updated Jetson TensorRT documentation with device-specific export targets and clearer engine portability warnings.
- Added verified creator and license metadata across dataset documentation.
- Refreshed the documentation homepage around common user goals, including training, prediction, deployment, tracking, and the Ultralytics Platform.
- Updated OpenVINO benchmark references to version 2026.2.1.
- Updated Slack GitHub Actions used by release and CI workflows.
🎯 Purpose & Impact
- ⚡ Simpler Hailo deployment: Users can now move from a trained YOLO model to a deployable Hailo HEF with one supported export command instead of manually managing ONNX graphs, end nodes, model scripts, and NMS configuration.
- 🎯 Better edge accuracy: Automatic calibration handling and the recommendation to use representative datasets help reduce accuracy loss from INT8 quantization.
- 🧩 Broader hardware coverage: Direct export supports multiple Hailo accelerator generations, while Ultralytics Platform provides a convenient alternative when local Hailo compiler dependencies are unavailable.
- 🍎 More dependable CoreML models: Detection exports retain NMS behavior and metadata, while non-detection models avoid unsupported pipelines.
- 🚄 Faster visualization:
Results.plot()now performs fewer per-box and per-keypoint device synchronizations, which can improve rendering performance on GPU workloads. - 🛠️ More predictable workflows: Fixes to calibration splits, proxy-aware downloads, TorchScript devices, crop saving, and custom module fusion address failures that could otherwise be confusing or silent.
- 📚 Improved accessibility: Updated documentation makes it easier for both new and experienced users to train, export, and deploy Ultralytics models across Hailo, Jetson, ROS2, LiteRT, CoreML, and other platforms.
What's Changed
- Fix CoreML NMS for non-detect models by @glenn-jocher in #25198
- Migrate remaining TFLite examples to LiteRT by @glenn-jocher in #25208
- Batch PR review findings before final gate by @glenn-jocher in #25207
- Fix #25205: trust environment in aiohttp.ClientSession and allow it … by @muzhikov in #25206
- Fix
save_crop=Truesilently writing no crops withoutsave/save_txt/showby @JESUSROYETH in #25204 - Fix device mismatch for TorchScript segment inference on GPU by @Y-T-G in #25201
- Fix TVPDetectLoss misnamed box_loss — v8DetectionLoss index 1 is cls, not box by @Zenka737 in #25197
- Avoid setting
compute_precisionfor CoreML NMS export by @Y-T-G in #25200 - Fix spatial Albumentations transforms ignoring
semantic_maskby @ahmet-f-gumustas in #25191 - Fix metadata loss on CoreML export with NMS by @Y-T-G in #25199
- Bump slackapi/slack-github-action from 3.0.5 to 4.0.0 in /.github/workflows by @dependabot[bot] in #25210
- Update OpenVINO benchmarks version to
2026.2.1by @lakshanthad in #25211 - Fix custom PyTorch module fusion by @glenn-jocher in #25215
- Add verified dataset license metadata by @glenn-jocher in #25214
- fix formatting in C++ README for YOLO model references by @onuralpszr in #25221
- Rebuild docs landing page as a goal-based router by @raimbekovm in #25217
- Fix
TVPSegmentLosscrashing end-to-end YOLOE-Seg visual-prompt training ontal_topk2by @JESUSROYETH in #25209 - Update C++ README files to specify Ultralytics in model references by @onuralpszr in #25222
- Validate INT8 calibration dataset split by @glenn-jocher in #25223
- Stop reporting intentional fuzz rejections by @glenn-jocher in #25224
- Bold what/how emphasis in the docs organization bullets by @raimbekovm in #25226
- Document Platform Jetson export targets by @glenn-jocher in #25232
- Avoid per-box and per-keypoint GPU syncs in
Results.plot()by @JESUSROYETH in #25230 - Restore
max-autotuneoption fortorch.compile()by @Y-T-G in #25229 - Extend ros-quickstart guide with ROS2 (rclpy) examples by @raimbekovm in #25169
- Add direct Hailo HEF export by @glenn-jocher in #25231
New Contributors
Full Changelog: v8.4.96...v8.4.97