環境:
- ホスト: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で確認できます。
| ステップ | ツール | 出力フォルダ | 出力 | |
| STEP1 | 01_train_mnist_cnn.py | 01_train_mnist_cnn_out | mnist_cnn.pth | |
| ステップ2 | 02_prune_test.py | 02_prune_test_out | prune_after.pth | |
| ステップ3 | 03_export_onnx.py | 03_export_onnx_out | handwrite_cnn_pruned.onnx | |
| ステップ4 | GUI ONNX | 04_eIQ_量子化 | handwrite_cnn_pruned_quantizationed.onnx | |
| ステップ5 | GUI ONNX2TFLITE | 05_eIQ_quqntizedonnx2tflite | eIQ_quqntizedonnx2tflite.tflite | この出力について疑問があります。すべてのスケールとzpは0です。つまり、量子化はありません。理由は分かりません。 |
| ステップ6 | GUIコンバータNeutron | 06_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、つまりクオンタイズがありません。理由は分かりません。

- 私はこれをコマンドラインで 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で実行すると、

NPUでは動作していなかったことがわかります。
問題は私の.tfliteファイルにあると思います。ファイル。
そこでコマンドラインを使って正しい.tfliteを取得しようとしましたファイルには、まだエラー: 内部エラーがあります。

観察結果の概要:
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モデルを作成する方法について、何かヒントがあれば本当にありがたいです。
ご返信よろしくお願いします。