Meet YOLO26: next-gen vision AI.

针对 Ultralytics YOLO 模型的 Qualcomm QNN 导出

在 Qualcomm Snapdragon 设备上部署计算机视觉模型需要针对 Qualcomm AI Engine Direct (QNN) 运行时进行优化的模型格式。将 Ultralytics YOLO 模型导出为 QNN 格式,让你能够在数以亿计的手机、笔记本电脑、汽车系统和物联网设备所搭载的 Snapdragon CPU、Adreno GPU 和 Hexagon NPU 硬件上运行加速的端侧推理。本指南将介绍如何将 YOLO 导出到 Qualcomm QNN,并将其部署在 Snapdragon 硬件上以实现快速、低功耗的推理。

什么是 Qualcomm QNN?

Qualcomm QNN on-device inference

Qualcomm AI Engine Direct(通常称为 QNN,并作为 Qualcomm AI Runtime (QAIRT) SDK 的一部分分发)是 Qualcomm 针对 Snapdragon 处理器的底层推理栈。它提供了一个统一的 API 和后端专用库,专门用于 Snapdragon CPU、Adreno GPU 和 Hexagon Tensor Processor (HTP),即现代 Snapdragon SoC 中内置的专用 神经网络 处理单元 (NPU)。QNN 为开发者提供了对这些 Snapdragon AI 加速器的全栈访问权限,是旧版 Snapdragon Neural Processing Engine (SNPE) SDK 的现代继任者。它为 Snapdragon 8 Gen 2、8 Gen 3 和 8 Elite 移动平台、Snapdragon X 笔记本电脑以及各种汽车和 XR 产品提供端侧 AI 支持。

为什么导出到 Qualcomm QNN?

Snapdragon 是全球部署最广泛的移动计算平台。将 Ultralytics YOLO 导出为 Qualcomm QNN 格式可以激活这些设备上的专用 AI 硬件:

  • Hexagon NPU 加速:在 Hexagon Tensor Processor 上运行 YOLO 可带来比 CPU 推理显著更高的吞吐量和更低的功耗,是 实时推理 和 Snapdragon 上始终在线的计算机视觉的理想选择。
  • 端侧和离线:QNN 推理完全在 Snapdragon 设备上运行,因此没有云端往返,延迟保持在较低水平,且数据永远不会离开设备。
  • INT8 效率:QNN 导出将 YOLO 量化为 INT8(Hexagon NPU 的原生精度),从而在电池供电的硬件上缩小模型体积并最大化每秒帧数。
  • 一种格式,多种设备:单个 Qualcomm QNN 导出即可覆盖 Snapdragon 8 Gen 2、8 Gen 3、8 Elite 系列及后续产品中的 Snapdragon CPU、Adreno GPU 和 Hexagon NPU。
  • 生产就绪的 Qualcomm AI 栈:QNN (Qualcomm AI Engine Direct / QAIRT) 是 Qualcomm 当前积极维护的端侧 AI 运行时,也是 SNPE 的推荐替代方案。

QNN 导出格式

Ultralytics 使用 ONNX Runtime QNN 执行提供程序(可 pip 安装的 onnxruntime-qnn 包,其中打包了 QAIRT 库)在本地将 YOLO 模型编译为 QNN。导出器将你的模型转换为 ONNX,使用校准数据进行 INT8 量化(Hexagon NPU 是一个 int8 加速器),然后初始化一个启用了上下文二进制缓存的 ONNX Runtime 会话——这将把量化后的图编译为嵌入在 <model>_qnn.onnx 中的 QNN 上下文二进制文件。无需 Qualcomm 账户、云端上传或单独下载 SDK。

与基于云的 Qualcomm AI Hub 不同(它在 Qualcomm 托管的 Snapdragon 设备上编译和分析模型,并需要 Qualcomm 账户),Ultralytics QNN 导出完全在你的机器上运行,仅需一个 export(format="qnn") 调用即可。你无需注册、上传限制或排队等待,即可获得相同的 QNN/QAIRT 运行时目标(Snapdragon CPU、Adreno GPU 和 Hexagon NPU),并且可以直接融入标准 YOLO 导出工作流程。

导出的 _qnn_model/ 目录中包含上下文二进制 ONNX 文件以及描述类名、图像大小和任务的 metadata.yaml

QNN 模型的主要特性

  • INT8 量化:模型使用 ONNX Runtime QNN QDQ 流程和校准数据集量化为 INT8,以匹配 Hexagon NPU 的原生精度,从而实现最大吞吐量和最小体积。了解更多关于 模型量化 的信息。
  • 完全本地编译:上下文二进制文件完全在你的主机上生成——无需 Qualcomm 账户、API 令牌或云端上传。
  • 全面的 Snapdragon 加速:通过单一统一运行时在 Hexagon NPU (HTP)、Adreno GPU 或 CPU 上运行推理。
  • 广泛的设备覆盖:覆盖手机、PC(Windows on Snapdragon)、汽车、XR 和嵌入式产品中广泛使用的各种 Snapdragon 平台。
  • 预编译的上下文二进制文件:分发上下文二进制文件可最大程度地减少端侧图编译,从而降低目标设备上的模型加载延迟。
  • 自包含的输出:导出的目录包括上下文二进制 ONNX 和元数据,方便直接部署。

支持的任务

QNN 导出支持每个模型系列中的标准任务集,包括 YOLO26 语义分割。

导出到 QNN:转换你的 YOLO 模型

将 Ultralytics YOLO 模型导出为 QNN 格式以便在 Snapdragon 硬件上进行部署。上下文二进制文件是针对目标 Hexagon Tensor Processor (HTP) 架构完成的,你可以通过 name 参数进行选择——该参数与 RKNN 导出 中用于指定芯片的参数相同。

支持的 HTP 架构

通过 name 传入目标架构(例如 name="73")。有效值:

nameHexagon HTPSnapdragon 平台
68v68Snapdragon 865
69v69Snapdragon 888 / 8 Gen 1
73v73Snapdragon 8 Gen 2(默认)
75v75Snapdragon 8 Gen 3
79v79Snapdragon 8 Elite
平台支持

QNN 导出使用 onnxruntime-qnn 包。官方发布了适用于 Windows (x64 和 ARM64)Linux ARM64 (aarch64) 的稳定版本;ONNX Runtime 夜间构建源上提供了 Linux x86-64 版本。没有 macOS 版本——在 macOS 上,请使用 --use_qnn 从源码构建 ONNX Runtime,或者在受支持的平台上运行导出。QNN 上下文二进制生成可以在 x64 主机上完成(导出步骤不需要 Snapdragon 设备)。

安装

要安装所需的包,请运行:

安装
# Install the required package for YOLO
pip install ultralytics

onnxruntime-qnn 包(提供 ONNX Runtime QNN 执行提供程序并打包了 QAIRT 库)会在首次导出时自动安装。有关安装过程的详细说明和最佳实践,请查看我们的 Ultralytics 安装指南。在安装 YOLO 所需包的过程中,如果遇到任何困难,请参考我们的 常见问题指南 获取解决方案和建议。

用法

QNN 格式支持 导出预测验证 模式。推理和验证通过 ONNX Runtime 的 QNN 执行提供程序(与导出时使用的 onnxruntime-qnn 包相同)在 Qualcomm Snapdragon 硬件上运行。导出你的模型,然后在 Snapdragon 设备上加载导出的模型以进行推理或验证其准确性。

导出 (Export)
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/'
预测 (Predict)
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")

导出参数

