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 đòi hỏi định dạng model được tối ưu hóa cho runtime Qualcomm AI Engine Direct (QNN). Xuất các model Ultralytics YOLO sang định dạng QNN cho phép bạn chạy inference tăng tốc ngay trên thiết bị, tận dụng phần cứng Snapdragon CPU, Adreno GPU và Hexagon NPU có mặt trên hàng tỷ điện thoại di động, laptop, hệ thống ô tô và thiết bị IoT. Hướng dẫn này mô tả cách xuất YOLO sang Qualcomm QNN và triển khai để chạy inference nhanh, tiết kiệm điện năng trên phần cứng Snapdragon.
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à stack inference 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 cụ thể cho từng backend, nhắm đến Snapdragon CPU, Adreno GPU và Hexagon Tensor Processor (HTP), vốn là đơ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 full-stack vào các bộ tăng tốc AI của Snapdragon và là phiên bản kế thừa hiện đại của SDK Snapdragon Neural Processing Engine (SNPE) cũ. Nó hỗ trợ AI trên thiết bị cho 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 nê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 khai thác 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à tiêu thụ ít điện năng hơn so với inference trên CPU — lý tưởng cho real-time inference và thị giác máy tính luôn hoạt động trên Snapdragon.
- Trên thiết bị và ngoại tuyến: Inference QNN chạy hoàn toàn trên thiết bị Snapdragon, vì vậy không cần kết nối với đám mây, độ trễ thấp và dữ liệu không bao giờ rời khỏi thiết bị.
- Hiệu quả INT8: Xuất QNN lượng tử hóa YOLO sang INT8, độ chính xác gốc của Hexagon NPU, giúp thu nhỏ kích thước model và tối đa hóa số khung hình mỗi giây trên phần cứng dùng pin.
- Một định dạng, nhiều thiết bị: Một lần xuất Qualcomm QNN duy nhất nhắm mục tiêu đến Snapdragon CPU, Adreno GPU và Hexagon NPU trên các dòng 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ỗ bằng cách sử dụng ONNX Runtime QNN Execution Provider (gói onnxruntime-qnn có thể cài đặt qua pip, tích hợp sẵn 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 INT8 với dữ liệu hiệu chỉnh (Hexagon NPU là bộ tăng tốc int8), sau đó khởi tạo phiên làm việc ONNX Runtime với tính năng lưu cache nhị phân ngữ cảnh được bật — quá trình này biên dịch đồ thị đã 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, upload lên đám mây hoặc tải xuống SDK riêng biệt.
Không giống như Qualcomm AI Hub dựa trên đám mây, vốn biên dịch và phân tích các model trên các thiết bị Snapdragon do Qualcomm lưu trữ và yêu cầu tài khoản Qualcomm, tính năng xuất QNN của Ultralytics chạy hoàn toàn trên máy của riêng bạn với một lệnh export(format="qnn") duy nhất. Bạn nhận được cùng một target runtime QNN/QAIRT — Snapdragon CPU, Adreno GPU và Hexagon NPU — mà không cần đăng ký, giới hạn upload hoặc thời gian chờ, và nó được tích hợp thẳng vào quy trình xuất YOLO tiêu chuẩn.
Thư mục _qnn_model/ đã xuất chứa tệp ONNX context-binary và một tệp metadata.yaml mô tả tên lớp, kích thước ảnh và tác vụ.
Các tính năng chính của model QNN
- Lượng tử hóa INT8: Model được lượng tử hóa sang INT8 với luồng ONNX Runtime QNN QDQ và tập dữ liệu hiệu chỉnh, khớp với độ chính xác gốc của Hexagon NPU để có thông lượng tối đa và kích thước tối thiểu. 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 toàn diện: Chạy inference trên Hexagon NPU (HTP), Adreno GPU hoặc CPU thông qua một runtime thống nhất duy nhất.
- 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ó trên điện thoại, PC (Windows on Snapdragon), ô tô, XR và các sản phẩm nhúng.
- Context Binary đã biên dịch sẵn: Việc gửi kèm context binary giúp giảm thiểu quá trình biên dịch đồ thị trên thiết bị, giảm độ trễ khi tải model trên thiết bị đích.
- Đầu ra tự chứa: Thư mục xuất bao gồm tệp ONNX context-binary và metadata để triển khai đơn giản.
Các tác vụ được hỗ trợ
Xuất QNN hỗ trợ bộ tác vụ tiêu chuẩn có sẵn trong mỗi dòng model, bao gồm phân đoạn ngữ nghĩa YOLO26.
| Tác vụ | Được hỗ trợ |
|---|---|
| Object Detection | ✅ |
| Instance Segmentation | ✅ |
| Semantic Segmentation | ✅ |
| Pose Estimation | ✅ |
| OBB Detection | ✅ |
| Classification | ✅ |
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 Snapdragon. Context binary được hoàn thiện cho kiến trúc Hexagon Tensor Processor (HTP) mục tiêu mà bạn chọn bằng tham số name — tham số tương tự được sử dụng để nhắm mục tiêu chip trong RKNN export.
Các kiến trúc HTP được hỗ trợ
Truyền kiến trúc mục tiêu qua name (ví dụ: name="73"). Các giá trị hợp lệ:
name | Hexagon HTP | Nền tảng Snapdragon |
|---|---|---|
68 | v68 | Snapdragon 865 |
69 | v69 | Snapdragon 888 / 8 Gen 1 |
73 | v73 | Snapdragon 8 Gen 2 (mặc định) |
75 | v75 | Snapdragon 8 Gen 3 |
79 | v79 | Snapdragon 8 Elite |
Xuất QNN sử dụng gói onnxruntime-qnn. Các wheel ổn định được phát hành cho Windows (x64 và ARM64) và Linux ARM64 (aarch64); một wheel Linux x86-64 có sẵn trên nguồn nightly của ONNX Runtime. Không có wheel cho macOS — trên macOS, hãy build ONNX Runtime từ mã nguồn với --use_qnn, hoặc thực hiện xuất trên nền tảng được hỗ trợ. Việc tạo QNN context-binary hoạt động trên host x64 (không cần 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à tích hợp các thư viện QAIRT) được cài đặt tự động trong lần xuất đầu tiên. Để biết hướng dẫn chi tiết và các phương pháp tốt nhất liên quan đến quá trình cài đặt, hãy xem Hướng dẫn cài đặt Ultralytics. Trong khi cài đặt các gói cần thiết cho YOLO, nếu bạn gặp bất kỳ khó khăn nào, hãy tham khảo Hướng dẫn các vấn đề thường gặp để 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. Inference và validation 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 inference hoặc kiểm tra độ chính xác.
from ultralytics import YOLO
# Load a YOLO26 model
model = YOLO("yolo26n.pt")
# Export to Qualcomm QNN format (INT8, enforced automatically), targeting an HTP architecture via 'name'
# 'name' can be one of 68, 69, 73, 75, 79 (Snapdragon 865, 888/8 Gen 1, 8 Gen 2, 8 Gen 3, 8 Elite)
model.export(format="qnn", name="73") # creates 'yolo26n_qnn_model/'from ultralytics import YOLO
# Load the exported QNN model (on a Snapdragon device with onnxruntime-qnn)
model = YOLO("yolo26n_qnn_model")
# 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_model")
# Validate accuracy on the COCO8 dataset
metrics = model.val(data="coco8.yaml")Các Tham số Xuất
| Tham số | Loại (Type) | Mặc định | Mô tả |
|---|---|---|---|
format | str | 'qnn' | Định dạng mục tiêu cho model được 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 của model. Có thể là số nguyên cho ảnh vuông hoặc một tuple (height, width). |
batch | int | 1 | Chỉ định batch size cho model xuất, giá trị này được cố định vào QNN context binary được tạo. |
name | str | '73' | Phiên bản kiến trúc Hexagon HTP mục tiêu: 68, 69, 73, 75 hoặc 79 (Snapdragon 865, 888/8 Gen 1, 8 Gen 2, 8 Gen 3, 8 Elite). Context binary được hoàn thiện cho kiến trúc này. |
int8 | bool | True | Bật lượng tử hóa INT8. Bắt buộc đối với xuất QNN HTP — tự động đặt thành True nếu không được chỉ định. |
data | str | 'coco8.yaml' | Tệp cấu hình tập dữ liệu được sử dụng để hiệu chỉnh INT8. Chỉ định nguồn hình ảnh hiệu chỉnh. |
fraction | float | 1.0 | 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). |
Hexagon NPU (HTP) là bộ tăng tốc int8, vì vậy xuất QNN sẽ lượng tử hóa model sang INT8 bằng luồng ONNX Runtime QDQ quantization với các ảnh hiệu chỉnh từ data. int8=True được áp dụng tự động.
Để biết thêm chi tiết về quy trình xuất, hãy truy cập Ultralytics documentation page on exporting.
Cấu trúc Đầu ra
Sau khi xuất thành công, một thư mục mô hình được tạo với bố cục sau:
yolo26n_qnn_model/
├── yolo26n_qnn.onnx # ONNX wrapping the precompiled QNN context binary
└── metadata.yaml # Model metadata (classes, image size, task, etc.)Tệp yolo26n_qnn.onnx nhúng QNN context binary và được ONNX Runtime tải bằng QNN Execution Provider trên thiết bị Snapdragon. Tệp metadata.yaml chứa tên lớp, kích thước ảnh và các thông tin khác được sử dụng bởi quy trình làm việc của Ultralytics.
Triển khai các model YOLO QNN đã xuất
Các model QNN chạy trên phần cứng Qualcomm Snapdragon, giúp cho việc triển khai model trên thiết bị trở nên đơn giản. Trên thiết bị Snapdragon đã 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 phần Cách sử dụng ở trên) — Ultralytics sẽ tải context binary thông qua ONNX Runtime QNN Execution Provider và chọn backend HTP (NPU), GPU hoặc CPU.
Đối với các quy trình tùy chỉnh, bạn cũng có thể tải ONNX context-binary trực tiếp với ONNX Runtime. onnxruntime-qnn là một plugin Execution Provider, vì vậy hãy đăng ký nó tại 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_model/yolo26n_qnn.onnx", sess_options=options)
outputs = session.run(None, {"images": input_tensor}) # input_tensor: float32 NCHWVì QNN context binary được biên dịch sẵn, phiên làm việc sẽ tải nhanh mà không cần biên dịch lại đồ thị trên thiết bị.
Quy trình làm việc được khuyến nghị
- Train (Huấn luyện) model của bạn bằng Train Mode của Ultralytics
- Export (Xuất) sang định dạng QNN bằng
model.export(format="qnn")trên nền tảng được hỗ trợ (Windows hoặc Linux ARM64) - Deploy (Triển khai) thư mục
_qnn_model/đã xuất sang thiết bị Snapdragon của bạn - Run (Chạy) inference với ONNX Runtime và QNN Execution Provider, chọn backend HTP, GPU hoặc CPU
Các ứng dụng 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: Nhận diện đối tượng theo thời gian thực và hiểu ngữ cảnh trong các ứng dụng máy ảnh và ảnh với sự hỗ trợ của 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 chuyển xử lý lên đám mây.
- Ô tô: Giám sát người lái, nhận diệ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: Nhận thức độ trễ thấp, tiêu thụ điện năng thấp cho kính AR/VR và kính thông minh.
- IoT và Robot: 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 sử dụng nền tả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ỗ bằng ONNX Runtime QNN Execution Provider. Quy trình xuất 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 chủ của bạn — không cần tài khoản Qualcomm hoặc đám mây — tạo ra một _qnn.onnx được tối ưu hóa cho phần cứng Snapdragon CPU, Adreno GPU và Hexagon NPU thông qua runtime QNN/QAIRT.
Sự kết hợp giữa Ultralytics YOLO và stack 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 thị giác máy tính 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 trên thiết bị và di động khác, hãy xem các hướng dẫn xuất liên quan đến ONNX, CoreML, NCNN, TFLite, 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 hướng dẫn tích hợp.
FAQ
Làm cách nào để xuất model Ultralytics YOLO của tôi sang định dạng QNN?
Bạn có thể xuất model của mình bằng phương thức export() trong Python hoặc qua CLI với format="qnn". Quá trình xuất trước tiên tạo một model ONNX, sau đó biên dịch nó cục bộ thành QNN context binary bằng ONNX Runtime QNN Execution Provider. Gói onnxruntime-qnn được cài đặt tự động trong lần xuất đầu tiên.
from ultralytics import YOLO
model = YOLO("yolo26n.pt")
model.export(format="qnn")Tôi có cần tài khoản Qualcomm hoặc quyền truy cập đám mây không?
Khô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, gói này tích hợp sẵn các thư viện QAIRT. Không cần tài khoản Qualcomm, API token hoặc truy cập mạng.
Xuất QNN của Ultralytics so với Qualcomm AI Hub như thế nào?
Qualcomm AI Hub là dịch vụ đám mây của Qualcomm để biên dịch, phân tích và đánh giá 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. Xuất QNN của Ultralytics nhắm mục tiêu vào cùng runtime QNN/QAIRT (Snapdragon CPU, Adreno GPU và Hexagon NPU) nhưng biên dịch context binary tại chỗ với ONNX Runtime QNN Execution Provider — không cần tài khoản, không upload và không chờ đợi. Đây là cách nhanh nhất để chuyển từ model .pt sang build sẵn sàng cho Snapdragon ngay trong quy trình xuất YOLO tiêu chuẩn.
Tôi có thể xuất trên những nền tảng nào?
onnxruntime-qnn cung cấp các wheel ổn định cho Windows (x64 và ARM64) và Linux ARM64 (aarch64), cộng với wheel Linux x86-64 trên nguồn nightly của ONNX Runtime. macOS không có wheel — hãy build ONNX Runtime từ nguồn với --use_qnn hoặc xuất trên nền tảng đượ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ý.
Làm cách nào để chạy YOLO trên Qualcomm Snapdragon NPU?
Xuất với model.export(format="qnn"), sao chép thư mục yolo26n_qnn_model kết quả sang thiết bị Snapdragon của bạn, và chạy yolo predict model=yolo26n_qnn_model source=image.jpg (hoặc yolo val). Ultralytics sẽ tải context binary thông qua ONNX Runtime QNN Execution Provider và chạy nó trên Hexagon NPU — xem Triển khai các model YOLO QNN đã xuất.
Sự khác biệt giữa QNN và SNPE là gì?
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 SDK Snapdragon Neural Processing Engine (SNPE) cũ. Các dự án triển khai mới nên nhắm mục tiêu QNN.
Tôi có thể chạy model QNN bằng yolo predict và yolo val không?
Có, trên thiết bị Qualcomm Snapdragon đã cài đặt onnxruntime-qnn — YOLO("yolo26n_qnn_model") sẽ tải context binary thông qua QNN Execution Provider và chạy predict/val giố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.
Đầu ra của việc xuất QNN là gì?
Quá trình xuất tạo ra một thư mục (ví dụ: yolo26n_qnn_model/) chứa context-binary ONNX (yolo26n_qnn.onnx) và tệp metadata.yaml với thông tin về tên lớp, kích thước ảnh và tác vụ.