Ultralytics YOLO27:

Ultralytics YOLOモデルのQualcomm QNNエクスポート#

Qualcomm Snapdragonデバイスにコンピュータービジョンモデルをデプロイするには、Qualcomm AI Engine Direct (QNN)ランタイムに合わせて調整されたモデル形式が必要です。Ultralytics YOLOモデルをQNN形式にエクスポートすると、数十億台の携帯電話、ノートPC、自動車システム、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 Runtime (QAIRT) SDKの一部として配布されている、QualcommのSnapdragonプロセッサ向け低レベル推論スタックです。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搭載ノートPC、自動車製品、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が推奨する精度とパフォーマンスのバランスであり、モデルサイズを縮小し、バッテリー駆動のハードウェアで最大限のフレームレートを実現します。
  • 1つの形式で多様なデバイスに対応: 1つの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(pipでインストールでき、QAIRTライブラリを同梱するonnxruntime-qnnパッケージ)を使い、YOLOモデルをローカルでQNNにコンパイルします。エクスポーターはモデルをONNXに変換し、キャリブレーションデータを使用して16ビットのアクティベーションとINT8の重み(Hexagon NPUに推奨されるバランス)に量子化します。その後、コンテキストバイナリのキャッシュを有効にしてONNX Runtimeセッションを初期化し、量子化されたグラフを<model>_qnn.onnxに埋め込まれるQNNコンテキストバイナリにコンパイルします。Qualcommアカウント、クラウドへのアップロード、別途のSDKダウンロードは不要です。

クラウドベースのQualcomm AI Hubでは、QualcommがホストするSnapdragonデバイス上でモデルをコンパイルしてプロファイルし、Qualcommアカウントが必要です。一方、Ultralytics QNNエクスポートは、単一のexport(format="qnn", imgsz=640)呼び出し(分類の場合はimgsz=224)で、すべてを自分のマシン上で実行します。サインアップ、アップロード制限、待ち時間なしで、同じQNN/QAIRTランタイムのターゲットであるSnapdragon CPU、Adreno GPU、Hexagon NPUを利用でき、標準のYOLOエクスポートワークフローにそのまま組み込めます。

エクスポートされた*_qnn.onnxファイルは自己完結型です。QNNコンテキストバイナリと、クラス名、画像サイズ、タスクなどのONNXメタデータが含まれています。

QNNモデルの主な機能#

  • 量子化: キャリブレーションデータセットと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スマートフォン#

ハードウェア: 12 GBのLPDDR5XメモリとAndroid 16 / API 36を搭載したXiaomi 17。3 nmプロセスのSnapdragon 8 Elite Gen 5(SM8850)は、8コアのQualcomm Oryon CPU(最大4.6 GHzのPrimeコア2基と最大3.62 GHzのPerformanceコア6基)、Adreno GPU、Hexagon NPU (HTP v81)を搭載しています。

モデルタスクサイズ
(ピクセル)
CPU
w8a32 LiteRT
(ms)
GPU
w8a32 LiteRT
(ms)
NPU
QNN W8A16
(ms)
YOLO26nDetect64052.2
1.8 / 48.1 / 2.4
15.8
2.3 / 8.9 / 4.6
10.7
1.8 / 6.7 / 2.2
YOLO26n-segSegment64073.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回実行した平均値です。 標準化されたv0.6.6アセットを使用し、Flutterプラグインの0.6.10オンデバイスベンチマークハーネスで測定しました。 1回の連続した測定では、タスクごとにバックエンドの順序を入れ替えました。ネイティブログにより、CPUの全行でLiteRT CPU/XNNPACK、GPUの全行でLiteRT OpenCL (LITERT_CL)によるグラフ全体の処理、NPUの全行でQNN Hexagon HTPバックエンドが使用されたことを確認しています。
  • 詳細なベンチマーク記録は、Flutterパフォーマンスドキュメントにあります。
  • 他のAndroidデバイスについてはLiteRT統合、AppleデバイスについてはCoreML統合をご覧ください。

Windows on Snapdragon搭載ノートPC#

この過去の測定では、標準化前のv73 QNNバイナリを使用し、セマンティックモデルとOBBモデルには1024pxの入力を使用しました。32 GBメモリとWindows 11を搭載したLenovo製ノートPCで実行しました。 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()の合計実行時間を示し、その下に報告された前処理/推論/後処理の時間を記載しています。合計時間には、これら3つの段階以外のフレームワークのオーバーヘッドが含まれる場合があります。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)
YOLO26nDetect64091.4
4.3 / 75.2 / 0.1
27.2
4.9 / 19.4 / 0.9
YOLO26n-segSegment640138.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回実行した平均値であり、熱的に安定したデバイス(ultralytics==8.4.67、Python 3.12.10)で、処理全体のmodel.predict()呼び出しをtime.perf_counter()で計測しています。
  • Hexagon NPUは、640~1024 pxのタスク全体でPyTorch CPUベースラインよりおよそ2~4倍高速です(検出では~3.4倍)。固定の前処理オーバーヘッドが小規模な処理を支配する224 pxの分類では、~1.3倍まで差が縮まります。

対応タスク#

Qualcomm QNNエクスポートは、Ultralyticsの7つすべてのタスクに対応しています。セマンティックセグメンテーションと深度推定は、これらのヘッドを搭載する唯一のファミリーであるYOLO26でのみ利用できます。

タスクYOLOv8YOLO11YOLO26
検出✅✅✅
セグメンテーション✅✅✅
セマンティック❌❌✅
深度❌❌✅
分類✅✅✅
姿勢推定✅✅✅
OBB✅✅✅

QNNへのエクスポート:YOLOモデルの変換#

Ultralytics YOLOモデルをQNN形式にエクスポートし、Qualcommハードウェアにデプロイします。コンテキストバイナリは、対象の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

onnxruntime-qnnパッケージ(ONNX Runtime QNN Execution Providerを提供し、QAIRTライブラリをバンドルしています)は、初回のエクスポート時に自動でインストールされます。インストール手順の詳細やベストプラクティスについては、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'/自動量子化の精度です。QNN HTPエクスポートでは、16ビットのアクティベーション('w8a16')とINT8の重みに量子化され、指定がない場合は自動的に有効になります。非推奨のhalf/int8フラグに置き換わります。
simplifyboolTrueonnxslimを使用して、中間ONNXグラフを簡素化します。
opsetintNone中間ONNXグラフのONNX opsetバージョンを指定します。設定しない場合は、サポートされている最新バージョンが使用されます。
datastrNoneINT8キャリブレーションに使用するデータセットYAMLです。分類の場合は、データセットディレクトリまたは組み込みデータセット名を指定します。省略した場合、Ultralyticsがモデルタスクに対応するデフォルトのキャリブレーションデータセットを選択します。
fractionfloat、int、またはlist1.0キャリブレーション用サブセットを、比率、画像数、または[train, val, test]の比率/件数として指定します。2項目のリストでは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はプラグイン型のExecution Providerであるため、実行時に登録します。

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.onnxファイルは、QNN/QAIRTランタイムを介したSnapdragon CPU、Adreno GPU、Hexagon NPUハードウェア向けに最適化されています。

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を使用します
  • いいえ。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)で提供されます。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(QAIRT SDKの一部であるQualcomm AI Engine Direct)は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)が作成されます。

コメント