π Key Changes
- π§© **Albumentations now handles spatial transforms by type**
- PR 25633 replaces the fragile hardcoded transform-name list with recursive type detection, so wrapped transforms such as `OneOf` correctly update annotations.
- Spatial augmentations now carry **bounding boxes, polygons, masks, depth maps, and keypoints** through the pipeline.
- Background-only images receive pixel-level augmentations even when they have no annotations.
- Keypoint flipping respects the configured `flip_idx` mapping.
- Probability handling now makes a zero probability a reliable off switch.
- Unsupported topology-changing transforms, such as grid shuffling with polygons or keypoints, are detected instead of silently corrupting labels.
- π **Improved security for dependency installation**
- `check_requirements()` now prevents untrusted requirement strings from being interpreted as shell commands.
- This protects workflows that automatically install missing dependencies while loading model files.
- π‘οΈ **More reliable dataset and mask processing**
- Fixed Windows semantic-mask shape handling so grayscale masks remain two-dimensional and semantic training no longer fails during Mosaic augmentation.
- COCO conversion now keeps one consistent label format per file, warns about unusable polygons, and falls back to box-shaped polygons when necessary.
- Mixed detection and segmentation rows are rejected instead of being silently misread.
- Grounding dataset caching and validation were improved, including clearer errors for empty or invalid annotation sets.
- Degenerate polygon contours are skipped when exporting labels.
- π§ **Depth estimation improvements**
- Depth postprocessing now aligns PyTorch, Hailo, and exported-model outputs before removing padding, producing more consistent results across inference backends.
- Depth validation no longer inherits rectangular batching behavior that conflicts with its intentional square stretching.
- The KITTI depth configuration now uses the canonical 652-frame left-camera evaluation split, avoiding test-set overlap and making reported results more reproducible.
- Depth metrics and documentation were updated to reflect per-image evaluation behavior.
- β‘ **Faster and more consistent inference**
- YOLO26 end-to-end postprocessing uses grouped top-k selection, improving TensorRT FP16 latency by approximately **1.8% to 8.1%** without changing mAP.
- RT-DETR FLOPs profiling is faster and now supports attention-based decoder architectures correctly.
- SavedModel INT8 calibration avoids an unnecessary NumPy copy.
- GMC tracking now handles textureless frames and incomplete feature matches without stopping, allowing tracking to recover cleanly.
- SAM3 video masks use the modelβs configured threshold consistently instead of a fixed threshold.
- π― **Expanded model and training support**
- Pose training now accepts dataset-defined `kpt_oks_sigmas`, with validation that the configuration matches the modelβs keypoint count.
- OBB utilities handle empty inputs more safely, and documentation clarifies long-edge canonicalization and prediction formats.
- Predictors now report unsupported options such as augmentation, embeddings, and visualization instead of silently ignoring them.
- Cached predictors are refreshed after training so predictions use the newly trained weights and class names.
- Embedding requests now provide clearer errors for exported or third-party models that do not expose compatible internal layers.
- YOLOE class and visual-prompt validation was strengthened, supporting more reliable prompt-free vocabulary workflows.
- π **Documentation and platform updates**
- Export documentation now covers additional options such as `name`, `split`, `conf`, `iou`, `max_det`, and `agnostic_nms`.
- Classification dataset inputs are consistently documented as directories or built-in dataset names rather than YAML files.
- Added reusable depth-speed comparison documentation and a new **YAML2ModelGraph integration guide** for generating YOLO architecture diagrams from model YAML files.
- Added Platform troubleshooting guidance for datasets, training, deployment, billing, and common questions.
- FAQ and supporting sections were reorganized for more consistent documentation rendering.
- Rust inference documentation now references `ultralytics-inference` version `0.0.33`.
- Documentation publishing is now restricted to the `main` branch to prevent accidental production releases.
π― Purpose & Impact
- β
**More trustworthy augmentation:** Labels and auxiliary data remain aligned when using custom or nested Albumentations pipelines, reducing silent training errors.
- π§ͺ **Better training stability:** Depth, semantic segmentation, pose, OBB, grounding, and tracking workflows handle edge cases more gracefully.
- π **Improved deployment performance:** YOLO26 TensorRT exports can achieve lower postprocessing latency, while depth predictions behave more consistently across backends.
- π **Safer model loading:** Dependency checks no longer expose shell execution risks through malicious requirement strings.
- π **More reproducible evaluation:** The corrected KITTI split and clarified depth metrics make comparisons easier to interpret, although results from older downloaded datasets may require rebuilding.
- π **Clearer user experience:** Updated documentation explains task-specific inputs, export controls, model limitations, and platform troubleshooting in more practical terms.
What's Changed
* Bump eviden-actions/clean-self-hosted-runner from v1.4.35 to v1.4.36 in /.github/workflows by UltralyticsAssistant in https://github.com/ultralytics/ultralytics/pull/25711
* Bump ultralytics-inference version to 0.0.33 in documentation by onuralpszr in https://github.com/ultralytics/ultralytics/pull/25712
* Publish docs only from main by glenn-jocher in https://github.com/ultralytics/ultralytics/pull/25713
* Move the Depth Anything V2 speed table into a docs macro by raimbekovm in https://github.com/ultralytics/ultralytics/pull/25715
* Fix Windows semantic mask shape regression by Y-T-G in https://github.com/ultralytics/ultralytics/pull/25721
* Document the predictor data attribute as the args copy it holds by raimbekovm in https://github.com/ultralytics/ultralytics/pull/25692
* Threshold SAM3 video semantic masks at the model logit threshold by JESUSROYETH in https://github.com/ultralytics/ultralytics/pull/25643
* Fix shell injection in check_requirements() via untrusted requirement strings by Zenka737 in https://github.com/ultralytics/ultralytics/pull/25720
* Document max_det, iou, conf export arguments by raimbekovm in https://github.com/ultralytics/ultralytics/pull/25675
* feat: clarify confusion matrix confidence threshold during validation by Rahulbiradar9 in https://github.com/ultralytics/ultralytics/pull/25677
* fix GMC empty descriptor handling by Nikhi00718 in https://github.com/ultralytics/ultralytics/pull/25709
* Fix redundant SavedModel INT8 calibration copy by amanharshx in https://github.com/ultralytics/ultralytics/pull/25639
* Fix depth val silently overriding its own stretch letterbox with inherited `rect=True` by JESUSROYETH in https://github.com/ultralytics/ultralytics/pull/25646
* Document the OBB long-edge canonicalization, convert empty box inputs, and skip degenerate segment contours by raimbekovm in https://github.com/ultralytics/ultralytics/pull/25655
* Use the Hailo Model Zoo quantization recipe for YOLO26 HEF export by nivosco in https://github.com/ultralytics/ultralytics/pull/25687
* Document the confidence threshold used for the val confusion matrix (25674) by Parth1353 in https://github.com/ultralytics/ultralytics/pull/25722
* Write one label format per file in convert_coco and document the classification data input by raimbekovm in https://github.com/ultralytics/ultralytics/pull/25672
* Grouped topk e2e postprocess by artest08 in https://github.com/ultralytics/ultralytics/pull/25666
* Speed up RT-DETR FLOPs profiling by Daniiiil1 in https://github.com/ultralytics/ultralytics/pull/25652
* Document missing export and predict arguments and the classification data directory by raimbekovm in https://github.com/ultralytics/ultralytics/pull/25690
* Support optional kpt_oks_sigmas in v8PoseLoss for training by cosmo-gb in https://github.com/ultralytics/ultralytics/pull/25656
* Name the classification input in the export calibration, benchmark and tuner data rows by raimbekovm in https://github.com/ultralytics/ultralytics/pull/25698
* Report unimplemented predict arguments, refresh the predictor after training, and register tracker callbacks once per model by raimbekovm in https://github.com/ultralytics/ultralytics/pull/25688
* Remove brittle Hailo model-specific recipe by glenn-jocher in https://github.com/ultralytics/ultralytics/pull/25728
* Move documentation FAQs to page ends by glenn-jocher in https://github.com/ultralytics/ultralytics/pull/25730
* Use Ultralytics YOLO in task page titles and lead copy by miles-deans-ultralytics in https://github.com/ultralytics/ultralytics/pull/25705
* Align depth postprocessing across inference backends by JESUSROYETH in https://github.com/ultralytics/ultralytics/pull/25628
* Validate YOLOE classes and enable prompt-free vocabulary workflows by raimbekovm in https://github.com/ultralytics/ultralytics/pull/25691
* Fix grounding label scanning, caching, and reporting by raimbekovm in https://github.com/ultralytics/ultralytics/pull/25678
* Fix the KITTI Eigen test split: 3 test drives were in train by JESUSROYETH in https://github.com/ultralytics/ultralytics/pull/25650
* Fix unbounded per-track solution state in continuous streams by JESUSROYETH in https://github.com/ultralytics/ultralytics/pull/25729
* docs: add YAML2ModelGraph integration documentation by Rahulbiradar9 in https://github.com/ultralytics/ultralytics/pull/25726
* Average DepthMetrics per image instead of pooling every valid pixel by JESUSROYETH in https://github.com/ultralytics/ultralytics/pull/25648
* Gate `DepthLoss26` gradient pyramids per image by JESUSROYETH in https://github.com/ultralytics/ultralytics/pull/25637
* Route spatial Albumentations by type and carry masks, polygons and keypoints through it by raimbekovm in https://github.com/ultralytics/ultralytics/pull/25633
New Contributors
* Parth1353 made their first contribution in https://github.com/ultralytics/ultralytics/pull/25722
* Nikhi00718 made their first contribution in https://github.com/ultralytics/ultralytics/pull/25709
* nivosco made their first contribution in https://github.com/ultralytics/ultralytics/pull/25687
* Daniiiil1 made their first contribution in https://github.com/ultralytics/ultralytics/pull/25652
**Full Changelog**: https://github.com/ultralytics/ultralytics/compare/v8.4.116...v8.4.117