Ultralytics YOLO27:
Get Started

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 하드웨어에서 빠르고 저전력으로 추론하도록 배포하는 방법을 설명합니다.

공식 모바일 앱으로 지금 Snapdragon NPU에서 YOLO를 실행하세요

공식 Ultralytics Flutter 플러그인은 YOLO26의 7가지 작업 모두에서 실시간 카메라 추론과 단일 이미지 예측을 위한 옵트인 QNN 지원을 제공합니다. 플러그인 README의 설명에 따라 QNN 런타임을 활성화하고 ONNX Runtime 종속성을 추가하세요. iOS 배포는 Ultralytics YOLO iOS SDK와 CoreML 통합을 참조하세요.

공식 모바일 입력 크기

분류 모델은 imgsz=224에서 내보내세요. 감지, 세그먼트, 시맨틱, 깊이, 포즈, OBB 모델은 imgsz=640에서 내보내세요. 이 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 런타임(QAIRT) SDK의 일부로 배포됩니다. Qualcomm의 Snapdragon 프로세서용 저수준 추론 스택입니다. Snapdragon CPU, Adreno GPU, 최신 Snapdragon SoC 내부의 전용 신경망 처리 장치(NPU)를 대상으로 하는 백엔드별 라이브러리와 통합 API를 제공합니다. QNN을 사용하면 개발자가 Snapdragon AI 가속기에 풀스택으로 액세스할 수 있으며, 구형 Snapdragon 신경망 처리 엔진(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 내보내기는 YOLO를 16비트 활성화와 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 Execution Provider(QAIRT 라이브러리가 포함된 pip 설치 가능 패키지 onnxruntime-qnn)를 사용해 QNN으로 YOLO 모델을 로컬에서 컴파일합니다. 내보내기 도구는 모델을 ONNX로 변환하고, 보정 데이터를 사용해 16비트 활성화와 INT8 가중치(Hexagon NPU에 권장되는 균형)로 양자화한 다음, 컨텍스트 바이너리 캐싱이 활성화된 ONNX Runtime 세션을 초기화합니다. 이 과정에서 양자화된 그래프가 <model>_qnn.onnx에 포함된 QNN 컨텍스트 바이너리로 컴파일됩니다. Qualcomm 계정, 클라우드 업로드, 별도의 SDK 다운로드가 필요하지 않습니다.

Qualcomm 계정이 필요하며 Qualcomm 호스팅 Snapdragon 디바이스에서 모델을 컴파일하고 프로파일링하는 클라우드 기반 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 모델의 주요 기능#

  • 양자화: Hexagon NPU에 권장되는 정확도와 성능의 균형을 맞추기 위해 ONNX Runtime QNN QDQ 흐름과 보정 데이터셋을 사용하여 모델을 16비트 활성화와 INT8 가중치로 양자화합니다. 모델 양자화에 대해 자세히 알아보세요.
  • 완전한 로컬 컴파일: 컨텍스트 바이너리는 호스트 머신에서 전적으로 생성되므로 Qualcomm 계정, API 토큰, 클라우드 업로드가 필요하지 않습니다.
  • Snapdragon 전체 가속: 통합 런타임 하나로 Hexagon NPU(HTP), Adreno GPU 또는 CPU에서 추론을 실행할 수 있습니다.
  • 폭넓은 디바이스 지원: 휴대폰, PC(Snapdragon 탑재 Windows), 자동차, 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의 Prime 코어 2개와 최대 3.62GHz의 Performance 코어 6개), Adreno GPU, Hexagon NPU(HTP v81)가 탑재되어 있습니다.

모델작업크기
(픽셀)
CPU
w8a32 LiteRT
(ms)
GPU
w8a32 LiteRT
(ms)
NPU
QNN W8A16
(ms)
YOLO26n감지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분할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의미론적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-depth깊이640124.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분류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포즈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-obbOBB64050.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 성능 문서에 있습니다.
  • 다른 Android 디바이스는 LiteRT 통합에서, Apple 디바이스는 CoreML 통합에서 비교해 보세요.

Snapdragon 탑재 Windows 노트북#

