20-03 MNIST手書き文字認識のPython/Excel

●正解率は小数で99.62%

 Pythonプログラム(mnist_float.py)をJupyter Labで走らせると図20-14のように
99.62%になりました(走らせるたびに微妙に変わる)。この後「整数化」や「ビット削減・リミッタ追加」と進みます。


図20-14 Pythonを小数のまま走らせた結果


●FPGA実装のために整数化

 次にPythonを整数化します(mnist_int.py)。整数化の手法はGTSRBやlisa-croppedと同じになります。実行すると正解率は
99.44%になりました(図20-15)。なお、整数化前の重み係数とバイアスはこれを使っています。


図20-15 Pythonを整数化した結果


●FPGAに入りきるようにビット数削減

 最後にビット数削減、リミッタ追加したPython(mnist_pred.py)を実行します。正解率は図20-16のように
99.40%になりました。


図20-16 Pythonの段階でビット数を削減/リミッタ追加する


認識結果の例を48枚

 プログラムの最後に評価画像例とその判定結果が表示されます(図20-17)。背景を含めて16クラス、それぞれ3枚づつ、合計48枚ですが、
全部正解しています。


図20-17 正解なら緑、不正解なら赤字になる。背景も含めて全部正解


●PythonをEXCEL化する

 表20‐01は上記mnist_pred.pyを
EXCEL化したものです。その手法はGTSRBやlisa-croppedを参考にしてください。


 表20-01 各層のEXCELファイル
1層目 mnist_layer1.xlsm
2層目 mnist_layer2.xlsm
3層目 mnist_layer3.xlsm
4層目 mnist_layer4.xlsm
5, 6層目 mnist_dense56.xlsm

●重み係数とバイアスを生成してオーバライト

 VBAで
重み係数バイアスのHDLを生成します。重み係数のHDLは各フォルダ(w1rom, w2rom,... w6rom)のファイルと置き換え、バイアスのHDLはconv_layer1〜6.vhd内のBIAS_XXと置き換えます。これらもGTSRBやlisa-croppedと同じように進めます。

●カメラエミュレータROM、推論ラベルパターンROMも置き換え

 
カメラエミュレータのHDLはcamromフォルダのファイルと置き換え、推論パターンのHDLはROM_PAT.vhdの中身と置き換えます。それらHDLの生成にはmnist_misc_gen.xlsmを使用します。このEXCELの作成法・使用法もGTSRBやlisa-croppedを参考にしましょう。


●FPGA実装へと進む

 生成されたHDLをQuartusプロジェクトにオーバライトして論理合成→プログラムします。それだけで認識のようすが違ってきます(道路標識/信号機認識だったものが「
MNIST手書き文字の認識」になる)。

次のページへ

目次へ戻る