2393422_ja-JP

キャンセル
次の結果を表示 
表示  限定  | 次の代わりに検索 
もしかして: 

2393422_ja-JP

2393422_ja-JP

i.MX95 Neutron NPU用にYOLOv8/YOLO11 TFLiteモデルをコンパイルできません

こんにちは、NXPサポートチームの皆さん、

私たちはNeutron SDK v3.1.3を用いてFRDM i.MX95プラットフォーム上の物体検出を評価していますまた、NPU互換モデルを生成できません。Neutronコンバータはモデルを正常にロードしますが、 Neutron NPUに割り当てられたオペレーターは0個と報告します。

環境

  • 対象ボード:FRDM i.MX95

  • Neutron SDK: 3.1.3

  • Ultralytics: YOLO11とYOLOv8の両方でテスト済み

  • eIQツールキット:ONNXからTFLiteへの変換に使用

  • モデル:カスタムの単一クラスペグ検出器

トレーニング司令部

$ yolo detect train \ model=yolov11n.pt \ data=/visual_inspect_yolo/dataset/dataset.yaml \ imgsz=640 \ epochs=100 \ batch=16 \ project=モデル \ name=peg_detector_v8

エクスポートコマンド


$ yolo export \ model=models/peg_detector_v84/weights/best.pt \ format=tflite \ int8=True \ data=/visual_inspect_yolo/dataset/dataset.yaml

また、別のワークフローもテストしました。

  • PyTorchをエクスポート → ONNX

  • NXP eIQツールキットを使用してONNXをINT8 TFLiteに変換する

Neutron SDKでコンパイルした場合、両方のワークフローは同じ結果を生み出しました。

 

Neutron コンパイル

~/Downloads/eiq-neutron-sdk-linux-3.1.3/bin/neutron-converter--target imx95 --input best_int8.tflite --output my_model_int8_npu.tflite

 

コンバータ出力

コンバーターは次のように報告しています:

  • インポート後のオペレーター数:341

  • 最適化後の演算子数:367

  • 変換された演算子: 0

  • オペレーター変換率:0 / 367

  • Number of Neutron graphs: 0

警告

  • 警告:グラフの演算子はニュートロンにマッピングされていません。
  • 警告:変換されたモデルは入力モデルと同じで、演算子が中性子にマッピングされていないためです。
  • 警告:グラフにはサポートされていない浮動小数点演算子が含まれています!これによりコンバージョン率が低くなることがあります。

その他の情報

以下のケースでも同様の挙動が観察されました。

  • YOLO11

  • YOLOv8

  • ダイレクトUltralytics TFLiteエクスポート

  • ONNX → eIQ ツールキット → INT8 TFLite

生成されたすべてのTFLiteモデルは、Neutronコンパイラによって 0演算子をマッピング します。

質問

  1. YOLOv8またはYOLO11のオブジェクト検出モデルは、i.MX95用のNeutronコンパイラで公式にサポートされているのでしょうか?

  2. i.MX95 NPUをターゲットにしたYOLOモデル向けの推奨エクスポートパイプラインはありますか?

  3. 現在のNeutron SDK(v3.1.3)には既知の制限はありますか?YOLO検出ヘッドに関してですか?

  4. NXPはi.MX95 NPU向けに正常にコンパイルできるリファレンスYOLOv8/YOLO11モデルを提供していますか?

  5. 演算子マッピングを有効にするために、追加のコンパイラオプションや前処理手順が必要ですか?

i.MX95 Neutron NPUで動作することが知られているガイダンス、推奨ワークフロー、または参照モデルがあればぜひ教えていただけるとありがたいです。

よろしくお願いします。

Re: Unable to compile YOLOv8/YOLO11 TFLite models for i.MX95 Neutron NPU

そして、あなたの人生を本当に大切にしてください

本当に 、私がこのゲームを望むなら、私はこのゲームを L に x x 95 イノシシd.

私たちは今、AR A2 を手に入れたので、そのキャビリのつながり あなたたちの兄弟の絆を活用します 私たちはNXで実際にデを作ったことがあるし、あなたはこのマット最初に知られるだろうと、もっと早くアプリ報告されるだろう.

あなたの LPに感謝します

Re: Unable to compile YOLOv8/YOLO11 TFLite models for i.MX95 Neutron NPU

eIQ Model zooのyolo8mモデルをimx95ボードで試し、LF 2026年Q2リリースイメージを使いました。カーネルバージョンはNeutron SDK 3.1.2を使用して6.18.2です。うまくいく。

xing_lei_0-1783672312304 (1).png

まずは以下から試してみることもできます:

wget https://huggingface.co/EdgeFirst/yolov8-det/resolve/main/imx95/yolov8n-det-int8-smart.imx95.tflite

root@imx95evk:/usr/bin/tensorflow-lite-2.19.0/examples# ./benchmark_model--graph=yolov8n-det-int8-Smart.imx95.tflite --external_delegate_path=/USR/LIB/libneutron_delegate.so

詳細はREADMEのeiq-model-zoo/tasks/ビジョン/object-detection/yolov8を参照してください。NXP/eiq-model-zoo

さらに、モデルやコンプリエーションの詳細なログを添付することもできます。


Re: Unable to compile YOLOv8/YOLO11 TFLite models for i.MX95 Neutron NPU

コンバーターログに基づくと、最初に解決すべき問題は、生成されたTFLiteモデルに依然としてFLOAT演算子が含まれていることです。


警告:グラフにはサポートされていない浮動小数点演算子が含まれています!


i.MX95 Neutronの場合、ニュートロンコンバータへの入力は、演算子と量子化フォーマットがNeutronコンパイラと互換性のあるTFLiteモデルでなければなりません。特に、i.MX95中性子流は量子化されたTFLiteと対称int8重みを期待しています。UltralyticsエクスポートやONNXからTFLiteへの変換後もモデルにFLOAT演算子/テンソルが残っている場合、コンバーターは報告された結果と整合するNeutron互換の部分グラフを作成できない可能性があります。


変換された演算子: 0

中性子グラフの数:0


YOLOv8はi.MX95上で一部のフローにおいて評価されていますが、任意のUltralyticsエクスポートにおいて、エンドツーエンドのYOLOv8/YOLO11オフロードが完全に実現されるとは限りません。エクスポートされたTFLiteグラフによっては、モデルの一部のみがNeutronGraphに変換され、サポートされていない演算子はCPU上に残ります。したがって、次の推奨ステップは生成されたTFLiteモデルを検査・プロファイリングし、以下のことを確認することです:

  1. グラフは完全に量子化されており、
  2. FLOAT演算子はありません。
  3. 重みは対称な int8、
  4. 入出力テンソルタイプは互換性があり、該当する場合はNeutron変換器のuint8からint8への変換オプションで変換されます。
  5. デコードやNMSなどのYOLO後処理は、SDKで正確な演算子がサポートされていることが確認されない限り、NPUグラフの外に保管されます。

また、Neutron-Converter版とボード上のNeutronランタイム/ファームウェア/デリゲートが同じ互換性のあるSDK/BSPリリースから来ていることも確認してください。


推奨される手順として、NXP/eIQ変換パスをお試しください。

PyTorch -> 静的入力形状のONNX -> 代表的な較正データを用いたNXP/eIQ量子化 ->量子化されたTFLite -> Neutron-converter --ターゲットIMX95


モデルにuint8の入力/出力テンソルがある場合は、以下もテストしてください:

--入力値をuint8からint8に変換

--出力をuint8からint8に変換


FLOAT演算子を削除した後も変換結果にマッピングされた演算子が0と表示される場合は、以下の情報を共有してください。

- 詳細/プロファイリング出力を含む完全な中性子変換ログ

- TFLiteオペレーターリスト、

- テンソルデータ型と量子化パラメータ、

- FRDM i.MX95ボード上のBSP/実行時Neutronデリゲート/ファームウェアバージョンの正確なバージョン、

- YOLO検出ヘッドにNMSやその他の後処理が含まれているかどうか。

Re: Unable to compile YOLOv8/YOLO11 TFLite models for i.MX95 Neutron NPU

私のテストでは、 自分でトレーニングもエクスポートもしていません。eIQ Model Zooのプリ生成されたYOLOv8モデルを使い、i.MX95プラットフォームで動作することを確認しました。

私が実際に使用したコマンドはこれだけです。

./benchmark_model \

--graph=yolov8n-det-int8-smart.imx95.tflite \

--external_delegate_path=/usr/lib/libneutron_delegate.so

モデルでは:

