Ultralytics YOLO Modelleri için Qualcomm QNN Dışa Aktarımı#
Bilgisayarlı görü modellerini Qualcomm Snapdragon cihazlarında dağıtmak, Qualcomm AI Engine Direct (QNN) çalışma zamanına göre optimize edilmiş bir model biçimi gerektirir. Ultralytics YOLO modellerini QNN biçimine dışa aktarmak, milyarlarca cep telefonu, dizüstü bilgisayar, otomotiv sistemi ve IoT cihazında bulunan Snapdragon CPU, Adreno GPU ve Hexagon NPU donanımlarında hızlandırılmış, cihaz üzerinde çıkarım çalıştırmanı sağlar. Bu kılavuzda YOLO'nun Qualcomm QNN'ye nasıl dışa aktarılacağı ve Snapdragon donanımında hızlı, düşük güç tüketimli çıkarım için nasıl dağıtılacağı açıklanır.
Resmî Ultralytics Flutter eklentisi, yedi YOLO26 görevinin tamamında gerçek zamanlı kamera çıkarımı ve tek görüntü tahmini için isteğe bağlı QNN desteği sunar. Eklentinin README dosyasında açıklandığı şekilde QNN çalışma zamanını etkinleştir ve ONNX Runtime bağımlılığını ekle. iOS dağıtımı için Ultralytics YOLO iOS SDK ve CoreML entegrasyonu sayfalarına bak.
Sınıflandırma modellerini imgsz=224 konumunda dışa aktar. Algılama, segmentasyon, anlamsal, derinlik, poz ve OBB modellerini
imgsz=640 konumunda dışa aktar. Bu 224/640 standardı, resmî QNN, LiteRT ve CoreML mobil varlıklarının tümünde ortaktır.
Yedi nano görevin tamamı için çalıştırmaya hazır v73 ve v81 varlıkları
yolo-flutter-app v0.6.6 sürümünde yayımlanmıştır.
Qualcomm QNN nedir?#
Yaygın olarak QNN olarak adlandırılan ve Qualcomm Yapay Zekâ Çalışma Zamanı (QAIRT) SDK'sının bir parçası olarak dağıtılan Qualcomm AI Engine Direct, Snapdragon işlemcileri için Qualcomm'un düşük seviyeli çıkarım yığınıdır. Snapdragon CPU, Adreno GPU ve modern Snapdragon SoC'lerinin içindeki özel sinir ağı işlem birimi (NPU) olan Hexagon Tensor Processor (HTP) donanımını hedefleyen arka uca özgü kitaplıklarla birleşik bir API sağlar. QNN, geliştiricilere bu Snapdragon yapay zekâ hızlandırıcılarına tam yığın erişimi sunar ve eski Snapdragon Neural Processing Engine (SNPE) SDK'sının modern halefidir. Snapdragon 8 Gen 2, 8 Gen 3 ve 8 Elite mobil platformlarında, Snapdragon X dizüstü bilgisayarlarında, otomotiv ve XR ürünlerinde cihaz üzerinde yapay zekâyı destekler.
Neden Qualcomm QNN'ye Dışa Aktarım Yapılmalı?#
Snapdragon, dünyada en yaygın kullanılan mobil bilgi işlem platformudur. Ultralytics YOLO'yu Qualcomm QNN biçimine dışa aktarmak, bu cihazlardaki özel yapay zekâ donanımının kilidini açar:
- Hexagon NPU hızlandırması: YOLO'yu Hexagon Tensor Processor üzerinde çalıştırmak, CPU çıkarımına kıyasla çok daha yüksek iş hacmi ve daha düşük güç tüketimi sağlar; bu da gerçek zamanlı çıkarım ve Snapdragon üzerinde sürekli açık bilgisayarlı görü için idealdir.
- Cihaz üzerinde ve çevrimdışı: QNN çıkarımı tamamen Snapdragon cihazında çalışır; bu nedenle buluta gidip gelme olmaz, gecikme düşük kalır ve veriler cihazdan ayrılmaz.
- Nicemlenmiş verimlilik: QNN dışa aktarımı, YOLO'yu 16 bit aktivasyonlar ve INT8 ağırlıklara nicemler. Bu, Hexagon NPU'nun tercih ettiği doğruluk/performans dengesini sağlar, model boyutunu küçültür ve pille çalışan donanımda saniye başına kare sayısını en üst düzeye çıkarır.
- Tek biçim, birçok cihaz: Tek bir Qualcomm QNN dışa aktarımı, Snapdragon 8 Gen 2, 8 Gen 3 ve 8 Elite aileleri ve daha fazlasında Snapdragon CPU, Adreno GPU ve Hexagon NPU'yu hedefler.
- Üretime hazır Qualcomm yapay zekâ yığını: QNN (Qualcomm AI Engine Direct / QAIRT), Qualcomm'un güncel ve etkin şekilde sürdürülen cihaz üzerinde yapay zekâ çalışma zamanıdır ve SNPE'nin önerilen halefidir.
QNN Dışa Aktarım Biçimi#
Ultralytics, YOLO modellerini ONNX Runtime QNN Execution Provider'ı (QAIRT kitaplıklarını içeren, pip ile kurulabilen onnxruntime-qnn paketi) kullanarak yerel olarak QNN'ye derler. Dışa aktarıcı, modelini ONNX biçimine dönüştürür, kalibrasyon verileriyle 16 bit aktivasyonlar ve INT8 ağırlıklara nicemler (Hexagon NPU için önerilen denge), ardından bağlam ikilisi önbelleğe almayı etkinleştirerek bir ONNX Runtime oturumu başlatır. Böylece nicemlenmiş grafiği <model>_qnn.onnx içine gömülü bir QNN bağlam ikilisine derler. Qualcomm hesabı, buluta yükleme veya ayrı bir SDK indirme işlemi gerekmez.
Modelleri Qualcomm tarafından barındırılan Snapdragon cihazlarında derleyen ve profilleyen, bulut tabanlı Qualcomm AI Hub'ın aksine ve Qualcomm hesabı gerektirmesine rağmen, Ultralytics QNN dışa aktarımı tamamen kendi makinen üzerinde tek bir export(format="qnn", imgsz=640) çağrısıyla (imgsz=224, sınıflandırma için) çalışır. Aynı QNN/QAIRT çalışma zamanı hedefini — Snapdragon CPU, Adreno GPU ve Hexagon NPU — kaydolma, yükleme sınırları veya kuyruk bekleme süreleri olmadan elde edersin ve bu işlem doğrudan standart YOLO dışa aktarma iş akışına eklenir.
Dışa aktarılan *_qnn.onnx dosyası kendi kendine yeterlidir: QNN bağlam ikilisini ve sınıf adları, görüntü boyutu ve görev gibi ONNX meta verilerini içerir.
QNN Modellerinin Temel Özellikleri#
- Nicemleme: Model, ONNX Runtime QNN QDQ akışı ve bir kalibrasyon veri kümesi kullanılarak 16 bit aktivasyonlar ve INT8 ağırlıklara nicemlenir; bu, Hexagon NPU için önerilen doğruluk/performans dengesidir. Model nicemleme hakkında daha fazla bilgi edin.
- Tamamen Yerel Derleme: Bağlam ikilisi tamamen ana makinen üzerinde oluşturulur; Qualcomm hesabı, API belirteci veya buluta yükleme gerekmez.
- Tam Snapdragon Hızlandırması: Tek bir birleşik çalışma zamanı üzerinden çıkarımı Hexagon NPU (HTP), Adreno GPU veya CPU üzerinde çalıştır.
- Geniş Cihaz Kapsamı: Telefonlarda, bilgisayarlarda (Snapdragon üzerinde Windows), otomotiv, XR ve gömülü ürünlerde kullanılan çok çeşitli Snapdragon platformlarını hedefle.
- Önceden Derlenmiş Bağlam İkilisi: Bağlam ikilisini göndermek, cihaz üzerindeki grafik derlemesini en aza indirerek hedefteki model yükleme gecikmesini azaltır.
- Kendi Kendine Yeterli Çıktı: Dışa aktarılan ONNX dosyası, önceden derlenmiş QNN bağlam ikilisini ve kolay dağıtım için meta verileri içerir.
Ölçülen Performans#
Android Telefonu#
Donanım: 12 GB LPDDR5X belleğe ve Android 16 / API 36'ya sahip Xiaomi 17. 3 nm Snapdragon 8 Elite Gen 5 (SM8850); 8 çekirdekli Qualcomm Oryon CPU (4,6 GHz'e kadar 2 Prime çekirdeği ve 3,62 GHz'e kadar 6 Performance çekirdeği), Adreno GPU ve Hexagon NPU (HTP v81) içerir.
| Model | Görev | boyut (piksel) | CPU w8a32 LiteRT (ms) | GPU w8a32 LiteRT (ms) | NPU QNN W8A16 (ms) |
|---|---|---|---|---|---|
| YOLO26n | Detect | 640 | 52.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 | 640 | 73.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 | 640 | 61.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 | Derinlik | 640 | 124.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 | Sınıflandırma | 224 | 4.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 | Poz | 640 | 57.4 1.8 / 53.8 / 1.8 | 16.6 2.7 / 10.1 / 3.9 | 10.9 1.8 / 7.0 / 2.0 |
| YOLO26n-obb | OBB | 640 | 50.3 1.8 / 47.2 / 1.4 | 11.7 1.8 / 7.8 / 2.0 | 8.6 1.8 / 5.7 / 1.1 |
- Hız değerleri,
bus.jpgüzerinde 3 ısınma çalıştırmasından sonra 15 çalıştırmanın ortalaması olarak hesaplanan tek görüntülü seri gecikmeleridir; Flutter eklentisinin0.6.10cihaz üzerindeki kıyaslama çalıştırıcısı ve standartlaştırılmışv0.6.6varlıkları kullanılarak ölçülmüştür. Arka uç sırası, tek bir sıralı taramada görevler arasında dönüşümlü olarak değiştirilmiştir. Yerel günlükler, her CPU satırının LiteRT CPU/XNNPACK kullandığını, her GPU satırının grafiğin tamamını LiteRT OpenCL'e (LITERT_CL) devrettiğini ve her NPU satırının QNN Hexagon HTP arka ucunu kullandığını doğrulamıştır. - Ayrıntılı kıyaslama kaydı Flutter performans belgesinde yer alır.
- Diğer Android cihazlarını LiteRT entegrasyonunda, Apple cihazlarını ise CoreML entegrasyonunda karşılaştır.
Snapdragon Üzerinde Windows Dizüstü Bilgisayarı#
Bu tarihsel taramada standart öncesi v73 QNN ikilileri kullanılmıştır; anlamsal ve OBB görevlerinde 1024px girişler kullanılmıştır. Çalıştırma, 32 GB belleğe ve Windows 11'e sahip bir Lenovo dizüstü bilgisayarda gerçekleştirilmiştir. Snapdragon X Elite
(X1E78100); 12 çekirdekli Qualcomm Oryon CPU, Adreno GPU ve Hexagon NPU (HTP v73) içerir; Lenovo'nun tam modeli kaydedilmemiştir. Bu Snapdragon üzerinde Windows karşılaştırması, çoğu masaüstü geliştiricisinin başladığı yerel PyTorch FP32 CPU temel çizgisini ONNX Runtime QNN Hexagon HTP yolu ile karşılaştırır. Her hücre tam
model.predict() duvar süresini gösterir; altında bildirilen ön işleme / çıkarım / son işleme süreleri yer alır. Toplam süre, bu üç aşamanın dışındaki çerçeve ek yükünü içerebilir. CPU değerleri PyTorch FP32 (torch==2.10.0+cpu), NPU değerleri ise ONNX Runtime QNN'dir (onnxruntime-qnn==2.2.0, INT8 ağırlıklar / 16 bit aktivasyonlar).
| Model | Görev | boyut (piksel) | CPU PT FP32 (ms) | NPU Hexagon QNN W8A16 (ms) |
|---|---|---|---|---|
| YOLO26n | Detect | 640 | 91.4 4.3 / 75.2 / 0.1 | 27.2 4.9 / 19.4 / 0.9 |
| YOLO26n-seg | Segment | 640 | 138.8 4.5 / 127.1 / 2.8 | 34.3 5.0 / 24.0 / 5.1 |
| YOLO26n-sem | Semantic | 1024 | 295.8 9.1 / 189.2 / 94.8 | 133.0 8.8 / 37.4 / 83.9 |
| YOLO26n-cls | Sınıflandırma | 224 | 15.4 3.0 / 9.8 / 0.0 | 11.7 2.7 / 5.5 / 0.0 |
| YOLO26n-pose | Poz | 640 | 109.6 4.6 / 102.9 / 0.2 | 28.9 5.3 / 23.3 / 0.6 |
| YOLO26n-obb | OBB | 1024 | 267.8 8.1 / 254.6 / 0.1 | 64.8 8.9 / 54.7 / 0.6 |
- Hız değerleri,
bus.jpgüzerinde 10 ısınma çalıştırmasından sonra 100 çalıştırmanın ortalaması olarak hesaplanan tek görüntülü seri gecikmeleridir; termal olarak dinlendirilmiş bir cihazda (ultralytics==8.4.67, Python 3.12.10) tammodel.predict()çağrısını çevreleyentime.perf_counter()ile ölçülmüştür. - Hexagon NPU, 640-1024 px görevlerinde PyTorch CPU temel çizgisinden yaklaşık 2-4 kat daha hızlı çalışır (algılamada ~3.4 kat); sabit ön işleme ek yükünün küçük iş yüküne hâkim olduğu 224 px sınıflandırıcıda bu fark ~1.3 kata iner.
Desteklenen Görevler#
Qualcomm QNN dışa aktarımı, yedi Ultralytics görevinin tamamını destekler. Anlamsal segmentasyon ve derinlik tahmini yalnızca bu başlıkları içeren tek aile olan YOLO26 ile kullanılabilir.
| Görev | YOLOv8 | YOLO11 | YOLO26 |
|---|---|---|---|
| Algılama | ✅ | ✅ | ✅ |
| Segmentasyon | ✅ | ✅ | ✅ |
| Semantik | ❌ | ❌ | ✅ |
| Derinlik | ❌ | ❌ | ✅ |
| Sınıflandırma | ✅ | ✅ | ✅ |
| Poz | ✅ | ✅ | ✅ |
| OBB | ✅ | ✅ | ✅ |
QNN'ye Dışa Aktarım: YOLO Modelini Dönüştürme#
Bir Ultralytics YOLO modelini Qualcomm donanımında dağıtmak üzere QNN biçimine dışa aktar. Bağlam ikilisi, name bağımsız değişkeniyle seçtiğin hedef Hexagon Tensor Processor (HTP) mimarisi veya desteklenen SoC için son hâline getirilir; bu, RKNN dışa aktarımında bir yongayı hedeflemek için kullanılan bağımsız değişkenin aynısıdır.
Desteklenen HTP Hedefleri#
Hedef mimariyi veya SoC'yi name üzerinden ilet (ör. name="73" veya name="iq-8275"). Destek, HTP hedefi tarafından belirlenir; bu nedenle aşağıdaki Snapdragon satırları her SoC'nin kapsamlı listesi değil, temsili platformlardır.
Dragonwing cihazları açıkça listelenmiştir.
| Durum | name | Hexagon HTP | Örnek cihaz veya platform |
|---|---|---|---|
| ✅ Destekleniyor | 68 | v68 | Snapdragon 888 |
| ✅ Destekleniyor | 69 | v69 | Snapdragon 8 Gen 1 / 8+ Gen 1 |
| ✅ Destekleniyor | 73 | v73 | Snapdragon 8 Gen 2, X Elite (varsayılan) |
| ✅ Destekleniyor | 75 | v75 | Snapdragon 8 Gen 3 |
| ✅ Destekleniyor | 79 | v79 | Snapdragon 8 Elite |
| ✅ Destekleniyor | 81 | v81 | Snapdragon 8 Elite Gen 5 |
| ✅ Destekleniyor | iq-8275 veya qcs8275 | v75 | Dragonwing IQ-8275 / QCS8275 (QNN SoC modeli 82) |
| ❌ Desteklenmiyor | — | v66 | Dragonwing IQ-615 / QCS615 |
Dragonwing IQ-615, ONNX Runtime v66 DSP'sini çevrimdışı HTP hedefi olarak sunmadığı için Ultralytics QNN bağlam ikilisi dışa aktarımını kullanamaz. Standart bir ONNX dışa aktarımı, kartın BSP'si tarafından desteklenen bir CPU veya GPU yürütme sağlayıcısıyla ayrı olarak yine de tümleştirilebilir.
from ultralytics import YOLO
model = YOLO("best.pt")
model.export(format="qnn", name="iq-8275", imgsz=640)QNN dışa aktarımı onnxruntime-qnn paketini kullanır. 2.4.0 ve sonraki sürümler, Python 3.11 veya sonraki sürümlerde Windows (x64 ve ARM64) ve Linux (x86-64 ve ARM64) için önceden derlenmiş wheel'ler yayımlar; macOS desteklenen bir QNN ana makinesi değildir. QNN bağlam ikilisi oluşturma x64 ana makinede çalışır ve dışa aktarma adımı için Snapdragon cihazı gerektirmez.
Kurulum#
Gerekli paketleri yüklemek için şunu çalıştır:
# Install the required package for YOLO
pip install ultralyticsONNX Runtime QNN Execution Provider'ı sağlayan ve QAIRT kitaplıklarını içeren onnxruntime-qnn paketi, ilk dışa aktarma sırasında otomatik olarak kurulur. Kurulum süreciyle ilgili ayrıntılı talimatlar ve en iyi uygulamalar için Ultralytics Kurulum kılavuzumuza bak. YOLO için gerekli paketleri kurarken herhangi bir sorunla karşılaşırsan çözüm ve ipuçları için Yaygın Sorunlar kılavuzumuza başvur.
Kullanım#
QNN biçimi Dışa Aktarma, Tahmin ve Doğrulama modlarını destekler. Çıkarım ve doğrulama, dışa aktarma için kullanılan aynı onnxruntime-qnn paketi olan ONNX Runtime QNN Execution Provider üzerinden Qualcomm Snapdragon donanımında çalışır. Modelini dışa aktar, ardından çıkarım çalıştırmak veya doğruluğunu doğrulamak için dışa aktarılan modeli bir Snapdragon cihazına yükle.
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 classificationfrom 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")Dışa Aktarma Bağımsız Değişkenleri#
| Bağımsız değişken | Tür | Varsayılan | Açıklama |
|---|---|---|---|
format | str | 'qnn' | Dışa aktarılan modelin hedef biçimi; Qualcomm QNN çalışma zamanıyla uyumluluğu tanımlar. |
imgsz | int veya tuple | 640 | Model girdisi için istenen görüntü boyutu. Kare görüntüler için bir tam sayı veya (height, width) demeti olabilir. |
batch | int | 1 | Oluşturulan QNN bağlam ikilisine sabitlenen dışa aktarma modeli toplu iş boyutunu belirtir. |
name | str | '73' | Hedef Hexagon HTP mimarisi (68, 69, 73, 75, 79 veya 81) ya da desteklenen SoC (iq-8275 veya qcs8275). Bağlam ikilisi bu hedef için son hâline getirilir. |
quantize | int veya str | 'w8a16'/auto | Nicemleme hassasiyeti. QNN HTP dışa aktarımı, 16 bit aktivasyonlarla ('w8a16') INT8 ağırlıklara nicemlenir ve belirtilmezse otomatik olarak etkinleştirilir. Kullanımdan kaldırılmış half/int8 bayraklarının yerini alır. |
simplify | bool | True | Ara ONNX grafiğini onnxslim ile basitleştirir. |
opset | int | None | Ara ONNX grafiği için ONNX opset sürümünü belirtir. Ayarlanmazsa desteklenen en son sürüm kullanılır. |
data | str | None | INT8 kalibrasyonu için kullanılan veri kümesi YAML dosyası; sınıflandırma için bunun yerine bir veri kümesi dizini veya yerleşik veri kümesi adı alınır. Belirtilmezse Ultralytics, model görevi için varsayılan kalibrasyon veri kümesini seçer. |
fraction | float, int veya list | 1.0 | Oran, görüntü sayısı veya [train, val, test] oranları/sayıları olarak kalibrasyon alt kümesi. İki öğeli listelerde test tam bırakılırken 0 atlanır. |
device | str | None | ONNX dışa aktarma adımı için cihazı belirtir: GPU (device=0) veya CPU (device=cpu). |
QNN dışa aktarımı, ONNX Runtime QDQ nicemleme akışını ve data konumundaki kalibrasyon görüntülerini kullanarak modeli 16 bit aktivasyonlar ve INT8 ağırlıklara nicemler. Bu, Hexagon NPU için önerilen doğruluk/performans dengesidir. quantize='w8a16' otomatik olarak zorunlu kılınır.
Dışa aktarma süreci hakkında daha fazla ayrıntı için Ultralytics'in dışa aktarma dokümantasyonu sayfasını ziyaret et.
Çıktı Yapısı#
Başarılı bir dışa aktarma işleminden sonra kendi kendine yeterli bir ONNX dosyası oluşturulur:
yolo26n_qnn.onnx # ONNX wrapping the precompiled QNN context binary and metadata
yolo26n_qnn.onnx dosyası QNN bağlam ikili dosyasını içerir ve Snapdragon cihazında QNN Execution Provider ile ONNX Runtime tarafından yüklenir. Ayrıca sınıf adları, görüntü boyutu ve görev gibi model meta verilerini ONNX içindeki metadata_props bölümünde taşır.
Dışa Aktarılan YOLO QNN Modellerini Dağıtma#
QNN modelleri desteklenen Qualcomm donanımlarında çalışır; bu da cihaz üzerinde model dağıtımını kolaylaştırır. onnxruntime-qnn yüklü uyumlu bir cihazda, dışa aktarılan modeli doğrudan Ultralytics API'siyle (yolo predict/yolo val, yukarıdaki Kullanım bölümüne bak) çalıştır — Ultralytics, HTP bağlam ikili dosyasını ONNX Runtime QNN Execution Provider üzerinden yükler.
Özel işlem hatları için bağlam ikili dosyasını ONNX ile doğrudan ONNX Runtime'a da yükleyebilirsin. onnxruntime-qnn bir eklenti Execution Provider olduğundan çalışma zamanında kaydetmen gerekir:
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 NHWCQNN bağlam ikili dosyası önceden derlendiği için oturum hızlı yüklenir ve grafik cihaz üzerinde yeniden derlenmez.
Linux ve Yocto BSP Gereksinimleri#
Hedef kart, birbiriyle uyumlu bir Qualcomm çalışma zamanı ve BSP sağlamalıdır. HTP çıkarımı için buna ONNX Runtime QNN Execution Provider, libQnnSystem.so, libQnnHtp.so, IQ-8275 için v75 HTP stub ve skeleton kitaplıkları, libcdsprpc.so gibi FastRPC kullanıcı alanı desteği, DSP ürün yazılımı ve ilgili FastRPC/kernel sürücüleri dahildir. Skeleton kitaplığı, BSP'nin DSP kitaplığı yolu üzerinden bulunabilir olmalıdır.
Bu hedef tarafı bileşenleri kart üreticisinin QAIRT/QNN özellikli BSP'sinden gelir; dışa aktarılan modele gömülü değildir. GPU yürütmesi ise libQnnGpu.so ve eşleşen Adreno kullanıcı alanı sürücü yığınını gerektirir. Ultralytics format=qnn çıktısı HTP'ye özgü bir bağlam ikili dosyasıdır; bu nedenle GPU veya CPU dağıtımına, önceden derlenmiş *_qnn.onnx dosyası yerine standart bir ONNX dışa aktarımıyla başlanmalıdır.
Önerilen İş Akışı#
- Modelini Ultralytics Eğitim Modu ile Eğit
- Desteklenen bir platformda
model.export(format="qnn", name="iq-8275", imgsz=640)kullanarak QNN biçimine dışa aktar (sınıflandırma içinimgsz=224kullan) - Dışa aktarılan
*_qnn.onnxdosyasını Qualcomm cihazına dağıt - HTP arka ucunu kullanarak ONNX Runtime ve QNN Execution Provider ile çıkarımı çalıştır
Gerçek Dünya Uygulamaları#
Qualcomm Snapdragon donanımında çalışan YOLO modelleri, çok çeşitli uç AI uygulamaları için oldukça uygundur:
- Akıllı telefonlar: NPU hızlandırmasıyla kamera ve fotoğraf uygulamalarında gerçek zamanlı nesne algılama ve sahne anlama.
- Snapdragon üzerinde Windows: Buluta aktarım yapmadan Copilot+ PC'lerde cihaz üzerinde bilgisayarlı görü.
- Otomotiv: Snapdragon Digital Chassis platformlarında sürücü izleme, yolcu algılama ve ADAS özellikleri.
- XR ve Giyilebilir Cihazlar: AR/VR başlıkları ve akıllı gözlükler için düşük güç tüketimli, düşük gecikmeli algılama.
- IoT ve Robotik: Snapdragon destekli kameralar, dronlar ve gömülü sistemlerde verimli görüntü çıkarımı.
Özet#
Bu kılavuzda Ultralytics YOLO modellerini ONNX Runtime QNN Execution Provider ile yerel olarak Qualcomm QNN biçimine nasıl dışa aktaracağını öğrendin. Dışa aktarma işlem hattı modelini ONNX'e dönüştürür, ardından ana makinen üzerinde bir QNN bağlam ikili dosyasına derler — Qualcomm hesabı veya bulut gerekmez — ve QNN/QAIRT çalışma zamanı üzerinden Snapdragon CPU, Adreno GPU ve Hexagon NPU donanımı için optimize edilmiş bir *_qnn.onnx dosyası oluşturur.
Ultralytics YOLO ile Qualcomm'un cihaz üzerindeki AI yığınının birleşimi, geniş Snapdragon ekosisteminde gelişmiş bilgisayarlı görü iş yüklerini çalıştırmak için etkili bir çözüm sunar.
Diğer cihaz üzeri ve mobil dağıtım hedefleri için ilgili ONNX, CoreML, NCNN, LiteRT, ExecuTorch, RKNN, Sony IMX500 ve TensorRT dışa aktarma kılavuzlarına bak. Dağıtımdan önce biçimleri karşılaştırmak için Benchmark modunu kullan. Biçimlerin ve seçeneklerin tam listesi için Export modu belgelerini ve entegrasyonlar kılavuzu sayfasını ziyaret et.
SSS#
Modelini
export(format="qnn", imgsz=640)(imgsz=224, sınıflandırma için) veya eşdeğer CLI bağımsız değişkenlerini kullanarak dışa aktarabilirsin. Dışa aktarma önce bir ONNX modeli oluşturur, ardından bunu ONNX Runtime QNN Execution Provider'ı kullanarak yerel olarak bir QNN bağlam ikili dosyasına derler.onnxruntime-qnnpaketi ilk dışa aktarma sırasında otomatik olarak yüklenir.Örnekfrom ultralytics import YOLO model = YOLO("yolo26n.pt") model.export(format="qnn", imgsz=640) # use imgsz=224 for classificationHayır. QNN dışa aktarma işlemi, QAIRT kitaplıklarını paketleyen
onnxruntime-qnnpaketi kullanılarak tamamen yerel makinen üzerinde çalışır. Qualcomm hesabı, API belirteci veya ağ erişimi gerekmez.Qualcomm AI Hub, barındırılan Snapdragon cihazlarında modelleri derlemek, profillemek ve kıyaslamak için Qualcomm'un bulut hizmetidir ve Qualcomm hesabı gerektirir. Ultralytics QNN dışa aktarması aynı QNN/QAIRT çalışma zamanını (Snapdragon CPU, Adreno GPU ve Hexagon NPU) hedefler, ancak bağlam ikili dosyasını ONNX Runtime QNN Execution Provider ile yerel olarak derler — hesap gerekmez, yükleme yapılmaz ve sıra beklenmez. Bu,
.ptmodelinden doğrudan standart YOLO dışa aktarma iş akışı içinde Snapdragon'a hazır bir derlemeye geçmenin en hızlı yoludur.onnxruntime-qnn2.4.0 ve sonraki sürümleri, Python 3.11 veya sonraki sürümlerinde Windows (x64 ve ARM64) ve Linux (x86-64 ve ARM64) için önceden derlenmiş wheel'ler sağlar; macOS desteklenen bir QNN ana bilgisayarı değildir. Bağlam ikili dosyası oluşturma işlemi x64 bir ana bilgisayarda çalışır ve fiziksel bir Snapdragon cihazı gerektirmez.model.export(format="qnn", imgsz=640)(imgsz=224, sınıflandırma için) ile dışa aktar, ortaya çıkanyolo26n_qnn.onnxdosyasını Snapdragon cihazına kopyala veyolo predict model=yolo26n_qnn.onnx source=image.jpg'ü (veyayolo val'ü) çalıştır. Ultralytics, bağlam ikili dosyasını ONNX Runtime QNN Execution Provider üzerinden yükler ve Hexagon NPU üzerinde çalıştırır — Dışa Aktarılan YOLO QNN Modellerini Dağıtma bölümüne bak.QNN (QAIRT SDK'nın parçası olan Qualcomm AI Engine Direct), Qualcomm'un mevcut çıkarım yığınıdır ve daha eski Snapdragon Sinirsel İşleme Motoru (SNPE) SDK'sının önerilen halefidir. Yeni dağıtımlar QNN'i hedeflemelidir.
Evet,
onnxruntime-qnnyüklü bir Qualcomm Snapdragon cihazında çalıştırabilirsin —YOLO("yolo26n_qnn.onnx"), bağlam ikili dosyasını QNN Execution Provider üzerinden yükler vepredict/valdosyalarını diğer biçimler gibi çalıştırır. QNN donanımı olmayan bir x86 ana bilgisayarında model çalıştırılamaz; çünkü bağlam ikili dosyası Snapdragon NPU'yu hedefler.Dışa aktarma, sınıf adları, görüntü boyutu, görev ve diğer model meta verileri ONNX içindeki
metadata_propsbölümüne gömülü olan, kendi kendine yeten bir bağlam ikili dosyası ONNX dosyası (ör.yolo26n_qnn.onnx) oluşturur.