Ultralytics YOLO27: ウェイティングリストに登録してください。
はじめる

Neutron を使用した NXP i.MX95 へのエクスポート

format="nxp" を使用して Ultralytics YOLO をエクスポートすると、NXP i.MX95 Neutron NPU 向けにコンパイルされた INT8 .tflite モデルが生成されます。エクスポーターは LiteRT の変換およびキャリブレーションパイプラインを再利用し、その後、NXP の Neutron SDK 3.3.0 コンパイラーを実行してエッジ AI のデプロイを行います。

このターゲットは Sony IMX500(format="imx")とは異なります。NXP i.MX8M Plus、i.MX93、その他の NXP プロセッサーでは異なるアクセラレータースタックが使用されるため、i.MX95 用の成果物はこれらのターゲットでは使用できません。

エクスポート#

Linux x86_64 上で、Python 3.10 以降を使用してエクスポートしてください。コンパイルは Python 3.13 および 3.14 で検証済みです。必要な変換依存関係は Ultralytics がインストールします。Neutron SDK は NXP のパッケージリポジトリから入手できます。

pip install -U ultralytics
pip install eiq-neutron-sdk==3.3.0 --extra-index-url https://eiq.nxp.com/repository
NXP i.MX95 にエクスポート
from ultralytics import YOLO

model = YOLO("yolo26n.pt")
path = model.export(format="nxp", imgsz=640, data="coco128.yaml")
# yolo26n_nxp.tflite を作成します

カメラ、照明、オブジェクトのサイズなど、デプロイ環境を代表する画像をキャリブレーションに使用してください。INT8 量子化によって精度が低下する可能性があるため、中間の yolo26n_int8.tflite と PyTorch モデルをホスト上で比較してください。coco128.yaml は便利な例ですが、アプリケーション固有のキャリブレーションや独立した検証データセットの代わりにはなりません。

引数説明
imgsz固定の入力画像サイズ(例: 640 または (480, 640))。
quantizeINT8(8)。自動的に有効になります。その他の精度はサポートされていません。
dataキャリブレーションデータセットの YAML、または分類データセット。
fractionキャリブレーション画像の割合または枚数。
deviceエクスポートおよびキャリブレーションで使用するデバイスです。コンパイル後のターゲットは i.MX95 のままです。

バッチサイズは 1 に固定されています。検出モデルのエクスポートでは、外部 NMS 用の生の予測値が使用されます。Ultralytics は予測と検証の際にこの後処理を適用します。このエクスポートでは、組み込み NMS と YOLO26 の NMS フリー top-k 出力はサポートされていません。

Platform#

Ultralytics Platform でモデルの Export タブを開き、NXP を選択します。画像サイズを選び、エクスポート完了後にコンパイル済み _nxp.tflite 成果物をダウンロードします。Platform は CPU ワーカー上でコンパイラーを実行します。NXP ボードが必要なのは、デプロイとパフォーマンス測定のときだけです。一般的なワークフローについては、Platform のモデルエクスポート手順を参照してください。

Platform では INT8 が固定設定として表示され、モデルのタスクに応じたエクスポーターのデフォルトのキャリブレーションデータセットが使用されます。現在、キャリブレーションの data または fraction の設定項目は公開されていません。独自の代表的な画像を使ってキャリブレーションするには、上記の Python または CLI のエクスポート例を使用してください。

i.MX95 にデプロイ#

Neutron SDK 3.3.0 と互換性のある BSP 用として、NXP が提供する TensorFlow Lite ランタイム、libneutron_delegate.so、Neutron ドライバー、ファームウェアをインストールしてください。ボードのセットアップとランタイムの互換性については、NXP のデプロイガイドに従ってください。

Ultralytics ランタイムは、ボードの tflite_runtime と Neutron デリゲートを読み込みます。Ultralytics が NXP ランタイムを選択できるよう、_nxp.tflite のサフィックスを維持してください。ボード上で次の予測および検証の例を実行します。

NXP モデルで予測する
from ultralytics import YOLO

model = YOLO("yolo26n_nxp.tflite")
results = model.predict("https://ultralytics.com/images/bus.jpg", imgsz=640)
NXP モデルを検証する
from ultralytics import YOLO

model = YOLO("yolo26n_nxp.tflite")
metrics = model.val(data="coco128.yaml", imgsz=640, batch=1)

TensorFlow Lite の直接的なベンチマークを行うには、ボードのベンチマーク実行ファイルを使用してください。

benchmark_model --graph=yolo26n_nxp.tflite --external_delegate_path=/usr/lib/libneutron_delegate.so

オペレーターのカバレッジとパフォーマンス#

コンパイルでは、サポートされているサブグラフが NeutronGraph オペレーションに置き換えられます。サポートされていないオペレーターは CPU 上に残ります。エクスポートが成功しても、すべてのオペレーションが NPU で実行されることや、CPU/NPU の切り替えオーバーヘッドがなくなることを意味するわけではありません。Attention、テンソルレイアウトの変更、後処理では、引き続き CPU での実行が必要になる場合があります。

エクスポートログには、変換されたオペレーター、NPU パーティション、メモリ推定値、NPU サイクル推定値など、NXP コンパイラーの統計情報が含まれます。これらの推定値には、CPU オペレーター、前処理、後処理、ランタイムのオーバーヘッドは含まれません。ターゲットボードで、フレーム全体のレイテンシ、ピーク RAM、デプロイ時のストレージを測定してください。理論上の TOPS やコンパイル後のファイルサイズから、これらの値を判断することはできません。

キャリブレーション済みの中間モデルを PyTorch モデルと比較して検証し、その後、同じデータセットと画像サイズを使用してボード上でコンパイル済みモデルを検証してください。ホスト上でのコンパイルや中間モデルの精度チェックだけでは、NPU 上での数値的な同等性やレイテンシは確認できません。アプリケーションレベルの検証計画については、モデルデプロイのベストプラクティスを参照してください。

よくある質問#

  • Linux x86_64 上で、Python では model.export(format="nxp", data="your_dataset.yaml")、CLI では yolo export model=best.pt format=nxp data=your_dataset.yaml を使用してください。エクスポーターはモデルを INT8 にキャリブレーションし、Neutron SDK 3.3.0 でコンパイルして best_nxp.tflite を生成します。事前学習済みの YOLO26n モデルについては、エクスポート例に従ってください。

  • はい。YOLO("best_nxp.tflite") を読み込んで predict() または val() を呼び出すか、yolo predict と yolo val を使用してください。どちらの方法でも、ボードの TensorFlow Lite ランタイムと Neutron デリゲートを使用します。_nxp.tflite のファイル名サフィックスを維持し、i.MX95 へのデプロイの説明に従って互換性のある NXP ランタイムをインストールしてください。

  • このエクスポートの対象は i.MX95 のみです。その他の NXP プロセッサーでは異なるアクセラレーターとデプロイ用ツールチェーンが使用されるため、i.MX95 Neutron の成果物を i.MX8M Plus または i.MX93 で再利用することはできません。別途用意されている format="imx" オプションは Sony IMX500 向けであり、NXP i.MX プロセッサー向けではありません。

  • Neutron は、サポートされているサブグラフを NPU 向けにコンパイルし、サポートされていないオペレーターは TensorFlow Lite 上に残して CPU で実行します。Attention、レイアウト変更、後処理によって、複数のパーティションや転送オーバーヘッドが生じる場合があります。コンパイラーの変換済みオペレーターの統計を確認し、ボード上でアプリケーション全体のプロファイルを取得してください。コンパイルが成功しても、すべてが NPU で実行されるとは限りません。

  • 代表的な画像でキャリブレーションを行い、独立した検証セットで PyTorch、INT8 の中間モデル、コンパイル済みモデルを比較してください。精度の確認には検証モードを使用し、i.MX95 ボード上でフレームレイテンシ、プロセスのピーク RAM、デプロイ時のストレージを測定してください。コンパイラーのメモリ推定値、モデルファイルサイズ、TOPS の数値だけでは、アプリケーションのパフォーマンスを判断できません。

コントリビューター

コメント

質問したり、結果を共有したり、ほかの人をサポートしたりできます。