New Release: Ultralytics v8.4.103

:rocket: Ultralytics v8.4.103 Released

Ultralytics v8.4.103 improves training reliability, validation accuracy, NumPy-backed results, model performance, export safety, Platform workflows, and documentation.

The headline fix ensures warmup finishes on schedule, allowing short training runs to reach their intended learning-rate behavior. :bullseye:

Upgrade today:

pip install -U ultralytics

Review the official Ultralytics v8.4.103 release for package details.

:glowing_star: New Features

Smarter validation sampling and reporting

Validation samples sent to the Ultralytics Platform now span evenly ranked F1 results across the full image distribution, with additional best and worst cohorts. See PR #25300 from @glenn-jocher for details.

Platform REST API documentation now covers supported API-key operations across datasets, models, training, exports, deployments, storage, activity, and workspaces. This was added in PR #25296 by @glenn-jocher.

New Slack alert documentation explains how to receive training, export, and deployment results. Learn more in PR #25301 from @glenn-jocher.

:high_voltage: Improvements

Training and model performance

  • ModelEMA updates are faster through batched PyTorch _foreach_lerp_ operations where supported. See PR #25315 by @raimbekovm.
  • Final effective training batches now receive additional validation, including after batch-size changes and out-of-memory recovery. See PR #25322 by @glenn-jocher.
  • Image-list prediction sources now follow HTTP 308 redirects on supported Python versions. See PR #25313 by @raimbekovm.
  • Fuzz subprocess sources and signatures were corrected for more reliable testing. See PR #25294 by @glenn-jocher.

Safer exports and deployment

  • CoreML compatibility is checked before conversion, allowing unsupported dynamic classification and RT-DETR combinations to fail earlier with clearer feedback. See PR #25323 by @glenn-jocher.
  • RKNN export now warns when a requested opset above 19 is automatically reduced. See PR #25303 by @synml.
  • Platform On Premise and Docker references now use rolling latest tags, while Linux GPU guidance recommends CDI --device reservations. See PR #25295 by @glenn-jocher.

Documentation and workflows

  • The YOLO26 documentation now puts inference quickstarts above the fold for faster onboarding. See PR #25312 by @raimbekovm.
  • Guides are now grouped by project stage, and YOLOv5 documentation has moved into a clearly labeled legacy section. See PR #25307 by @raimbekovm.
  • New contextual navigation repairs forward links throughout the newcomer training path. See PR #25253 by @raimbekovm.
  • Broken Tiger-Pose YouTube links have been updated. See PR #25314 by @RizwanMunawar.
  • GitHub Actions workflows now use actions/setup-python@v7. See PR #25311 by @UltralyticsAssistant.

:hammer_and_wrench: Bug Fixes

Warmup now finishes on schedule

warmup_epochs is now treated as a true epoch count instead of being forced to at least 100 iterations. Warmup is also capped so the final planned epoch uses the regular learning-rate schedule.

For example, a 10-epoch run configured with three warmup epochs now warms up for three epochs rather than potentially remaining in warmup for the entire run. The implementation is covered by PR #25321 from @glenn-jocher.

More trustworthy metrics and tracking

  • Confusion matrices now honor the validator’s supplied confidence threshold instead of silently overriding it to 0.25. See PR #25320 by @glenn-jocher.
  • Segmentation curves, pose curves, and raw confusion-matrix plots are no longer dropped from experiment trackers such as W&B, ClearML, Neptune, and DVC. See PR #25319 by @JESUSROYETH.

Reliable models, masks, and results

  • Backbone width scaling is no longer skipped when a layer’s channel count equals nc, preventing unexpectedly oversized models. See PR #25297 by @JESUSROYETH.
  • Results methods including plot(), save_txt(), save_crop(), summary(), and verbose() now work with NumPy-backed outputs from Results.numpy(). See PR #25318 by @JESUSROYETH.
  • Mask processing now binarizes masks before cropping while preserving output behavior. See PR #25298 by @JESUSROYETH.
  • The redundant and unsupported Hailo opset argument has been removed. See PR #25305 by @lakshanthad.

:brain: Recommended for New Projects

For new projects, we recommend Ultralytics YOLO26, our latest stable model generation across detection, segmentation, classification, pose, and OBB tasks.

For streamlined annotation, training, export, deployment, and monitoring, try the Ultralytics Platform.

:raising_hands: Get Started

Upgrade with pip install -U ultralytics, try v8.4.103 on your workflows, and let us know how the improved warmup scheduling, validation reporting, NumPy interoperability, and export checks work for you.

You can review every change in the complete v8.4.102 to v8.4.103 changelog. Thanks to every contributor and the wider YOLO community for helping make this release possible! :rocket: