現在位置 : ホーム > PIXELA Technical Expertise > Vitis AI > AI推論の精度比較

Kria Starter Kitで、Vitis AIを動かす
AI推論の精度比較

公開日:2023年7月31日

KV260でAI推論するまでに、学習済みモデルを量子化して、コンパイルすることになります。

この2回の変換作業でAI推論結果がどのように変わるかを確認してみます。

AIモデルの量子化

Xilinxデバイスで、AI推論を低レイテンシと高スループットで行うため、AIモデルのプルーニングと量子化技術が採用されています。

プルーニングは Vitis AI Optimizerが必要ですが、有償となりますので本記事では扱わず、量子化のみ扱います。

量子化とは、AIモデルのパラメータを小さいビット数で表現することにより、精度をそれほど落とさずにAIモデルの軽量化を行う手法です。

詳細は Vitis AI Quantizer Flow を参照してください。

可能な限り精度は保つように処理されますが、量子化前後で全く同一の結果にはならない点は注意が必要です。

AIモデルのKV260向けコンパイル

XilinxからVitis-AIコンパイラが提供されています。

コンパイラは、AIモデルを最適化されたDPU命令シーケンスにマップします。

コンパイル前後で同じ結果になるはずですが、実際にどうなるのか本記事で確認してみます。

コンパイルの詳細は Compiling the Model を参照してください。

比較用AIモデルの生成

AIモデルのパラメータ調整で確認用コードを実行済みである前提とします。

output_my_mnist_2 ディレクトリに存在しているのが、パラメータ調整済み学習済みモデルとなります。

以下のファイルが生成されているはずです。

ファイル名 内容
output_my_mnist_2/my_mnist_2.h5 AIモデル
output_my_mnist_2/my_mnist_2_q.h5 量子化済みAIモデル

KV260用のAIモデルが未作成のため、 カスタムモデルを使用してみる の手順でコンパイルします。

Vitis-AI開発環境を起動、 conda activate vitis-ai-tensorflow2を実行して以下コマンドで生成します。

ARCH=./arch.json
MY_MNIST_NANE=./output_my_mnist_2/my_mnist_2_q.h5
OUTDIR=output_my_mnist_xmodel
OUTNAME=my_mnist_2_q

vai_c_tensorflow2 \
--model      ./${MY_MNIST_NANE} \
--arch  ${ARCH} \
--output_dir ${OUTDIR} \
--net_name   ${OUTNAME}

output_my_mnist_xmodel にKV260用のコンパイル済みAIモデルが出力されます。

ファイル名 内容
output_my_mnist_xmodel/my_mnist_2_q.xmodel KV260用AIモデル

正答率比較

MNISTのテストデータ10000件に対する各AIモデルのaccuracy(正答率)を比較します。

AIモデル accuracy
host_pc_model.h5 98.36%
quantized_model.h5 98.32%
my_mnist_test.xmodel 98.32%

accuracyは量子化によりわずかに劣化しました。

コンパイルでは変化がありませんでした。

推論傾向比較

推論結果は量子化、コンパイルで異なる可能性があります。

オリジナルのAIモデルの推論傾向を確認し、量子化、コンパイル前後で、どの程度変化があるか確認してみます。

まずは、オリジナルのAIモデルの推論傾向を見てみます。

ai_6_fig0

縦軸が正解で横軸がAI推論結果です。

間違いやすいのが9で、間違いにくいのが0という傾向が見られます。

また7を2と間違えるケースが一番多いようです。

次に、オリジナルと量子化後の推論結果を比較してみます。

縦軸がオリジナルの推論結果、横軸が量子化後の推論結果になります。

正解かどうかは関係なく、推論結果がどの程度変わったのかの確認になります。

ai_6_fig1

0,1,4は推論結果に変化なく、それ以外で変化がありました。

合計では23件変わることが分かりました。

最後に量子化後とコンパイル後の推論結果を比較してみます。

縦軸が量子化後の推論結果、横軸がコンパイル後の推論結果になります。

ai_6_fig2

推論結果に変化はありませんでした。

確認により、量子化で推論結果が変わるケースがあることが分かりました。

accuracyの変化量以上に量子化前後に差があるため、オリジナルで正答するケースが量子化により誤答に変わる、またはその逆のケースが発生していると考えられます。

一方でコンパイルでは推論結果に変化はありませんでした。

まとめ

AIモデルの量子化、コンパイルによる精度、推論結果の比較を行いました。

MNISTの例のみですが、精度を落とさずにKV260で実行できていることを確認できました。

また量子化により、同一の推論結果にならないケースがあることも確認できたと思います。

文中に記載されている各種名称、会社名、商品名などは各社の商標もしくは登録商標です。

PIXELA Technical Expertise

当社が技術学習するための情報を体系的に整理したものです。多くのエンジニアの一助になればと考え公開しています。

Vitis AI 記事一覧

Kria Starter Kitで、Vitis AIを動かす