YOLO Vision 2026:

Ultralytics YOLO 모델을 위한 Qualcomm QNN 내보내기#

Qualcomm Snapdragon 디바이스에서 컴퓨터 비전 모델을 배포하려면 Qualcomm AI Engine Direct (QNN) 런타임에 맞게 최적화된 모델 포맷이 필요합니다. Ultralytics YOLO 모델을 QNN 포맷으로 내보내면 수십억 대의 모바일 폰, 노트북, 자동차 시스템 및 IoT 디바이스에 탑재된 Snapdragon CPU, Adreno GPU, Hexagon NPU 하드웨어 전반에서 가속화된 온디바이스 추론을 실행할 수 있습니다. 본 가이드에서는 YOLO를 Qualcomm Snapdragon용 QNN으로 내보내고 Snapdragon 하드웨어에서 빠르고 저전력으로 추론을 수행할 수 있도록 배포하는 방법을 설명합니다.

공식 모바일 앱을 사용하여 지금 바로 Snapdragon NPU에서 YOLO를 실행하십시오.

공식 Ultralytics Flutter 플러그인은 7가지 모든 YOLO26 태스크에 걸쳐 실시간 카메라 추론 및 단일 이미지 예측을 위한 선택적 QNN 지원을 제공합니다. 플러그인 README에 설명된 대로 QNN 런타임을 활성화하고 ONNX Runtime 종속성을 추가하십시오. iOS 배포의 경우 Ultralytics YOLO iOS SDKCoreML 통합을 참조하십시오.

공식 모바일 입력 크기

imgsz=224에서 분류 모델을 내보내십시오. imgsz=640에서 디텍트, 세그먼트, 세멘틱, 뎁스, 포즈, OBB 모델을 내보내십시오. 이 224/640 표준은 공식 QNN, LiteRT 및 CoreML 모바일 에셋에서 공유됩니다. 7가지 모든 나노 태스크를 위한 즉시 실행 가능한 v73 및 v81 에셋은 yolo-flutter-app v0.6.6 릴리스에 게시되어 있습니다.

Qualcomm QNN이란 무엇인가요?#

Qualcomm QNN on-device inference

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 기기에서 완전히 실행되므로 클라우드 왕복이 없으며, 지연 시간이 낮게 유지되고 데이터가 기기를 벗어나지 않습니다.
  • 양자화 효율성: QNN 내보내기는 Hexagon NPU가 선호하는 정확도/성능 균형인 16비트 활성화 값과 함께 YOLO를 INT8 가중치로 양자화하여, 배터리 구동 하드웨어에서 모델 크기를 줄이고 초당 프레임 수(FPS)를 극대화합니다.
  • 하나의 형식, 다양한 기기: 단일 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로 변환하고, 캘리브레이션 데이터와 함께 16비트 활성화 값 및 INT8 가중치(Hexagon NPU에 권장되는 균형)로 양자화한 다음, 컨텍스트 바이너리 캐싱이 활성화된 ONNX Runtime 세션을 초기화합니다. 이를 통해 양자화된 그래프가 <model>_qnn.onnx에 임베디드된 QNN 컨텍스트 바이너리로 컴파일됩니다. Qualcomm 계정, 클라우드 업로드 또는 별도의 SDK 다운로드가 필요하지 않습니다.

Qualcomm 호스팅 Snapdragon 디바이스에서 모델을 컴파일 및 프로파일링하고 Qualcomm 계정이 필요한 클라우드 기반 Qualcomm AI Hub와 달리, Ultralytics QNN 내보내기는 단일 export(format="qnn", imgsz=640) 호출(분류의 경우 imgsz=224)을 통해 사용자의 로컬 머신에서 완전히 실행됩니다. 가입, 업로드 제한 또는 대기 시간 없이 동일한 QNN/QAIRT 런타임 타겟(Snapdragon CPU, Adreno GPU 및 Hexagon NPU)을 얻을 수 있으며, 표준 YOLO 내보내기 워크플로에 바로 통합됩니다.

내보내진 *_qnn.onnx 파일은 자체 완결형입니다. QNN 컨텍스트 바이너리와 클래스 이름, 이미지 크기, 태스크 등의 ONNX 메타데이터를 내부에 포함합니다.

