20-01 MNISTデータセットを使った手書き文字認識

●今度は「手書き文字の認識」。係数やバイアスのHDLを変えるだけ!

 「道路標識の認識」を「信号機の認識」、「人・自動車・バイクの認識」、「コンクリートのひび割れの認識」と変更しましたが、さらに「
手書き文字の認識」を試みます。

 本章では図20‐01のように黒板にチョークで数字を書き、それをCMOSカメラ+FPGAでリアルタイム認識させます(
緑色で認識結果)。

図20-01 認識結果を緑色動画に上書き表示

●MNISTというデータセットを使う

 学習や推論に使う画像は、図20‐02のような「
MNISTデータセット」になります。黒板+白いチョークの文字認識ですから、ちょうど都合の良いデータセットといえます。


図20-02 MNIST推論用画像の最初の8枚。白黒、28×28画素になる

●MNISTをダウンロードしてみると・・・

 MNISTデータセットは学習用に60,000枚、推論用に10,000枚の画像を含みます。それらのダウンロードはKeras(*1)が用意する読み込み関数で行います。

(*1)ニューラルネットワークのライブラリ。Tensorflow上で動くようです。

 データセットには「画素値」と「ラベル値」が存在し、前者は画像そのもの、後者はその画像がどのクラス(0〜9、すなわち正解値)に属するかを示すものです。

 画像はクラスごとに分けられているわけではなく、0〜9までの画像が
ランダムに格納されています。たとえば推論用画像は図20‐02のように、最初が数字の7、次が2、その後 1, 0, 4, 1, 4, 9...と続きます。

●Pythonで画像ファイルを分類する

 本企画では画像をクラスごとに分けてフォルダに置きます。したがって学習・推論の
前処理として、次のようなPythonプログラムを実行します。
 @MNISTデータセットをダウンロードする。
 A各画像をPNG形式でファイルに落とす。
 B各画像をクラス(ラベル値)ごとにフォルダに分ける。

 上記の操作をするPythonプログラム(これ)を適当なディレクトリで実行すると(数分かかる)、図2‐03のように
0〜9のフォルダが現れます(*2)。

(*2)Pythonプログラムはこのサイトを参考にしました。

図20-03 各フォルダに学習用画像がある。合計60,000枚

●”0”フォルダには数字の”0”の画像がある

 各フォルダ内には図20‐04のようにフォルダ名に相当する数字の画像が入っています。それぞれ約6,000個、10フォルダで合計60,000の画像があります。これらは「
学習用」です。

図20-04 Pythonで画像をファイル化(PNG)→ラベル値で分類

●推論用画像もPythonで分類する

 「
推論用」の画像に対しても同じことを行います。このPythonプログラムを実行すると0〜9のフォルダが現れ、それらに相当する数字の画像が約1,000個づつ、10フォルダで合計10,000個の画像が存在します。

次のページへ

目次へ戻る