このリポジトリでは、ptq後にNXPがリリースしたGoogleのFaceMeshモデルを使っていました:
nxp-demo-experience-demos-list/downloads.json at lf-6.12.3_1.0.0 ·NXP-IMX-support/NXP-demo-experienc...
しかしこのモデルは、468のランドマークポイントを持つGoogleの旧FaceMeshモデルに基づいています。
次に、Googleの新しいFaceMeshモデルに移行したいと考えています。これには478のランドマークポイントがあります。これをiMX 95 FRDMボードのNPU上で実行したいと考えています。そこで、これを量子化したかったのです。NXPのeIQ-neutron-sdk-linux-3.1.3を使っていますこのモデルを量子化するために。
この量子化の後、モデルのパフォーマンスは著しく劣化し、実際に使うにはほとんど使えない状態です。
当初はMIN-MAXオプションを使用して量子化していました。そのモデルは使い物にならなかった。次に、パーセンタイルオプションを使用してみたところ、パーセンタイルを95に設定した方がパフォーマンスが向上することがわかりました(これは回帰モデルの出力でしたが)。
しかし、それでも十分な性能は得られていません
1) NXPが古いFaceMesh(468)モデルのptqファイルを作成した際、どのオプションを使っていましたか?MIN-MAX?それともパーセンタイル?
2) 量子化後にパフォーマンスが著しく低下した場合、他に確認すべき事項はありますか?
3) CelebAデータセットでプロファイリングを行い、スクリプトのserialize_image.pyをモデルオプションで使いました。メディアパイプ全体を実行してキャリブレーションデータセットを作成するか、シリアル化スクリプトで変更すべきか
オプション提供
serialize_image.py:
-i
-<パス/トゥ/calib_bins>
-Fビン
-T float32
-0to1
-256、256
-NHWCレイアウト
-コRGB
TFLITE-Profiler:
--input
--データセット
--出力
TFLITE-クオンタイザ:
--input
--プロファイル
--quantize-inputs=false
--quantize-outputs=false
--量子化-キャリブレーション-方法= //最小最大値またはパーセンタイル
こんにちは@dhilshad。
NXPサポートにご連絡いただきありがとうございます!
1) 残念ながら、現時点ではその情報は入手できません。
2) この挙動は想定内です。クオンタイズは展開プロセスの一部に過ぎません。組み込みハードウェア上でモデルを変換・最適化するには、グラフ最適化、演算子マッピング、ハードウェア固有の変換、ランタイム検証など、いくつかの追加ステップが必要です。その結果、モデルがすでに量子化されていても、モデルの挙動や性能は異なることがあります。
新しいデザインや評価には、eIQ Oliveの使用をおすすめします。NXP i.MX プラットフォームでのモデル最適化と展開のためのよりモダンなフレームワークを提供するからです。ワークフローの更新と、現在の機械学習展開シナリオへのサポート強化が含まれています。
詳細については、以下のチュートリアルおよびドキュメントをご参照ください。
https://eiq.nxp.com/learning-hub/tools/olive/index.html
これらのリソースは、i.MX デバイスに機械学習モデルを導入するための推奨ワークフローやベストプラクティスをカバーしています。
よろしくお願いします、
チャビラ