14-01 OV5642カメラモジュールからの動画をリアルタイム推論!

●スライドスイッチ3つでモード変更

 このQuartusプロジェクトをFPGAに書き込むと(手順はここ)、CMOSカメラモからの
動画をリアルタイムに推論することができます(Youtubeにそのようす)。

 DE1-SoCにはスライドスイッチが10個あります(以降SW0〜9)。そのうちSW0〜2をモード設定用に使用します(表14-01)。

  表14-01 スライドスイッチは基板の縁側でL、内側でHになる
名前 Lのとき Hのとき
SW0 EMUMODE ノーマル(カメラ画像入力) エミュレータ(MNIST画像入力)
SW1 BINMODE ノーマル(白黒256諧調) バイナリ(白黒2諧調)
SW2 DISPMODE ノーマル(推論ON) 動画映すだけ(推論OFF)


●まずは普通に動画を映してみる

 DE1-SoCのSW0〜2を写真14−01(a)のように設定すると「動画映すだけモード」になります。すると同写真(b)のようにCMOSカメラからの白黒動画がVGAに映されます(*1)。


(*1)画面左の方に小さな点々が縦に流れる現象が見られます(原因不明)

  写真14−01 SW0がL、SW1がL、SW2がHだとカメラ画像が映る


●カメラの代わりにMNIST画像を映す

 次にSW0を写真14−02(a)のようにHにすると「エミュレータモード」になります。同写真(b)のようにMNISTテスト画像がVGAに映されます(*2)。


(*2)ROM内にMNISTテスト画像データがあり、図14−01のようにカメラ画像データに代わって入力される。

  写真14‐02 MNIST画像の最初の二十数個が横に並ぶ。それを画面下まで繰り返す


  図14‐01 カメラ画像とMNIST画像をスイッチで切り替え


●MNIST画像を推論してみる

 ここでSW2を写真14−03(a)のようにLにすると推論がONになります。同写真(b)のようにMNISTテスト画像の推論結果が
緑色で上書きされます。7,2,1,0,4,1,4,9,…と正解していることを確認します(*3)。

(*3)右の方に1つ推論されない数字があるが、演算結果が一定の閾値を超えない場合はそうなる。

  写真14‐03 緑色の数字が推論結果


●カメラ画像を推論してみるが…

 SW0を写真14−04(a)のようにLに戻してカメラ動画に戻し、同写真(b)のように黒板にチョークで文字を書いてかざしてみても映りが不鮮明でうまく推論されないと思います。

  写真14‐04 黒板に書かれた数字がはっきり映らない


●2値化すると文字がはっきりして推論しやすくなる

 
そこでSW1を写真14−05(a)のようにHにすると「バイナリモード」になり、諧調が「真っ白」か「真っ黒」の2通りになります。チョークで書いた文字がはっきりして同写真(b)のように推論されると思います(*4)。

(*4)緑色の「格子」の中に数字が入るように映すとうまく推論されます。

  写真14‐05 黒板を上下左右に動かしてもちゃんと推論される!

●MNIST画像を使ってFPGA内部演算を検証

 写真14−03の状態でSignalTapというロジックアナライザで検証してみましょう(ここにそのようす)。FPGA内部の信号の値がPython, Excel, 論理シミュレーションと一致しているのを確認できます。


目次へ戻る