Meet YOLO26: next-gen vision AI.

Exportación a Qualcomm QNN para modelos YOLO de Ultralytics

Implementar modelos de visión por computador en dispositivos Qualcomm Snapdragon requiere un formato de modelo adaptado al tiempo de ejecución Qualcomm AI Engine Direct (QNN). Exportar modelos de Ultralytics YOLO al formato QNN te permite ejecutar inferencia acelerada en el dispositivo a través del hardware de CPU Snapdragon, GPU Adreno y NPU Hexagon que se encuentra en miles de millones de teléfonos móviles, portátiles, sistemas de automoción y dispositivos IoT. Esta guía explica cómo exportar YOLO a Qualcomm QNN e implementarlo para una inferencia rápida y de bajo consumo en hardware Snapdragon.

¿Qué es Qualcomm QNN?

Qualcomm QNN on-device inference

Qualcomm AI Engine Direct — conocido comúnmente como QNN y distribuido como parte del SDK de Qualcomm AI Runtime (QAIRT) — es la pila de inferencia de bajo nivel de Qualcomm para procesadores Snapdragon. Proporciona una API unificada con bibliotecas específicas de backend que se dirigen a la CPU Snapdragon, la GPU Adreno y el Hexagon Tensor Processor (HTP), la unidad de procesamiento de redes neuronales (NPU) dedicada dentro de los SoCs Snapdragon modernos. QNN otorga a los desarrolladores acceso completo a estos aceleradores de IA de Snapdragon y es el sucesor moderno del antiguo SDK Snapdragon Neural Processing Engine (SNPE). Impulsa la IA en el dispositivo en las plataformas móviles Snapdragon 8 Gen 2, 8 Gen 3 y 8 Elite, portátiles Snapdragon X, y productos de automoción y XR.

¿Por qué exportar a Qualcomm QNN?

Snapdragon es la plataforma de computación móvil más ampliamente desplegada en el mundo. Exportar Ultralytics YOLO al formato Qualcomm QNN desbloquea el hardware de IA dedicado en estos dispositivos:

  • Aceleración de NPU Hexagon: Ejecutar YOLO en el Hexagon Tensor Processor ofrece un rendimiento drásticamente mayor y menor consumo energético que la inferencia en CPU; es ideal para inferencia en tiempo real y visión por computador siempre activa en Snapdragon.
  • En el dispositivo y sin conexión: La inferencia QNN se ejecuta completamente en el dispositivo Snapdragon, por lo que no hay viajes de ida y vuelta a la nube, la latencia se mantiene baja y los datos nunca salen del dispositivo.
  • Eficiencia INT8: La exportación QNN cuantiza YOLO a INT8, la precisión nativa de la NPU Hexagon, reduciendo el tamaño del modelo y maximizando los fotogramas por segundo en hardware alimentado por batería.
  • Un formato, muchos dispositivos: Una única exportación Qualcomm QNN se dirige a la CPU Snapdragon, la GPU Adreno y la NPU Hexagon en las familias Snapdragon 8 Gen 2, 8 Gen 3, 8 Elite y más allá.
  • Pila de IA de Qualcomm lista para producción: QNN (Qualcomm AI Engine Direct / QAIRT) es el tiempo de ejecución de IA en el dispositivo actual de Qualcomm, mantenido activamente y el reemplazo recomendado para SNPE.

Formato de exportación QNN

Ultralytics compila modelos YOLO a QNN localmente utilizando el proveedor de ejecución QNN de ONNX Runtime (el paquete onnxruntime-qnn instalable mediante pip, que incluye las bibliotecas QAIRT). El exportador convierte tu modelo a ONNX, lo cuantiza a INT8 con datos de calibración (la NPU Hexagon es un acelerador int8) y luego inicializa una sesión de ONNX Runtime con el almacenamiento en caché de binarios de contexto habilitado; esto compila el grafo cuantizado en un binario de contexto QNN incrustado en <model>_qnn.onnx. No se requiere cuenta de Qualcomm, subida a la nube ni descarga de SDK adicional.

A diferencia del Qualcomm AI Hub basado en la nube, que compila y perfila modelos en dispositivos Snapdragon alojados por Qualcomm y requiere una cuenta de Qualcomm, la exportación QNN de Ultralytics se ejecuta completamente en tu propia máquina con una sola llamada a export(format="qnn"). Obtienes el mismo destino de tiempo de ejecución QNN/QAIRT — CPU Snapdragon, GPU Adreno y NPU Hexagon — sin registros, límites de subida ni tiempos de espera, y se integra directamente en el flujo de trabajo de exportación estándar de YOLO.

El directorio exportado _qnn_model/ agrupa el ONNX de binario de contexto y un archivo metadata.yaml que describe los nombres de las clases, el tamaño de la imagen y la tarea.

Características clave de los modelos QNN

  • Cuantización INT8: El modelo se cuantiza a INT8 con el flujo QDQ de QNN de ONNX Runtime y un conjunto de datos de calibración, coincidiendo con la precisión nativa de la NPU Hexagon para un rendimiento máximo y un tamaño mínimo. Aprende más sobre la cuantización de modelos.
  • Compilación totalmente local: El binario de contexto se genera completamente en tu máquina anfitriona; sin cuenta de Qualcomm, token de API ni subida a la nube.
  • Aceleración total de Snapdragon: Ejecuta la inferencia en la NPU Hexagon (HTP), GPU Adreno o CPU a través de un único tiempo de ejecución unificado.
  • Amplio alcance de dispositivos: Dirígete a la amplia gama de plataformas Snapdragon presentes en teléfonos, PCs (Windows on Snapdragon), automoción, XR y productos integrados.
  • Binario de contexto precompilado: Enviar un binario de contexto minimiza la compilación del grafo en el dispositivo, reduciendo la latencia de carga del modelo en el destino.
  • Salida autocontenida: El directorio exportado incluye el ONNX de binario de contexto y metadatos para una implementación directa.

Tareas compatibles

La exportación QNN admite el conjunto de tareas estándar disponible en cada familia de modelos, incluida la segmentación semántica de YOLO26.

Exportar a QNN: Convirtiendo tu modelo YOLO

Exporta un modelo YOLO de Ultralytics al formato QNN para implementarlo en hardware Snapdragon. El binario de contexto se finaliza para una arquitectura de Hexagon Tensor Processor (HTP) de destino, la cual seleccionas con el argumento name — el mismo argumento utilizado para elegir un chip en la exportación RKNN.

Arquitecturas HTP compatibles

Pasa la arquitectura de destino mediante name (p. ej., name="73"). Valores válidos:

nameHexagon HTPPlataforma Snapdragon
68v68Snapdragon 865
69v69Snapdragon 888 / 8 Gen 1
73v73Snapdragon 8 Gen 2 (predeterminado)
75v75Snapdragon 8 Gen 3
79v79Snapdragon 8 Elite
Compatibilidad de plataforma

La exportación QNN utiliza el paquete onnxruntime-qnn. Las versiones estables se publican para Windows (x64 y ARM64) y Linux ARM64 (aarch64); una versión para Linux x86-64 está disponible en el feed nocturno de ONNX Runtime. No hay versión para macOS; en macOS, compila ONNX Runtime desde el código fuente con --use_qnn o ejecuta la exportación en una plataforma compatible. La generación de binarios de contexto QNN funciona en un anfitrión x64 (no se requiere dispositivo Snapdragon para el paso de exportación).

Instalación

Para instalar los paquetes necesarios, ejecuta:

Instalación
# Install the required package for YOLO
pip install ultralytics

El paquete onnxruntime-qnn (que proporciona el proveedor de ejecución QNN de ONNX Runtime e incluye las bibliotecas QAIRT) se instala automáticamente en la primera exportación. Para obtener instrucciones detalladas y mejores prácticas relacionadas con el proceso de instalación, consulta nuestra guía de instalación de Ultralytics. Mientras instalas los paquetes necesarios para YOLO, si encuentras alguna dificultad, consulta nuestra guía de problemas comunes para encontrar soluciones y consejos.

Uso

El formato QNN es compatible con los modos Export, Predict y Validate. La inferencia y la validación se ejecutan en hardware Qualcomm Snapdragon a través del proveedor de ejecución QNN de ONNX Runtime (el mismo paquete onnxruntime-qnn utilizado para la exportación). Exporta tu modelo, luego cárgalo en un dispositivo Snapdragon para ejecutar la inferencia o validar su precisión.

Exportar
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/'
Predecir
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")
Validar
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")

Argumentos de exportación

