Meet YOLO26: next-gen vision AI.

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ハードウェア上で高速かつ低消費電力の推論を行うためにデプロイする方法を解説します。

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アクセラレーション: YOLOをHexagon Tensor Processorで実行すると、CPU推論と比較して劇的に高いスループットと低い消費電力が実現します。これは、Snapdragon上でのリアルタイム推論や常時稼働のコンピュータビジョンに最適です。
  • オンデバイスおよびオフライン: QNN推論は完全にSnapdragonデバイス上で実行されるため、クラウドへの往復がなく、レイテンシが低く抑えられ、データがデバイスの外に出ることはありません。
  • INT8の効率性: QNNエクスポートは、YOLOをHexagon NPUのネイティブ精度であるINT8に量子化し、モデルサイズを縮小して、バッテリ駆動のハードウェアでフレームレートを最大化します。
  • 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(QAIRTライブラリをバンドルしたpipインストール可能なonnxruntime-qnnパッケージ)を使用して、YOLOモデルをローカルでQNNにコンパイルします。エクスポーターはモデルをONNXに変換し、キャリブレーションデータを使用してINT8量子化を行い(Hexagon NPUはint8アクセラレータです)、その後、コンテキストバイナリキャッシュを有効にしてONNX Runtimeセッションを初期化します。これにより、量子化されたグラフが<model>_qnn.onnxに埋め込まれたQNNコンテキストバイナリへとコンパイルされます。Qualcommのアカウントやクラウドへのアップロード、または個別のSDKダウンロードは不要です。

クラウドベースのQualcomm AI Hubとは異なり、QualcommがホストするSnapdragonデバイス上でモデルのコンパイルとプロファイリングを行い、Qualcommのアカウントを必要とするものと異なり、UltralyticsのQNNエクスポートは独自の環境で、1回のexport(format="qnn")呼び出しですべて実行されます。サインアップ、アップロード制限、キュー待ち時間なしで、同じQNN/QAIRTランタイムターゲット(Snapdragon CPU、Adreno GPU、Hexagon NPU)を利用でき、標準のYOLOエクスポートワークフローに直接組み込むことができます。

エクスポートされた_qnn_model/ディレクトリには、コンテキストバイナリONNXと、クラス名、画像サイズ、タスクを記述したmetadata.yamlが同梱されています。

QNNモデルの主な特徴

  • INT8量子化: モデルはONNX Runtime QNN QDQフローとキャリブレーションデータセットを使用してINT8に量子化され、Hexagon NPUのネイティブ精度と一致させてスループットとサイズを最適化します。モデル量子化の詳細をご覧ください。
  • 完全ローカルコンパイル: コンテキストバイナリはホストマシン上で完全に生成されます。Qualcommのアカウント、APIトークン、クラウドへのアップロードは一切不要です。
  • フルSnapdragonアクセラレーション: 1つの統合されたランタイムを通じて、Hexagon NPU (HTP)、Adreno GPU、またはCPU上で推論を実行します。
  • 幅広いデバイス対応: スマートフォン、PC (Windows on Snapdragon)、自動車、XR、埋め込み製品に搭載される幅広いSnapdragonプラットフォームをターゲットにします。
  • プリコンパイル済みコンテキストバイナリ: コンテキストバイナリを出荷することで、デバイス上のグラフコンパイルを最小限に抑え、ターゲットでのモデルロードレイテンシを削減します。
  • 自己完結型の出力: エクスポートされたディレクトリには、コンテキストバイナリONNXとデプロイに必要なメタデータが含まれています。

サポートされているタスク

QNNエクスポートは、YOLO26セマンティックセグメンテーションを含む、各モデルファミリーで利用可能な標準タスクセットをサポートしています。

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

Snapdragonハードウェアへのデプロイのために、Ultralytics YOLOモデルをQNNフォーマットにエクスポートします。コンテキストバイナリは、name引数で選択するターゲットHexagon Tensor Processor (HTP) アーキテクチャ用に最終化されます。これはRKNNエクスポートでチップをターゲットにするために使用されるのと同じ引数です。

サポートされているHTPアーキテクチャ

nameを使用してターゲットアーキテクチャを渡します(例: name="73")。有効な値は以下の通りです:

nameHexagon HTPSnapdragonプラットフォーム
68v68Snapdragon 865
69v69Snapdragon 888 / 8 Gen 1
73v73Snapdragon 8 Gen 2 (デフォルト)
75v75Snapdragon 8 Gen 3
79v79Snapdragon 8 Elite
プラットフォームのサポート

QNNエクスポートはonnxruntime-qnnパッケージを使用します。安定版のwheelは**Windows (x64およびARM64)Linux ARM64 (aarch64)**向けに公開されています。Linux x86-64のwheelはONNX Runtime nightlyフィードで利用可能です。macOS向けのwheelはありません。macOSの場合は--use_qnnオプションを使用してソースからONNX Runtimeをビルドするか、サポートされているプラットフォームでエクスポートを実行してください。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

# Load a YOLO26 model
model = YOLO("yolo26n.pt")

# Export to Qualcomm QNN format (INT8, enforced automatically), targeting an HTP architecture via 'name'
# 'name' can be one of 68, 69, 73, 75, 79 (Snapdragon 865, 888/8 Gen 1, 8 Gen 2, 8 Gen 3, 8 Elite)
model.export(format="qnn", name="73")  # creates 'yolo26n_qnn_model/'
予測
from ultralytics import YOLO

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

# 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_model")

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

エクスポート引数

引数デフォルト説明
formatstr'qnn'エクスポートされたモデルのターゲットフォーマットで、Qualcomm QNNランタイムとの互換性を定義します。
imgszint または tuple640Desired image size for the model input. Can be an integer for square images or a tuple (height, width).
batchint1エクスポートモデルのバッチサイズを指定します。これは生成されるQNNコンテキストバイナリに組み込まれます。
namestr'73'ターゲットとするHexagon HTPアーキテクチャのバージョン:68697375、または79 (Snapdragon 865、888/8 Gen 1、8 Gen 2、8 Gen 3、8 Elite)。コンテキストバイナリはこのアーキテクチャ向けに最終化されます。
int8boolTrueINT8量子化を有効にします。QNN HTPエクスポートには必須であり、指定がない場合は自動的にTrueに設定されます。
datastr'coco8.yaml'INT8 キャリブレーションに使用されるデータセット設定ファイル。キャリブレーション画像のソースを指定します。
fractionfloat1.0INT8量子化に使用するキャリブレーションデータセットの割合。
devicestrNoneONNXエクスポートステップのデバイスを指定します:GPU (device=0) またはCPU (device=cpu)。
精度

The Hexagon NPU (HTP) is an int8 accelerator, so QNN export quantizes the model to INT8 using the ONNX Runtime QDQ quantization flow with calibration images from data. int8=True is enforced automatically.

エクスポートプロセスの詳細については、エクスポートに関する Ultralytics ドキュメントページを参照してください。

出力構造

エクスポートが成功すると、以下のレイアウトでモデルディレクトリが作成されます。

yolo26n_qnn_model/
├── yolo26n_qnn.onnx   # ONNX wrapping the precompiled QNN context binary
└── metadata.yaml      # Model metadata (classes, image size, task, etc.)

yolo26n_qnn.onnxファイルにはQNNコンテキストバイナリが埋め込まれており、Snapdragonデバイス上でQNN Execution Providerを使用してONNX Runtimeによってロードされます。metadata.yamlには、Ultralyticsパイプラインで使用されるクラス名、画像サイズ、その他の情報が含まれています。

エクスポートされたYOLO QNNモデルのデプロイ

QNNモデルはQualcomm Snapdragonハードウェア上で動作するため、オンデバイスでのモデルデプロイは簡単です。onnxruntime-qnnがインストールされたSnapdragonデバイス上で、Ultralytics APIを使用してエクスポートされたモデルを直接実行します(yolo predict/yolo val、上記使用法を参照)。Ultralyticsは、ONNX Runtime QNN Execution Providerを通じてコンテキストバイナリをロードし、HTP (NPU)、GPU、またはCPUバックエンドを選択します。

カスタムパイプラインの場合、コンテキストバイナリONNXをONNX Runtimeで直接ロードすることもできます。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_model/yolo26n_qnn.onnx", sess_options=options)
outputs = session.run(None, {"images": input_tensor})  # input_tensor: float32 NCHW

QNNコンテキストバイナリはプリコンパイルされているため、デバイス上でグラフを再コンパイルすることなく、セッションが迅速にロードされます。

推奨されるワークフロー

  1. Ultralytics トレーニングモードを使用してモデルをトレーニングします。
  2. エクスポート: サポートされているプラットフォーム(WindowsまたはLinux ARM64)上でmodel.export(format="qnn")を使用してQNNフォーマットにエクスポートします
  3. デプロイ: エクスポートされた_qnn_model/ディレクトリをSnapdragonデバイスにデプロイします
  4. 実行: ONNX RuntimeとQNN Execution Providerを使用して推論を実行し、HTP、GPU、またはCPUバックエンドを選択します

現実世界でのアプリケーション

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エコシステム全体で高度なコンピュータビジョンワークロードを実行するための効果的なソリューションが提供されます。

その他のオンデバイスおよびモバイルデプロイターゲットについては、関連するONNXCoreMLNCNNTFLiteExecuTorchRKNNSony IMX500、およびTensorRTのエクスポートガイドを参照してください。出荷前にフォーマットを比較するには、ベンチマークモードを使用してください。フォーマットとオプションの全リストについては、エクスポートモードのドキュメントと統合ガイドページをご覧ください。

FAQ

Ultralytics YOLOモデルをQNNフォーマットにエクスポートするにはどうすればよいですか?

Pythonのexport()メソッドまたはCLIのformat="qnn"を使用してモデルをエクスポートできます。エクスポートではまずONNXモデルが作成され、次にONNX Runtime QNN Execution Providerを使用してローカルでQNNコンテキストバイナリにコンパイルされます。onnxruntime-qnnパッケージは、最初のエクスポート時に自動的にインストールされます。

from ultralytics import YOLO

model = YOLO("yolo26n.pt")
model.export(format="qnn")

Qualcommのアカウントやクラウドアクセスが必要ですか?

いいえ。QNNエクスポートは、QAIRTライブラリをバンドルしたonnxruntime-qnnパッケージを使用して、ローカルマシン上で完全に実行されます。Qualcommのアカウント、APIトークン、ネットワークアクセスは不要です。

UltralyticsのQNNエクスポートはQualcomm AI Hubと比較してどうですか?

Qualcomm AI Hubは、ホストされたSnapdragonデバイス上でモデルをコンパイル、プロファイリング、ベンチマークするためのQualcommのクラウドサービスであり、Qualcommのアカウントが必要です。UltralyticsのQNNエクスポートは同じQNN/QAIRTランタイム(Snapdragon CPU、Adreno GPU、Hexagon NPU)をターゲットにしていますが、ONNX Runtime QNN Execution Providerを使用してローカルでコンテキストバイナリをコンパイルします。アカウント作成、アップロード、待ち時間は一切ありません。.ptモデルからSnapdragon対応ビルドへ、標準のYOLOエクスポートワークフロー内で直接移行する最も迅速な方法です。

どのプラットフォームでエクスポートできますか?

onnxruntime-qnnは、Windows (x64およびARM64)およびLinux ARM64 (aarch64)向けの安定版wheelを提供しており、ONNX Runtime nightlyフィードでLinux x86-64のwheelも利用可能です。macOSにはwheelがないため、--use_qnnを使用してソースからONNX Runtimeをビルドするか、サポートされているプラットフォームでエクスポートしてください。コンテキストバイナリの生成はx64ホスト上で実行され、物理的なSnapdragonデバイスは不要です。

Qualcomm Snapdragon NPUでYOLOを実行するにはどうすればよいですか?

model.export(format="qnn")でエクスポートし、生成されたyolo26n_qnn_modelディレクトリをSnapdragonデバイスにコピーして、yolo predict model=yolo26n_qnn_model source=image.jpg(またはyolo val)を実行してください。UltralyticsはONNX Runtime QNN Execution Providerを介してコンテキストバイナリをロードし、Hexagon NPU上で実行します。「エクスポートされたYOLO QNNモデルのデプロイ」を参照してください。

QNNとSNPEの違いは何ですか?

QNN (Qualcomm AI Engine Direct、QAIRT SDKの一部) はQualcommの現在の推論スタックであり、旧式のSnapdragon Neural Processing Engine (SNPE) SDKに代わる推奨されるソリューションです。新規のデプロイメントはQNNをターゲットにする必要があります。

QNNモデルをyolo predictyolo valで実行できますか?

はい。onnxruntime-qnnがインストールされたQualcomm Snapdragonデバイス上では、YOLO("yolo26n_qnn_model")がQNN Execution Providerを介してコンテキストバイナリをロードし、他のフォーマットと同様にpredict/valを実行します。QNNハードウェアのないx86ホスト上では、コンテキストバイナリがSnapdragon NPUをターゲットとしているため、モデルを実行することはできません。

QNNエクスポートの出力は何ですか?

The export creates a directory (e.g., yolo26n_qnn_model/) containing the context-binary ONNX (yolo26n_qnn.onnx) and a metadata.yaml with class names, image size, and task information.

Contributors

コメント