2405169_ja-JP

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

2405169_ja-JP

2405169_ja-JP

eIQ Toolkit v1.17 PTQ はサイレントにスキップされ、出力 tflite はエラー メッセージなしで完全な float32 のままです

環境:
- ホスト:Windows11、eIQ Toolkit v1.17
- ターゲットSOC:NXP i.MX95 19X19ボード
- モデル:剪定されたMNIST CNN、入力形状[1,1,28,28]
- ONNXオペセット:12、純粋なFP32、事前挿入されたQDQノードなし。

問題の説明:
eiq-converter-onnx2tfliteプラグインを使用してPTQ量子化を実行しようとしています。
CLIとGUI Model Toolの両方がエラーや警告ログなしで変換を完了します。
しかし出力のtfliteモデルは依然としてフルフロート32です。
すべての重み、バイアス、および活性化テンソルは、スケール=0、ゼロ点=0です。つまり、PTQキャリブレーションは実際には実行されなかったということです。

私が試したこと:
前提条件として、.onnxファイルを用意しています。opsetが12のPythonファイル。
次に、eIQによる量子化を行いたい。量子化後、eIQによるNeutronコンバータを行います。
これには3つの方法があると思います。
量子化後、量子化が完了しているかどうかをdtype、scale、zpで確認できます。

  • 私はこれをGUI経由で行います。
ステップツール出力フォルダ出力 
STEP101_train_mnist_cnn.py01_train_mnist_cnn_outmnist_cnn.pth 
ステップ202_prune_test.py02_prune_test_outprune_after.pth 
ステップ303_export_onnx.py03_export_onnx_outhandwrite_cnn_pruned.onnx 
ステップ4GUI ONNX04_eIQ_量子化handwrite_cnn_pruned_quantizationed.onnx 
ステップ5GUI ONNX2TFLITE05_eIQ_quqntizedonnx2tfliteeIQ_quqntizedonnx2tflite.tfliteこの出力について疑問があります。すべてのスケールとzpは0です。つまり、量子化はありません。理由は分かりません。
ステップ6GUIコンバータNeutron06_eIQ_ニュートロンeIQ_quqntizedonnx2tflite_converted.tflite 
  • 私はこれをコマンドラインで qty+2tflite を使って一度に行います。
eiq-converter.exe --plugin eiq-converter-onnx2tflite --source D:\01_Work\AI_Project\mnist_new_demo\03_export_onnx_out\handwrite_cnn_pruned.onnx --dest D:\01_Work\AI_Project\07_CMD_OUTPUT\mnist_int8.tflite --input-shape "1,1,28,28" --精度 int8_ptq --calibration-dataset D:\01_Work\AI_Project\mnist_calib_imgs --quantize-input true
eiq-converter.exe --plugin eiq-converter-onnx2tflite --source D:\01_Work\AI_Project\mnist_new_demo\03_export_onnx_out\handwrite_cnn_pruned.onnx --dest D:\01_Work\AI_Project\07_CMD_OUTPUT\mnist_int8.tflite --input-shape "1,1,28,28" --精度int8_ptq --calibration-dataset D:\01_Work\AI_Project\mnist_calib_imgs --preprocessing "div:255.0"
この2コマンドを試しましたが、どちらも[成功]にはなりますが、すべてのスケールとzpが0、つまりクオンタイズがありません。理由は分かりません。

lzm_0-1786693994048.png

  • 私はこれをコマンドラインで quan+2tflite を使って 2 段階で行います。
python -m onnx2quant -c "input;D:\01_Work\AI_Project\mnist_new_demo\09_mnist_calib_npy4d" -o D:\01_Work\AI_Project\09_cmd_onnx_qunitiation\model_qdq.onnx D:\01_Work\AI_Project\mnist_new_demo\03_export_onnx_out\handwrite_cnn_pruned.onnx
eiq-converter.exe --plugin eiq-converter-onnx2tflite --source D:\01_Work\AI_Project\09_cmd_onnx_qunitiation\model_qdq.onnx --dest D:\01_Work\AI_Project\09_cmd_onnx_qunitiation\mnist_int8_final.tflite --input-shape "1,1,28,28"
試してみたら、.tflite ファイルが手に入りました。これはスケールであり、zpはすべて0ではない。
そしてこのmnist_int8_final.tfliteを使ってGUIのeiq-convert-neutronに接続しています。それから、.tfliteファイルを入手しました。スムーズにファイルできます。
しかし、iMax95で実行すると、
lzm_1-1786694055535.png
NPUでは動作していなかったことがわかります。
問題は私の.tfliteファイルにあると思います。ファイル。
そこでコマンドラインを使って正しい.tfliteを取得しようとしましたファイルには、まだエラー: 内部エラーがあります。
 lzm_3-1786694149754.png
lzm_2-1786694119859.png
観察結果の概要:
 
1. eiq-converter-onnx2tflite(GUIまたはCLI)を用いてネイティブPTQ仕上げをエラーなしで取得し、完全なfloat32モデルを生成する。量子化処理は暗黙のうちに省略されているようだ。
2. サードパーティのツール「onnx2quant」を使ってまずQDQ挿入ONNXを生成すると、0でないスケールとゼロポイントのTFLiteが得られます。
しかし、この外部量子化モデルは中性子変換器で完全に処理できず、グラフ最適化中に「ERROR: Internal Error!」を発生し、動作するNPU互換モデルを生成できません。
 
私はまだこのツールチェーンを習得中です。パラメータの使い方が間違っていたり、手順が間違っていたりするのかもしれません。
 
i.MX95で量子化されたMNISTのようなCNNを成功裏に実行したことがある方で、検証済みのワークフローを共有していただけませんか?
PTQを正しく実行し、NPU上でコンパイル・実行可能な有効なTFLiteモデルを作成する方法について、何かヒントがあれば本当にありがたいです。
 
ご返信よろしくお願いします。
 
 












タグ(1)
評価なし
バージョン履歴
最終更新日:
土曜日
更新者: