🌟 Summary
Ultralytics v8.4.35 is a stability-focused release that makes training recovery smarter, dataset caching safer, and inference/runtime behavior more reliable—especially when runs hit NaNs or dataset metadata is inconsistent. 🚀🛡️
📊 Key Changes
-
NaN training recovery improved (most important, PR #24154 by @glenn-jocher) 🔁
- Training now recovers from
last_good.ptinstead of retrying a potentially corruptedlast.pt. - Checkpoint saves are now skipped if EMA weights contain NaN/Inf, preventing bad checkpoints from propagating.
- Training now recovers from
-
Detection dataset cache reliability upgrades (PR #24154) 🗂️
- Empty detection caches are no longer written.
- When labels are corrupt, final errors now include clearer reasons (instead of vague failures).
- Detection dataset checks now accept a dataset directory directly (not only a YAML path).
- NDJSON-to-YOLO cached conversions are rebuilt when expected split folders are missing.
-
Cleaner logs during runs (PR #24154) 🔕
- Repeated
Platform: Model not foundwarnings are throttled to reduce noise.
- Repeated
-
OpenVINO robustness improvements (PR #24156 by @glenn-jocher) ⚙️
- Better device fallback logic (uses CPU fallback more safely when needed).
- On Linux ARM64 CPU, inference is forced to FP32 for improved compatibility/stability.
-
Training behavior and compatibility fixes
- Prevents duplicate pretrained weight loading for YAML-based training configs (PR #23640).
- W&B resume now continues the original run instead of creating a disconnected new one (PR #24110).
- Added backward compatibility for older YOLO12 Area Attention checkpoints (PR #24152).
- Added missing
isatty()in console capture wrapper to avoid crashes with some libraries liketransformers(PR #24143). - SAM3 decoder cache-miss dtype fix to prevent coordinate-generation errors (PR #24145).
-
Docs and ecosystem updates 📚
🎯 Purpose & Impact
-
Fewer failed long trainings ⏱️
If your run encounters NaNs, recovery is now more trustworthy, reducing wasted GPU time and repeated crash loops. -
Less dataset-debug frustration 🧪
Better cache validation + clearer corrupt-label messages make it faster to diagnose data issues. -
More predictable production behavior 🏭
OpenVINO and logging adjustments improve runtime stability on edge/ARM setups and reduce noisy warnings. -
Smoother experiment tracking and resuming 📈
W&B resume continuity helps keep metrics in one place, improving experiment history quality. -
Low-risk upgrade with practical benefits ✅
This release is mostly about reliability and developer experience rather than new model architectures—great for teams running frequent training/inference pipelines.
What's Changed
- Fix cache miss handling for coordinate retrieval by @ausk in #24145
- update FastSAM and MobileSAM docs with YOLO26 benchmarks by @raimbekovm in #24140
- Add missing type hints to
segment2boxandscale_boxesinutils/ops.pyby @ahmet-f-gumustas in #24127 - Fix outdated
YAML.dumpusage in benchmark.py by @Laughing-q in #24146 - update outdated model references to YOLO26 by @raimbekovm in #24139
- Update YOLO26
sahitiled inference code by @RizwanMunawar in #24133 - Add missing
isatty()to_ConsoleCapturestream wrapper by @fcakyon in #24143 - Fix duplicate pretrained weight loading in
Model.train()for YAML models by @artest08 in #23640 - Resume WandB run when training resumes by @artest08 in #24110
- Force OpenVINO ARM inference to FP32 by @glenn-jocher in #24156
- Fix YOLO12 forward pass with old checkpoints by @Y-T-G in #24152
ultralytics 8.4.35NaN training recovery and dataset cache improvements by @glenn-jocher in #24154
New Contributors
Full Changelog: v8.4.34...v8.4.35