๐ Summary (single-line synopsis)
Ultralytics v8.4.15 improves real-world image ingestion (adds HEIC/HEIF + HEIF support with lazy decoding + better EXIF handling) and includes several quality fixes for metrics, exports, and docs ๐ผ๏ธโ๏ธโ
๐ Key Changes
- HEIC/HEIF image support (priority change) ๐ผ๏ธ๐ฑ
- Added
ultralytics.utils.patches.image_openand monkey-patchedPIL.Image.opento lazily enable HEIC/HEIF decoding viapi-heifonly when needed (i.e., on first decode failure) โฑ๏ธ - Expanded supported extensions to include
.heif(in addition to.heic) โ - Removed HEIC-specific loading code from dataset loaders (now unified through the standard image reading pathway) ๐งน
- Added
- Better plotting for nonโLatin text ๐ถ๐๏ธ
- Improves matplotlib defaults by prioritizing Arial Unicode MS and auto-registering
.ttffonts from the Ultralytics user config directory for stronger multilingual rendering.
- Improves matplotlib defaults by prioritizing Arial Unicode MS and auto-registering
- EXIF auto-rotation fix for list-of-path sources ๐๐ผ๏ธ
- Applies
ImageOps.exif_transpose()when loading images from lists of paths/URLs, reducing โsideways phone photoโ issues.
- Applies
- Validation/metrics correctness fix (important for accuracy reporting) ๐ฏ๐
- Fixes SciPy-based matching (
match_predictions) to maximize IoU during assignment (previously could choose the worst matches), which can affect TP/FP classification and mAP whenuse_scipy=True.
- Fixes SciPy-based matching (
- IMX (Sony IMX500) export improvements ๐ฆ๐ค
- Enables IMX export on Linux ARM64 (removes an ARM64 block), adds dependency support, and improves test gating.
- Adds segmentation as a supported IMX export/benchmark task โ
- Usability improvement:
Results.save()๐พ๐- Adds
create_dirparameter (defaultTrue) to control auto-creation of parent directories when saving annotated outputs.
- Adds
- Dev/CI reliability updates ๐งช๐๏ธ
- CI now tests newer PyTorch versions (2.8/2.9) and makes export tests less flaky by skipping TFLite export tests unless
torch>=1.13on Linux.
- CI now tests newer PyTorch versions (2.8/2.9) and makes export tests less flaky by skipping TFLite export tests unless
๐ฏ Purpose & Impact
- More โit just worksโ image input ๐ผ๏ธโ
- HEIC/HEIF (common on iPhones) can be used directly for training/inference with fewer manual conversions, while lazy loading avoids paying the dependency cost unless you actually need it.
- Fewer confusing orientation bugs ๐ฑโก๏ธ๐ฅ๏ธ
- EXIF transpose handling reduces rotated/sideways images that can break visualization, training data review, and inference outputs.
- More trustworthy evaluation metrics ๐๐ง
- The IoU matching fix ensures SciPy-based evaluation behaves as intended, preventing artificially worse results or incorrect TP/FP assignment when that path is enabled.
- Better edge/export support on ARM ๐งฉ๐
- IMX export on ARM64 + segmentation support expands deployment options for embedded and edge workflows.
- Smoother workflows & sharing outputs ๐พโจ
Results.save(create_dir=True)makes saving predictions into new folders simpler (fewer โdirectory not foundโ errors).
- Improved global documentation and plots ๐ถ๐
- Better multilingual font defaults help teams with nonโLatin labels produce clearer charts/figures.
If youโre deploying/training with mixed photo sources (phones, HEIC libraries, multilingual labels), 8.4.15 is a practical upgrade ๐ ๏ธ๐
What's Changed
- Add guide on customizing the YOLO trainer by @raimbekovm in #23579
- Add YOLO26 vs YOLO11 performance charts for Raspberry Pi 5 by @lakshanthad in #23625
- test: ๐งช Add TFLite export requirement for Torch version 1.13 by @onuralpszr in #23618
- Fix typos and grammar errors in documentation by @him2him2 in #23617
- feat: improve
Results.save()with pathlib and optional directory creation by @ShuaiLYU in #23592 - fix: ๐ add ExecuTorch version during model export into logging by @onuralpszr in #23620
- ci: ๐ท move Conda Builds CI to monitor from conda-forge/ultralytics-feedstock to ultralytics repo by @onuralpszr in #23600
- Add https://youtu.be/GAFlmuk0fZI to docs by @RizwanMunawar in #23624
- Apply EXIF transpose when list of paths is used as source by @Y-T-G in #23631
- Fix scipy matching in
match_predictionsto maximize IoU by @Mr-Neutr0n in #23634 - Enable IMX export for ARM64 by @lakshanthad in #23636
- Enable segmentation models in IMX benchmarks by @lakshanthad in #23635
- Fix: get the correct package name for
metadata.distributionby @Laughing-q in #23641 - docs: ๐ update hyperlink for hyperparameter tuning in custom trainer guide by @onuralpszr in #23644
- Fix broken YOLO26 documentation link in vision-eye guide by @raimbekovm in #23646
- Fix docstrings by @glenn-jocher in #23648
- docs: ๐ fix conda badge link in CI documentation by @onuralpszr in #23661
- docs: ๐ remove unneeded tokenizer_ve documentation file by @onuralpszr in #23662
- Delete orphan markdown files in
build_reference.pyby @glenn-jocher in #23666 - docs: ๐ remove non-existed dataset generation section from COCO12-Formats documentation by @onuralpszr in #23667
- Simplify
CustomSaveTrainerexample in custom trainer guide by @raimbekovm in #23668 - Add custom trainer guide cross-reference in train.md by @raimbekovm in #23649
- Add PyTorch 2.8 and 2.9 tests to slow CI by @Y-T-G in #23683
- Update platform docs by @glenn-jocher in #23688
- Update Platform docs by @glenn-jocher in #23692
- Added max concurrency 16 to link checker workflow for the HTTP/2 error by @banica-ultralytics in #23690
- Add https://youtu.be/pJLXmhyuHzA to docs by @RizwanMunawar in #23658
- Platform Docs screenshots by @sergiuwaxmann in #23697
- Add https://youtu.be/cxU5E2SkivU to docs by @RizwanMunawar in #23701
- Update platform API docs by @glenn-jocher in #23704
- Platform Rate Limit docs by @glenn-jocher in #23706
- Fix uv conflicts between export and solutions extras by @fcakyon in #23686
- Add YOLOE agnostic_nms default behavior note by @raimbekovm in #23707
- Document CUDA OOM auto-retry in batch-size settings by @raimbekovm in #23708
- Document Results.save() automatic directory creation by @raimbekovm in #23709
- Banica ultralytics http2 changes undone by @banica-ultralytics in #23712
ultralytics 8.4.15HEIC/HEIF image support by @glenn-jocher in #23714
New Contributors
- @him2him2 made their first contribution in #23617
- @banica-ultralytics made their first contribution in #23690
Full Changelog: v8.4.14...v8.4.15