๐ Summary
v8.4.103 improves training reliability, result handling, deployment workflows, and documentationโmost importantly ensuring warmup finishes on schedule so short training runs reach their intended learning-rate behavior. ๐
๐ Key Changes
-
Training warmup no longer consumes entire short runs ๐ฏ
warmup_epochsis now treated as a true epoch count rather than being forced to at least 100 iterations.- Warmup is capped so at least the final planned epoch uses the regular learning-rate schedule.
- Warmup calculations are centralized and remain consistent after batch-size changes, out-of-memory recovery, and timed-training adjustments.
- Example: a 10-epoch run with 3 warmup epochs now warms up for 3 epochs instead of potentially staying in warmup for the entire run.
-
More accurate validation and experiment reporting ๐
- Confusion matrices now honor the confidence threshold supplied by the validator instead of silently overriding it to 0.25.
- Validation samples sent to the Platform now include evenly ranked F1 samples across the full image distribution, plus separate best and worst cohorts.
- Segmentation, pose, and raw confusion-matrix plots are no longer dropped from experiment trackers such as W&B, ClearML, Neptune, and DVC.
-
Improved model construction and performance โก
- Fixed backbone width scaling when a layerโs channel count happens to equal the number of classes, preventing unexpectedly oversized models.
- Accelerated
ModelEMAupdates with batched PyTorch operations where supported. - Made model profiling safer by profiling copied layers rather than modifying shared model modules.
-
More robust results and mask processing ๐ผ๏ธ
Resultsmethods such asplot(),save_txt(),save_crop(),summary(), andverbose()now work correctly with NumPy-backed results fromResults.numpy().- Mask processing now binarizes masks before cropping while preserving output behavior.
- Image-list prediction sources now follow HTTP 308 redirects on supported Python versions.
-
Safer and clearer exports ๐ง
- CoreML compatibility checks now run before conversion and reject unsupported dynamic classification and RT-DETR exports earlier.
- Removed the unsupported Hailo
opsetargument. - RKNN exports now warn users when a requested opset above 19 is automatically reduced.
-
Expanded Platform and API capabilities โ๏ธ
- Platform REST API documentation now covers supported API-key operations across datasets, models, training, exports, deployments, storage, activity, and workspaces.
- Added documentation for Slack alerts for training, export, and deployment results.
- Updated Platform On Premise and Docker image references to use rolling
latesttags. - Linux GPU Docker guidance now recommends CDI
--devicereservations for more reliable access across host daemon reloads.
-
Documentation and workflow improvements ๐
- YOLO26 documentation now presents inference quickstarts above the fold and points open-vocabulary YOLOE-26 content to its dedicated page.
- Guides are organized by project stage, from data preparation through deployment and edge hardware.
- Added contextual โWhatโs Nextโ links across prediction, dataset, training, validation, and export pages.
- Updated broken Tiger-Pose video links and moved YOLOv5 documentation into a clearly labeled legacy section.
- Updated GitHub Actions workflows to use
actions/setup-python@v7.
๐ฏ Purpose & Impact
- Short training jobs now train as intended โ Users no longer risk spending an entire run in warmup with very low learning rates, which should improve optimization and make results more representative of the configured schedule.
- Metrics and diagnostics are more trustworthy ๐ Confidence thresholds, confusion matrices, F1 samples, and tracker plots now better reflect actual validation settings and model behavior.
- Model sizes are more predictable ๐ง Models created from YAML configurations will no longer become unexpectedly large in certain class-count configurations.
- NumPy interoperability is substantially better ๐ Users can convert results to NumPy and continue using common output, plotting, cropping, and export methods.
- Deployment is safer and easier to troubleshoot ๐ ๏ธ Unsupported export combinations fail earlier, while RKNN overrides and Docker GPU requirements are now communicated clearly.
- Platform users get better automation and integration options ๐ Slack alerts and broader API-key support make it easier to monitor and manage training and deployment programmatically.
- Recommended model: For new projects, use YOLO26, or streamline annotation, training, and deployment with Ultralytics Platform.
What's Changed
- Fix fuzz subprocess source and signatures by @glenn-jocher in #25294
- Modernize Platform links and Docker workflows by @glenn-jocher in #25295
- Align Platform API docs with API-key support by @glenn-jocher in #25296
- Update broken YouTube video links in docs by @RizwanMunawar in #25314
- Bump actions/setup-python from v6 to v7 in /.github/workflows by @UltralyticsAssistant in #25311
- Honor validation confidence in confusion matrices by @glenn-jocher in #25320
- Document Platform Slack alerts by @glenn-jocher in #25301
- Remove redundant
opsetargument from Hailo export by @lakshanthad in #25305 - Sample validation results across F1 ranks by @glenn-jocher in #25300
- Repair broken forward links in the newcomer training path by @raimbekovm in #25253
- Group guides index into categorized sections and split YOLOv5 legacy from the nav by @raimbekovm in #25307
- Validate CoreML combinations before export by @glenn-jocher in #25323
- Follow HTTP 308 redirects in autocast_list URL sources by @raimbekovm in #25313
- Validate effective final training batch by @glenn-jocher in #25322
- Warn when RKNN export lowers a user-specified opset by @synml in #25303
- Faster
ModelEMAupdate with batched_foreach_lerp_by @raimbekovm in #25315 - Move quick start and predict example above the fold on the YOLO26 page by @raimbekovm in #25312
- Fix Mask/Pose curves and raw confusion matrix dropped from experiment trackers by @JESUSROYETH in #25319
- Binarize masks before cropping in
process_maskby @JESUSROYETH in #25298 - Fix backbone layers skipping width scaling when their channel count equals
ncby @JESUSROYETH in #25297 - Fix Results methods crashing on numpy-backed results by @JESUSROYETH in #25318
- Prevent training from ending during warmup by @glenn-jocher in #25321
Full Changelog: v8.4.102...v8.4.103