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ハードウェア上で高速かつ低消費電力の推論を実行する方法を説明します。
公式のUltralytics Flutterプラグインでは、オプトインでQNNを有効にでき、7つすべてのYOLO26タスクで、リアルタイムのカメラ推論と単一画像の予測を実行できます。プラグインのREADMEの説明に従い、QNNランタイムを有効にしてONNX Runtimeの依存関係を追加してください。iOSへのデプロイについては、Ultralytics YOLO iOS SDKとCoreMLとの連携を参照してください。
分類モデルはimgsz=224でエクスポートします。detect、segment、semantic、depth、pose、OBBモデルはimgsz=640でエクスポートします。この224/640の標準は、公式のQNN、LiteRT、CoreMLモバイルアセットで共通です。 7つすべてのタスクについて、各サイズ(nからxまで)のすぐに実行できるv73およびv81アセットを、yolo-flutter-app v0.7.0リリースで公開しています。
Qualcomm QNNとは何ですか?#
Qualcomm AI Engine Directは、一般にQNNと呼ばれ、Qualcomm AI Runtime (QAIRT) SDKの一部として配布されている、Qualcommの低レベル推論スタックです。Snapdragonプロセッサ向けに、Snapdragon CPU、Adreno GPU、Hexagon Tensor Processor (HTP)をターゲットとするバックエンド固有のライブラリを備えた統合APIを提供します。HTPは、最新のSnapdragon SoCに搭載された専用のニューラル処理ユニット(NPU)です。QNNにより、開発者はSnapdragonのAIアクセラレーターをフルスタックで利用できます。また、従来のSnapdragon Neural Processing Engine (SNPE) SDKの後継となる最新のSDKです。Snapdragon 8 Gen 2、8 Gen 3、8 Eliteのモバイルプラットフォーム、Snapdragon X搭載ノートPC、自動車製品、XR製品など、幅広いデバイス上のAI処理を支えています。
Qualcomm QNNにエクスポートする理由#
Snapdragonは、最も広く普及しているモバイルコンピューティングプラットフォームの1つです。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 17 / API 37を搭載した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) |
|---|---|---|---|---|---|
| YOLO26n | Detect | 640 | 36.9 1.9 / 32.6 / 2.3 | 10.6 1.8 / 6.2 / 2.6 | 10.2 1.9 / 6.0 / 2.3 |
| YOLO26n-seg | Segment | 640 | 50.5 1.9 / 42.9 / 5.8 | 18.0 1.9 / 9.5 / 6.6 | 16.2 2.1 / 8.4 / 5.7 |
| YOLO26n-sem | セマンティック | 640 | 45.7 1.9 / 35.7 / 8.2 | 30.6 1.9 / 20.5 / 8.3 | 10.8 2.0 / 6.2 / 2.6 |
| YOLO26n-depth | 深度 | 640 | 66.8 2.2 / 55.0 / 9.7 | 21.9 2.1 / 10.1 / 9.8 | 19.3 2.2 / 7.4 / 9.7 |
| YOLO26n-cls | 分類 | 224 | 3.6 0.3 / 3.3 / 0.0 | 2.0 0.4 / 1.4 / 0.2 | 0.8 0.3 / 0.5 / 0.0 |
| YOLO26n-pose | 姿勢推定 | 640 | 39.9 2.0 / 36.5 / 1.4 | 10.0 1.8 / 6.7 / 1.4 | 9.7 1.9 / 5.9 / 1.8 |
| YOLO26n-obb | OBB | 640 | 36.3 2.0 / 33.2 / 1.2 | 10.1 2.6 / 5.9 / 1.6 | 8.1 1.9 / 5.1 / 1.0 |
- 速度の値は単一画像のバーストレイテンシです。
bus.jpgで3回のウォームアップ後に15回実行した平均値であり、Flutterプラグインの0.7.1オンデバイスベンチマークハーネスと公式のv0.7.0アセット(Ultralytics 8.4.188によるエクスポート)を使用して測定しています。バックエンドの順序は、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) |
|---|---|---|---|---|
| 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 | セマンティック | 1024 | 295.8 9.1 / 189.2 / 94.8 | 133.0 8.8 / 37.4 / 83.9 |
| YOLO26n-cls | 分類 | 224 | 15.4 3.0 / 9.8 / 0.0 | 11.7 2.7 / 5.5 / 0.0 |
| YOLO26n-pose | 姿勢推定 | 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 |
- 速度の値は単一画像のバーストレイテンシです。
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でのみ利用できます。
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デバイスは個別に記載しています。
| ステータス | name | Hexagon HTP | デバイスまたはプラットフォームの例 |
|---|---|---|---|
| ✅ 対応 | 68 | v68 | Snapdragon 888 |
| ✅ 対応 | 69 | v69 | Snapdragon 8 Gen 1 / 8+ Gen 1 |
| ✅ 対応 | 73 | v73 | Snapdragon 8 Gen 2、X Elite(デフォルト) |
| ✅ 対応 | 75 | v75 | Snapdragon 8 Gen 3 |
| ✅ 対応 | 79 | v79 | Snapdragon 8 Elite |
| ✅ 対応 | 81 | v81 | Snapdragon 8 Elite Gen 5 |
| ✅ 対応 | iq-8275またはqcs8275 | v75 | Dragonwing IQ-8275 / QCS8275(QNN SoCモデル82) |
| ❌ 非対応 | — | v66 | Dragonwing IQ-615 / QCS615 |
ONNX Runtimeがv66 DSPをオフラインHTPターゲットとして公開していないため、Dragonwing IQ-615ではUltralytics QNNコンテキストバイナリエクスポートを使用できません。標準のONNXエクスポートは、ボードBSPがサポートするCPUまたはGPU実行プロバイダーと個別に統合できます。
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 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
# 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")エクスポート引数#
| 引数 | 種類 | デフォルト | 説明 |
|---|---|---|---|
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、81)またはサポート対象のSoC(iq-8275またはqcs8275)です。コンテキストバイナリはこのターゲット向けに確定されます。 |
quantize | intまたはstr | 'w8a16'/自動 | 量子化の精度です。QNN HTPエクスポートでは、16ビットのアクティベーション('w8a16')とINT8の重みに量子化され、指定がない場合は自動的に有効になります。非推奨のhalf/int8フラグに置き換わります。 |
simplify | bool | True | onnxslimを使用して、中間ONNXグラフを簡素化します。 |
opset | int | None | 中間ONNXグラフのONNX opsetバージョンを指定します。指定しない場合は、opset 18(PyTorch < 2.4ではより低いバージョン)を使用し、インストール済みの onnx のバージョンを上限とします。 |
data | str | None | INT8キャリブレーションに使用するデータセットYAMLです。分類の場合は、データセットディレクトリまたは組み込みデータセット名を指定します。省略した場合、Ultralyticsがモデルタスクに対応するデフォルトのキャリブレーションデータセットを選択します。 |
fraction | float、int、またはlist | 1.0 | キャリブレーション用サブセットを、比率、画像数、または[train, val, test]の比率/件数として指定します。2項目のリストではtestがすべて含まれ、0では除外されます。 |
device | str | None | ONNXエクスポートのデバイスを指定します。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 NHWCQNNコンテキストバイナリは事前にコンパイルされているため、デバイス上でグラフを再コンパイルせずにセッションをすばやく読み込めます。
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エクスポートを使用してください。
推奨ワークフロー#
- UltralyticsのTrain Modeを使用してモデルをトレーニングします
- サポート対象のプラットフォームで
model.export(format="qnn", name="iq-8275", imgsz=640)を使用してQNN形式にエクスポートします(分類にはimgsz=224を使用します)。 - エクスポート済みの
*_qnn.onnxファイルをQualcommデバイスにデプロイします。 - 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エコシステムでコンピュータービジョンのワークロードを実行できます。
出荷前に形式を比較するには、Benchmarkモードを使用してください。
よくある質問#
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-qnn2.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)が作成されます。
コメント
質問したり、結果を共有したり、ほかの人をサポートしたりできます。