wget https://huggingface.co/EdgeFirst/yolov8-det/resolve/main/imx95/yolov8n-det-int8-smart.imx95.tflite


カスタムモデルの場合、推奨されるNXPフローは以下の通りです:

PyTorch

ONNX(静的入力形状)

eIQツールキット ONNX2Quant

eIQツールキット ONNX2TFLite

量子化されたTFLite

Neutron-converter --ターゲットIMX95


あなたのモデルが報告しているので:

プレーンテキスト

変換された演算子: 0

Number of Neutron graphs: 0

警告:グラフにはサポートされていない浮動小数点演算子が含まれています!


あなたの生成されたTFLiteグラフは、eIQ Model Zooの参照モデルとは構造的に異なるのではないかと推測しています。まず最初におすすめしたいのは、以下の2つのモデルを比較することです:

  • 入力/出力テンソル型(INT8 vs UINT8)
  • FLOAT演算子の存在
  • グラフ内のデコード/NMSレイヤー
  • Netron / TFLiteアナライザーによって報告されたオペレーターリスト
Re: Unable to compile YOLOv8/YOLO11 TFLite models for i.MX95 Neutron NPU

推奨されるエンドツーエンドのワークフロー

  1. モデルトレーニング(PC)

お好みのフレームワークを使用してトレーニングしてください。

  • ウルトラリティクス YOLOv8
  • PyTorch
  • テンソルフロー
  • ONNXネイティブワークフロー

物体検出に関しては、NXPはすでにeIQモデルズーでYOLO参照レシピを提供しており、YOLOv8オブジェクト検出モデルも含まれています。[github.com][github.com]

例:

シェル

YOLO検出トレーニング

model=yolov8n.pt \

data=dataset.yaml \

imgsz=640 \

エポック数=100