ArgumentoTipoPredeterminadoDescripción
formatstr'qnn'Formato objetivo para el modelo exportado, que define la compatibilidad con el tiempo de ejecución Qualcomm QNN.
imgszint o tuple640Desired image size for the model input. Can be an integer for square images or a tuple (height, width).
batchint1Especifica el tamaño de lote del modelo de exportación, que se integra en el binario de contexto QNN generado.
namestr'73'Versión de arquitectura Hexagon HTP de destino: 68, 69, 73, 75 o 79 (Snapdragon 865, 888/8 Gen 1, 8 Gen 2, 8 Gen 3, 8 Elite). El binario de contexto se finaliza para esta arquitectura.
int8boolTrueHabilita la cuantización INT8. Requerido para la exportación QNN HTP; se establece automáticamente en True si no se especifica.
datastr'coco8.yaml'Archivo de configuración del conjunto de datos utilizado para la calibración INT8. Especifica el origen de las imágenes de calibración.
fractionfloat1.0Fracción del conjunto de datos de calibración que se utilizará para la cuantización INT8.
devicestrNoneEspecifica el dispositivo para el paso de exportación ONNX: GPU (device=0) o CPU (device=cpu).
Precisión

La NPU Hexagon (HTP) es un acelerador int8, por lo que la exportación QNN cuantiza el modelo a INT8 utilizando el flujo de cuantización QDQ de ONNX Runtime con imágenes de calibración de data. int8=True se aplica automáticamente.

Para obtener más detalles sobre el proceso de exportación, visita la página de documentación de Ultralytics sobre exportación.

Estructura de salida

Tras una exportación exitosa, se crea un directorio de modelo con la siguiente estructura:

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

El archivo yolo26n_qnn.onnx incrusta el binario de contexto QNN y es cargado por ONNX Runtime con el proveedor de ejecución QNN en el dispositivo Snapdragon. El archivo metadata.yaml contiene nombres de clases, tamaño de imagen y otra información utilizada por la canalización de Ultralytics.

Implementación de modelos YOLO QNN exportados

Los modelos QNN se ejecutan en hardware Qualcomm Snapdragon, lo que hace que la implementación del modelo en el dispositivo sea sencilla. En un dispositivo Snapdragon con onnxruntime-qnn instalado, ejecuta el modelo exportado directamente con la API de Ultralytics (yolo predict/yolo val, consulta Uso arriba); Ultralytics carga el binario de contexto a través del proveedor de ejecución QNN de ONNX Runtime y selecciona el backend HTP (NPU), GPU o CPU.

Para canalizaciones personalizadas, también puedes cargar el ONNX de binario de contexto directamente con ONNX Runtime. onnxruntime-qnn es un proveedor de ejecución de complemento, así que regístralo en tiempo de ejecución:

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

Debido a que el binario de contexto QNN está precompilado, la sesión se carga rápidamente sin necesidad de recompilar el grafo en el dispositivo.

Flujo de trabajo recomendado

  1. Entrena tu modelo usando el Modo Entrenamiento de Ultralytics
  2. Exporta al formato QNN usando model.export(format="qnn") en una plataforma compatible (Windows o Linux ARM64)
  3. Implementa el directorio exportado _qnn_model/ en tu dispositivo Snapdragon
  4. Ejecuta la inferencia con ONNX Runtime y el proveedor de ejecución QNN, seleccionando el backend HTP, GPU o CPU

Aplicaciones del mundo real

Los modelos YOLO que se ejecutan en hardware Qualcomm Snapdragon son muy adecuados para una amplia gama de aplicaciones de IA en el borde:

  • Smartphones: Detección de objetos en tiempo real y comprensión de escenas en aplicaciones de cámara y fotos con aceleración de NPU.
  • Windows on Snapdragon: Visión por computador en el dispositivo en PCs Copilot+ sin delegar a la nube.
  • Automoción: Monitoreo del conductor, detección de ocupantes y características ADAS en plataformas Snapdragon Digital Chassis.
  • XR y wearables: Percepción de baja potencia y baja latencia para cascos AR/VR y gafas inteligentes.
  • IoT y robótica: Inferencia de visión eficiente en cámaras, drones y sistemas integrados basados en Snapdragon.

Resumen

En esta guía, has aprendido a exportar modelos YOLO de Ultralytics al formato Qualcomm QNN localmente con el proveedor de ejecución QNN de ONNX Runtime. La canalización de exportación convierte tu modelo a ONNX y luego lo compila en un binario de contexto QNN en tu máquina anfitriona — sin necesidad de cuenta de Qualcomm ni nube — produciendo un _qnn.onnx optimizado para hardware de CPU Snapdragon, GPU Adreno y NPU Hexagon a través del tiempo de ejecución QNN/QAIRT.