参数类型默认值描述
formatstr'qnn'导出的模型目标格式,定义了与 Qualcomm QNN 运行时的兼容性。
imgszinttuple640模型输入的期望图像大小。可以是代表方形图像的整数,或者是元组 (height, width)
batchint1指定导出模型的批处理大小,该大小会固定在生成的 QNN 上下文二进制文件中。
namestr'73'目标 Hexagon HTP 架构版本:6869737579(分别对应 Snapdragon 865、888/8 Gen 1、8 Gen 2、8 Gen 3、8 Elite)。上下文二进制文件会针对此架构进行最终编译。
int8boolTrue启用 INT8 量化。QNN HTP 导出必需——如果未指定,将自动设置为 True
datastr'coco8.yaml'用于 INT8 校准的数据集配置文件。指定校准图像源。
fractionfloat1.0用于 INT8 量化的校准数据集比例。
devicestrNone指定 ONNX 导出步骤的设备:GPU (device=0) 或 CPU (device=cpu)。
精度

The Hexagon NPU (HTP) is an int8 accelerator, so QNN export quantizes the model to INT8 using the ONNX Runtime QDQ quantization flow with calibration images from data. int8=True is enforced automatically.

有关导出过程的更多详细信息,请访问 Ultralytics 导出文档页面

输出结构

成功导出后,将创建一个包含以下布局的模型目录:

yolo26n_qnn_model/
├── yolo26n_qnn.onnx   # ONNX wrapping the precompiled QNN context binary
└── metadata.yaml      # Model metadata (classes, image size, task, etc.)

yolo26n_qnn.onnx 文件嵌入了 QNN 上下文二进制文件,并由 ONNX Runtime 在 Snapdragon 设备上配合 QNN 执行提供程序加载。metadata.yaml 包含 Ultralytics 流水线使用的类名、图像大小和其他信息。

部署导出的 YOLO QNN 模型

QNN 模型在 Qualcomm Snapdragon 硬件上运行,使得端侧 模型部署 变得非常简单。在安装了 onnxruntime-qnn 的 Snapdragon 设备上,使用 Ultralytics API 直接运行导出的模型(yolo predict/yolo val,参见上方的 用法)——Ultralytics 会通过 ONNX Runtime QNN 执行提供程序 加载上下文二进制文件,并自动选择 HTP (NPU)、GPU 或 CPU 后端。

对于自定义流水线,你也可以使用 ONNX Runtime 直接加载上下文二进制 ONNX 文件。onnxruntime-qnn 是一个插件式执行提供程序,因此请在运行时注册它:

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 NCHW

由于 QNN 上下文二进制文件是预编译的,会话加载速度很快,无需在设备上重新编译图。

推荐工作流程

  1. 使用 Ultralytics 训练模式 训练你的模型
  2. 导出:在受支持的平台(Windows 或 Linux ARM64)上使用 model.export(format="qnn") 导出为 QNN 格式
  3. 部署:将导出的 _qnn_model/ 目录部署到你的 Snapdragon 设备上
  4. 运行:使用 ONNX Runtime 和 QNN 执行提供程序运行推理,选择 HTP、GPU 或 CPU 后端

实际应用

在 Qualcomm Snapdragon 硬件上运行的 YOLO 模型非常适合广泛的 边缘 AI 应用:

  • 智能手机:在相机和照片应用中实现实时 目标检测 和场景理解,并利用 NPU 加速。
  • Windows on Snapdragon:在 Copilot+ PC 上实现端侧计算机视觉,无需卸载到云端。
  • 汽车:在 Snapdragon Digital Chassis 平台上实现驾驶员监控、乘客检测和 ADAS 功能。
  • XR 和可穿戴设备:为 AR/VR 头显和智能眼镜提供低功耗、低延迟的感知能力。
  • 物联网和机器人:在搭载 Snapdragon 的相机、无人机和嵌入式系统上实现高效的视觉推理。

总结

在本指南中,你已经学习了如何使用 ONNX Runtime QNN 执行提供程序在主机上本地将 Ultralytics YOLO 模型导出为 Qualcomm QNN 格式。导出流水线将你的模型转换为 ONNX,然后将其编译为 QNN 上下文二进制文件——无需 Qualcomm 账户或云端支持——从而生成一个通过 QNN/QAIRT 运行时针对 Snapdragon CPU、Adreno GPU 和 Hexagon NPU 硬件优化的 _qnn.onnx 文件。

