๐ Summary
Ultralytics v8.4.89 improves prediction reliability for grayscale NumPy images, adds several important edge-case fixes, and makes training, benchmarking, AI Gym, and release publishing more robust ๐
๐ Key Changes
-
๐ผ๏ธ Fixed 2D grayscale NumPy prediction on color models by @maxime2476
- Raw grayscale NumPy arrays shaped like
(H, W)are now expanded correctly for 3-channel color models. - This makes NumPy inputs behave consistently with PIL images and file paths.
- Prevents PyTorch channel mismatch crashes during prediction.
- Raw grayscale NumPy arrays shaped like
-
๐๏ธ Fixed AI Gym result alignment by @SuperMarioYL
workout_count,workout_stage, andworkout_anglenow only report currently visible tracked people.- Results now stay aligned with
total_tracks, avoiding stale data from people who already left the frame.
-
โก Improved multi-GPU training performance by @ExtReMLapin
- Distributed training now uses
broadcast_buffers=Falseby default. - This can reduce unnecessary GPU synchronization overhead, especially on non-NVLink systems or high-resolution training.
- Distributed training now uses
-
๐งช Improved benchmark usability by @zhanghuiwan and @raimbekovm
- Benchmark
formatvalues are now case-insensitive, so inputs likeONNXorTensorRTwork as expected. - Benchmark docs now include the
epsargument and clarify standalonebenchmark()defaults, includingmodel="yolo26n.pt"andimgsz=160.
- Benchmark
-
๐ Fixed YOLOE and YOLO-World CLI class parsing by @ahmet-f-gumustas
- Class names passed through the CLI now strip extra whitespace.
- For example,
classes="person, bus"now becomes["person", "bus"]instead of["person", " bus"].
-
๐ Fixed signed model URL suffix validation by @diaz3z
- URLs like
model.pt?token=abcnow pass.ptsuffix checks correctly. - This improves compatibility with private or authenticated model downloads.
- URLs like
-
๐ Fixed
segment2box()for objects on the left image edge by @bujna94- Segments where all x-coordinates are
0are no longer incorrectly dropped. - This improves bounding box generation for objects touching the image border.
- Segments where all x-coordinates are
-
๐งฉ Improved installation reliability by @Nailujj
- Excludes the known problematic
opencv-python==4.13.0.90package. - Helps avoid OpenCV-related crashes in environments such as Databricks.
- Excludes the known problematic
-
๐ ๏ธ Hardened release publishing workflow by @glenn-jocher
- Manual recovery runs are now safer after partial release failures.
- Existing PyPI artifacts and release uploads are handled more gracefully.
- Slack notifications now wait for publishing and SBOM generation to finish.
๐ฏ Purpose & Impact
-
โ More reliable inference inputs
Users can now pass grayscale NumPy arrays directly to standard color YOLO models without manual channel conversion. -
๐ More consistent behavior across input types
NumPy, PIL, and file-based grayscale images are now normalized more consistently before prediction. -
๐ Better distributed training efficiency
Multi-GPU users may see reduced synchronization bottlenecks, especially in bandwidth-limited setups. -
๐ Clearer and more forgiving benchmarking
Benchmark workflows are easier to use, with fewer avoidable errors from capitalization or undocumented defaults. -
๐๏ธ Cleaner AI Gym analytics
Workout tracking outputs are easier to consume because per-person lists now match the people currently visible in the frame. -
๐ Better support for real-world deployment workflows
Signed URLs and managed Python environments are handled more reliably, reducing friction for cloud and enterprise users. -
๐งช Stronger regression coverage
New tests protect the grayscale NumPy fix, signed URL handling,segment2box()border behavior, and CLI class parsing from future regressions.
What's Changed
- Harden publish workflow recovery, notifications, and dispatch guard by @glenn-jocher in #25027
- Add GhostNetV2 (DFC attention) modules and YOLOv8 GhostV2 configs by @kaanrkaraman in #23108
- Update README by @versa-dev in #23656
- Strip whitespace from CLI
classesfor YOLOE/World by @ahmet-f-gumustas in #24677 - Exclude broken
opencv-python4.13.0.90 wheel by @Nailujj in #23376 - Fix AIGym workout result lists to align with visible track IDs by @SuperMarioYL in #24228
- Strip URL query strings in
check_suffixfor signed model URLs by @diaz3z in #24369 - Set DDP
broadcast_buffers=Falseby default by @ExtReMLapin in #24412 - Make benchmark
formatcomparison case-insensitive by @zhanghuiwan in #24453 - Document benchmark
epsarg and standalonebenchmark()defaults by @raimbekovm in #24560 - Fix
segment2boxdropping segments on the left image edge by @bujna94 in #24679 - Fix 2D grayscale NumPy array prediction on color models by @maxime2476 in #24751
New Contributors
- @SuperMarioYL made their first contribution in #24228
- @Nailujj made their first contribution in #23376
- @maxime2476 made their first contribution in #24751
- @versa-dev made their first contribution in #23656
- @diaz3z made their first contribution in #24369
- @zhanghuiwan made their first contribution in #24453
- @bujna94 made their first contribution in #24679
Full Changelog: v8.4.88...v8.4.89