Ultralytics YOLO 모델을 위한 Qualcomm QNN 내보내기
Qualcomm Snapdragon 기기에서 컴퓨터 비전 모델을 배포하려면 Qualcomm AI Engine Direct (QNN) 런타임에 맞춰 조정된 모델 형식이 필요합니다. Ultralytics YOLO 모델을 QNN 형식으로 내보내면 수십억 대의 모바일 폰, 노트북, 자동차 시스템 및 IoT 기기에 탑재된 Snapdragon CPU, Adreno GPU 및 Hexagon NPU 하드웨어 전반에서 가속화된 온디바이스 추론을 실행할 수 있습니다. 이 가이드에서는 YOLO를 Qualcomm QNN으로 내보내고 Snapdragon 하드웨어에서 빠르고 저전력인 추론을 위해 배포하는 방법을 설명합니다.
Qualcomm QNN이란 무엇입니까?
Qualcomm AI Engine Direct는 QNN으로 흔히 불리며 Qualcomm AI Runtime (QAIRT) SDK의 일부로 배포되는 Snapdragon 프로세서용 Qualcomm 저수준 추론 스택입니다. 이는 Snapdragon CPU, Adreno GPU, 그리고 현대적인 Snapdragon SoC 내부의 전용 신경망 처리 장치(NPU)인 Hexagon Tensor Processor(HTP)를 타겟팅하는 백엔드별 라이브러리가 포함된 통합 API를 제공합니다. 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를 Hexagon NPU의 기본 정밀도인 INT8로 양자화하여 모델 크기를 줄이고 배터리로 작동하는 하드웨어에서 초당 프레임 수를 극대화합니다.
- 하나의 형식, 다양한 기기: 단일 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 Execution Provider(QAIRT 라이브러리를 번들로 포함하는 pip 설치 가능한 onnxruntime-qnn 패키지)를 사용하여 YOLO 모델을 로컬에서 QNN으로 컴파일합니다. 이 내보내기 도구는 모델을 ONNX로 변환하고, 보정 데이터(Hexagon NPU는 int8 가속기임)를 사용하여 INT8로 양자화한 다음, 컨텍스트 바이너리 캐싱이 활성화된 ONNX Runtime 세션을 초기화합니다. 이 과정에서 양자화된 그래프가 <model>_qnn.onnx에 내장된 QNN 컨텍스트 바이너리로 컴파일됩니다. Qualcomm 계정, 클라우드 업로드 또는 별도의 SDK 다운로드가 필요하지 않습니다.
Qualcomm 호스팅 Snapdragon 기기에서 모델을 컴파일하고 프로파일링하며 Qualcomm 계정이 필요한 클라우드 기반 Qualcomm AI Hub와 달리, Ultralytics QNN 내보내기는 단일 export(format="qnn") 호출로 사용자의 기기에서 전적으로 실행됩니다. 가입, 업로드 제한 또는 대기 시간 없이 동일한 QNN/QAIRT 런타임 대상(Snapdragon CPU, Adreno GPU 및 Hexagon NPU)을 얻을 수 있으며, 표준 YOLO 내보내기 워크플로우에 직접 통합됩니다.
내보내진 _qnn_model/ 디렉토리에는 컨텍스트 바이너리 ONNX와 클래스 이름, 이미지 크기 및 작업을 설명하는 metadata.yaml이 함께 번들로 제공됩니다.
QNN 모델의 주요 특징
- INT8 양자화: 모델은 최대 처리량과 최소 크기를 위해 Hexagon NPU의 기본 정밀도에 맞춰 ONNX Runtime QNN QDQ 흐름과 보정 데이터셋을 사용하여 INT8로 양자화됩니다. 모델 양자화에 대해 자세히 알아보십시오.
- 완전한 로컬 컴파일: 컨텍스트 바이너리는 호스트 머신에서 완전히 생성되므로 Qualcomm 계정, API 토큰 또는 클라우드 업로드가 필요하지 않습니다.
- 완벽한 Snapdragon 가속: 단일 통합 런타임을 통해 Hexagon NPU(HTP), Adreno GPU 또는 CPU에서 추론을 실행합니다.
- 폭넓은 기기 지원: 휴대폰, PC(Windows on Snapdragon), 자동차, XR 및 임베디드 제품에 탑재된 광범위한 Snapdragon 플랫폼을 타겟팅합니다.
- 사전 컴파일된 컨텍스트 바이너리: 컨텍스트 바이너리를 배포하면 온디바이스 그래프 컴파일이 최소화되어 대상 기기에서 모델 로드 지연 시간이 줄어듭니다.
- 독립형 출력: 내보내진 디렉토리에는 원활한 배포를 위해 컨텍스트 바이너리 ONNX와 메타데이터가 포함됩니다.
지원되는 작업
QNN 내보내기는 YOLO26 시맨틱 세그멘테이션을 포함하여 각 모델 제품군에서 사용할 수 있는 표준 작업 세트를 지원합니다.
| 작업 | 지원됨 |
|---|---|
| 객체 탐지 | ✅ |
| 인스턴스 세그멘테이션 | ✅ |
| 시맨틱 세그멘테이션 | ✅ |
| 자세 추정 | ✅ |
| OBB 탐지 | ✅ |
| 분류 | ✅ |
QNN으로 내보내기: YOLO 모델 변환
Export an Ultralytics YOLO model to QNN format for deployment on Snapdragon hardware. The context binary is finalized for a target Hexagon Tensor Processor (HTP) architecture, which you select with the name argument — the same argument used to target a chip in RKNN export.
지원되는 HTP 아키텍처
name을 통해 대상 아키텍처를 전달합니다(예: name="73"). 유효한 값은 다음과 같습니다:
name | Hexagon HTP | Snapdragon 플랫폼 |
|---|---|---|
68 | v68 | Snapdragon 865 |
69 | v69 | Snapdragon 888 / 8 Gen 1 |
73 | v73 | Snapdragon 8 Gen 2 (기본값) |
75 | v75 | Snapdragon 8 Gen 3 |
79 | v79 | Snapdragon 8 Elite |
QNN 내보내기는 onnxruntime-qnn 패키지를 사용합니다. 안정적인 휠(wheel) 파일이 **Windows (x64 및 ARM64)**와 **Linux ARM64 (aarch64)**용으로 게시됩니다. Linux x86-64 휠은 ONNX Runtime 나이틀리 피드에서 사용할 수 있습니다. macOS용 휠은 없으므로, macOS에서는 --use_qnn 옵션을 사용하여 소스에서 ONNX Runtime을 빌드하거나 지원되는 플랫폼에서 내보내기를 수행하십시오. QNN 컨텍스트 바이너리 생성은 x64 호스트에서 작동하며 내보내기 단계에 Snapdragon 기기가 필요하지 않습니다.
설치
필수 패키지를 설치하려면 다음을 실행하십시오:
# Install the required package for YOLO
pip install ultralyticsonnxruntime-qnn 패키지(ONNX Runtime QNN Execution Provider를 제공하고 QAIRT 라이브러리를 번들로 포함)는 첫 번째 내보내기 시 자동으로 설치됩니다. 설치 프로세스와 관련된 자세한 지침 및 모범 사례는 Ultralytics 설치 가이드를 확인하십시오. YOLO를 위한 필수 패키지를 설치하는 동안 어려움이 발생하면 일반 문제 가이드에서 해결책과 팁을 찾아보십시오.
사용법
QNN 형식은 내보내기, 예측 및 검증 모드를 지원합니다. 추론과 검증은 ONNX Runtime의 QNN Execution Provider(내보내기에 사용된 것과 동일한 onnxruntime-qnn 패키지)를 통해 Qualcomm Snapdragon 하드웨어에서 실행됩니다. 모델을 내보낸 다음, Snapdragon 기기에서 내보내진 모델을 로드하여 추론을 실행하거나 정확도를 검증하십시오.
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")내보내기 인수
| 인자 | 유형 | 기본값 | 설명 |
|---|---|---|---|
format | str | 'qnn' | 내보내진 모델의 대상 형식으로, Qualcomm QNN 런타임과의 호환성을 정의합니다. |
imgsz | int 또는 tuple | 640 | 모델 입력에 필요한 이미지 크기입니다. 정사각형 이미지의 경우 정수, 또는 (height, width) 튜플을 사용할 수 있습니다. |
batch | int | 1 | 생성된 QNN 컨텍스트 바이너리에 고정되는 내보내기 모델 배치 크기를 지정합니다. |
name | str | '73' | 대상 Hexagon HTP 아키텍처 버전: 68, 69, 73, 75 또는 79(Snapdragon 865, 888/8 Gen 1, 8 Gen 2, 8 Gen 3, 8 Elite). 컨텍스트 바이너리는 이 아키텍처에 맞춰 마무리됩니다. |
int8 | bool | True | INT8 양자화를 활성화합니다. QNN HTP 내보내기에 필요하며 지정하지 않으면 자동으로 True로 설정됩니다. |
data | str | 'coco8.yaml' | INT8 보정에 사용되는 데이터셋 구성 파일입니다. 보정 이미지 소스를 지정합니다. |
fraction | float | 1.0 | INT8 양자화에 사용할 보정 데이터셋의 비율입니다. |
device | str | None | 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 컨텍스트 바이너리를 내장하고 있으며, Snapdragon 기기에서 QNN Execution Provider가 포함된 ONNX Runtime에 의해 로드됩니다. metadata.yaml에는 Ultralytics 파이프라인에서 사용하는 클래스 이름, 이미지 크기 및 기타 정보가 포함되어 있습니다.
내보내진 YOLO QNN 모델 배포
QNN 모델은 Qualcomm Snapdragon 하드웨어에서 실행되므로 온디바이스 모델 배포가 간단합니다. onnxruntime-qnn이 설치된 Snapdragon 기기에서 Ultralytics API(yolo predict/yolo val, 위 사용법 참조)를 사용하여 내보내진 모델을 직접 실행하십시오. Ultralytics는 ONNX Runtime QNN Execution Provider를 통해 컨텍스트 바이너리를 로드하고 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 NCHWQNN 컨텍스트 바이너리는 사전 컴파일되어 있으므로, 세션이 기기에서 그래프를 다시 컴파일할 필요 없이 빠르게 로드됩니다.
권장 워크플로우
- Ultralytics Train Mode를 사용하여 모델을 **학습(Train)**하십시오.
- 내보내기: 지원되는 플랫폼(Windows 또는 Linux ARM64)에서
model.export(format="qnn")를 사용하여 QNN 형식으로 내보냅니다. - 배포: 내보내진
_qnn_model/디렉토리를 Snapdragon 기기에 배포합니다. - 실행: ONNX Runtime과 QNN Execution Provider를 사용하여 HTP, GPU 또는 CPU 백엔드를 선택하고 추론을 실행합니다.
실제 활용 사례
Qualcomm Snapdragon 하드웨어에서 실행되는 YOLO 모델은 광범위한 엣지 AI 애플리케이션에 적합합니다:
- 스마트폰: NPU 가속을 사용하여 카메라 및 사진 앱에서 실시간 객체 탐지 및 장면 이해를 제공합니다.
- Windows on Snapdragon: 클라우드로 오프로드할 필요 없이 Copilot+ PC에서 온디바이스 컴퓨터 비전을 제공합니다.
- 자동차: Snapdragon Digital Chassis 플랫폼에서 운전자 모니터링, 탑승자 탐지 및 ADAS 기능을 제공합니다.
- XR 및 웨어러블: AR/VR 헤드셋과 스마트 글래스를 위한 저전력, 저지연 인식 기능을 제공합니다.
- IoT 및 로봇공학: Snapdragon 기반 카메라, 드론 및 임베디드 시스템에서 효율적인 비전 추론을 제공합니다.
요약
이 가이드에서는 ONNX Runtime QNN Execution Provider를 사용하여 Ultralytics YOLO 모델을 Qualcomm QNN 형식으로 로컬에서 내보내는 방법을 배웠습니다. 내보내기 파이프라인은 모델을 ONNX로 변환한 다음, 호스트 머신에서 QNN 컨텍스트 바이너리로 컴파일합니다(Qualcomm 계정이나 클라우드 필요 없음). 결과적으로 QNN/QAIRT 런타임을 통해 Snapdragon CPU, Adreno GPU 및 Hexagon NPU 하드웨어에 최적화된 _qnn.onnx 파일이 생성됩니다.
Ultralytics YOLO와 Qualcomm의 온디바이스 AI 스택의 조합은 광범위한 Snapdragon 생태계 전반에서 고급 컴퓨터 비전 워크로드를 실행하기 위한 효과적인 솔루션을 제공합니다.
다른 온디바이스 및 모바일 배포 대상에 대해서는 관련 ONNX, CoreML, NCNN, TFLite, ExecuTorch, RKNN, Sony IMX500 및 TensorRT 내보내기 가이드를 참조하십시오. 배포하기 전에 형식을 비교하려면 벤치마크 모드를 사용하십시오. 전체 형식 및 옵션 목록은 내보내기 모드 문서와 통합 가이드 페이지를 방문하십시오.
FAQ
Ultralytics YOLO 모델을 QNN 형식으로 어떻게 내보내나요?
Python의 export() 메서드나 format="qnn" 옵션을 사용한 CLI를 통해 모델을 내보낼 수 있습니다. 내보내기는 먼저 ONNX 모델을 생성한 다음, ONNX Runtime QNN Execution Provider를 사용하여 로컬에서 QNN 컨텍스트 바이너리로 컴파일합니다. onnxruntime-qnn 패키지는 첫 번째 내보내기 시 자동으로 설치됩니다.
from ultralytics import YOLO
model = YOLO("yolo26n.pt")
model.export(format="qnn")Qualcomm 계정이나 클라우드 액세스가 필요한가요?
아니요. QNN 내보내기는 QAIRT 라이브러리가 포함된 onnxruntime-qnn 패키지를 사용하여 로컬 머신에서 전적으로 실행됩니다. Qualcomm 계정, API 토큰 또는 네트워크 액세스가 필요하지 않습니다.
Ultralytics QNN 내보내기와 Qualcomm AI Hub는 어떻게 다른가요?
Qualcomm AI Hub는 호스팅된 Snapdragon 기기에서 모델을 컴파일, 프로파일링 및 벤치마킹하기 위한 Qualcomm의 클라우드 서비스이며 Qualcomm 계정이 필요합니다. Ultralytics QNN 내보내기는 동일한 QNN/QAIRT 런타임(Snapdragon CPU, Adreno GPU 및 Hexagon NPU)을 타겟팅하지만, ONNX Runtime QNN Execution Provider를 사용하여 로컬에서 컨텍스트 바이너리를 컴파일합니다(계정, 업로드, 대기 시간 없음). 이는 표준 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 Execution Provider를 통해 컨텍스트 바이너리를 로드하고 Hexagon NPU에서 실행합니다. 내보내진 YOLO QNN 모델 배포를 참조하십시오.
QNN과 SNPE의 차이점은 무엇인가요?
QNN(QAIRT SDK의 일부인 Qualcomm AI Engine Direct)은 Qualcomm의 현재 추론 스택이며 구형 Snapdragon Neural Processing Engine(SNPE) SDK의 대체 권장 솔루션입니다. 새로운 배포는 QNN을 타겟팅해야 합니다.
QNN 모델을 yolo predict 및 yolo val로 실행할 수 있나요?
네, onnxruntime-qnn이 설치된 Qualcomm Snapdragon 기기에서 가능합니다. YOLO("yolo26n_qnn_model")은 QNN Execution Provider를 통해 컨텍스트 바이너리를 로드하고 다른 형식처럼 predict/val을 실행합니다. QNN 하드웨어가 없는 x86 호스트에서는 컨텍스트 바이너리가 Snapdragon NPU를 타겟팅하므로 모델을 실행할 수 없습니다.
QNN 내보내기의 출력은 무엇인가요?
The export creates a directory (e.g., yolo26n_qnn_model/) containing the context-binary ONNX (yolo26n_qnn.onnx) and a metadata.yaml with class names, image size, and task information.