Meet YOLO26: next-gen vision AI.

Экспорт Qualcomm QNN для моделей Ultralytics YOLO

Для развертывания моделей компьютерного зрения на устройствах Qualcomm Snapdragon требуется формат модели, адаптированный под среду выполнения Qualcomm AI Engine Direct (QNN). Экспорт моделей Ultralytics YOLO в формат QNN позволяет выполнять ускоренный инференс прямо на устройстве, используя CPU Snapdragon, GPU Adreno и NPU Hexagon, которые есть в миллиардах мобильных телефонов, ноутбуков, автомобильных систем и устройств IoT. В этом руководстве подробно описано, как экспортировать YOLO в Qualcomm QNN и развернуть его для быстрого и энергоэффективного инференса на оборудовании Snapdragon.

Что такое Qualcomm QNN?

Qualcomm QNN on-device inference

Qualcomm AI Engine Direct — широко известный как QNN и распространяемый в составе SDK Qualcomm AI Runtime (QAIRT) — это низкоуровневый стек инференса Qualcomm для процессоров Snapdragon. Он предоставляет унифицированный API с библиотеками для конкретных бэкендов, предназначенными для работы с CPU Snapdragon, GPU Adreno и Hexagon Tensor Processor (HTP), специализированным нейронным процессором (NPU) внутри современных SoC Snapdragon. QNN дает разработчикам полноценный доступ к этим AI-ускорителям Snapdragon и является современным преемником старого SDK Snapdragon Neural Processing Engine (SNPE). Он обеспечивает работу AI на устройстве для мобильных платформ Snapdragon 8 Gen 2, 8 Gen 3 и 8 Elite, ноутбуков на базе Snapdragon X, а также автомобильных и XR-продуктов.

Зачем экспортировать в Qualcomm QNN?

Snapdragon — самая распространенная мобильная вычислительная платформа в мире. Экспорт Ultralytics YOLO в формат Qualcomm QNN открывает доступ к специализированному AI-оборудованию на этих устройствах:

  • Ускорение с помощью Hexagon NPU: Запуск YOLO на Hexagon Tensor Processor обеспечивает значительно более высокую пропускную способность и меньшее энергопотребление по сравнению с инференсом на CPU — это идеально подходит для инференса в реальном времени и постоянно активных систем компьютерного зрения на базе Snapdragon.
  • Работа на устройстве и офлайн: Инференс QNN выполняется полностью на устройстве Snapdragon, поэтому нет обращений к облаку, задержки остаются минимальными, а данные никогда не покидают устройство.
  • Эффективность INT8: Экспорт QNN квантует YOLO до INT8 — стандартной точности Hexagon NPU, что уменьшает размер модели и максимизирует количество кадров в секунду на устройствах с питанием от батареи.
  • Один формат — множество устройств: Один экспорт Qualcomm QNN охватывает CPU Snapdragon, GPU Adreno и NPU Hexagon в семействах Snapdragon 8 Gen 2, 8 Gen 3, 8 Elite и других.
  • Готовый к производству стек Qualcomm AI: QNN (Qualcomm AI Engine Direct / QAIRT) — это актуальная и активно поддерживаемая среда выполнения для AI на устройстве от Qualcomm, рекомендуемая в качестве замены SNPE.

Формат экспорта QNN

Ultralytics компилирует модели YOLO в QNN локально, используя QNN Execution Provider для ONNX Runtime (устанавливаемый через pip пакет onnxruntime-qnn, который содержит библиотеки QAIRT). Экспортер преобразует твою модель в ONNX, выполняет квантование INT8 с помощью данных калибровки (Hexagon NPU — это ускоритель int8), а затем инициализирует сессию ONNX Runtime с включенным кэшированием контекстных бинарных файлов — это компилирует квантованный граф в QNN context binary, встроенный в <model>_qnn.onnx. Никакой учетной записи Qualcomm, загрузки в облако или отдельной загрузки SDK не требуется.

В отличие от облачного сервиса Qualcomm AI Hub, который компилирует и профилирует модели на хостинговых устройствах Snapdragon и требует учетную запись Qualcomm, экспорт Ultralytics QNN работает полностью на твоей собственной машине с помощью одного вызова export(format="qnn"). Ты получаешь тот же целевой объект выполнения QNN/QAIRT — CPU Snapdragon, GPU Adreno и NPU Hexagon — без регистрации, ограничений на загрузку и очередей, при этом процесс органично вписывается в стандартный рабочий процесс экспорта YOLO.

Экспортированный каталог _qnn_model/ содержит контекстный бинарный файл ONNX и файл metadata.yaml, описывающий имена классов, размер изображения и задачу.

Ключевые особенности моделей QNN

  • Квантование INT8: Модель квантуется до INT8 с использованием потока ONNX Runtime QNN QDQ и калибровочного набора данных, что соответствует базовой точности Hexagon NPU для максимальной пропускной способности и минимального размера. Узнай больше о квантовании моделей.
  • Полностью локальная компиляция: Контекстный бинарный файл создается полностью на твоем хост-компьютере — без учетной записи Qualcomm, API-токенов или загрузки в облако.
  • Полное ускорение Snapdragon: Запускай инференс на Hexagon NPU (HTP), GPU Adreno или CPU через единую унифицированную среду выполнения.
  • Широкий охват устройств: Поддерживай широкий спектр платформ Snapdragon, используемых в телефонах, ПК (Windows on Snapdragon), автомобильных системах, XR и встраиваемых продуктах.
  • Предварительно скомпилированный контекстный бинарный файл: Использование этого файла минимизирует компиляцию графа на устройстве, снижая задержку загрузки модели на целевом устройстве.
  • Автономный вывод: Экспортируемый каталог включает контекстный бинарный файл ONNX и метаданные для простого развертывания.

Поддерживаемые задачи

Экспорт QNN поддерживает стандартный набор задач, доступный в каждом семействе моделей, включая семантическую сегментацию YOLO26.

Экспорт в QNN: Преобразование твоей модели YOLO

Экспортируй модель Ultralytics YOLO в формат QNN для развертывания на оборудовании Snapdragon. Контекстный бинарный файл финализируется для целевой архитектуры Hexagon Tensor Processor (HTP), которую ты выбираешь с помощью аргумента name — того же аргумента, что используется для выбора чипа при экспорте RKNN.

Поддерживаемые архитектуры HTP

Передай целевую архитектуру через аргумент name (например, name="73"). Допустимые значения:

nameHexagon HTPПлатформа Snapdragon
68v68Snapdragon 865
69v69Snapdragon 888 / 8 Gen 1
73v73Snapdragon 8 Gen 2 (по умолчанию)
75v75Snapdragon 8 Gen 3
79v79Snapdragon 8 Elite
Поддержка платформ

Экспорт QNN использует пакет onnxruntime-qnn. Стабильные сборки (wheels) выпущены для Windows (x64 и ARM64) и Linux ARM64 (aarch64); сборка для Linux x86-64 доступна в ночном фиде ONNX Runtime. Сборки для macOS нет — на macOS собирай ONNX Runtime из исходного кода с флагом --use_qnn или выполняй экспорт на поддерживаемой платформе. Генерация контекстного бинарного файла QNN работает на хосте x64 (физическое устройство Snapdragon для этапа экспорта не требуется).

Установка

Чтобы установить необходимые пакеты, выполни:

Установка
# Install the required package for YOLO
pip install ultralytics

Пакет onnxruntime-qnn (который предоставляет QNN Execution Provider для ONNX Runtime и библиотеки QAIRT) устанавливается автоматически при первом экспорте. Подробные инструкции и рекомендации по процессу установки ищи в нашем руководстве по установке Ultralytics. Если при установке необходимых пакетов для YOLO ты столкнешься с трудностями, обратись к нашему руководству по распространенным проблемам за решениями и советами.

Использование

Формат QNN поддерживает режимы Export, Predict и Validate. Инференс и валидация выполняются на оборудовании Qualcomm Snapdragon через QNN Execution Provider в составе ONNX Runtime (тот же пакет onnxruntime-qnn, что используется для экспорта). Экспортируй свою модель, а затем загрузи ее на устройство 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.
imgszint или tuple640Desired image size for the model input. Can be an integer for square images or a tuple (height, width).
batchint1Указывает размер пакета (batch size) для модели, который встраивается в созданный контекстный бинарный файл QNN.
namestr'73'Версия целевой архитектуры Hexagon HTP: 68, 69, 73, 75 или 79 (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).
Точность

Hexagon NPU (HTP) — это ускоритель int8, поэтому экспорт QNN квантует модель до INT8, используя поток квантования ONNX Runtime QDQ с калибровочными изображениями из data. Параметр int8=True применяется автоматически.

Для получения подробной информации о процессе экспорта посети страницу документации 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 с использованием QNN Execution Provider на устройстве Snapdragon. Файл metadata.yaml содержит имена классов, размер изображения и другую информацию, используемую конвейером Ultralytics.

Развертывание экспортированных моделей YOLO QNN

Модели QNN работают на оборудовании Qualcomm Snapdragon, что делает развертывание модели на устройстве простым. На устройстве Snapdragon с установленным onnxruntime-qnn запускай экспортированную модель напрямую через API Ultralytics (yolo predict/yolo val, смотри раздел Использование выше) — Ultralytics загружает контекстный бинарный файл через QNN Execution Provider для ONNX Runtime и выбирает бэкенд HTP (NPU), GPU или CPU.

Для пользовательских конвейеров ты также можешь загрузить контекстный бинарный файл ONNX напрямую через ONNX Runtime. onnxruntime-qnn — это подключаемый Execution Provider, поэтому зарегистрируй его во время выполнения:

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. Экспортируй в формат QNN, используя model.export(format="qnn") на поддерживаемой платформе (Windows или Linux ARM64)
  3. Разверни экспортированный каталог _qnn_model/ на своем устройстве Snapdragon
  4. Запусти инференс с помощью ONNX Runtime и QNN Execution Provider, выбрав бэкенд HTP, GPU или CPU

Реальные приложения

Модели YOLO, работающие на оборудовании Qualcomm Snapdragon, отлично подходят для широкого спектра приложений граничного AI:

  • Смартфоны: Детектирование объектов в реальном времени и понимание сцены в приложениях для камеры и фото с ускорением NPU.
  • Windows on Snapdragon: Компьютерное зрение на устройстве в ПК класса Copilot+ без использования облака.
  • Автомобильная промышленность: Мониторинг водителя, детектирование пассажиров и функции ADAS на платформах Snapdragon Digital Chassis.
  • XR и носимые устройства: Энергоэффективное восприятие с низкой задержкой для AR/VR-гарнитур и умных очков.
  • IoT и робототехника: Эффективный инференс зрения на камерах, дронах и встраиваемых системах на базе Snapdragon.

Итоги

В этом руководстве ты узнал, как экспортировать модели Ultralytics YOLO в формат Qualcomm QNN локально с помощью QNN Execution Provider для ONNX Runtime. Конвейер экспорта преобразует модель в ONNX, а затем компилирует ее в контекстный бинарный файл QNN на твоем хост-компьютере — без учетной записи Qualcomm или облака — создавая _qnn.onnx, оптимизированный для CPU Snapdragon, GPU Adreno и NPU Hexagon через среду выполнения QNN/QAIRT.

Сочетание Ultralytics YOLO и стека AI для устройств от Qualcomm предоставляет эффективное решение для выполнения продвинутых рабочих нагрузок компьютерного зрения во всей экосистеме Snapdragon.

Для других целей развертывания на устройствах и мобильных платформах смотри соответствующие руководства по экспорту: ONNX, CoreML, NCNN, TFLite, ExecuTorch, RKNN, Sony IMX500 и TensorRT. Чтобы сравнить форматы перед выпуском, используй режим Benchmark. Полный список форматов и опций доступен в документации по режиму Export и на странице руководств по интеграциям.

FAQ

Как мне экспортировать мою модель Ultralytics YOLO в формат QNN?

Ты можешь экспортировать свою модель, используя метод export() в Python или через CLI с помощью format="qnn". Сначала создается модель ONNX, а затем она локально компилируется в контекстный бинарный файл QNN с использованием QNN Execution Provider для ONNX Runtime. Пакет 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 (CPU Snapdragon, GPU Adreno и NPU Hexagon), но компилирует контекстный бинарный файл локально с помощью QNN Execution Provider для ONNX Runtime — без учетной записи, без загрузки и без очередей. Это самый быстрый способ пройти путь от модели .pt до сборки для Snapdragon прямо внутри стандартного рабочего процесса экспорта YOLO.

На каких платформах я могу выполнять экспорт?

onnxruntime-qnn предоставляет стабильные сборки для Windows (x64 и ARM64) и Linux ARM64 (aarch64), плюс сборку для Linux x86-64 в ночном фиде ONNX Runtime. Для macOS сборки нет — собирай ONNX Runtime из исходного кода с --use_qnn или выполняй экспорт на поддерживаемой платформе. Генерация контекстного бинарного файла выполняется на хосте x64 и не требует физического устройства Snapdragon.

Как запустить YOLO на NPU Qualcomm Snapdragon?

Экспортируй модель с помощью model.export(format="qnn"), скопируй полученный каталог yolo26n_qnn_model на свое устройство Snapdragon и запусти yolo predict model=yolo26n_qnn_model source=image.jpg (или yolo val). Ultralytics загрузит контекстный бинарный файл через QNN Execution Provider и запустит его на NPU Hexagon — смотри Развертывание экспортированных моделей YOLO QNN.

В чем разница между QNN и SNPE?

QNN (Qualcomm AI Engine Direct, часть SDK QAIRT) — это текущий стек инференса Qualcomm и рекомендуемая замена для старого SDK Snapdragon Neural Processing Engine (SNPE). Новые развертывания должны быть нацелены на QNN.

Могу ли я запустить модель QNN с помощью yolo predict и yolo val?

Да, на устройстве Qualcomm Snapdragon с установленным onnxruntime-qnnYOLO("yolo26n_qnn_model") загружает контекстный бинарный файл через QNN Execution Provider и выполняет predict/val так же, как и для любого другого формата. На хосте x86 без оборудования QNN модель не может выполниться, поскольку контекстный бинарный файл предназначен для NPU Snapdragon.

Что является результатом экспорта QNN?

Экспорт создает каталог (например, yolo26n_qnn_model/), содержащий контекстный бинарный файл ONNX (yolo26n_qnn.onnx) и файл metadata.yaml с именами классов, размером изображения и информацией о задаче.

Contributors

Комментарии