QNN 모델의 주요 기능#

  • 양자화(Quantization): 모델은 ONNX Runtime QNN QDQ 플로우와 캘리브레이션 데이터셋을 사용하여 16비트 활성화 값과 INT8 가중치로 양자화되며, 이는 Hexagon NPU가 권장하는 정확도와 성능의 균형입니다. 모델 양자화에 대해 자세히 알아보세요.
  • 완전 로컬 컴파일: 컨텍스트 바이너리는 호스트 머신에서 전적으로 생성되므로 Qualcomm 계정, API 토큰 또는 클라우드 업로드가 필요 없습니다.
  • 전체 Snapdragon 가속: 단일 통합 런타임을 통해 Hexagon NPU(HTP), Adreno GPU 또는 CPU에서 추론을 실행합니다.
  • 광범위한 기기 도달 범위: 폰, PC(Windows on Snapdragon), 자동차, XR 및 임베디드 제품에 탑재되는 다양한 Snapdragon 플랫폼을 타겟팅합니다.
  • 사전 컴파일된 컨텍스트 바이너리: 컨텍스트 바이너리를 배포하면 온디바이스 그래프 컴파일이 최소화되어 대상 기기에서 모델 로드 지연 시간이 줄어듭니다.
  • 독립형 출력: 내보내진 ONNX 파일에는 간편한 배포를 위해 사전 컴파일된 QNN 컨텍스트 바이너리와 메타데이터가 포함됩니다.

측정된 성능#

Android 휴대폰#

하드웨어: 12GB LPDDR5X 메모리 및 Android 16 / API 36이 탑재된 Xiaomi 17. 3nm Snapdragon 8 Elite Gen 5(SM8850)는 8코어 Qualcomm Oryon CPU(최대 4.6GHz의 프라임 코어 2개 및 최대 3.62GHz의 성능 코어 6개), Adreno GPU 및 Hexagon NPU(HTP v81)를 탑재하고 있습니다.

모델작업크기
(픽셀)
CPU
w8a32 LiteRT
(ms)
GPU
w8a32 LiteRT
(ms)
NPU
QNN W8A16
(ms)
YOLO26n탐지(Detect)64052.2
1.8 / 48.1 / 2.4
15.8
2.3 / 8.9 / 4.6
10.7
1.8 / 6.7 / 2.2
YOLO26n-seg세그멘테이션(Segment)64073.4
1.8 / 65.6 / 6.0
33.2
1.8 / 23.8 / 7.6
17.4
1.8 / 9.9 / 5.7
YOLO26n-sem의미론적(Semantic)64061.2
1.8 / 51.1 / 8.3
34.2
1.8 / 24.0 / 8.3
11.5
1.8 / 7.1 / 2.6
YOLO26n-depthDepth640124.4
1.9 / 115.1 / 7.4
23.0
1.8 / 13.5 / 7.7
35.2
1.8 / 26.1 / 7.3
YOLO26n-cls분류(Classify)2244.4
0.4 / 4.0 / 0.0
3.1
0.8 / 2.1 / 0.2
1.2
0.6 / 0.6 / 0.0
YOLO26n-pose포즈(Pose)64057.4
1.8 / 53.8 / 1.8
16.6
2.7 / 10.1 / 3.9
10.9
1.8 / 7.0 / 2.0
YOLO26n-obbOBB(방향성 경계 상자)64050.3
1.8 / 47.2 / 1.4
11.7
1.8 / 7.8 / 2.0
8.6
1.8 / 5.7 / 1.1
  • 속도 값은 단일 이미지 버스트 지연 시간으로, bus.jpg에서 3회의 웜업 실행 후 15회 실행의 평균값입니다. 이는 Flutter 플러그인의 0.6.10 온디바이스 벤치마크 하니스와 표준화된 v0.6.6 에셋을 사용하여 측정되었습니다. 백엔드 순서는 하나의 순차적 스위프에서 태스크 간에 교체되었습니다. 기본 로그에 따르면 모든 CPU 행은 LiteRT CPU/XNNPACK을 사용했고, 모든 GPU 행은 전체 그래프를 LiteRT OpenCL(LITERT_CL)에 위임했으며, 모든 NPU 행은 QNN Hexagon HTP 백엔드를 사용했습니다.
  • 자세한 벤치마크 기록은 Flutter 성능 문서에 있습니다.
  • LiteRT 통합에서 다른 Android 디바이스를 비교하고, CoreML 통합에서 Apple 디바이스를 비교해 보십시오.

Windows on Snapdragon 노트북#

이 이력 스위프는 표준화 이전의 v73 QNN 바이너리를 사용했으며; semantic 및 OBB는 1024px 입력을 사용했습니다. 이 테스트는 32GB 메모리와 Windows 11이 탑재된 Lenovo 노트북에서 실행되었습니다. Snapdragon X Elite(X1E78100)는 12코어 Qualcomm Oryon CPU, Adreno GPU 및 Hexagon NPU(HTP v73)를 탑재하고 있으며, 정확한 Lenovo 모델명은 기록되지 않았습니다. 이 Windows-on-Snapdragon 비교는 대부분의 데스크톱 개발자가 시작하는 기본 PyTorch FP32 CPU 베이스라인을 ONNX Runtime QNN Hexagon HTP 경로와 비교합니다. 각 셀은 하단에 보고된 전처리 / 추론 / 후처리 타이밍과 함께 전체 model.predict() 소요 시간을 보여주며; 총 시간에는 해당 세 단계 외의 프레임워크 오버헤드가 포함될 수 있습니다. CPU 수치는 PyTorch FP32(torch==2.10.0+cpu)이고 NPU 수치는 ONNX Runtime QNN(onnxruntime-qnn==2.2.0, INT8 가중치 / 16비트 활성화)입니다.

모델작업크기
(픽셀)
CPU
PT FP32
(ms)
NPU Hexagon
QNN W8A16
(ms)
YOLO26n탐지(Detect)64091.4
4.3 / 75.2 / 0.1
27.2
4.9 / 19.4 / 0.9
YOLO26n-seg세그멘테이션(Segment)640138.8
4.5 / 127.1 / 2.8
34.3
5.0 / 24.0 / 5.1
YOLO26n-sem의미론적(Semantic)1024295.8
9.1 / 189.2 / 94.8
133.0
8.8 / 37.4 / 83.9
YOLO26n-cls분류(Classify)22415.4
3.0 / 9.8 / 0.0
11.7
2.7 / 5.5 / 0.0
YOLO26n-pose포즈(Pose)640109.6
4.6 / 102.9 / 0.2
28.9
5.3 / 23.3 / 0.6
YOLO26n-obbOBB(방향성 경계 상자)1024267.8
8.1 / 254.6 / 0.1
64.8
8.9 / 54.7 / 0.6
  • 속도(Speed) 값은 **단일 이미지 버스트 지연 시간(single-image burst latencies)**으로, 발열이 없는 상태의 디바이스(ultralytics==8.4.67, Python 3.12.10)에서 전체 model.predict() 호출 주위로 time.perf_counter()을 사용하여 측정된 10회의 웜업 실행 후 100회의 실행에 대한 평균입니다(bus.jpg).
  • Hexagon NPU는 640-1024 px 작업 전반에서 PyTorch CPU 기준 대비 약 2-4배 더 빠르며 (검출의 경우 약 3.4배), 고정된 전처리 오버헤드가 작은 워크로드를 지배하는 224 px 분류기에서는 약 1.3배 수준으로 좁혀집니다.

지원되는 작업#

Qualcomm QNN 내보내기는 7가지 Ultralytics 태스크를 모두 지원합니다. 시맨틱 세그멘테이션과 깊이 추정은 해당 헤드가 포함된 유일한 패밀리인 YOLO26에서만 사용할 수 있습니다.

작업YOLOv8YOLO11YOLO26
Detect
세그먼트
시맨틱
깊이
분류
Pose
OBB

QNN으로 내보내기: YOLO 모델 변환#

Qualcomm 하드웨어에 배포하기 위해 Ultralytics YOLO 모델을 QNN 형식으로 내보냅니다. 컨텍스트 바이너리는 대상 Hexagon Tensor Processor (HTP) 아키텍처 또는 지원되는 SoC용으로 최종 확정되며, 이는 RKNN export에서 칩을 타겟팅하는 데 사용되는 것과 동일한 name 인수를 통해 선택합니다.

지원되는 HTP 타겟#

name을 통해 타겟 아키텍처나 SoC를 전달하십시오(예: name="73" 또는 name="iq-8275"). 지원 여부는 HTP 타겟에 의해 결정되므로, 아래의 Snapdragon 행들은 모든 SoC의 포괄적인 목록이라기보다는 대표적인 플랫폼들입니다. Dragonwing 디바이스는 명시적으로 나열되어 있습니다.

상태nameHexagon HTP예시 디바이스 또는 플랫폼
✅ 지원됨68v68Snapdragon 888
✅ 지원됨69v69Snapdragon 8 Gen 1 / 8+ Gen 1
✅ 지원됨73v73Snapdragon 8 Gen 2, X Elite (기본값)
✅ 지원됨75v75Snapdragon 8 Gen 3
✅ 지원됨79v79Snapdragon 8 Elite
✅ 지원됨81v81Snapdragon 8 Elite Gen 5
✅ 지원됨iq-8275 또는 qcs8275v75Dragonwing IQ-8275 / QCS8275 (QNN SoC 모델 82)
❌ 지원되지 않음v66Dragonwing IQ-615 / QCS615

Dragonwing IQ-615는 ONNX Runtime이 v66 DSP를 오프라인 HTP 타겟으로 노출하지 않기 때문에 Ultralytics QNN 컨텍스트 바이너리 내보내기를 사용할 수 없습니다. 표준 ONNX 내보내기는 보드 BSP가 지원하는 CPU 또는 GPU 실행 공급자와 함께 별도로 계속 통합할 수 있습니다.

Dragonwing IQ-8275용 내보내기
from ultralytics import YOLO

model = YOLO("best.pt")
model.export(format="qnn", name="iq-8275", imgsz=640)
플랫폼 지원

QNN 내보내기는 onnxruntime-qnn 패키지를 사용합니다. 버전 2.4.0 이상에서는 Python 3.11 이상을 실행하는 **Windows (x64 및 ARM64)**와 **Linux (x86-64 및 ARM64)**용 사전 빌드된 휠(wheel)을 제공하며, macOS는 지원되는 QNN 호스트가 아닙니다. QNN 컨텍스트 바이너리 생성은 x64 호스트에서 실행되며 내보내기 단계를 위해 Snapdragon 디바이스가 필요하지 않습니다.

설치#

필수 패키지를 설치하려면 다음을 실행하십시오:

설치
# Install the required package for YOLO
pip install ultralytics

onnxruntime-qnn 패키지(ONNX Runtime QNN Execution Provider를 제공하고 QAIRT 라이브러리를 번들로 포함함)는 첫 내보내기 시 자동으로 설치됩니다. 설치 프로세스와 관련된 자세한 지침과 모범 사례를 보려면 Ultralytics 설치 가이드를 확인하십시오. YOLO에 필요한 패키지를 설치하는 동안 문제가 발생하면 일반적인 문제 가이드에서 해결 방법과 팁을 참고하십시오.

사용법#

QNN 포맷은 Export, Predict, Validate 모드를 지원합니다. 추론과 검증은 ONNX Runtime의 QNN Execution Provider(내보내기에 사용된 것과 동일한 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) for the default v73 HTP target
model.export(format="qnn", name="73", imgsz=640)  # use imgsz=224 for classification
추론(Predict)
from ultralytics import YOLO

# Load the exported QNN model (on a Snapdragon device with onnxruntime-qnn)
model = YOLO("yolo26n_qnn.onnx")

# 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.onnx")

# Validate accuracy on the COCO8 dataset
metrics = model.val(data="coco8.yaml")

내보내기 인수#

