🌟 Summary
YOLO prediction can now load the next batch of images while CUDA processes the current one, alongside performance, export, dataset, and Ultralytics Platform improvements. No model architectures or weights changed.
📊 Key Changes
- 🚀 Faster CUDA prediction: For multi-batch, image-only detection using PyTorch weights, prediction prefetches the next batch on a worker thread while the GPU handles the current batch. Other devices, tasks, backends, and mixed image/video sources keep the existing behavior.
- ⚡ Faster training data preparation: Optimized copy-paste augmentation and semantic-mask target generation while preserving their expected outputs.
- 🧠 Lower memory use during TensorFlow INT8 export: Calibration images are collected into a preallocated array instead of building several large intermediate copies.
- ☁️ More Platform annotation and dataset features: Added hosted text-prompted SAM 3 and SAM 3.1 options, expanded cloud-storage imports to 500,000 objects, and enabled image search by annotated class name.
- 🛠️ More robust workflows: Fixed Windows OpenVINO crashes and GPU ONNX inference silently falling back to CPU; improved dataset archive and
.ymlsupport, OOM recovery, and tracking when source files share a name.
🎯 Purpose & Impact
- ⏱️ Better GPU utilization: Overlapping image loading with inference can reduce idle time during eligible CUDA prediction runs. It complements existing work that speeds up decoding within a batch.
- 📈 Smoother data workflows: Faster augmentation and reduced calibration memory use can help improve training and export efficiency, especially on constrained systems.
- 🔍 Easier annotation and dataset management: Text-prompted SAM, larger cloud imports, and class-name search make it simpler to label and browse larger datasets.
- ✅ Fewer surprises: Export, Windows inference, archive loading, tracking, and training recovery fixes improve reliability without changing model behavior.
What's Changed
- Reduce peak memory during INT8 TensorFlow calibration by @cainiao33 in #26288
- Point the validator at the rebuilt dataloader after OOM auto-reduce by @cainiao33 in #26296
- Simplify tar download handling and remove redundant regression fixtures by @cainiao33 in #26287
- fix incorrect dataset in OBB loss error message by @lmycross in #26314
- Fix Windows OpenVINO crashes and CI runtime warnings by @glenn-jocher in #26317
- Remove headless-unsafe destroyAllWindows from Streamlit Inference by @glenn-jocher in #26320
- Annotate CI test failures and xdist worker crashes on GitHub Actions by @Y-T-G in #26318
- Speed up overlap_mask=False semantic mask targets with a single min reduction by @raimbekovm in #26315
- Speed up CopyPaste with a masked cv2.copyTo by @raimbekovm in #26310
- Discover .yml dataset YAMLs in directories and archives by @Nikhi00718 in #26323
- Accept list and tuple boxes in xyxy2xywh and xywh2xyxy by @MohammadHijjawi97 in #26322
- Reset the tracker between sources that share a filename by @aswanth-07 in #26312
- Document text-prompted SAM, 500K-object cloud imports, endpoint warm-up states and class-name image search by @raimbekovm in #26311
- Extract .tar.xz, .tar.bz2 and local .tgz dataset archives by @Vaishnavi220506 in #26306
- Return None for empty image files in imread_unicode by @cainiao33 in #26304
- Document segments2boxes inputs as (N, 2) point arrays by @MohammadHijjawi97 in #26321
- Close the replaced train dataloader on OOM auto-reduce by @cainiao33 in #26302
- ultralytics 8.4.162 Prefetch the next image batch during CUDA prediction by @JESUSROYETH in #26319
Full Changelog: v8.4.161...v8.4.162