Xuất Qualcomm QNN cho các model Ultralytics YOLO#
Việc triển khai các model thị giác máy tính trên thiết bị Qualcomm Snapdragon yêu cầu định dạng model được tinh chỉnh cho runtime Qualcomm AI Engine Direct (QNN). Việc xuất các model Ultralytics YOLO sang định dạng QNN cho phép bạn chạy suy luận gia tốc trên thiết bị qua phần cứng CPU, Adreno GPU và Hexagon NPU của Snapdragon có mặt trong hàng tỷ điện thoại di động, máy tính xách tay, hệ thống ô tô và thiết bị IoT. Hướng dẫn này giải thích cách xuất YOLO sang Qualcomm QNN và triển khai nó để suy luận nhanh, tiêu thụ ít điện năng trên phần cứng Snapdragon.
Plugin Ultralytics Flutter plugin chính thức cung cấp hỗ trợ QNN tùy chọn cho suy luận camera thời gian thực và dự đoán trên một ảnh đơn qua cả bảy tác vụ YOLO26. Bật runtime QNN và thêm phần phụ thuộc ONNX Runtime như được mô tả trong file README của plugin. Để triển khai trên iOS, hãy xem Ultralytics YOLO iOS SDK và CoreML integration.
Xuất các model phân loại tại imgsz=224. Xuất các model phát hiện, phân đoạn, ngữ nghĩa, độ sâu, tư thế (pose) và OBB tại
imgsz=640. Tiêu chuẩn 224/640 này được chia sẻ bởi các tài nguyên di động chính thức của QNN, LiteRT và CoreML.
Các tài nguyên v73 và v81 sẵn sàng chạy cho cả bảy tác vụ nano được công bố trong bản phát hành
yolo-flutter-app v0.6.6 release.
Qualcomm QNN là gì?#
Qualcomm AI Engine Direct — thường được gọi là QNN và được phân phối như một phần của SDK Qualcomm AI Runtime (QAIRT) — là ngăn xếp suy luận cấp thấp của Qualcomm dành cho bộ vi xử lý Snapdragon. Nó cung cấp một API thống nhất với các thư viện dành riêng cho backend nhằm mục tiêu nhắm đến CPU Snapdragon, Adreno GPU và Hexagon Tensor Processor (HTP), đơn vị xử lý neural network (NPU) chuyên dụng bên trong các SoC Snapdragon hiện đại. QNN cung cấp cho các nhà phát triển quyền truy cập toàn diện vào các bộ tăng tốc AI Snapdragon này và là người kế thừa hiện đại cho SDK Snapdragon Neural Processing Engine (SNPE) cũ. Nó hỗ trợ AI trên thiết bị trên các nền tảng di động Snapdragon 8 Gen 2, 8 Gen 3 và 8 Elite, laptop Snapdragon X, cũng như các sản phẩm ô tô và XR.
Tại sao cần xuất sang Qualcomm QNN?#
Snapdragon là nền tảng điện toán di động được triển khai rộng rãi nhất trên thế giới. Việc xuất Ultralytics YOLO sang định dạng Qualcomm QNN giúp mở khóa phần cứng AI chuyên dụng trên các thiết bị này:
- Tăng tốc Hexagon NPU: Chạy YOLO trên Hexagon Tensor Processor mang lại thông lượng cao hơn đáng kể và công suất thấp hơn so với suy luận trên CPU — lý tưởng cho real-time inference và thị giác máy tính luôn bật trên Snapdragon.
- Trên thiết bị và ngoại tuyến: QNN inference chạy hoàn toàn trên thiết bị Snapdragon, vì vậy không cần kết nối đám mây, độ trễ luôn thấp và dữ liệu không bao giờ rời khỏi thiết bị.
- Hiệu quả lượng tử hóa: Việc xuất QNN sẽ lượng tử hóa YOLO thành trọng số INT8 với activation 16-bit, mức cân bằng độ chính xác/hiệu suất ưa thích của Hexagon NPU, giúp thu nhỏ kích thước model và tối đa hóa số khung hình trên giây (FPS) trên phần cứng chạy bằng pin.
- Một định dạng, nhiều thiết bị: Một lần xuất Qualcomm QNN duy nhất có thể nhắm mục tiêu vào CPU Snapdragon, GPU Adreno và Hexagon NPU trên các dòng chip Snapdragon 8 Gen 2, 8 Gen 3, 8 Elite và hơn thế nữa.
- Stack AI Qualcomm sẵn sàng cho sản xuất: QNN (Qualcomm AI Engine Direct / QAIRT) là runtime AI trên thiết bị hiện tại, được duy trì tích cực của Qualcomm và là giải pháp thay thế được khuyến nghị cho SNPE.
Định dạng xuất QNN#
Ultralytics biên dịch các model YOLO sang QNN tại chỗ (locally) bằng cách sử dụng ONNX Runtime QNN Execution Provider (gói onnxruntime-qnn có thể cài đặt bằng pip, bao gồm các thư viện QAIRT). Trình xuất chuyển đổi model của bạn sang ONNX, lượng tử hóa model bằng dữ liệu hiệu chuẩn thành activation 16-bit và trọng số INT8 (mức cân bằng được khuyến nghị cho Hexagon NPU), sau đó khởi tạo một phiên ONNX Runtime với bộ nhớ đệm ngữ cảnh nhị phân (context-binary caching) được bật — thao tác này biên dịch đồ thị được lượng tử hóa thành một QNN context binary được nhúng trong <model>_qnn.onnx. Không cần tài khoản Qualcomm, tải lên đám mây hay tải xuống SDK riêng biệt nào.
Không giống như Qualcomm AI Hub dựa trên đám mây, nơi biên dịch và cấu hình model trên các thiết bị Snapdragon do Qualcomm lưu trữ và yêu cầu tài khoản Qualcomm, quá trình xuất QNN của Ultralytics chạy hoàn toàn trên máy của chính bạn bằng một lệnh export(format="qnn", imgsz=640) duy nhất (imgsz=224 cho việc phân loại). Bạn nhận được cùng một mục tiêu runtime QNN/QAIRT — Snapdragon CPU, Adreno GPU và Hexagon NPU — mà không cần đăng ký, giới hạn tải lên hoặc thời gian chờ hàng đợi, và nó tích hợp thẳng vào quy trình xuất YOLO tiêu chuẩn.
File *_qnn.onnx được xuất ra là một file khép kín: nó nhúng QNN context binary và siêu dữ liệu ONNX như tên lớp, kích thước ảnh và tác vụ.
Các tính năng chính của các model QNN#
- Lượng tử hóa: Model được lượng tử hóa thành activation 16-bit và trọng số INT8 với luồng ONNX Runtime QNN QDQ và tập dữ liệu hiệu chuẩn, mức cân bằng độ chính xác/hiệu suất được khuyến nghị của Hexagon NPU. Tìm hiểu thêm về model quantization.
- Biên dịch hoàn toàn tại chỗ: Context binary được tạo hoàn toàn trên máy chủ của bạn — không cần tài khoản Qualcomm, API token hoặc upload lên đám mây.
- Tăng tốc Snapdragon đầy đủ: Chạy inference trên Hexagon NPU (HTP), GPU Adreno hoặc CPU thông qua một runtime thống nhất duy nhất.
- Khả năng tiếp cận thiết bị rộng rãi: Nhắm mục tiêu đến phạm vi rộng lớn các nền tảng Snapdragon được tích hợp trong điện thoại, PC (Windows on Snapdragon), ô tô, XR và các sản phẩm nhúng.
- Context Binary được biên dịch trước: Việc vận chuyển một tệp context binary giúp giảm thiểu việc biên dịch biểu đồ trên thiết bị, giảm độ trễ khi tải model trên thiết bị mục tiêu.
- Đầu ra độc lập: Tệp ONNX đã xuất bao gồm QNN context binary được biên dịch trước và metadata để triển khai đơn giản.
Hiệu suất đo lường#
Điện thoại Android#
Phần cứng: Xiaomi 17 với bộ nhớ 12 GB LPDDR5X và Android 16 / API 36. Snapdragon 8 Elite Gen 5 3 nm của nó (SM8850) có CPU Qualcomm Oryon 8 nhân (2 nhân Prime lên tới 4.6 GHz và 6 nhân Performance lên tới 3.62 GHz), Adreno GPU và Hexagon NPU (HTP v81).
| Mô hình | Tác vụ | kích thước (pixel) | CPU w8a32 LiteRT (ms) | GPU w8a32 LiteRT (ms) | NPU QNN W8A16 (ms) |
|---|---|---|---|---|---|
| YOLO26n | Detect | 640 | 52.2 1.8 / 48.1 / 2.4 | 15.8 2.3 / 8.9 / 4.6 | 10.7 1.8 / 6.7 / 2.2 |
| YOLO26n-seg | Segment | 640 | 73.4 1.8 / 65.6 / 6.0 | 33.2 1.8 / 23.8 / 7.6 | 17.4 1.8 / 9.9 / 5.7 |
| YOLO26n-sem | Ngữ nghĩa | 640 | 61.2 1.8 / 51.1 / 8.3 | 34.2 1.8 / 24.0 / 8.3 | 11.5 1.8 / 7.1 / 2.6 |
| YOLO26n-depth | Depth | 640 | 124.4 1.9 / 115.1 / 7.4 | 23.0 1.8 / 13.5 / 7.7 | 35.2 1.8 / 26.1 / 7.3 |
| YOLO26n-cls | Classify | 224 | 4.4 0.4 / 4.0 / 0.0 | 3.1 0.8 / 2.1 / 0.2 | 1.2 0.6 / 0.6 / 0.0 |
| YOLO26n-pose | Pose | 640 | 57.4 1.8 / 53.8 / 1.8 | 16.6 2.7 / 10.1 / 3.9 | 10.9 1.8 / 7.0 / 2.0 |
| YOLO26n-obb | OBB | 640 | 50.3 1.8 / 47.2 / 1.4 | 11.7 1.8 / 7.8 / 2.0 | 8.6 1.8 / 5.7 / 1.1 |
- Các giá trị Tốc độ (Speed) là độ trễ bùng nổ ảnh đơn (single-image burst latencies) — giá trị trung bình của 15 lần chạy sau 3 lần chạy làm ấm trên
bus.jpg, được đo lường bằng trình khai thác chuẩn hóa trên thiết bị của Flutter plugin0.6.10và các tài nguyên chuẩn hóav0.6.6. Thứ tự backend được xoay vòng giữa các tác vụ trong một đợt tuần suất tuần tự. Các nhật ký gốc xác nhận rằng mọi hàng CPU đều sử dụng LiteRT CPU/XNNPACK, mọi hàng GPU đều ủy quyền toàn bộ đồ thị cho LiteRT OpenCL (LITERT_CL), và mọi hàng NPU đều sử dụng backend QNN Hexagon HTP. - Bản ghi benchmark chi tiết nằm trong Flutter performance doc.
- So sánh các thiết bị Android khác trong mục LiteRT integration và các thiết bị Apple trong mục CoreML integration.
Máy tính xách tay Windows on Snapdragon#
Đợt quét lịch sử này đã sử dụng các binary QNN v73 tiền chuẩn; ngữ nghĩa và OBB sử dụng đầu vào 1024px. Quá trình chạy diễn ra trên một laptop
Lenovo với bộ nhớ 32 GB và Windows 11. Snapdragon X Elite của nó
(X1E78100) có CPU Qualcomm Oryon 12 nhân, Adreno GPU và Hexagon NPU (HTP v73); model Lenovo chính xác không được
ghi lại. Phép so sánh Windows-on-Snapdragon này chạy baseline PyTorch FP32 CPU gốc mà hầu hết các nhà phát triển
máy tính để bàn bắt đầu, đối chiếu với đường dẫn ONNX Runtime QNN Hexagon HTP. Mỗi ô hiển thị toàn bộ
thời gian thực thi model.predict() với thời gian tiền xử lý / suy luận / hậu xử lý được báo cáo bên dưới;
tổng thời gian có thể bao gồm chi phí chung của framework ngoài ba giai đoạn đó. Các con số CPU là PyTorch FP32 (torch==2.10.0+cpu)
và các con số NPU là ONNX Runtime QNN (onnxruntime-qnn==2.2.0, trọng số INT8 / activation 16-bit).
| Mô hình | Tác vụ | kích thước (pixel) | CPU PT FP32 (ms) | NPU Hexagon QNN W8A16 (ms) |
|---|---|---|---|---|
| YOLO26n | Detect | 640 | 91.4 4.3 / 75.2 / 0.1 | 27.2 4.9 / 19.4 / 0.9 |
| YOLO26n-seg | Segment | 640 | 138.8 4.5 / 127.1 / 2.8 | 34.3 5.0 / 24.0 / 5.1 |
| YOLO26n-sem | Ngữ nghĩa | 1024 | 295.8 9.1 / 189.2 / 94.8 | 133.0 8.8 / 37.4 / 83.9 |
| YOLO26n-cls | Classify | 224 | 15.4 3.0 / 9.8 / 0.0 | 11.7 2.7 / 5.5 / 0.0 |
| YOLO26n-pose | Pose | 640 | 109.6 4.6 / 102.9 / 0.2 | 28.9 5.3 / 23.3 / 0.6 |
| YOLO26n-obb | OBB | 1024 | 267.8 8.1 / 254.6 / 0.1 | 64.8 8.9 / 54.7 / 0.6 |
- Các giá trị Tốc độ (Speed) là độ trễ bùng nổ ảnh đơn (single-image burst latencies) — giá trị trung bình của 100 lần chạy sau 10 lần chạy làm ấm trên
bus.jpg, được đo lường bằngtime.perf_counter()xung quanh lệnh gọi đầy đủmodel.predict()trên một thiết bị đã nghỉ nhiệt (ultralytics==8.4.67, Python 3.12.10). - Hexagon NPU chạy nhanh hơn khoảng 2-4 lần so với baseline CPU PyTorch trên các tác vụ 640-1024 px (phát hiện đối tượng ~3.4 lần), thu hẹp xuống còn ~1.3 lần trên bộ phân loại 224 px nơi overhead tiền xử lý cố định chiếm ưu thế đối với khối lượng công việc nhỏ.
Các tác vụ được hỗ trợ#
Xuất Qualcomm QNN hỗ trợ tất cả bảy tác vụ Ultralytics. Phân đoạn ngữ nghĩa và ước tính chiều sâu chỉ khả dụng với YOLO26, dòng duy nhất cung cấp các phần đầu (head) đó.
Xuất sang QNN: Chuyển đổi Model YOLO của bạn#
Xuất model Ultralytics YOLO sang định dạng QNN để triển khai trên phần cứng Qualcomm. Context binary được hoàn thiện cho kiến trúc Hexagon Tensor Processor (HTP) mục tiêu hoặc SoC được hỗ trợ, mà bạn chọn bằng đối số name — đối số tương tự được sử dụng để nhắm mục tiêu vào một chip trong RKNN export.
Các mục tiêu HTP được hỗ trợ#
Truyền kiến trúc mục tiêu hoặc SoC thông qua name (ví dụ: name="73" hoặc name="iq-8275"). Khả năng hỗ trợ được xác định bởi
mục tiêu HTP, do đó các hàng Snapdragon bên dưới là các nền tảng đại diện thay vì là một danh sách đầy đủ của mọi SoC.
Các thiết bị Dragonwing được liệt kê rõ ràng.
| Trạng thái | name | Hexagon HTP | Thiết bị hoặc nền tảng ví dụ |
|---|---|---|---|
| ✅ Được hỗ trợ | 68 | v68 | Snapdragon 888 |
| ✅ Được hỗ trợ | 69 | v69 | Snapdragon 8 Gen 1 / 8+ Gen 1 |
| ✅ Được hỗ trợ | 73 | v73 | Snapdragon 8 Gen 2, X Elite (mặc định) |
| ✅ Được hỗ trợ | 75 | v75 | Snapdragon 8 Gen 3 |
| ✅ Được hỗ trợ | 79 | v79 | Snapdragon 8 Elite |
| ✅ Được hỗ trợ | 81 | v81 | Snapdragon 8 Elite Gen 5 |
| ✅ Được hỗ trợ | iq-8275 hoặc qcs8275 | v75 | Dragonwing IQ-8275 / QCS8275 (model QNN SoC 82) |
| ❌ Không được hỗ trợ | — | v66 | Dragonwing IQ-615 / QCS615 |
Dragonwing IQ-615 không thể sử dụng tính năng xuất tệp nhị phân ngữ cảnh QNN của Ultralytics vì ONNX Runtime không hiển thị DSP v66 của nó như một mục tiêu HTP ngoại tuyến. Việc xuất ONNX tiêu chuẩn vẫn có thể được tích hợp riêng biệt với một nhà cung cấp thực thi CPU hoặc GPU được BSP của bo mạch hỗ trợ.
from ultralytics import YOLO
model = YOLO("best.pt")
model.export(format="qnn", name="iq-8275", imgsz=640)Việc xuất QNN sử dụng gói onnxruntime-qnn. Phiên bản 2.4.0 trở lên phát hành các wheel được xây dựng sẵn cho Windows (x64 và ARM64) và Linux (x86-64 và ARM64) trên Python 3.11 trở lên; macOS không phải là host QNN được hỗ trợ. Việc tạo QNN context-binary chạy trên host x64 và không yêu cầu thiết bị Snapdragon cho bước xuất.
Cài đặt#
Để cài đặt các gói cần thiết, hãy chạy:
# Install the required package for YOLO
pip install ultralyticsGói onnxruntime-qnn (cung cấp ONNX Runtime QNN Execution Provider và đóng gói các thư viện QAIRT) được cài đặt tự động trong lần xuất đầu tiên. Để có hướng dẫn chi tiết và các phương pháp hay nhất liên quan đến quá trình cài đặt, hãy xem Ultralytics Installation guide. Trong quá trình cài đặt các gói bắt buộc cho YOLO, nếu bạn gặp bất kỳ khó khăn nào, hãy tham khảo Common Issues guide để tìm giải pháp và mẹo.
Cách sử dụng#
Định dạng QNN hỗ trợ các chế độ Export, Predict và Validate. Quá trình suy luận và xác thực chạy trên phần cứng Qualcomm Snapdragon thông qua ONNX Runtime's QNN Execution Provider (cùng gói onnxruntime-qnn được sử dụng để xuất). Hãy xuất model của bạn, sau đó tải model đã xuất lên thiết bị Snapdragon để chạy suy luận hoặc xác thực độ chính xác của nó.
from ultralytics import YOLO
# Load a YOLO26 model
model = YOLO("yolo26n.pt")
# Export to Qualcomm QNN format (INT8, enforced automatically) for the default v73 HTP target
model.export(format="qnn", name="73", imgsz=640) # use imgsz=224 for classificationfrom ultralytics import YOLO
# Load the exported QNN model (on a Snapdragon device with onnxruntime-qnn)
model = YOLO("yolo26n_qnn.onnx")
# Run inference
results = model("https://ultralytics.com/images/bus.jpg")from ultralytics import YOLO
# Load the exported QNN model (on a Snapdragon device with onnxruntime-qnn)
model = YOLO("yolo26n_qnn.onnx")
# Validate accuracy on the COCO8 dataset
metrics = model.val(data="coco8.yaml")Đối số xuất#
| Đối số | Loại | Mặc định | Mô tả |
|---|---|---|---|
format | str | 'qnn' | Định dạng mục tiêu cho model đã xuất, xác định khả năng tương thích với runtime Qualcomm QNN. |
imgsz | int hoặc tuple | 640 | Kích thước ảnh mong muốn cho đầu vào model. Có thể là một số nguyên cho ảnh vuông hoặc một tuple (height, width). |
batch | int | 1 | Chỉ định kích thước batch xuất model, được nhúng vào QNN context binary đã tạo. |
name | str | '73' | Kiến trúc Hexagon HTP mục tiêu (68, 69, 73, 75, 79 hoặc 81) hoặc SoC được hỗ trợ (iq-8275 hoặc qcs8275). Context binary được hoàn thiện cho mục tiêu này. |
quantize | int hoặc str | 'w8a16'/auto | Độ chính xác lượng tử hóa. Xuất QNN HTP được lượng tử hóa thành trọng số INT8 với activation 16-bit ('w8a16') và được tự động bật nếu không được chỉ định. Thay thế các cờ half/int8 đã bị loại bỏ. |
simplify | bool | True | Đơn giản hóa đồ thị ONNX trung gian với onnxslim. |
opset | int | None | Chỉ định phiên bản ONNX opset cho đồ thị ONNX trung gian. Nếu không được thiết lập, hệ thống sẽ sử dụng phiên bản được hỗ trợ mới nhất. |
data | str | None | Dataset YAML được sử dụng để hiệu chuẩn INT8; ngược lại, việc phân loại sẽ nhận một thư mục dataset hoặc tên dataset tích hợp sẵn. Nếu bỏ qua, Ultralytics sẽ chọn dataset hiệu chuẩn mặc định cho tác vụ model. |
fraction | float | 1.0 | Tỷ lệ phần trăm của tập dữ liệu hiệu chỉnh được sử dụng cho lượng tử hóa INT8. |
device | str | None | Chỉ định thiết bị cho bước xuất ONNX: GPU (device=0) hoặc CPU (device=cpu). |
Việc xuất QNN lượng tử hóa model thành activation 16-bit và trọng số INT8 — mức cân bằng độ chính xác/hiệu suất được khuyến nghị cho Hexagon NPU — bằng cách sử dụng luồng ONNX Runtime QDQ quantization với các ảnh hiệu chuẩn từ data. quantize='w8a16' được thực thi tự động.
Để biết thêm chi tiết về quá trình xuất, hãy truy cập trang tài liệu của Ultralytics về việc xuất model.
Cấu trúc đầu ra#
Sau khi xuất thành công, một tệp ONNX độc lập sẽ được tạo:
yolo26n_qnn.onnx # ONNX wrapping the precompiled QNN context binary and metadata
File yolo26n_qnn.onnx nhúng QNN context binary và được tải bởi ONNX Runtime với QNN Execution Provider trên thiết bị Snapdragon. Nó cũng chứa siêu dữ liệu model như tên lớp, kích thước ảnh và tác vụ trong ONNX metadata_props.
Triển khai các Model YOLO QNN đã xuất#
Các model QNN chạy trên phần cứng Qualcomm được hỗ trợ, giúp cho việc model deployment trên thiết bị trở nên đơn giản. Trên thiết bị tương thích đã cài đặt onnxruntime-qnn, hãy chạy trực tiếp model đã xuất bằng Ultralytics API (yolo predict/yolo val, xem mục Usage ở trên) — Ultralytics tải HTP context binary thông qua ONNX Runtime QNN Execution Provider.
Đối với các pipeline tùy chỉnh, bạn cũng có thể tải trực tiếp context-binary ONNX bằng ONNX Runtime. onnxruntime-qnn là một Execution Provider dạng plugin, vì vậy hãy đăng ký nó tại thời điểm chạy (runtime):
import onnxruntime as ort
import onnxruntime_qnn as qnn_ep
# On the Snapdragon device, register the QNN plugin EP and select its device(s)
ort.register_execution_provider_library("QNNExecutionProvider", qnn_ep.get_library_path())
devices = [d for d in ort.get_ep_devices() if d.ep_name == "QNNExecutionProvider"]
options = ort.SessionOptions()
options.add_provider_for_devices(devices, {"backend_path": qnn_ep.get_qnn_htp_path()})
session = ort.InferenceSession("yolo26n_qnn.onnx", sess_options=options)
input_info = session.get_inputs()[0]
outputs = session.run(None, {input_info.name: input_tensor}) # input_tensor: float32 NHWCVì QNN context binary được biên dịch trước, phiên làm việc sẽ tải nhanh chóng mà không cần biên dịch lại biểu đồ trên thiết bị.
Yêu cầu BSP của Linux và Yocto#
Bo mạch mục tiêu phải cung cấp runtime Qualcomm và BSP tương thích lẫn nhau. Đối với suy luận HTP, điều này bao gồm ONNX Runtime QNN Execution Provider, libQnnSystem.so, libQnnHtp.so, các thư viện stub và skeleton HTP v75 cho IQ-8275, hỗ trợ không gian người dùng FastRPC như libcdsprpc.so, firmware DSP và các trình điều khiển FastRPC/kernel tương ứng. Thư viện skeleton phải có thể được phát hiện thông qua đường dẫn thư viện DSP của BSP.
Các thành phần phía mục tiêu này đến từ BSP hỗ trợ QAIRT/QNN của nhà vendor bo mạch; chúng không được nhúng trong model đã xuất. Ngược lại, việc thực thi trên GPU yêu cầu libQnnGpu.so và ngăn xếp trình điều khiển không gian người dùng Adreno phù hợp. Đầu ra Ultralytics format=qnn là một context binary dành riêng cho HTP, do đó việc triển khai trên GPU hoặc CPU nên bắt đầu từ một tệp xuất ONNX tiêu chuẩn thay vì file *_qnn.onnx đã biên dịch trước.
Quy trình làm việc được đề xuất#
- Huấn luyện (Train) model của bạn bằng Chế độ Huấn luyện của Ultralytics
- Xuất sang định dạng QNN bằng cách sử dụng
model.export(format="qnn", name="iq-8275", imgsz=640)trên nền tảng được hỗ trợ (sử dụngimgsz=224cho việc phân loại) - Triển khai file
*_qnn.onnxđã xuất tới thiết bị Qualcomm của bạn - Chạy suy luận với ONNX Runtime và Nhà cung cấp thực thi QNN sử dụng backend HTP
Ứng dụng trong thực tế#
Các model YOLO chạy trên phần cứng Qualcomm Snapdragon rất phù hợp cho nhiều ứng dụng edge AI:
- Điện thoại thông minh: Object detection thời gian thực và hiểu ngữ cảnh cảnh vật trong ứng dụng camera và ảnh với sự hỗ trợ tăng tốc NPU.
- Windows on Snapdragon: Thị giác máy tính trên thiết bị trong các PC Copilot+ mà không cần offload lên đám mây.
- Ô tô: Giám sát người lái, phát hiện hành khách và các tính năng ADAS trên nền tảng Snapdragon Digital Chassis.
- XR và Thiết bị đeo: Khả năng nhận thức độ trễ thấp, tiêu thụ năng lượng thấp cho kính AR/VR và kính thông minh.
- IoT và Robotics: Inference thị giác hiệu quả trên camera, máy bay không người lái và các hệ thống nhúng chạy bằng Snapdragon.
Tóm tắt#
Trong hướng dẫn này, bạn đã học cách xuất các model Ultralytics YOLO sang định dạng Qualcomm QNN tại chỗ (locally) bằng ONNX Runtime QNN Execution Provider. Pipeline xuất sẽ chuyển đổi model của bạn sang ONNX, sau đó biên dịch nó thành QNN context binary trên máy host của bạn — không cần tài khoản Qualcomm hay đám mây — tạo ra một file *_qnn.onnx được tối ưu hóa cho phần cứng CPU Snapdragon, Adreno GPU và Hexagon NPU thông qua QNN/QAIRT runtime.
Sự kết hợp giữa Ultralytics YOLO và ngăn xếp AI trên thiết bị của Qualcomm cung cấp một giải pháp hiệu quả để chạy các khối lượng công việc computer vision nâng cao trên toàn hệ sinh thái Snapdragon rộng lớn.
Đối với các mục tiêu triển khai di động và trên thiết bị khác, hãy xem các hướng dẫn xuất liên quan ONNX, CoreML, NCNN, LiteRT, ExecuTorch, RKNN, Sony IMX500 và TensorRT. Để so sánh các định dạng trước khi vận chuyển, hãy sử dụng Benchmark mode. Để có danh sách đầy đủ các định dạng và tùy chọn, hãy truy cập tài liệu Export mode và trang integrations guide page.
Câu hỏi thường gặp#
Bạn có thể xuất model của mình bằng
export(format="qnn", imgsz=640)(imgsz=224cho việc phân loại) hoặc các đối số CLI tương đương. Quá trình xuất trước tiên tạo ra một model ONNX, sau đó biên dịch nó tại chỗ thành QNN context binary bằng cách sử dụng ONNX Runtime QNN Execution Provider. Góionnxruntime-qnnđược cài đặt tự động trong lần xuất đầu tiên.Ví dụfrom ultralytics import YOLO model = YOLO("yolo26n.pt") model.export(format="qnn", imgsz=640) # use imgsz=224 for classificationKhông. Việc xuất QNN chạy hoàn toàn trên máy cục bộ của bạn bằng gói
onnxruntime-qnn, bao gồm các thư viện QAIRT. Không cần tài khoản Qualcomm, API token hay quyền truy cập mạng.Qualcomm AI Hub là dịch vụ đám mây của Qualcomm để biên dịch, định hình (profiling) và benchmark các model trên các thiết bị Snapdragon được lưu trữ, và nó yêu cầu tài khoản Qualcomm. Việc xuất QNN của Ultralytics nhắm đến cùng một runtime QNN/QAIRT (Snapdragon CPU, Adreno GPU và Hexagon NPU) nhưng biên dịch context binary tại chỗ (locally) bằng ONNX Runtime QNN Execution Provider — không cần tài khoản, không cần tải lên và không cần chờ hàng đợi. Đây là cách nhanh nhất để chuyển từ model
.ptsang bản dựng sẵn sàng cho Snapdragon ngay bên trong quy trình xuất YOLO tiêu chuẩn.onnxruntime-qnn2.4.0 trở lên cung cấp các wheel được xây dựng sẵn cho Windows (x64 và ARM64) và Linux (x86-64 và ARM64) trên Python 3.11 trở lên; macOS không phải là host QNN được hỗ trợ. Việc tạo context-binary chạy trên host x64 và không yêu cầu thiết bị Snapdragon vật lý.Xuất với
model.export(format="qnn", imgsz=640)(imgsz=224cho việc phân loại), sao chép fileyolo26n_qnn.onnxkết quả vào thiết bị Snapdragon của bạn, và chạyyolo predict model=yolo26n_qnn.onnx source=image.jpg(hoặcyolo val). Ultralytics tải context binary thông qua ONNX Runtime QNN Execution Provider và chạy nó trên Hexagon NPU — xem Deploying Exported YOLO QNN Models.QNN (Qualcomm AI Engine Direct, một phần của QAIRT SDK) là stack inference hiện tại của Qualcomm và là giải pháp thay thế được khuyến nghị cho bộ SDK Snapdragon Neural Processing Engine (SNPE) cũ hơn. Các triển khai mới nên nhắm mục tiêu vào QNN.
Có, trên thiết bị Qualcomm Snapdragon đã cài đặt
onnxruntime-qnn—YOLO("yolo26n_qnn.onnx")tải context binary thông qua QNN Execution Provider và chạypredict/valgiống như bất kỳ định dạng nào khác. Trên host x86 không có phần cứng QNN, model không thể thực thi, vì context binary nhắm đến Snapdragon NPU.Quá trình xuất tạo ra một file ONNX context-binary khép kín (ví dụ:
yolo26n_qnn.onnx) với tên lớp, kích thước ảnh, tác vụ và các siêu dữ liệu model khác được nhúng trong ONNXmetadata_props.