”Kerasを使用したMNIST CNNで手書き文字認識4(実機確認)”の続き。

前回は、SDK でPYNQボードをコンフィギュレーションし、アプリケーションソフトの mnist_conv_soft_test.elf を起動してPYNQボードで動作を確認した。今回はアプリケーションソフトを動作させて、自分で書いた手書き数字を認識させてみよう。

SDK で Xilinx メニューから Program FPGA を選択して、FPGA をコンフィギュレーションして、mnist_conv_soft_test.elf を右クリックし、右クリックメニューからRun As -> 1 Launch on Hardware (System Debugger) を選択して、アプリケーションソフトをRun するとHMDI out にカメラ画像が出力された。
eda9ed29.jpg


一番下の段の手書き数字を認識させよう。
最初に 1 にピンクの四角枠を合わせて 1 を認識させる。
b96714e7.png


ハードウェアのCNN の認識時間は約 1.03 ms でソフトウェアでは、35.00 ms だった。ハードウェアの方はVivado HLS 2018.2 でのレイテンシとほぼ同じだった。ただし、四角枠の位置を調整してもどうしても 1 のはずが 3 と誤認されてしまう。ソフトウェアは以前のCNN で特徴マップが 10 個のものを使用している。こちらは、きちんと 1 と認識されている。

次に 2 を認識させよう。
3fea54bc.png


こちらは 2 と認識した。

3 を認識させる。
3aa4d04e.png


3 も認識できた。

4 を認識させた。
03a58595.png


4 もどう位置を調整しても 8 と誤認されてしまう。

5 を認識させた。
9b2e8306.png


5 は問題無く認識できている。

6 を認識させた。
6127dca0.png


6 は 8 と誤認された。

7 を認識させた。
f5ae58f6.png


7 は 3 と誤認された。

8 を認識させた。
260e422e.png


8 は問題無く認識された。

9 を認識させた。
7b7e7a87.png


9 は問題無く認識された。

0 を認識させた。
9983d964.png


0 も問題なく認識できた。

1, 4, 6, 7 が誤認してしまう。以前の 10 個の特徴マップのCNN では、正常に認識しているので、手書き数字は大丈夫だと思うのだが。。。量子化の精度、および飽和演算に問題があるのか?はたまた過学習になっているのかを検証するために、今回の特徴マップが 3 個の時の float 演算のCNN を動作させてみよう。これが問題無く認識できているようならば、量子化の精度、および飽和演算に問題があるということになる。