v8.4.135
v8.4.135 - Respect dataset object counts when selecting max_det (#25993)
Added 2
- Warnings notify users when images contain more objects than max_det allows, explaining that a low limit can cap recall and produce misleading validation metrics
- Additional tests cover configuration validation, dataset conversion, concatenated datasets, training pipelines, and end-to-end detection behavior
Changed 5
- Training and validation now automatically increase max_det if the default value is lower than the largest number of labeled objects found in a single image
- User-specified max_det values are preserved but a warning is shown when they may limit validation recall
- The resolved max_det value is propagated to native end-to-end model heads before validation for improved consistency with NMS-free models
- Fraction boundary behavior is now consistent, with fraction=1 and fraction=1.0 both meaning use the full dataset, integers greater than 1 representing image count, 0 and 0.0 for skipping optional test split
- Boolean values such as fraction=True are now rejected instead of being interpreted ambiguously
From ultralytics
🌟 Summary
v8.4.135 improves detection reliability by adapting max_det to dataset object counts and standardizing dataset fraction handling.
📊 Key Changes
-
🚀 Smarter
max_detselection for detection, segmentation, pose, and OBB tasks- Training and validation now inspect the largest number of labeled objects found in a single image.
- If the default
max_detis too low, it is automatically increased to match the observed dataset maximum. - User-specified
max_detvalues are preserved, but a warning is shown when they may limit validation recall. - The resolved value is propagated to native end-to-end model heads before validation, improving consistency for NMS-free models.
-
⚠️ Clearer warnings for object-count mismatches
- Users are notified when images contain more objects than
max_detallows. - Warnings explain that a low limit can cap recall and produce misleading validation metrics.
- Increasing
max_detmay increase validation cost, and cannot exceed the model or export format’s own capacity.
- Users are notified when images contain more objects than
-
📏 Consistent
fractionboundary behaviorfraction=1andfraction=1.0now both mean “use the full dataset.”- Integers greater than
1continue to represent an image count. 0and0.0remain available for skipping an optional test split.- Training and validation splits must still contain at least one image.
- Boolean values such as
fraction=Trueare now rejected instead of being interpreted ambiguously.
-
📚 Documentation and validation updates
- Training, export, and cloud-training documentation now describe the normalized fraction semantics.
- Additional tests cover configuration validation, dataset conversion, concatenated datasets, training pipelines, and end-to-end detection behavior.
🎯 Purpose & Impact
- ✅ More trustworthy validation: Large-object-count images are less likely to be truncated by an unnoticed default limit.
- 📈 Better recall measurement: Automatically matching
max_detto observed data helps prevent artificially low validation recall. - 🧩 More predictable configuration: Dataset behavior no longer depends on whether a serializer writes
1as an integer or1.0as a float. - 🛠️ Safer user overrides: Custom
max_detsettings continue to work, with warnings when they may restrict results. - ⚡ Potential performance trade-off: A higher detection limit can increase validation and inference post-processing cost, while model or deployment-format limits may still cap the maximum number of predictions.
What's Changed
- Normalize fraction boundary values by @glenn-jocher in https://github.com/ultralytics/ultralytics/pull/25994
- Respect dataset object counts when selecting max_det by @glenn-jocher in https://github.com/ultralytics/ultralytics/pull/25993
Full Changelog: https://github.com/ultralytics/ultralytics/compare/v8.4.134...v8.4.135