YOLOv11-N on Qualcomm: a documentation recipe (same model, same chip, 27Γ apart)
This repository is a documentation recipe: the exact steps, version locks,
calibration settings and pitfalls behind our YOLOv11-N measurements on real
Qualcomm hardware, so anyone can reproduce them. It deliberately contains
no model weights and no code β YOLOv11 is Β© Ultralytics under AGPL-3.0;
get the model from the official sources linked below. What is ours is the
data (measurements.json, also in
qcs-bench) and this write-up.
Headline: on the RB3 Gen 2 (QCS6490), the default TFLite path takes 134.7 ms with most layers off the NPU, while the w8a8 precompiled QNN path takes 5.03 ms with all 341 layers on the NPU β same model, same chip, 27Γ apart. The runtime path is the performance.
Measured on real hardware (Qualcomm AI Hub Workbench)
Latency = profile estimate / median. Layer placement from each profile's execution detail. Job IDs are the provenance β every number below is a Workbench job you can ask us about.
| Device | Path | Result | Layers on NPU | Latency (est / median) |
|---|---|---|---|---|
| RB3 Gen 2 (QCS6490) | QNN precompiled, w8a8 QDQ | β | 341 / 341 | 5.03 / 6.03 ms (compile jprdr9kkg, profile jgk01dnv5) |
| RB3 Gen 2 (QCS6490) | TFLite, float | β οΈ runs, mostly off-NPU | 19 / 343 (GPU 168, CPU 156) | 134.7 / 160.3 ms (job jp09wkxnp) |
| RB3 Gen 2 (QCS6490) | QNN DLC, FP32 | β composes on host, fails on device | β | compile jp8rn8oqg, profile j56mxv6np: QnnModel_composeGraphsFromDlc: MODEL_GRAPH_ERROR |
| RB3 Gen 2 (QCS6490) | QNN precompiled, w8a16 QDQ | β compile fails | β | job jp1193rnp: bare exit code 14, no diagnostics (see pitfall 2) |
| Galaxy S25 (SM8750) | TFLite, float | β | 343 / 343 | 2.94 / 2.99 ms (profile j5q1nwjeg) |
| Galaxy S25 (SM8750) | QNN precompiled, FP32 | β | 341 / 341 | 2.97 / 3.02 ms (profile jpexq2q8g) |
Reproduce it
Version lock (what these numbers were produced with):
qai-hub-models0.66.0; model exported from the official Ultralytics weights to ONNX, opset 13, input1Γ3Γ640Γ640, output1Γ84Γ8400- Devices:
Dragonwing RB3 Gen 2 Vision KitandSamsung Galaxy S25on AI Hub Workbench (cloud-attached real hardware)
Steps:
pip install qai-hub-models==0.66.0
qai-hub configure --api_token <your-token>
# Qualcomm's official recipe for this model (ours points there on purpose):
qai-hub-models export yolov11_det --device "Dragonwing RB3 Gen 2 Vision Kit"
For the w8a8 path that produced the 5.03 ms cell, the flow is: export ONNX β quantize to w8a8 on AI Hub β compile as precompiled QNN for the RB3 Gen 2 β profile and read the per-layer placement, not just the headline latency.
Calibration honesty note: this early run was quantized with 24 synthetic random samples β the latency numbers are representative, detection accuracy was not verified for this cell. (Our later recipes β NanoDet, DAMO-YOLO β use 23 real COCO val2017 images for calibration; do that in production.) Qualcomm's official catalog lists 4.10 ms for this model on RB3 Gen 2 with real calibration: same magnitude, independent confirmation of the path.
Pitfalls (the part vendor blogs don't write)
- The default path lies by omission. TFLite float on QCS6490 "works" β
at 134.7 ms, with
DynamicConv2Dand friends fallen back to CPU/GPU (19 of 343 layers on the NPU). If you don't read the per-layer profile, you will ship the slow path and never know. - w8a16 precompile fails with a bare
exit code 14and no actionable diagnostic from Workbench. We filed this with Qualcomm: ai-hub-models#364. - QNN DLC is a trap on this chip: the FP32 DLC compiles fine, then the
graph fails to compose on the device (
MODEL_GRAPH_ERROR). Compile success β runs. - RB3 precompiled QNN requires quantized I/O β the FP32 precompile is rejected outright; quantize first, then compile.
- Chip generation flips the story. The identical float graph is all-NPU on the Galaxy S25 (2.94 ms) and mostly CPU on the QCS6490. Never extrapolate edge performance across Snapdragon generations.
License & sources
- Model: YOLOv11 Β© Ultralytics, AGPL-3.0 β weights and code from Ultralytics and Qualcomm's official yolov11_det recipe. COCO mAP 39.5 is Ultralytics' published figure; we did not re-measure it.
- This documentation and the measurement data are by anguoyang; full bench: qcs-bench.