New Release: Ultralytics v8.4.89

:rocket: Ultralytics v8.4.89 is here!

Ultralytics v8.4.89 focuses on reliability, edge-case correctness, and smoother workflows across prediction, training, benchmarking, AI Gym, installation, and release publishing. This release includes important fixes for grayscale NumPy inference, signed model URLs, AI Gym tracking alignment, multi-GPU training, and more.

:glowing_star: Quick Highlights

  • :framed_picture: Grayscale NumPy arrays now work correctly with standard color Ultralytics YOLO models.
  • :high_voltage: Multi-GPU training can see reduced synchronization overhead with broadcast_buffers=False.
  • :person_lifting_weights: AI Gym workout outputs now stay aligned with currently visible tracked people.
  • :test_tube: Benchmarking is more forgiving with case-insensitive format values.
  • :locked_with_key: Signed model URLs like model.pt?token=abc now validate correctly.
  • :triangular_ruler: segment2box() now handles objects touching the left image edge.
  • :puzzle_piece: Installation reliability improves by excluding a problematic OpenCV wheel.

:new_button: New Features

:ghost: GhostNetV2 modules and YOLOv8 GhostV2 configs

In PR #23108, @kaanrkaraman added GhostNetV2 DFC attention modules and YOLOv8 GhostV2 configurations, expanding the available model architecture options for experimentation and development.

:white_check_mark: Improvements

:high_voltage: Better multi-GPU training efficiency

In PR #24412, @ExtReMLapin set DDP broadcast_buffers=False by default. This can reduce unnecessary GPU synchronization, especially on systems without NVLink or during high-resolution training.

:test_tube: More user-friendly benchmarking

In PR #24453, @zhanghuiwan made benchmark format comparisons case-insensitive, so values like ONNX and TensorRT now work as expected.

In PR #24560, @raimbekovm improved benchmark documentation by adding the eps argument and clarifying standalone benchmark() defaults, including model="yolo26n.pt" and imgsz=160.

:hammer_and_wrench: More robust release publishing

In PR #25027, @glenn-jocher hardened the release publishing workflow with safer recovery handling, more graceful behavior for existing PyPI artifacts and release uploads, and improved notification timing after publishing and SBOM generation.

:books: README updates

In PR #23656, @versa-dev contributed README updates to improve project documentation.

:bug: Bug Fixes

:framed_picture: Fixed grayscale NumPy prediction on color models

In PR #24751, @maxime2476 fixed prediction for raw 2D grayscale NumPy arrays shaped like (H, W) when used with 3-channel color models. These inputs are now expanded correctly, making NumPy behavior more consistent with PIL images and file paths while preventing PyTorch channel mismatch crashes.

:person_lifting_weights: Fixed AI Gym workout result alignment

In PR #24228, @SuperMarioYL fixed AI Gym result lists so workout_count, workout_stage, and workout_angle only report currently visible tracked people. This keeps outputs aligned with total_tracks and avoids stale data from people who have left the frame.

:globe_showing_europe_africa: Fixed YOLOE and YOLO-World CLI class parsing

In PR #24677, @ahmet-f-gumustas fixed CLI class parsing by stripping extra whitespace. For example, classes="person, bus" now becomes ["person", "bus"] instead of ["person", " bus"].

:link: Fixed signed model URL validation

In PR #24369, @diaz3z updated check_suffix to strip URL query strings before suffix validation. Signed URLs such as model.pt?token=abc now correctly pass .pt checks.

:triangular_ruler: Fixed segment2box() for left-edge objects

In PR #24679, @bujna94 fixed an edge case where segments with all x-coordinates equal to 0 were incorrectly dropped. This improves bounding box generation for objects touching the left image border.

:puzzle_piece: Improved installation reliability

In PR #23376, @Nailujj excluded the known problematic opencv-python==4.13.0.90 wheel, helping avoid OpenCV-related crashes in managed environments such as Databricks.

:raising_hands: New Contributors

A big welcome and thank you to our new contributors in this release:

  • @SuperMarioYL made their first contribution in PR #24228.
  • @Nailujj made their first contribution in PR #23376.
  • @maxime2476 made their first contribution in PR #24751.
  • @versa-dev made their first contribution in PR #23656.
  • @diaz3z made their first contribution in PR #24369.
  • @zhanghuiwan made their first contribution in PR #24453.
  • @bujna94 made their first contribution in PR #24679.

:package: Upgrade Today

Upgrade to the latest release with:

pip install -U ultralytics

You can review the full release details in the Ultralytics v8.4.89 release notes, and you can compare every change in the full changelog from v8.4.88 to v8.4.89.

Please try v8.4.89 and let us know how it works in your training, benchmarking, deployment, and AI Gym workflows. Thanks as always to the YOLO community and the Ultralytics team for the continued improvements! :tada: