π Summary
Ultralytics v8.4.93 expands Alibaba MNN export capabilities, improves training and inference reliability, and adds major dataset, cloud-storage, and integration documentation updates. π
π Key Changes
-
Alibaba MNN exports now support dynamic shapes and embedded NMS π―
dynamic=Trueenables variable image dimensions for MNN models.nms=Trueis supported for detect and pose models with static shapes.- Unsupported combinations now fail clearly:
- Dynamic shapes with NMS
- NMS for segmentation and OBB models
- Empty NMS outputs are handled safely only when the exported metadata confirms NMS is enabled.
- Real MNN 3.5.0 inference was validated with YOLO11 detection, pose, and OBB workflows.
-
Improved model tracking and vision workflows ποΈ
- Fixed native ReID crashes in BoT-SORT when users provide detections directly without feature tensors.
- Polygon-based
ObjectCounternow determines IN/OUT direction from object motion rather than region shape, improving counting in square and wide regions. - YOLOE visual prompts now work with PyTorch tensor inputs.
embed=[]no longer causes prediction to fail.
-
More reliable training, benchmarking, and export behavior π οΈ
- Semantic segmentation loss remains finite when an entire batch contains ignore pixels.
- Legacy
benchmark(half=True)andbenchmark(int8=True)flags now correctly map to quantized benchmarking instead of silently using FP32. - Invalid configuration values such as
nbs=0,max_det=0,mask_ratio=0, or negative seeds are rejected early with clear errors. - TorchScript optimization now reports a helpful message when XNNPACK is unavailable.
- CPU
torch.compilegracefully falls back to eager execution when no C++ compiler is available. - CoreML exports use a safer NumPy compatibility limit to avoid NumPy 2.4 crashes.
- Axelera exports reject image sizes below the backendβs 64-pixel minimum.
-
Improved segmentation and conversion utilities β‘
segment2boxis significantly faster while preserving its output.process_mask(upsample=True)now upsamples before cropping, preventing mask pixels from leaking outside bounding boxes.- Segment-mask conversion now creates missing output directories and handles Windows grayscale image shapes correctly.
- Deprecated
crop_fractionusage now emits a warning instead of stopping classification transforms.
-
Expanded pose evaluation customization π§
- Pose datasets can define custom
kpt_oks_sigmasvalues in their YAML files. - Values are validated against the configured number of keypoints and must be positive.
- Pose datasets can define custom
-
Ultralytics Platform cloud-storage integrations documented βοΈ
- Added guides for connecting Google Cloud Storage, Amazon S3, and Azure Blob Storage.
- Platform can index images and YOLO labels in place without copying the source data.
- Documentation covers read-only credentials, dataset creation, revision pinning, import limits, retries, and current limitations.
- These integrations require a Pro or Enterprise plan.
-
Documentation and deployment updates π
- Added documentation for Apple Core AI and its future
.aimodelworkflow. Core AI export is not yet available; Core ML remains the supported Apple deployment path. - Dataset guides now document using
.txtimage lists for train, validation, and test splits. - Segmentation dataset documentation was refreshed with corrected split counts, class information, download sizes, and clearer usage guidance.
- Rust inference examples now use
ultralytics-inference0.0.27. - Python Docker images now use Python 3.13 on Debian Trixie.
- Environment variables accept common truthy values such as
1,yes,on,y, andt.
- Added documentation for Apple Core AI and its future
π― Purpose & Impact
- Broader deployment support: MNN users can target applications that need variable input sizes or built-in post-processing, while clear restrictions prevent unsupported exports from failing later.
- Fewer runtime crashes: Tracking, segmentation training, tensor-based YOLOE inference, compilation, and export workflows now handle common edge cases more safely.
- More trustworthy results: Fixes to mask cropping, object-counting direction, semantic loss, and benchmark precision ensure outputs and metrics better reflect user settings.
- Faster development cycles: The optimized
segment2boximplementation and improved small-dataset documentation make testing and experimentation more efficient. - Simpler cloud workflows: Platform users can train on existing cloud datasets without manually downloading and re-uploading large collections.
- Clearer configuration errors: Invalid arguments are detected at the configuration layer with actionable messages instead of obscure deep runtime tracebacks.
- Apple deployment guidance is clearer: Users can continue using supported Core ML exports today while understanding that Core AI support is planned for a future release. π
What's Changed
- Bump slackapi/slack-github-action from v3.0.3 to v3.0.5 in /.github/workflows by @UltralyticsAssistant in #25110
- Add Platform cloud storage integration docs (GCS, S3, Azure) by @glenn-jocher in #25112
- Split Platform cloud storage docs into per-vendor pages by @glenn-jocher in #25113
- Fix
ObjectCounterpolygon direction to follow object motion by @JESUSROYETH in #25104 - Fix
BOTSORTnative-ReID crash with user-supplied detections by @JESUSROYETH in #25102 - Pin numpy<=2.3.5 for CoreML export to avoid numpy>=2.4 crash by @fcakyon in #25100
- Fix silent FP32 fallback for legacy precision flags in
benchmarkby @JESUSROYETH in #25106 - Speed up segment2box by @Y-T-G in #25095
- Fix NaN semantic loss when the whole batch is ignore pixels by @JESUSROYETH in #25097
- Validate bool-or-str CLI args (compile) at cfg layer (#25056) by @Joe-KI333 in #25082
- Refactor segmentation dataset documentation by @raimbekovm in #25063
- Validate integer minimums and compile type at cfg layer by @glenn-jocher in #25114
- Fail cleanly for optimize=True on PyTorch builds without XNNPACK by @glenn-jocher in #25116
- Fall back to eager when torch.compile fails at first forward by @glenn-jocher in #25115
- Fix
ValueErrorwhenpredictis called with an emptyembedlist by @ahmet-f-gumustas in #25123 - Fix segment mask conversion output directory by @zhanghuiwan in #25117
- Upgrade Python Docker image to 3.13 Trixie by @glenn-jocher in #25127
- Add Apple Core AI integration guide by @glenn-jocher in #25129
- Fix
raise DeprecationWarninghaltingclassify_transformsby @Dheeraj-Bhaskaruni in #24236 - Update
ultralytics-inferenceversion to 0.0.27 in documentation by @onuralpszr in #25130 - Preserve
save_diroverride when resuming training by @yegeniy in #23623 - Upsample before crop in
process_maskto prevent mask leakage by @wjddnwp29 in #24463 - Accept common truthy strings for boolean environment variables by @raimbekovm in #24730
- Document
.txtimage-list usage in dataset YAML splits by @raimbekovm in #24472 - Reject undersized Axelera exports by @glenn-jocher in #25131
- Fix YOLOE tensor input support with visual prompts by @emmanuel-ferdman in #22251
- Support optional
kpt_oks_sigmasfor pose evaluation via dataset YAML by @cosmo-gb in #24381 - Enable dynamic shapes and NMS for Alibaba MNN export by @Y-T-G in #22348
New Contributors
- @Dheeraj-Bhaskaruni made their first contribution in #24236
- @yegeniy made their first contribution in #23623
- @Joe-KI333 made their first contribution in #25082
- @wjddnwp29 made their first contribution in #24463
- @cosmo-gb made their first contribution in #24381
Full Changelog: v8.4.92...v8.4.93