Ultralytics v8.4.12 is out!
Ultralytics v8.4.12 streamlines YOLOE-26 class/text-prompt handling to avoid redundant updates, while improving multispectral (grayscale) training reliability and multi-GPU auto-selection ![]()
![]()
![]()
If you’re building with Ultralytics YOLO (especially YOLO26, our latest stable & recommended model family), this release brings faster loops, fewer gotchas, and smoother scaling.
New Features / Highlights
YOLOE-26: Skip redundant set_classes() when prompts already match
Repeated predictions with the same prompts/classes are now leaner and safer:
- Adds a guard to avoid re-running
set_classes()whenmodel.namesalready matches requestedclasses - Regenerates text embeddings only when a real class change is needed
- Keeps predictor/model names in sync (
self.predictor.model.names = self.model.names)
Shipped in PR YOLOE-26 skip set_classes if text prompts already set by @Laughing-q ![]()
Improvements

More robust GPU auto-selection under multi-process starts
When multiple processes start at once and GPUs appear equally idle, we now add a randomized tie-break to reduce “everyone picked the same GPU” collisions.
Implemented in Round-robin GPU autoselect by @glenn-jocher.
Docs/examples updated to YOLO26 naming
Exporter + error-message examples now reference YOLO26 (recommended) instead of YOLO11, reducing copy/paste confusion.
Updated in docs: update exporter file yolo11 terms to newest yolo26 by @onuralpszr.

Classification confusion matrix plot fixes
Removes unintended “background” labeling behavior for classification confusion matrices and improves tick labeling robustness for large class counts.
Fixed in Remove “background” class from classification confusion matrix by @Y-T-G.
Minor tracker cleanup
Small cleanup to simplify deque initialization in BoT-SORT.
Bug Fixes (Multispectral / Grayscale Reliability)

Disk caching now respects grayscale/multispectral read mode
Disk cache now uses the dataset’s OpenCV read mode (flags=self.cv2_flag), preventing cached .npy files from silently changing input format.
Fixed in Fix disk caching with multispectral images by @Y-T-G.

AutoBatch fixed for non-RGB inputs
AutoBatch profiling now uses the model’s configured input channels (model.yaml["channels"]) rather than assuming 3-channel RGB.
Fixed in Fix AutoBatch with multispectral images by @Y-T-G.

Tests: better grayscale coverage + cleanup
Improves grayscale test coverage and removes cached .npy files to prevent flaky interactions.
Done in Remove cached *.npy files in grayscale tests by @Laughing-q.
Docker Change
Container dependency tweak for better NVIDIA querying/metrics
Swaps wandb for nvidia-ml-py in the Dockerfile to better support NVIDIA GPU querying/metrics in container builds.
How to Try It
Update to the latest release:
pip install -U ultralytics
Quick sanity check:
yolo version
yolo predict model=yolo26n.pt source=bus.jpg
Release Links
You can review the full release details in the Ultralytics v8.4.12 GitHub Release, and browse all commits in the v8.4.11 → v8.4.12 full changelog.
Feedback Welcome
Please try v8.4.12 in your workflows (especially YOLOE-26 prompts, grayscale/multispectral, and multi-job GPU launches) and share:
- regressions / edge cases
- speed or stability wins you notice
- any docs/examples you’d like improved
Thanks to everyone who contributed PRs and reviews—this release is a community win ![]()