🌟 Summary
🚀 v8.4.99 adds native Hailo inference support, allowing Ultralytics-exported Hailo models to run directly with predict and val, while also improving training memory usage, platform checkpoint handling, downloads, and compatibility.
📊 Key Changes
-
🧩 New Hailo inference backend
- Adds lazy HailoRT support for Ultralytics-exported HEF model directories.
- Supports YOLOv8, YOLO11, and YOLO26 detection outputs.
- Automatically converts Hailo NMS results and decodes YOLO26’s NMS-free outputs.
- Enables commands such as:
from ultralytics import YOLO model = YOLO("yolo11n_hailo_model") results = model.predict("image.jpg")
- Adds Hailo backend documentation and removes outdated warnings and manual post-processing instructions.
- Requires HailoRT on the target device and the exported directory’s
metadata.yamlfile.
-
🧠 Lower training memory usage
- Reduces semantic segmentation target construction memory substantially, with measured temporary usage dropping from about 525 MB to 136 MB.
- Optimizes dense-dataset target assignment, reducing peak assigner memory from about 1.52 GB to 0.89 GB in the reported test.
- These changes can make training large or densely annotated datasets, such as Objects365, more practical on GPUs with limited VRAM.
-
☁️ More reliable Platform checkpoint uploads
- Successful periodic checkpoint uploads are now recorded by Ultralytics Platform.
- Uploads remain asynchronous during training, while the final upload continues to wait safely for earlier uploads.
- Checkpoints are associated with the correct server-issued training run, helping Platform maintain the canonical
best.pt.
-
🔗 Improved download and redirect handling
- Uses the existing
requestsdependency for URL checks and downloads. - HTTP 308 redirects now work reliably on older Python versions, including Python 3.8–3.10, without adding a custom
urllibcompatibility layer.
- Uses the existing
-
🐍 Better Python 3.13 checkpoint compatibility
- Restricted checkpoint loading now recognizes both native and stable public
pathlibpath names. - This prevents failures when checkpoints are created under one Python version or operating system and loaded under another.
- Restricted checkpoint loading now recognizes both native and stable public
-
🛠️ CI and documentation maintenance
- All workflows now use Ultralytics’ shared retried
setup-uvaction. - Dataset license URLs are deduplicated through shared metadata.
- Corrects LVIS class 666 from
manager/throughto the accuratemanger/trough. - Makes exporter output show prediction and validation commands only for formats with supported inference backends.
- All workflows now use Ultralytics’ shared retried
🎯 Purpose & Impact
- Hailo users can now use a more familiar Ultralytics workflow for exported edge models instead of manually integrating HailoRT output parsing. This simplifies deployment on Hailo hardware, although HailoRT installation and compatible hardware are still required.
- YOLO26 deployment is more streamlined, as its one-to-one, NMS-free outputs are decoded automatically by the Hailo backend.
- GPU training may require less VRAM, particularly for segmentation and dense detection datasets, enabling larger batch sizes or higher-resolution training in some environments.
- Ultralytics Platform training runs become more dependable, with fewer risks of stale or untracked checkpoint uploads.
- Downloads and model loading are more cross-version compatible, improving reliability for users on older Python releases and Python 3.13.
- Overall, this release strengthens deployment, training efficiency, and infrastructure reliability without changing existing model outputs.
What's Changed
- Fix Hailo post-export guidance by @glenn-jocher in #25245
- Deduplicate canonical dataset license URLs by @raimbekovm in #25249
- Fix misspelled LVIS class 666 to
manger/troughby @Y-T-G in #25233 - Use shared setup-uv action everywhere by @glenn-jocher in #25251
- Reduce semantic segmentation target memory in v8SegmentationLoss by @Y-T-G in #25244
- Reduce TaskAlignedAssigner peak memory on dense datasets by @Y-T-G in #25240
- Fix HTTP 308 redirect handling in safe_download on Python <=3.10 by @raimbekovm in #25252
- Revert HTTP 308 urllib backport by @glenn-jocher in #25256
- Fix stale buffer lists in the
profile_opsmemory-envelope comment by @JESUSROYETH in #25235 - Use requests for redirecting downloads by @glenn-jocher in #25257
- Record successful Platform checkpoint uploads by @glenn-jocher in #25255
- Fix Python 3.13 pathlib checkpoint loading by @glenn-jocher in #25258
- Add Hailo inference backend by @glenn-jocher in #25247
Full Changelog: v8.4.98...v8.4.99