🌟 Summary (single-line synopsis)
Ultralytics v8.4.1 brings back NCNN export + inference on ARM64 (Apple Silicon/ARM servers/edge devices) 📱⚙️, plus stability fixes for pose/seg training 🛠️ and a big docs/benchmarks cleanup 📚✨.
📊 Key Changes
- ✅ NCNN on ARM64 is re-enabled (current PR #23211 by @lakshanthad) 📱
- Removed ARM64 “hard stop” errors for:
- NCNN export (
ultralytics/engine/exporter.py) - NCNN inference (
ultralytics/nn/autobackend.py) - NCNN benchmarking (
ultralytics/utils/benchmarks.py)
- NCNN export (
- Added an NCNN safety workaround for end-to-end (NMS-free) heads: when exporting to NCNN, Ultralytics disables the end-to-end branch if present (since NCNN doesn’t support the required TopK behavior) ⚠️🧩
- Removed ARM64 “hard stop” errors for:
- 🧠 Training stability improvements (Pose + Segmentation) 🛡️
- 🧪 Export reliability + CI coverage improvements 🔁
- OpenVINO int8 export fix and TFLite/TensorFlow wrapper refactor (moving decode logic into the TF export wrapper), plus CI “SlowTests” and “RaspberryPi” jobs re-enabled (PR #23185) ✅🍓
- ⚙️ Inference ergonomics fix
model.fuse()is now idempotent (won’t re-fuse an already fused model), reducing wasted time and avoiding potential side effects (PR #23189) 🔧
- 📚 Docs + benchmark table updates
- Updated YOLO26 segmentation parameter counts and refreshed YOLO26 pose/OBB metrics across docs/README tables (PRs #23178, #23181, #23192) 📈
- Many docs now point to YOLO11 blog content (instead of YOLO26 blog links) and various link/image fixes (PR #23212, plus link fixes in #23211) 🔗🖼️
- Quickstart examples shifted to YOLO26 defaults in the CLI/Python snippets (seen in the diff) 🚀
🎯 Purpose & Impact
- ARM64 + NCNN users can deploy again 📱🚀
If you’re exporting to NCNN for mobile/edge/ARM environments, you can now run export, inference, and benchmarks without being blocked by Ultralytics. - Fewer training crashes for YOLO26 Pose/Seg 🧠✅
Better handling of extreme/invalid values means more stable long trainings (especially with small images, tricky batches, or multi-GPU edge cases). - More reliable exports + better test coverage 🧪
Re-enabled CI jobs (including Raspberry Pi) should catch platform-specific issues earlier, improving overall release stability. - Clearer, more consistent docs 📚✨
Updated tables/links reduce confusion when choosing models (YOLO11 vs YOLO26 vs YOLOE-26) and following copy-paste examples.
If you want, tell me your target device (e.g., Raspberry Pi 5, Apple M2, ARM server) and whether you’re exporting YOLO11 or YOLO26, and I’ll suggest the safest export settings for NCNN ⚙️📦.
What's Changed
- Update YOLO26-Pose/OBB metrics by @Laughing-q in #23178
- Update docs by @Laughing-q in #23181
- Update Banner by @sergiuwaxmann in #23184
- Add modification notice for
RealNVPandRLELossby @lmycross in #23186 - Fix
model.fuse()statement by @Laughing-q in #23189 - Update YOLO26 docs by @lmycross in #23192
- Fix undefined
sem_maskserror and incorrectprotounwrap by @Y-T-G in #23197 - Update documentation to use YOLO26 and YOLOE26 as defaults by @fcakyon in #23193
- Update YOLO26 YAML comments by @Y-T-G in #23204
- Fix YOLO26 OpenVINO export with
int8=Trueand updatetflitewrapper by @Laughing-q in #23185 - fix: handle Inf values in
PoseLoss26to prevent crash by @Miaoge-Ge in #23205 - Improve Docs dataset split instructions by @shawnpavey in #23210
- Fix incorrect shape comment in Ensemble.forward by @raimbekovm in #23207
- Fix import in YOLOE26 example by @Y-T-G in #23196
- Fix docs links by @glenn-jocher in #23212
ultralytics 8.4.1Re-enable NCNN exports for ARM64 by @lakshanthad in #23211
New Contributors
- @shawnpavey made their first contribution in #23210
- @Miaoge-Ge made their first contribution in #23205
Full Changelog: v8.4.0...v8.4.1