Ultralytics YOLO 与 Qualcomm 端侧 AI 栈的结合,为在广泛的 Snapdragon 生态系统中运行高级 计算机视觉 工作负载提供了有效的解决方案。

有关其他端侧和移动部署目标,请参阅相关的 ONNXCoreMLNCNNTFLiteExecuTorchRKNNSony IMX500TensorRT 导出指南。在分发前对比各格式,请使用 基准测试模式。有关格式和选项的完整列表,请访问 导出模式 文档和 集成指南页面

常见问题解答

如何将我的 Ultralytics YOLO 模型导出为 QNN 格式?

你可以使用 Python 中的 export() 方法或通过 CLI 使用 format="qnn" 导出你的模型。导出过程首先创建 ONNX 模型,然后使用 ONNX Runtime QNN 执行提供程序在本地将其编译为 QNN 上下文二进制文件。onnxruntime-qnn 包会在首次导出时自动安装。

示例
from ultralytics import YOLO

model = YOLO("yolo26n.pt")
model.export(format="qnn")

我需要 Qualcomm 账户或云端访问权限吗?

不需要。QNN 导出完全在你的本地机器上使用 onnxruntime-qnn 包运行,该包打包了 QAIRT 库。无需 Qualcomm 账户、API 令牌或网络访问权限。

Ultralytics QNN 导出与 Qualcomm AI Hub 有什么区别?

Qualcomm AI Hub 是 Qualcomm 的云服务,用于在托管的 Snapdragon 设备上编译、分析和基准测试模型,它需要 Qualcomm 账户。Ultralytics QNN 导出针对相同的 QNN/QAIRT 运行时(Snapdragon CPU、Adreno GPU 和 Hexagon NPU),但使用 ONNX Runtime QNN 执行提供程序在本地编译上下文二进制文件——无需账户、无需上传、无需排队。这是直接在标准 YOLO 导出工作流程中将 .pt 模型转换为 Snapdragon 就绪构建的最快方法。

我可以在哪些平台上进行导出?

onnxruntime-qnn 提供适用于 Windows (x64 和 ARM64)Linux ARM64 (aarch64) 的稳定版本,以及 ONNX Runtime 夜间构建源上的 Linux x86-64 版本。macOS 没有对应的版本——请使用 --use_qnn 从源码构建 ONNX Runtime 或在受支持的平台上导出。上下文二进制生成在 x64 主机上运行,不需要物理 Snapdragon 设备。

如何通过 Qualcomm Snapdragon NPU 运行 YOLO?

使用 model.export(format="qnn") 导出,将生成的 yolo26n_qnn_model 目录复制到你的 Snapdragon 设备,然后运行 yolo predict model=yolo26n_qnn_model source=image.jpg(或 yolo val)。Ultralytics 通过 ONNX Runtime QNN 执行提供程序加载上下文二进制文件,并在 Hexagon NPU 上运行——参见 部署导出的 YOLO QNN 模型

QNN 和 SNPE 有什么区别?

QNN(Qualcomm AI Engine Direct,属于 QAIRT SDK 的一部分)是 Qualcomm 当前的推理栈,也是旧版 Snapdragon Neural Processing Engine (SNPE) SDK 的推荐替代方案。新的部署应采用 QNN。

我可以使用 yolo predictyolo val 运行 QNN 模型吗?

可以,在安装了 onnxruntime-qnn 的 Qualcomm Snapdragon 设备上——YOLO("yolo26n_qnn_model") 会通过 QNN 执行提供程序加载上下文二进制文件,并像其他任何格式一样运行 predict/val。在没有 QNN 硬件的 x86 主机上,模型无法执行,因为上下文二进制文件是针对 Snapdragon NPU 的。

QNN 导出的输出是什么?

导出将创建一个目录(例如 yolo26n_qnn_model/),其中包含上下文二进制 ONNX (yolo26n_qnn.onnx) 和一个包含类名、图像大小和任务信息的 metadata.yaml

Contributors

评论