`

  1. ONNX形式でエクスポート

NXPは一般的に、量子化および展開の前に、交換フォーマットとしてONNXを使用することを推奨しています。


YOLOエクスポート

model=best.pt \

フォーマット=onnx


Neutron イネーブルメントのプレゼンテーションは、以下に基づくフローを明示的に記述しています:

プレーンテキスト

PyTorch

ONNX

量子化

TFLite

Neutron コンバータ

訓練アーティファクトから直接展開を狙うのではなく、

  1. eIQツールキットを使用した量子化

Neutronのワークフロードキュメントでは、eIQ Toolkitの量子化ユーティリティの使用を推奨しています:

python -m onnx2quant \

model.onnx \

-o model_quant.onnx \

-c input::

に続く:

python -m onnx2tflite \

model_quant.onnx \

-o model_int8.tflite

もっと行を表示

この流れはi.MX95 Neutron イネーブルメント材料に明示的に記録されています。

  1. i.MX95 Neutron NPU用にコンパイル

Neutron-converter \

--ターゲット imx95 \

--input model_int8.tflite \

--出力 model_neutron.tflite

ニュートロンコンバーターは、NPUにオフロードできるNeutron特有のグラフパーティションを作成します。

  1. コンバージョン率の検証

NPUのデプロイが成功すると、以下のようなレポートが表示されます。

変換されたオペレーターの数 > 0

Number of Neutron graphs > 0

次のような場合:

変換された演算子: 0

Number of Neutron graphs: 0

この場合、モデルはNPUによって加速されていません。

あなたの抱えている問題は、このカテゴリーに該当します。

  1. FRDM-i.MX95に展開する

TensorFlow LiteでNeutronデリゲートを使い実行します:

./benchmark_model \

--graph=model_neutron.tflite \

--external_delegate_path=/usr/lib/libneutron_delegate.so

または

./label_image \

--external_delegate_path=/usr/lib/libneutron_delegate.so

i.MX Machine Learning User Guideでは、 Neutron Delegate がi.MX95 TensorFlow Liteモデルの加速機構として特定されています。

Re: Unable to compile YOLOv8/YOLO11 TFLite models for i.MX95 Neutron NPU

yolov8m_full_integer_quant.tfliteをどのように変換してIMX95のNPUで動作させたのか教えてもらえますか?
手順に従って環境設定データ(HOST)を経て...私たちにとって大いに助けになるでしょう。


Re: Unable to compile YOLOv8/YOLO11 TFLite models for i.MX95 Neutron NPU

こんにちは
私はUbuntu 24.04を使用していますが、eiq_toolkitは20.04.03でのみ利用可能です。

eiqToolkitとeIQ Toolkitを使った量子化の使い方

Re: Unable to compile YOLOv8/YOLO11 TFLite models for i.MX95 Neutron NPU

eIQ ToolkitはUbuntu 20.04で検証済みであるため、最も安全な方法は以下のとおりです。

Docker

Ubuntu 24.04ホスト上でUbuntu 20.04コンテナを実行します。

docker run -it --name eiq \

ubuntu:20.04 /bin/bash


次に、コンテナ内に必要な依存関係とeIQ Toolkitをインストールします。

Re: Unable to compile YOLOv8/YOLO11 TFLite models for i.MX95 Neutron NPU

eIQ Toolkit(onnx2quant)を使ってカスタムYOLOv8 ONNXモデルを変換する際に信頼度を維持できない

概要

こんにちは、NXPチームの皆さん、

私はfdm i.MX95上でeIQ Toolkitを使ってカスタムYOLOv8単一クラスオブジェクト検出モデルを展開しようとしています。

変換パイプライン全体は正常に実行されますが、onnx2quant の後、信頼度出力がすべてゼロになり、バウンディングボックス出力は有効なままです。

環境

- Ubuntu 24.04
- Python 3.10
- eIQ ONNX2TFLite 0.9.0
- ONNX ランタイム 1.21.1
- テンソルフロー 2.21
- Neutron-コンバータ 3.1.3
- ターゲット:FRDM i.MX95(tflite_runtime 2.19+Neutronデリゲート)

変換パイプライン

1. 列車
Yolo Detect Train Model=yolov8N.pt data=dataset.yaml imgsz=640 epochs=50

2. ONNXのエクスポート
Yolo export model=best.pt format=onnx opset=13

3. ONNXの検証
入力:(1,3,640,640)
出力:(1,5,8400)

ONNXランタイム推論:
信頼チャネル最大値 = 0.773

4. キャリブレーションデータセットの生成
形状:(1,3,640,640)
dtype : float32
範囲:0.0 - 1.0

5. 量子化
onnx2quant best.onnx -c "images;キャリブレーション/画像」 -o best_quant.onnx

また、以下の項目もテストしました。
onnx2quant best.onnx -u

どちらも同じ結果を生み出す。

6. 量子化されたONNXの検証
出力:(1,5,8400)

バウンディングボックスチャネルは有効のままです。

自信:
最小値 = 0
最大値 = 0
平均 = 0

デコードされた検出数 = 0

7. TFLite形式に変換する
onnx2tflite best_quant.onnx -o best.tflite

8. Compile for Neutron
Neutron-converter --ターゲット IMX95 --入力 best.tflite --出力 best_neutron.tflite

コンパイルに成功しました。
オペレーター変換率:278 / 325 (85.5%)

調査実施

検証済み:
• PyTorchモデルの動作
• ONNX輸出作品
• ONNXランタイム推論の動作
• キャリブレーションデータセットは正確です
• 実数およびランダムキャリブレーションで同一の結果が得られます
• TFLiteは量子化されたONNX出力を再現します
• NeutronはTFLite出力を再現します

この問題は以下以下に初めて現れます:

ONNX

onnx2quant

量子化されたONNX(信頼度がゼロになる)

追加の観察

NXPの参照モデル:
入力:(1,640,640,3) INT8
出力:(1,84,8400)INT8

私の改造モデル:
入力:(1,3,640,640) FLOAT32
出力:(1,5,8400) FLOAT32

カスタムYOLOv8モデルの信頼度を保つ推奨されるエクスポートや量子化のワークフローはありますか?

これは、(1,5,8400)出力を持つモデルのonnx2quantの制限やバグでしょうか?


Re: Unable to compile YOLOv8/YOLO11 TFLite models for i.MX95 Neutron NPU

AEチームと話し合っています。

Re: Unable to compile YOLOv8/YOLO11 TFLite models for i.MX95 Neutron NPU

Ara240のエンドツーエンド評価は実施されましたか?データシートには、シグモイドやNMSなどの後処理操作を実行できる2つのベクターコアが記載されています。コンパイラはNMSの操作をベクターコアにマッピングできますか?

Re: Unable to compile YOLOv8/YOLO11 TFLite models for i.MX95 Neutron NPU

YOLOv8の出力テンソルに適用される完全なINT8量子化( inference_output_type=tf.int8 )の根本的な制限により、信頼度出力が失われます。

YOLOv8 は、境界ボックスの座標と信頼度スコアを(1, 5, 8400)の形状の単一の出力テンソルにパックします。bboxの値は広いダイナミックレンジ(約640ピクセル)を持ち、信頼度スコアは約0から1の範囲にあります。出力テンソル全体が単一の量子化スケールを共有する場合、そのスケールは大きなbbox値(約640)によって支配され、信頼区間全体(約1)を表すために1つの整数レベルのごく一部しか残されません。その結果、INT8量子化後、すべての信頼度値は実質的にゼロに丸められます。

推奨される解決策
 onnx2quantを通す代わりに、Ultralyticsを使って訓練した .pt モデルからINT8 TFLiteを直接エクスポートし、それを neutron-converterに入力します:

# INT8 TFLite 直接エクスポート(キャリブレーションはトレーニングデータセットを使用)
yolo export model=best.pt \
            format=litert \
            imgsz=640 \
            quantize=8 \
            data=dataset.yaml \ 
            fraction=0.1

# ニュートロン  にコンパイル(変更なし)
ニュートロンコンバーター --target imx95 --input best_int8.tflite --output best_neutron.tflite 

入力および出力データの型は、np.int8であることを確認してください。

interp = tf.lite.Interpreter(model_path=TFLITE_INT8)
 interp.allocate_tensors()inp_d = interp.get_input_details()[0]out_ds = interp.get_output_details()inp_scale、inp_zp = inp_d[ "quantization" ]
 out_d = out_ds[0]
 out_scale、out_zp = out_d[ "quantization" ]

 print(f " 入力 dtype={inp_d['dtype']} shape={inp_d['shape'].tolist()}"
 f " quant=(scale={inp_scale:.6f}, zp={inp_zp})" )
 print(f " 出力 dtype={out_d['dtype']} shape={out_d['shape'].tolist()}"
 f " quant=(scale={out_scale:.6f}, zp={out_zp})" )# 形状から入力フォーマットを決定します
in_shape = inp_d[ "shape" ].tolist()# [1,3,640,640] または [1,640,640,3]
 in_shape[1] == 3 の場合:
 #NCHW
 src=img_nchw
それ以外:
 #NHWC
 src=img_nhwcif inp_d[ "dtype" ] == np.int8:
 src_int8 = np.clip(np.round(src/ inp_scale + inp_zp), -128, 127).astype(np.int8)
interp.set_tensor(inp_d[ "インデックス" ],src_int8)
それ以外:
 interp.set_tensor(inp_d[ "インデックス" ],src.astype(np.float32))interp.invoke()raw_out = interp.get_tensor(out_d[ "index" ])# int8 または float32 の可能性があります if out_d[ "dtype" ] == np.int8:
 dq_out = (raw_out.astype(np.float32) - out_zp) * out_scale
それ以外:
 dq_out = raw_out.astype(np.float32)dq_out= dq_out[0] # (5, 8400) 正規化 # 表示用にバウンディングボックスをピクセル座標に再スケーリング
BBOX_SCALE = 640.0tfl_bbox = dq_out[:4] * BBOX_SCALE # (4, 8400)
 tfl_conf = dq_out[4] # (8400,) 
Re: Unable to compile YOLOv8/YOLO11 TFLite models for i.MX95 Neutron NPU

遅れてごめんなさい。変換ワークフローを再現しようとしています。

今のところ一つ質問ですが、なぜ変換されたモデルのデータ型がFLOAT32なのか?INT8形式への変換を試してみましたか?ニュートロンNPUはINT8型を入力データとして必要とします。他のモデルの変換でも似たエラーに遭遇しましたが、根本原因はデータ型にあります。

Re: Unable to compile YOLOv8/YOLO11 TFLite models for i.MX95 Neutron NPU

こんにちは、あなたが共有してくれたコマンドを試しました...

しかしNeutron変換器はモデルの変換に失敗している...

参照用に添付のログをご覧ください

Re: Unable to compile YOLOv8/YOLO11 TFLite models for i.MX95 Neutron NPU

ログを提供してください。

タグ(1)
評価なし
バージョン履歴
最終更新日:
4 時間前
更新者: