kawasan_mt
2025年6月25日 17時19分
いつもお世話になっております。
以下の件に対してご指導をいただけると助かります。
よろしくお願いいたします。
・やりたいこと:
物体検出としてYOLOv8n利用をターゲットにしている
・現状:
NPU指定時にスループットがでない。(CPU利用時:1.25fps、NPU併用時:0.2fps)
onnx化し、Armadillo-X2のonnxruntimeで動作するが以下エラー(ログの279行目以降を参照)が発生。
fallbackが発生している可能性あり。
E [vsi_nn_CalcReshapeTensor:1410]Wrong reshape parameters.
E [setup_node:473]Setup node[4] RESHAPE fail
※エラーログを添付 2025-06-25_YOLOv8nをONNX動作(CPUとNPU).log
・推測:
エラーの正確な意味は分からないが、onnx内のReshapeノードの4つ目でパラメータエラーが起きていると推測
Netronで見たところ、4つ目のReshapeノードは1x64x8400→1x4x16x8400を行っている。
(これが問題の起きているノードと仮定)
※ Netron 4つ目のReshape画像添付 01_RESHAPEの4つ目.png
・このReshapeノードだけが3次元→4次元変換を行っている。(他のReshpeノードは2次元、3次元変換)
・このReshapeノードだけが入出力サイズが大きい(他のreshpeは1x144x20*20、1x1x4x8400程度)
テンソル形状やテンソルサイズに制限がある可能性を考えている
テンソルサイズの制限の可能性を考え、96x96の画像を試したが改善せず。
よってテンソル形状に問題がある可能性が高い。
・確認事項:
①上記の対策方法をご存じないでしょうか?
②NPUの仕様書をいただけないでしょうか?
対応している演算ノードや、テンソル形状及びサイズ制限を把握したい。
※swish,sigmoid,tanhの非線形関数
ReLU,ReLU6,LeakyReLUの分段線形関数
HardSwish,HardSigmoidのような非線形関数に対する線形近似関数
Add,Sub,Mul,Div,Exp,Log等の演算関数
テンソル操作:Reshape,Transpose,Squeeze,Flatten
③Armadillo-X2で物体検出の実績があるモデルをご紹介いただけますか?
YOLOv3,v5、MobileNet-SSD v2以外にあれば。
本NPUとの相性の良さも含めて情報があると助かります。
・補足
Windows 10環境にてYOLOv8n.ptをONNX形式に変換する作業のLOGを添付 2025-06-25_ONNX変換.txt
==========
製品型番:Armadillo-X2
Debian/ABOSバージョン:3.20.2-at.1
カーネルバージョン:5.10.222-0-at
3G/LTE モジュール情報 (Debianのみ):
その他:/opt/firmware/etc/imxlib_version = 2.2.0
==========
ファイル | ファイルの説明 |
---|---|
2025-06-25_FILEs.zip | 操作LOGファイル、Netron画像、スクリプト(ONNX変換、推論実行) |
コメント
kawasan_mt
佐藤様
ご返信ありがとうございます。
>> ①上記の対策方法をご存じないでしょうか?
>申し訳ありません。すぐに回答できるような方法は持ち合わせておりません。
>こちらでも調べてみます。
よろしくお願いいたします。
>NXP がリリースしている "i.MX Machine Learning User's Guide" というものがあります。
情報ありがとうございます。
参考に読んでみます。
>申し訳ありません。YOLOv3,v5、MobileNet-SSD v2以外でこちらで試したことがあるものはありません。
承知しました。
お手数ですが、何か追加で情報がありましたら助かります。
よろしくお願いいたします。
at_yo.iwasaki
岩崎です。
ONNXランタイムではありませんが、
TFliteでよろしければ私の手元の環境で動作いたしました。
(CPU動作時:約1FPS , NPU動作時:約11FPS)
動作を確認したスクリプト(先日いただいたyolov8n_onnx_cam_opset14.pyを改造したもの)
を添付します。
拡張子を.pyに変えて動作させてください。
※後述するTFlite形式のモデルファイルとスクリプトを同じディレクトリに置いて実行する必要があります。
スクリプトを動作させるためにはONNX形式からTFlite形式のモデルへの変換が必要です。
以下に変換の手順を示します。
■ONNX→TFlite変換手順
・"convert_yolo2onnx_opset14.py"を使用してONNX形式のyolov8nモデルを作成
・お客様の環境に以下のonnx2tfをインストールしていただきます
https://pypi.org/project/onnx2tf/1.0.6/
(公式:https://github.com/PINTO0309/onnx2tf)
・以下のコマンドを実行
onnx2tf -i yolov8n.onnx -oiqt -iqd uint8 -oqd uint8
・実行したら"saved_model"ディレクトリができます
・"saved_model"の中に”yolov8n_full_integer_quant.tflite”が出力されるのでスクリプトと同じディレクトリにコピーしてください
ファイル | ファイルの説明 |
---|---|
yolov8n_tflite_cam.py_.txt |
kawasan_mt
岩崎様
情報ありがとうございます。
試しに変換をしようとしましたが、
>pip install onnx2tf==1.0.6 >onnx2tf -i yolov8n.onnx -oiqt -iqd uint8 -oqd uint8 usage: onnx2tf [-h] -i INPUT_ONNX_FILE_PATH [-o OUTPUT_FOLDER_PATH] [-osd] [-nuo] [-b BATCH_SIZE] [-ois OVERWRITE_INPUT_SHAPE [OVERWRITE_INPUT_SHAPE ...]] [-k KEEP_NCW_OR_NCHW_OR_NCDHW_INPUT_NAMES [KEEP_NCW_OR_NCHW_OR_NCDHW_INPUT_NAMES ...]] [-rari64 | -rarf32] [-rasin] [-racos] [-rlr] [-rpw] [-rgn] [-rng] [-rhs] [-me MVN_EPSILON] [-prf PARAM_REPLACEMENT_FILE] [-n] onnx2tf: error: unrecognized arguments: uint8 uint8
と、環境が揃っていない様で変換ができませんでした。
よろしければ、動作環境を教えていただけますか?
よろしくお願いいたします。
at_yo.iwasaki
岩崎です。
申し訳ありません。
私が紹介したonnx2tfのリンクがバージョンの古いものになっておりました。
(1.0.6では-oiqt、-iqdオプションはありません)
以下の最新版をインストールしなおしていただければと思います
https://pypi.org/project/onnx2tf/
また、
convert_yolo2onnx_opset14.py
の内容も変更する必要があることがわかりました。
(現状のコードで出力されるonnxファイルを使ってtfliteに変換してもX2上で動作自体はするのですが、予測結果が全て0になってしまいます)
変更したconvert_yolo2onnx_opset14.pyを添付します。
手順を改めてまとめます
・"convert_yolo2onnx_tflite_opset14.py"を使用してONNX形式のyolov8nモデルを作成
(一緒に「yolov8n_saved_model」ディレクトリとディレクトリの中にtfliteファイルが生成されますがこれらは無視してください)
・onnx2tf -i yolov8n.onnx -oiqt -iqd uint8 -oqd uint8
を実行
・出来上がった"saved_model"の中の”yolov8n_full_integer_quant.tflite”と、"yolov8n_tflite_cam.py"をX2のコンテナ内の同じディレクトリにコピー
・https://manual.atmark-techno.com/armadillo-x2/armadillo-x2_product_manu…
の「6.2.13.2. TensorFlow Lite を使う」の節に従って必要なパッケージをインストール
・"yolov8n_tflite_cam.py"を実行
となります。
どうぞよろしくお願いいたします。
ファイル | ファイルの説明 |
---|---|
convert_yolo2onnx_tflite_opset14.py_.txt | |
yolov8n_tflite_cam.py_.txt |
kawasan_mt
at_yo.iwasaki
岩崎です。
私の環境は以下の通りです。
OS:Ubuntu 24.04.1 LTS(Windows11 proのWSL2上で動作)
Python: Python 3.12.7
Ultralytics: 8.3.162
>ai_edge_litertパッケージが必要そうですが、pip installできません。
以下のフォーラム曰く、Windowsではai_edge_litertをインストールできないようです。
https://github.com/ultralytics/ultralytics/issues/20882#issuecomment-29…
大変申し訳ございませんがlinux環境でお試しいただけませんでしょうか?
上記のWSL環境であればMicrosoft storeでインストールすることが可能です。
どうぞよろしくお願いいたします。
kawasan_mt
at_makoto.sato
2025年6月27日 10時44分
佐藤です。
>
> ・確認事項:
> ①上記の対策方法をご存じないでしょうか?
申し訳ありません。すぐに回答できるような方法は持ち合わせておりません。
こちらでも調べてみます。
> ②NPUの仕様書をいただけないでしょうか?
> 対応している演算ノードや、テンソル形状及びサイズ制限を把握したい。
> ※swish,sigmoid,tanhの非線形関数
> ReLU,ReLU6,LeakyReLUの分段線形関数
> HardSwish,HardSigmoidのような非線形関数に対する線形近似関数
> Add,Sub,Mul,Div,Exp,Log等の演算関数
> テンソル操作:Reshape,Transpose,Squeeze,Flatten
NXP がリリースしている "i.MX Machine Learning User's Guide" というものがあります。
こちらはどうでしょうか
https://community.nxp.com/pwmxy87654/attachments/pwmxy87654/imx-process…
> ③Armadillo-X2で物体検出の実績があるモデルをご紹介いただけますか?
> YOLOv3,v5、MobileNet-SSD v2以外にあれば。
申し訳ありません。YOLOv3,v5、MobileNet-SSD v2以外でこちらで試したことがあるものはありません。