이 과거 측정에서는 표준화 이전 v73 QNN 바이너리를 사용했으며, 시맨틱 및 OBB에는 1024px 입력을 사용했습니다. 32GB 메모리와 Windows 11을 탑재한 Lenovo 노트북에서 실행했습니다. 해당 노트북의 Snapdragon X Elite (X1E78100)에는 12코어 Qualcomm Oryon CPU, Adreno GPU, Hexagon NPU(HTP v73)가 탑재되어 있습니다. 정확한 Lenovo 모델은 기록되지 않았습니다. 이 Snapdragon 탑재 Windows 비교에서는 데스크톱 개발자가 주로 사용하는 네이티브 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감지64091.4
4.3 / 75.2 / 0.1
27.2
4.9 / 19.4 / 0.9
YOLO26n-seg분할640138.8
4.5 / 127.1 / 2.8
34.3
5.0 / 24.0 / 5.1
YOLO26n-sem의미론적1024295.8
9.1 / 189.2 / 94.8
133.0
8.8 / 37.4 / 83.9
YOLO26n-cls분류22415.4
3.0 / 9.8 / 0.0
11.7
2.7 / 5.5 / 0.0
YOLO26n-pose포즈640109.6
4.6 / 102.9 / 0.2
28.9
5.3 / 23.3 / 0.6
YOLO26n-obbOBB1024267.8
8.1 / 254.6 / 0.1
64.8
8.9 / 54.7 / 0.6
  • 속도 값은 단일 이미지 버스트 지연 시간입니다. bus.jpg에서 워밍업 10회 후 100회 실행의 평균이며, 열적으로 안정된 기기에서 전체 model.predict() 호출 전후를 time.perf_counter()로 측정했습니다(ultralytics==8.4.67, Python 3.12.10).
  • Hexagon NPU는 640-1024 px 작업 전반에서 PyTorch CPU 기준선보다 약 2-4배 빠르게 실행됩니다(객체 감지에서는 ~3.4배). 입력 크기가 224 px인 분류기에서는 작은 작업량보다 고정 전처리 오버헤드의 영향이 커지면서 속도 차이가 ~1.3배로 줄어듭니다.

지원 작업#

Qualcomm QNN 내보내기는 Ultralytics의 7가지 작업을 모두 지원합니다. 의미론적 세그멘테이션과 깊이 추정은 해당 헤드를 탑재한 유일한 제품군인 YOLO26에서만 사용할 수 있습니다.

작업YOLOv8YOLO11YOLO26
탐지✅✅✅
세그멘테이션✅✅✅
시맨틱❌❌✅
깊이❌❌✅
분류✅✅✅
포즈✅✅✅
OBB✅✅✅

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

Qualcomm 하드웨어에 배포할 수 있도록 Ultralytics YOLO 모델을 QNN 형식으로 내보냅니다. 컨텍스트 바이너리는 대상 Hexagon Tensor Processor (HTP) 아키텍처 또는 지원되는 SoC에 맞게 최종화됩니다. name 인수로 대상을 선택하며, 이 인수는 RKNN 내보내기에서 칩을 지정할 때 사용하는 인수와 동일합니다.

지원되는 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

ONNX Runtime이 v66 DSP를 오프라인 HTP 대상으로 제공하지 않으므로 Dragonwing IQ-615에서는 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)용 사전 빌드 휠을 제공합니다. macOS는 지원되는 QNN 호스트가 아닙니다. QNN 컨텍스트 바이너리 생성은 x64 호스트에서 실행되며, 내보내기 단계에 Snapdragon 기기가 필요하지 않습니다.

설치#

필수 패키지를 설치하려면 다음을 실행하세요:

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

ONNX Runtime QNN Execution Provider를 제공하고 QAIRT 라이브러리를 포함하는 onnxruntime-qnn 패키지는 첫 내보내기 시 자동으로 설치됩니다. 설치 절차와 모범 사례에 대한 자세한 내용은 Ultralytics 설치 가이드를 참조하세요. YOLO에 필요한 패키지를 설치하는 중 문제가 발생하면 해결 방법과 팁은 일반적인 문제 가이드를 확인하세요.

사용법#

QNN 형식은 내보내기, 예측, 검증 모드를 지원합니다. 추론과 검증은 ONNX Runtime의 QNN Execution Provider(내보내기에 사용하는 onnxruntime-qnn 패키지와 동일)를 통해 Qualcomm Snapdragon 하드웨어에서 실행됩니다. 모델을 내보낸 다음 Snapdragon 기기에서 내보낸 모델을 로드하여 추론을 실행하거나 정확도를 검증하세요.

내보내기
from ultralytics import YOLO

# YOLO26 모델 로드
model = YOLO("yolo26n.pt")

# 기본 v73 HTP 대상을 위해 Qualcomm QNN 형식으로 내보내기(INT8, 자동 적용)
model.export(format="qnn", name="73", imgsz=640)  # 분류에는 imgsz=224 사용
예측
from ultralytics import YOLO

# 내보낸 QNN 모델 로드(onnxruntime-qnn이 설치된 Snapdragon 기기에서)
model = YOLO("yolo26n_qnn.onnx")

# 추론 실행
results = model("https://ultralytics.com/images/bus.jpg")
검증
from ultralytics import YOLO

# 내보낸 QNN 모델 로드(onnxruntime-qnn이 설치된 Snapdragon 기기에서)
model = YOLO("yolo26n_qnn.onnx")

# COCO8 데이터셋에서 정확도 검증
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비트 활성화('w8a16')와 INT8 가중치로 양자화되며, 지정하지 않으면 자동으로 활성화됩니다. 더 이상 사용되지 않는 half/int8 플래그를 대체합니다.
simplifyboolTrueonnxslim을 사용하여 중간 ONNX 그래프를 간소화합니다.
opsetintNone중간 ONNX 그래프의 ONNX opset 버전을 지정합니다. 설정하지 않으면 지원되는 최신 버전을 사용합니다.
datastrNoneINT8 보정에 사용하는 데이터셋 YAML입니다. 분류의 경우 데이터셋 디렉터리 또는 기본 제공 데이터셋 이름을 입력합니다. 생략하면 Ultralytics가 모델 작업에 맞는 기본 보정 데이터셋을 선택합니다.
fractionfloat, int 또는 list1.0비율, 이미지 수 또는 [train, val, test] 비율/개수로 지정하는 보정 하위 집합입니다. 항목이 두 개인 목록에서는 test이 전체로 설정되고, 0는 건너뜁니다.
devicestrNoneONNX 내보내기 단계에 사용할 기기를 지정합니다. GPU(device=0) 또는 CPU(device=cpu)입니다.
정밀도

QNN 내보내기는 Hexagon NPU에 권장되는 정확도와 성능의 균형을 위해 모델을 16비트 활성화 및 INT8 가중치로 양자화합니다. 이때 data의 보정 이미지를 사용하는 ONNX Runtime QDQ 양자화 흐름을 따릅니다. 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를 ONNX Runtime으로 직접 로드할 수도 있습니다. onnxruntime-qnn은 플러그인 실행 프로바이더이므로 런타임에 등록하세요.

import onnxruntime as ort
import onnxruntime_qnn as qnn_ep

# Snapdragon 기기에서 QNN 플러그인 EP를 등록하고 해당 기기를 선택합니다.
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 Train Mode를 사용해 모델을 학습합니다.
  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 가속을 사용하여 카메라 및 사진 앱에서 실시간 객체 탐지와 장면 이해를 수행합니다.
  • Snapdragon 기반 Windows: 클라우드로 작업을 오프로드하지 않고 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 내보내기 가이드를 참조하세요. 배포 전에 형식을 비교하려면 벤치마크 모드를 사용하세요. 전체 형식과 옵션 목록은 내보내기 모드 문서 및 통합 가이드 페이지를 참조하세요.

자주 묻는 질문#

  • 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)  # 분류에는 imgsz=224 사용
  • 아니요. QAIRT 라이브러리가 포함된 onnxruntime-qnn 패키지를 사용하므로 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)용 사전 빌드 휠을 제공합니다. 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를 실행합니다. QNN 하드웨어가 없는 x86 호스트에서는 컨텍스트 바이너리가 Snapdragon NPU를 대상으로 하므로 모델을 실행할 수 없습니다.

  • 내보내기를 수행하면 클래스 이름, 이미지 크기, 작업 및 기타 모델 메타데이터가 ONNX metadata_props에 포함된 자체 포함형 컨텍스트 바이너리 ONNX 파일(예: yolo26n_qnn.onnx)이 생성됩니다.

댓글