v8.4.128
v8.4.128 - Use synchronous OpenVINO batch inference (#25921)
Added 4
- NDJSON conversion now supports local image paths
- Local Docker build instructions added to documentation
- Task-specific K-Fold guidance expanded in documentation
- Android ExecuTorch setup documented
Changed 7
- OpenVINO now submits each input batch as a single synchronous request and consistently uses the LATENCY performance hint instead of asynchronous requests
- TensorRT 7–10 now keeps only the detection-head Sigmoid layers in higher precision instead of affecting every matching activation
- ONNX export now caps the opset at 18 to avoid CUDA execution falling back to CPU for unsupported operations
- SAM auto-mask generation now encodes each crop once and reuses its features across point batches
- Documentation now describes tracking as a mode that runs on detection, segmentation, pose, or OBB models
- Augmentation behavior clarified in documentation
- YOLO26n weights used for AMP compatibility checks are now stored in the user configuration directory and reused across projects
Fixed 7
- RKNN INT8 export now clearly rejects unsupported non-detection tasks and recommends FP16 instead
- Cached images are stored in a shared contiguous memory buffer to prevent DataLoader workers from duplicating the cache during forked training
- FastSAM box and point prompts are clipped to image boundaries to prevent negative or out-of-range coordinates from selecting incorrect masks
- DDP now ignores externally set RANK and LOCAL_RANK values unless a real multi-process environment is detected
- Ray tuning correctly aggregates metrics across multiple datasets and reports the completed epoch
- Scalar indexing now preserves bounding-box formats and instance dimensions
- Ground-truth candidate selection is more consistent for very small boxes
From ultralytics
🌟 Summary
v8.4.128 improves OpenVINO reliability and batch inference, reduces RAM use during training, strengthens export behavior, and clarifies dataset, augmentation, and tracking workflows. 🚀
📊 Key Changes
- Synchronous OpenVINO batch inference — priority update ⚡
OpenVINO now submits each input batch as a single synchronous request and consistently uses theLATENCYperformance hint. Throughput implementations remain available internally, but mode selection is forced to latency-oriented execution to avoid hangs inAsyncInferQueue, particularly for dynamic INT8 batches on CPU systems. - Improved OpenVINO efficiency and stability 🧠
Benchmarks showed that one batched synchronous request was about twice as fast and used roughly one-third the RAM compared with splitting the batch into separate asynchronous requests. This should make OpenVINO exports more dependable in CI and production workloads, though throughput-focused applications may see different performance characteristics. - TensorRT INT8 optimizations 🔧
TensorRT 7–10 now keeps only the detection-head Sigmoid layers in higher precision instead of affecting every matching activation. TensorRT 11 no longer applies the unnecessary Sigmoid exclusion. This reduces model size and improves inference speed while preserving confidence calibration. - More compatible ONNX exports 📦
ONNX export now caps the opset at 18 to avoid CUDA execution falling back to CPU for unsupported operations. This prevents extra host-memory copies and should improve GPU inference consistency, especially for models such as RT-DETR. - Safer RKNN exports 📱
RKNN INT8 export now clearly rejects unsupported non-detection tasks and recommends FP16 instead. Documentation also adds updated YOLO26 FP16 and INT8 benchmarks for Rockchip devices. - Lower RAM usage for
cache='ram'💾
Cached images are stored in a shared contiguous memory buffer, preventing DataLoader workers from duplicating the cache during forked training. This should keep memory usage flatter when using multiple workers. - SAM and FastSAM improvements 🎯
- SAM auto-mask generation now encodes each crop once and reuses its features across point batches, reducing repeated computation.
- FastSAM box and point prompts are clipped to image boundaries, preventing negative or out-of-range coordinates from silently selecting incorrect masks.
- More robust training and data utilities 🛠️
- DDP now ignores externally set
RANKandLOCAL_RANKvalues unless a real multi-process environment is detected. - Ray tuning correctly aggregates metrics across multiple datasets and reports the completed epoch.
- Scalar indexing now preserves bounding-box formats and instance dimensions.
- Ground-truth candidate selection is more consistent for very small boxes.
- DDP now ignores externally set
- Improved dataset workflows 📚
NDJSON conversion now supports local image paths, while COCO JSON training documentation adds clearer requirements, cache warnings, and validation guidance. - Documentation and usability updates ✍️
Documentation now describes tracking as a mode that runs on detection, segmentation, pose, or OBB models; adds local Docker build instructions; expands task-specific K-Fold guidance; clarifies augmentation behavior; and documents Android ExecuTorch setup. - AMP check weights are cached globally 📥
The YOLO26n weights used only for AMP compatibility checks are now stored in the user configuration directory and reused across projects instead of being downloaded into the current working directory.
🎯 Purpose & Impact
- More reliable deployment: Synchronous OpenVINO execution reduces the risk of indefinite hangs and makes batch inference more predictable across Intel and AMD CPU environments. ✅
- Better performance on supported hardware: TensorRT and ONNX changes reduce unnecessary precision constraints and CPU fallback operations, potentially improving speed, memory usage, and GPU utilization.
- Lower training memory requirements: Shared RAM caching is especially beneficial for large datasets and multi-worker training.
- Fewer silent prediction errors: Prompt clipping and format-preserving indexing ensure that invalid coordinates or scalar selections do not produce misleading masks or improperly interpreted boxes.
- Clearer user guidance: Updated documentation makes it easier to choose the right task, prepare datasets, configure augmentations, build Docker images, and deploy models on mobile and edge hardware.
- Compatibility note: OpenVINO now prioritizes latency-safe synchronous execution over automatic throughput mode selection. Users seeking maximum throughput should benchmark their specific hardware and workload after upgrading.
What's Changed
- Refactor Docker quickstart docs by @ambitious-octopus in https://github.com/ultralytics/ultralytics/pull/18658
- Fix RKNN INT8 "no detections" and update benchmarks by @lakshanthad in https://github.com/ultralytics/ultralytics/pull/24703
- Add task-specific k-fold split guidance by @AffanBinFaisal in https://github.com/ultralytics/ultralytics/pull/24527
- Apply class-aware NMS in shared C++ postprocessing by @acgist in https://github.com/ultralytics/ultralytics/pull/23187
- Cache AMP check weights in global config directory by @gabe-zhang in https://github.com/ultralytics/ultralytics/pull/23664
- Handle environments where
RANKandLOCAL_RANKvariables are set outside of DDP context by @Y-T-G in https://github.com/ultralytics/ultralytics/pull/22724 - Fix
cache='ram'memory leak via shared image buffer by @raimbekovm in https://github.com/ultralytics/ultralytics/pull/24673 - Support local image paths in NDJSON dataset conversion by @Y-T-G in https://github.com/ultralytics/ultralytics/pull/24357
- Add https://youtu.be/eotJNQwboWA to docs by @RizwanMunawar in https://github.com/ultralytics/ultralytics/pull/25910
- Fix Ray tuning across multiple datasets by @glenn-jocher in https://github.com/ultralytics/ultralytics/pull/25922
- Preserve bounding box format when indexing by @aswanth-07 in https://github.com/ultralytics/ultralytics/pull/25906
- Make GT side clamp in select_candidates_in_gts monotonic by @ShuaiLYU in https://github.com/ultralytics/ultralytics/pull/25912
- Scope the TensorRT INT8 Sigmoid exclusion to the detection head on both quantization paths by @onuralpszr in https://github.com/ultralytics/ultralytics/pull/25920
- Cap ONNX opset at 18 for ONNX Runtime CUDA kernel coverage by @Y-T-G in https://github.com/ultralytics/ultralytics/pull/25915
- Preserve instance axes during scalar indexing by @aswanth-07 in https://github.com/ultralytics/ultralytics/pull/25907
- Remove unreachable YOLODataset task assertion by @roel-klein in https://github.com/ultralytics/ultralytics/pull/20870
- Clip FastSAM box and point prompts to image bounds by @JESUSROYETH in https://github.com/ultralytics/ultralytics/pull/25916
- Correct InfiniteDataLoader iteration documentation by @PhuTd03 in https://github.com/ultralytics/ultralytics/pull/23578
- Remove unreachable resume-training branch by @noorchauhan in https://github.com/ultralytics/ultralytics/pull/24163
- Document ExecuTorch Android runtime setup by @blm25 in https://github.com/ultralytics/ultralytics/pull/22849
- perf(sam): encode each generate() crop once and reuse it across point batches by @JESUSROYETH in https://github.com/ultralytics/ultralytics/pull/25909
- Correct augmentation parameters and COCO JSON training example in data guides by @raimbekovm in https://github.com/ultralytics/ultralytics/pull/25919
- Describe tracking as a mode rather than a task in docs and READMEs by @raimbekovm in https://github.com/ultralytics/ultralytics/pull/25908
- Use synchronous OpenVINO batch inference by @glenn-jocher in https://github.com/ultralytics/ultralytics/pull/25921
New Contributors
- @roel-klein made their first contribution in https://github.com/ultralytics/ultralytics/pull/20870
- @acgist made their first contribution in https://github.com/ultralytics/ultralytics/pull/23187
- @blm25 made their first contribution in https://github.com/ultralytics/ultralytics/pull/22849
- @noorchauhan made their first contribution in https://github.com/ultralytics/ultralytics/pull/24163
- @PhuTd03 made their first contribution in https://github.com/ultralytics/ultralytics/pull/23578
- @aswanth-07 made their first contribution in https://github.com/ultralytics/ultralytics/pull/25906
- @gabe-zhang made their first contribution in https://github.com/ultralytics/ultralytics/pull/23664
Full Changelog: https://github.com/ultralytics/ultralytics/compare/v8.4.127...v8.4.128