인수유형기본값설명
formatstr'qnn'내보내진 모델의 대상 형식으로, Qualcomm QNN 런타임과의 호환성을 정의합니다.
imgszint 또는 tuple640모델 입력에 원하는 이미지 크기입니다. 정사각형 이미지의 경우 정수일 수 있으며, 튜플 (height, width)일 수도 있습니다.
batchint1생성된 QNN 컨텍스트 바이너리에 포함될 내보내기 모델 배치 크기를 지정합니다.
namestr'73'타겟 Hexagon HTP 아키텍처(68, 69, 73, 75, 79, 또는 81) 또는 지원되는 SoC(iq-8275 또는 qcs8275). 컨텍스트 바이너리는 이 타겟에 맞춰 최종 생성됩니다.
quantizeint 또는 str'w8a16'/auto양자화 정밀도. QNN HTP 내보내기는 16비트 활성화 값이 포함된 INT8 가중치('w8a16')로 양자화되며 지정하지 않으면 자동 활성화됩니다. 더 이상 사용되지 않는 half/int8 플래그를 대체합니다.
simplifyboolTrueonnxslim(으)로 중간 ONNX 그래프를 단순화합니다.
opsetintNone중간 ONNX 그래프에 대한 ONNX opset 버전을 지정합니다. 설정하지 않으면 지원되는 최신 버전을 사용합니다.
datastrNoneINT8 캘리브레이션에 사용되는 데이터셋 YAML입니다. 분류의 경우 대신 데이터셋 디렉터리나 내장 데이터셋 이름을 사용합니다. 생략하면 Ultralytics는 모델 태스크에 맞는 기본 캘리브레이션 데이터셋을 선택합니다.
fractionfloat1.0INT8 양자화에 사용할 보정 데이터셋의 비율입니다.
devicestrNoneONNX 내보내기 단계를 위한 디바이스를 지정합니다: GPU(device=0) 또는 CPU(device=cpu).
정밀도

QNN 내보내기는 data의 캘리브레이션 이미지를 사용하는 ONNX Runtime QDQ quantization 플로우를 통해 모델을 16비트 활성화 값 및 INT8 가중치(Hexagon NPU에 권장되는 정확도/성능 균형)로 양자화합니다. quantize='w8a16'가 자동으로 적용됩니다.

내보내기 프로세스에 대한 자세한 내용은 내보내기에 관한 Ultralytics 문서 페이지를 방문하세요.

출력 구조#

성공적으로 내보낸 후 독립형 ONNX 파일이 생성됩니다:

yolo26n_qnn.onnx # ONNX wrapping the precompiled QNN context binary and metadata

yolo26n_qnn.onnx 파일은 QNN 컨텍스트 바이너리를 내부에 포함하며, Snapdragon 디바이스에서 QNN Execution Provider와 함께 ONNX Runtime에 의해 로드됩니다. 또한 ONNX metadata_props 내에 클래스 이름, 이미지 크기, 태스크 등의 모델 메타데이터를 담고 있습니다.

내보내진 YOLO QNN 모델 배포#

QNN 모델은 지원되는 Qualcomm 하드웨어에서 실행되므로 온디바이스 모델 배포가 간단해집니다. onnxruntime-qnn이 설치된 호환 디바이스에서 Ultralytics API(yolo predict/yolo val, 위의 사용법 참조)를 사용하여 내보낸 모델을 직접 실행하십시오. Ultralytics는 ONNX Runtime QNN Execution Provider를 통해 HTP 컨텍스트 바이너리를 로드합니다.

커스텀 파이프라인의 경우, ONNX Runtime을 사용하여 컨텍스트 바이너리 ONNX를 직접 로드할 수도 있습니다. 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.onnx", sess_options=options)
input_info = session.get_inputs()[0]
outputs = session.run(None, {input_info.name: input_tensor})  # input_tensor: float32 NHWC

QNN 컨텍스트 바이너리는 미리 컴파일되어 있으므로, 기기에서 그래프를 다시 컴파일할 필요 없이 세션이 빠르게 로드됩니다.

Linux 및 Yocto BSP 요구사항#

타겟 보드는 상호 호환되는 Qualcomm 런타임과 BSP를 제공해야 합니다. HTP 추론을 위해 여기에는 ONNX Runtime QNN Execution Provider, libQnnSystem.so, libQnnHtp.so, IQ-8275용 v75 HTP 스텁 및 스켈레톤 라이브러리, libcdsprpc.so와 같은 FastRPC 사용자 공간 지원, DSP 펌웨어, 그리고 해당 FastRPC/커널 드라이버가 포함됩니다. 스켈레톤 라이브러리는 BSP의 DSP 라이브러리 경로를 통해 검색할 수 있어야 합니다.

이러한 타겟 측 컴포넌트는 보드 벤더의 QAIRT/QNN 지원 BSP에서 제공되며 내보낸 모델에 포함되지 않습니다. 대신 GPU 실행에는 libQnnGpu.so 및 일치하는 Adreno 사용자 공간 드라이버 스택이 필요합니다. Ultralytics format=qnn 출력은 HTP 전용 컨텍스트 바이너리이므로, GPU 또는 CPU 배포는 사전 컴파일된 *_qnn.onnx 파일 대신 표준 ONNX 내보내기에서 시작해야 합니다.

권장 워크플로우#

  1. Ultralytics 학습 모드를 사용하여 모델 학습
  2. 지원되는 플랫폼에서 model.export(format="qnn", name="iq-8275", imgsz=640)을 사용하여 QNN 포맷으로 내보내기(분류의 경우 imgsz=224 사용)
  3. 내보낸 *_qnn.onnx 파일을 Qualcomm 디바이스에 배포
  4. HTP 백엔드를 사용하여 ONNX Runtime 및 QNN Execution Provider로 추론을 실행합니다.

실제 활용 사례#

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, LiteRT, ExecuTorch, RKNN, Sony IMX500, TensorRT 내보내기 가이드를 참조하십시오. 배포하기 전에 포맷을 비교하려면 Benchmark 모드를 사용하십시오. 전체 포맷 및 옵션 목록을 보려면 Export 모드 문서와 통합 가이드 페이지를 방문하십시오.

FAQ#

  • export(format="qnn", imgsz=640)(분류의 경우 imgsz=224) 또는 이에 상응하는 CLI 인수를 사용하여 모델을 내보낼 수 있습니다. 내보내기는 먼저 ONNX 모델을 생성한 다음, ONNX Runtime QNN Execution Provider를 사용하여 로컬에서 QNN 컨텍스트 바이너리로 컴파일합니다. onnxruntime-qnn 패키지는 첫 내보내기 시 자동으로 설치됩니다.

    예시
    from ultralytics import YOLO
    
    model = YOLO("yolo26n.pt")
    model.export(format="qnn", imgsz=640)  # use imgsz=224 for classification
  • 아니요. QNN 내보내기는 QAIRT 라이브러리를 번들로 포함하는 onnxruntime-qnn 패키지를 사용하여 로컬 머신에서 완전히 실행됩니다. Qualcomm 계정, API 토큰 또는 네트워크 액세스가 필요하지 않습니다.

  • 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 2.4.0 이상에서는 Python 3.11 이상을 실행하는 **Windows (x64 및 ARM64)**와 **Linux (x86-64 및 ARM64)**용 사전 빌드된 휠(wheel)을 제공하며, macOS는 지원되는 QNN 호스트가 아닙니다. 컨텍스트 바이너리 생성은 x64 호스트에서 실행되며 물리적인 Snapdragon 디바이스가 필요하지 않습니다.

  • model.export(format="qnn", imgsz=640)(분류의 경우 imgsz=224)을 사용하여 내보내고, 결과 yolo26n_qnn.onnx 파일을 Snapdragon 디바이스에 복사한 다음, yolo predict model=yolo26n_qnn.onnx source=image.jpg(또는 yolo val)을 실행하십시오. Ultralytics는 ONNX Runtime QNN Execution Provider를 통해 컨텍스트 바이너리를 로드하고 Hexagon NPU에서 실행합니다 — 내보낸 YOLO QNN 모델 배포하기를 참조하십시오.

  • QNN(Qualcomm AI Engine Direct, QAIRT SDK의 일부)은 Qualcomm의 현재 추론 스택이며 구형 Snapdragon Neural Processing Engine(SNPE) SDK의 권장 대체 제품입니다. 새로운 배포 작업은 QNN을 타겟팅해야 합니다.

  • 예, onnxruntime-qnn이 설치된 Qualcomm Snapdragon 디바이스에서 가능합니다. YOLO("yolo26n_qnn.onnx")은 QNN Execution Provider를 통해 컨텍스트 바이너리를 로드하고 다른 포맷과 마찬가지로 predict/val을 실행합니다. 컨텍스트 바이너리가 Snapdragon NPU를 타겟팅하므로, QNN 하드웨어가 없는 x86 호스트에서는 모델을 실행할 수 없습니다.

  • 내보내기는 클래스 이름, 이미지 크기, 태스크 및 기타 모델 메타데이터가 ONNX metadata_props에 임베디드된 독립형 컨텍스트 바이너리 ONNX 파일(예: yolo26n_qnn.onnx)을 생성합니다.

댓글