CPUもOSも使わずに手書き数字を認識、個人がFPGAだけで組んだ回路を公開

機械学習を動かす機器には、ふつうCPUが載っている。OSが立ち上がってモデルを読み込み、推論のプログラムが計算を回す。回路の構成を後から書き換えられる半導体、FPGAを使う場合も、多くはCPUの脇で重い計算を肩代わりする補助役にとどまる。Zakriya Asif Paracha氏は、その前提をすべて外した手書き数字の認識装置を作り、設計一式をGitHubで公開した。CPUもOSもなく、FPGAの中にCPUを組み上げる「ソフトコア」も置いていない。

中身のニューラルネットワークは小さく作ってある。28×28ピクセルの画像を受け取り、32個の中間層を経て、0から9までのどれらしいかを出す。PyTorchを使い、手書き数字の定番データセットMNISTで8回学習させた。入力は0から1の範囲に整えず、カメラ側の回路が出す0から255の値をそのまま扱う。学習の段階から、載せる先のハードウェアに合わせてある。

重みはすべて8ビットの整数に落とした。中間層の計算結果を8ビットへ戻すときも、割り算ではなく2進数の桁をずらす。FPGAに割り算の回路を組まずに済ませるためだ。認識率は32ビットの小数で94.75%、8ビット整数で94.57%と、下がり幅は0.18ポイントにとどまった。重みの容量は98KBから25KBへ減り、Digilentの学習用ボード「Basys 3」に載るArtix-7の内部メモリーに収まった。

動作は7つの段に分かれ、そのすべてを回路として組んである。カメラの「OV7670」には、電源投入時にFPGAが75回のレジスタ書き込みを直接送って設定する。ここにもマイコンは挟まない。取り込んだ640×480の映像は、白黒化と間引き、切り出しと平均を経て、約0.13msで28×28まで縮む。続く白黒反転と2値化は記憶素子を使わない配線と演算だけの回路で、クロックを1回も消費しない。推論は掛け算と足し算を決まった順に繰り返す回路が担い、2層分で5万984クロック、100MHz動作で約0.51msで終わる。

結果はVGA出力と7セグメントLEDへ同時に出る。画面には処理の途中経過が4種類並び、LEDには数字と確信度が出続ける。公開したのは学習と量子化のPythonコード、7段分のVerilog、ピン配置、書き出した重みで、ライセンスはMITとしている。学習済みの小さなモデルを、応答の時間を一定に保ったまま動かしたい人には参考になる作りだろう。

関連情報

fabsceneの更新情報はXで配信中です

この記事の感想・意見をSNSで共有しよう
  • URLをコピーしました!

最新記事

YouTube / PodCast

【PR】読んで役立つ注目記事

目次