La combinación de Ultralytics YOLO y la pila de IA en el dispositivo de Qualcomm proporciona una solución efectiva para ejecutar cargas de trabajo avanzadas de visión por computador en todo el ecosistema Snapdragon.

Para otros objetivos de implementación en dispositivos móviles y locales, consulta las guías de exportación relacionadas para ONNX, CoreML, NCNN, TFLite, ExecuTorch, RKNN, Sony IMX500 y TensorRT. Para comparar formatos antes de enviarlos, utiliza el modo Benchmark. Para obtener la lista completa de formatos y opciones, visita la documentación del modo Export y la página de la guía de integraciones.

Preguntas frecuentes

¿Cómo exporto mi modelo YOLO de Ultralytics al formato QNN?

Puedes exportar tu modelo usando el método export() en Python o mediante la CLI con format="qnn". La exportación primero crea un modelo ONNX, luego lo compila localmente en un binario de contexto QNN usando el proveedor de ejecución QNN de ONNX Runtime. El paquete onnxruntime-qnn se instala automáticamente en la primera exportación.

Ejemplo
from ultralytics import YOLO

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

¿Necesito una cuenta de Qualcomm o acceso a la nube?

No. La exportación QNN se ejecuta completamente en tu máquina local utilizando el paquete onnxruntime-qnn, que incluye las bibliotecas QAIRT. No se requiere cuenta de Qualcomm, token de API ni acceso a la red.

¿Cómo se compara la exportación QNN de Ultralytics con el Qualcomm AI Hub?

Qualcomm AI Hub es el servicio en la nube de Qualcomm para compilar, perfilar y realizar pruebas comparativas de modelos en dispositivos Snapdragon alojados, y requiere una cuenta de Qualcomm. La exportación QNN de Ultralytics se dirige al mismo tiempo de ejecución QNN/QAIRT (CPU Snapdragon, GPU Adreno y NPU Hexagon) pero compila el binario de contexto localmente con el proveedor de ejecución QNN de ONNX Runtime; sin cuenta, sin subidas y sin colas. Es la forma más rápida de pasar de un modelo .pt a una compilación lista para Snapdragon directamente dentro del flujo de trabajo de exportación estándar de YOLO.

¿En qué plataformas puedo exportar?

onnxruntime-qnn proporciona versiones estables para Windows (x64 y ARM64) y Linux ARM64 (aarch64), además de una versión para Linux x86-64 en el feed nocturno de ONNX Runtime. macOS no tiene versión; compila ONNX Runtime desde el código fuente con --use_qnn o exporta en una plataforma compatible. La generación de binarios de contexto se ejecuta en un anfitrión x64 y no requiere un dispositivo Snapdragon físico.

¿Cómo ejecuto YOLO en una NPU Qualcomm Snapdragon?

Exporta con model.export(format="qnn"), copia el directorio resultante yolo26n_qnn_model a tu dispositivo Snapdragon y ejecuta yolo predict model=yolo26n_qnn_model source=image.jpg (o yolo val). Ultralytics carga el binario de contexto a través del proveedor de ejecución QNN de ONNX Runtime y lo ejecuta en la NPU Hexagon; consulta Implementación de modelos YOLO QNN exportados.

¿Cuál es la diferencia entre QNN y SNPE?

QNN (Qualcomm AI Engine Direct, parte del SDK QAIRT) es el tiempo de ejecución actual de Qualcomm y el reemplazo recomendado para el antiguo SDK Snapdragon Neural Processing Engine (SNPE). Las nuevas implementaciones deben apuntar a QNN.

¿Puedo ejecutar un modelo QNN con yolo predict y yolo val?

Sí, en un dispositivo Qualcomm Snapdragon con onnxruntime-qnn instalado; YOLO("yolo26n_qnn_model") carga el binario de contexto a través del proveedor de ejecución QNN y ejecuta predict/val como cualquier otro formato. En un anfitrión x86 sin hardware QNN, el modelo no puede ejecutarse, ya que el binario de contexto apunta a la NPU Snapdragon.

¿Cuál es la salida de una exportación QNN?

La exportación crea un directorio (p. ej., yolo26n_qnn_model/) que contiene el binario de contexto ONNX (yolo26n_qnn.onnx) y un metadata.yaml con nombres de clases, tamaño de imagen e información de tareas.

Contributors

Comentarios