🌟 Summary
🚀 Ultralytics 8.4.113 expands Qualcomm QNN deployment to Dragonwing IQ-8275 devices, improves model visualization and export reliability, and standardizes task support documentation across the project.
📊 Key Changes
-
Qualcomm Dragonwing IQ-8275 QNN export
- Adds
iq-8275andqcs8275as QNN export targets using Qualcomm SoC model 82. - Centralizes the mapping between supported QNN targets and their HTP or SoC provider options.
- Adds documentation for supported Snapdragon and Dragonwing targets, including the unsupported IQ-615.
- Enables QNN export testing on Linux x86-64 with
onnxruntime-qnn==2.4.0. - Example usage:
model.export(format="qnn", name="iq-8275"). - Requires a compatible Qualcomm/Yocto BSP and target-side QNN, FastRPC, DSP firmware, and driver components.
- Adds
-
New class activation heatmaps for prediction 🔥
- Replaces the previous
visualize=Truefeature-map dump with a more useful LayerCAM-style heatmap. - Saves one heatmap image per input, showing which image regions influenced the predicted class scores.
- Respects confidence and class filters and is available for PyTorch models.
- Reduces output clutter compared with the former multi-file feature-map visualization.
- Replaces the previous
-
More accurate attention FLOPs reporting 📊
- THOP-based profiling now counts functional attention matrix multiplications in YOLO12 attention blocks.
- Models containing area attention are measured at the requested image size rather than extrapolated from a small stride-sized input.
- Reported GFLOPs should better reflect the real computational cost of attention-heavy models.
-
Improved RKNN and quantized export support
- Normalizes detection and pose coordinates during INT8 RKNN export to preserve class-score precision.
- Restores coordinates at runtime for RKNN inference.
- Adds compatibility handling for current
rknn-toolkit2dependencies, includingsetuptools<82. - Improves ONNX compatibility and cleans up temporary normalized graphs after export.
-
Export and runtime reliability fixes 🛠️
- Resets detection shape caches at TorchScript, ONNX, and OpenVINO export boundaries.
- Avoids redundant TorchScript retracing.
- Replaces ONNX advanced indexing with
gatherwhere needed. - Fixes YOLOE-26 prompt-free RKNN export for detection and segmentation.
- Corrects pose loss selection for end-to-end models using non-Pose26 heads.
- Prevents C2PSA failures when its channel count is below 64.
- Fixes MuSGD handling of custom model head locations and higher-rank parameters.
-
Performance and stability improvements ⚡
- Vectorizes Deep OC-SORT global motion compensation operations.
- Reduces temporary memory usage and plotting time for segmentation masks by processing them in row bands.
- Keeps accumulated heatmap overlays visible when a tracking frame temporarily contains no detections.
- Prevents grayscale video stream failures from killing readers or crashing inference.
- Makes mixed-text ordering deterministic across processes and distributed workers.
- Keeps profiler samples when runtime variance reaches zero.
-
Documentation consistency and accuracy 📚
- Establishes one canonical task and mode order across code, documentation, tables, and the Ultralytics Platform.
- Consolidates supported-task tables into a shared macro and reports model-family-specific support more accurately.
- Corrects multiple docstrings, doctest examples, export claims, task descriptions, and API references.
- Updates Hailo, QNN, GraphDef, RKNN, and other integration pages with clearer model and hardware limitations.
🎯 Purpose & Impact
- For Qualcomm users: IQ-8275 and QCS8275 devices can now be targeted directly during QNN export, simplifying deployment to Dragonwing hardware. Hardware-side BSP compatibility must still be verified.
- For model developers: Heatmaps provide a clearer way to understand model decisions, while corrected FLOPs estimates make performance comparisons more trustworthy.
- For edge deployment: RKNN and QNN improvements increase export compatibility and improve quantized inference reliability on specialized accelerators.
- For training workflows: MuSGD, pose-loss, C2PSA, and higher-rank tensor fixes reduce silent training errors and improve support for custom architectures.
- For tracking and streaming applications: Video recovery, heatmap persistence, and Deep OC-SORT updates improve robustness in real-world, imperfect inputs.
- For documentation users: Shared and empirically validated compatibility tables make it easier to determine which model family, task, and deployment target is supported. 🚀
What's Changed
- Fix the dangling chi2inv95 reference in the Kalman gating distance docstring by @raimbekovm in #25516
- Set imgsz in SAM pre_transform docstring examples by @raimbekovm in #25512
- Consolidate export task tables into a shared macro and correct unproven claims by @glenn-jocher in #25523
- docs: fix missing 'to' in Probs description by @rudrakumar07 in #25522
- keep the mixed text order stable across processes by @raimbekovm in #25540
- Vectorize the Deep OC-SORT GMC warp and drop a redundant mean copy by @raimbekovm in #25534
- Fix MuSGD head grouping for custom backbones by @fcakyon in #25532
- Fix Docker CI failures and export warnings by @glenn-jocher in #25525
- Keep profiler samples when the run time variance is zero by @raimbekovm in #25513
- Fix MuSGD batching for higher-rank parameters by @songjiahao-wq in #25317
- Fix PoseModel using PoseLoss26 for non-Pose26 heads when end2end=True by @Zenka737 in #25261
- Replace pytube/pafy with
yt-dlpfor YouTube streams by @ambitious-octopus in #16336 - Keep stream reader alive when grayscale frame read fails by @raimbekovm in #24709
- Revert "Replace pytube/pafy with
yt-dlpfor YouTube streams" by @glenn-jocher in #25546 - Count the attention matmuls YOLO12 area-attention runs functionally by @glenn-jocher in #25545
- Clarify IoA wording in Copy-Paste augmentation documentation by @gizembm in #25528
- fix: prevent C2PSA division by zero when c < 64 by @rudrakumar07 in #25517
- Fix supported-tasks table rendering on docs.ultralytics.com by @raimbekovm in #25544
- correct the declared output in fourteen docstring examples by @raimbekovm in #25543
- Remove the unmatchable printed output from the Kalman filter docstring examples by @raimbekovm in #25533
- Describe what emojis() does to the HUBModelError message by @raimbekovm in #25538
- Restore the supported-tasks macro and drop the dead model_name sets by @glenn-jocher in #25550
- Render supported tasks per model family by @glenn-jocher in #25551
- Use one canonical task and mode order everywhere by @glenn-jocher in #25552
- Replace predict feature-map dumps with class activation heatmaps by @Y-T-G in #25548
- Reduce
Annotator.masksin row bands to cut mask plotting time and memory by @JESUSROYETH in #25554 - Fix
Heatmapoverlay disappearing on frames without tracks by @JESUSROYETH in #25556 - Fix YOLOE-26 prompt-free RKNN export crash by @zgh2022 in #25536
- Fix RKNN export by pinning package versions by @lakshanthad in #25529
- Fix RKNN INT8 exports returning all-zero class scores by @JESUSROYETH in #25524
- Fix ECC global motion compensation warping against the first frame by @JESUSROYETH in #25555
- replace the set_logging stream handler instead of accumulating one per call by @raimbekovm in #25541
- Add Dragonwing IQ-8275 QNN export target by @glenn-jocher in #25558
New Contributors
- @songjiahao-wq made their first contribution in #25317
- @zgh2022 made their first contribution in #25536
Full Changelog: v8.4.112...v8.4.113