前回は、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 にカメラ画像が出力された。
一番下の段の手書き数字を認識させよう。
最初に 1 にピンクの四角枠を合わせて 1 を認識させる。
ハードウェアのCNN の認識時間は約 1.03 ms でソフトウェアでは、35.00 ms だった。ハードウェアの方はVivado HLS 2018.2 でのレイテンシとほぼ同じだった。ただし、四角枠の位置を調整してもどうしても 1 のはずが 3 と誤認されてしまう。ソフトウェアは以前のCNN で特徴マップが 10 個のものを使用している。こちらは、きちんと 1 と認識されている。
次に 2 を認識させよう。
こちらは 2 と認識した。
3 を認識させる。
3 も認識できた。
4 を認識させた。
4 もどう位置を調整しても 8 と誤認されてしまう。
5 を認識させた。
5 は問題無く認識できている。
6 を認識させた。
6 は 8 と誤認された。
7 を認識させた。
7 は 3 と誤認された。
8 を認識させた。
8 は問題無く認識された。
9 を認識させた。
9 は問題無く認識された。
0 を認識させた。
0 も問題なく認識できた。
1, 4, 6, 7 が誤認してしまう。以前の 10 個の特徴マップのCNN では、正常に認識しているので、手書き数字は大丈夫だと思うのだが。。。量子化の精度、および飽和演算に問題があるのか?はたまた過学習になっているのかを検証するために、今回の特徴マップが 3 個の時の float 演算のCNN を動作させてみよう。これが問題無く認識できているようならば、量子化の精度、および飽和演算に問題があるということになる。