20-04 FPGAにMNIST手書き文字認識を実装
●FPGA+CMOSカメラで作るリアルタイム検出システム
EXCEL+
VBAで生成したHDL
を道路標識/信号機認識のものと置き換えます。Quartusでコンパイル→プログラムし、NiosII SBTでマイコンソフトを書き込むと、「
手書き数字
のリアルタイム認識システム」となります。
FPGAに実装したら
このように
、黒板に白いチョークで数字を書き、カメラを向けてみましょう。推論結果が動画に緑色で上書きされます(
この動画
も参照)。
●スライドSW0〜5で各種モード設定
前述の動画ではDE1-SoCのスライドスイッチにより、各種モードを設定しています(表20‐02参照)。通常の認識は写真20‐21のようにSW2をH(2値化モード)、SW5をH(背景非表示)にして行います。
表20‐02 各種モードを設定するスライドスイッチ
名称
説明
SW0
エミュレーションモード
HでMNISTテスト画像表示
SW1
動画スルーモード
Hで動画映すだけ(推論無し)
SW2
2値化モード
Hで画像が真白/真黒の2値
SW3&4
しきい値レベル
判定の閾値がLLで最低/HHで最高
SW5
背景表示モード
Hで背景認識結果を
非表示
図20‐21 SW2とSW5をH、あとはL (基板の内側でHになる)
●2値化モードで数字がはっきりする
MNISTデータセットは白黒画像なのに対して、カメラ(OV5642)はカラー(RGB)です(図20‐22)。
「2値化モード」では、カラー画像を白黒化し、さらに適当なしきい値を境に、各画素を真白/真黒のどちらかにします(図20‐23)。それにより数字がはっきりして、認識しやすくなります。
図20-22 このカメラからの動画は元々カラー
図20‐23 2値化モードにすると白黒になる(
真っ白/真っ黒のどちらか
)
●背景の認識結果は表示させない
「背景表示モード」にすると
このように
、背景認識の結果も併せて表示されます。通常は
このように
、「表示させないモード」で認識させます。
●MNIST画像相当で認識率99%だとこんな感じになる
スイッチを図20‐21のように設定すると、エミュレーションモードOFF(L)、動画スルーモードOFF(L)、画像を2値化(H)、しきい値レベルは(LL)、背景は非表示(H)となります。
図20‐24はその設定での動作例、黒板に白チョークで書いた数字(0〜9)が全て認識されています(
緑色
で認識結果)。
図20-24 0から9まで認識。30×30画素の格子に入るとほぼ認識される
●動作確認用のエミュレーションモード
「エミュレーションモード」ではMNISTテスト画像を表示・推論し、Pythonとの一致を見ます(詳しくは次のページで)。
次のページへ
目次へ戻る