ESP32は深い学習の夢を見るか?[6](arduinoでリアルタイムDeepLearning)


目的

 「前々前回」arduinoでDeepLearning出来る事を布教しました。
 その後、esp-idf環境ではリアルタイムDeepLearningが可能な事を確認しました。
 時間とゴニョゴニョが無いので、arduino側はそのままにしておりました。
 しかし、ほっといたらarduinoが拗ねるといけません。
 ◆◆◆ そうだ、arduinoでもリアルタイムDeepLearningしてみよう ◆◆◆
 今後も同じ扱いに出来るかどうかは不明。

経緯

 arduino環境はDeepLearning出来ることは確認したので、esp-idf環境で完成してから反映させる予定でした。
 しかし、「TTGO T-CAMERA」が以外に早く入手出来てしまった。

 デモ環境を調べると、なななんとarduinoでは有りませんか。
 これはやるしかないと言う事で。
 1. 「TTGO T-CAMERA」の「デモ環境」をコンパイル。
  でもエラーが出て、コンパイルが通らない。(おいおい)
 2. この辺り「TTGO T-CAMERAをSTAモードで起動する 」を参考にさせて頂き改変しコンパイル。
  ※エラーの回避策は上記と一寸違うが。
 3. うまくいったので、ブラウザで動作確認。
 4. NNCに食わせる、グレィスケールの画像が出せないのには参った。(ライブラリが腐っているような)
 5. 何とかしてからarduino-nncと結合し、コンパイルが通るようにした。
 6. カメラで数値画像を捉え、DeepLearningしてMNIST画像(0-9)をリアルタイム認識。(おお!一応できたぞ)

前提条件(前々前回と同様)

 以下のソフトを予め導入の事。
 1. neural_network_console (当たり前、for Windows 8.1/10_64bit 1.4.0にて検証)
 2. arduino開発環境     (ライブラリの追加が必要になります、エラーが出るのでzipを探す)
 3. visualstudio(2017)    (自分好みにツールの変更を行いたい場合)

neural_network_consoleでの操作

 「前々回」と同様。

arduinoによるEVALUATION

 arduinoでコンパイル、実行可能な形で下記に格納していいる。
   arduinoによるDeepLearningのEVALUATIONソフト
  ※app_camera.cpp内にWiFiのSSID等の設定が必要。
 1. 「前々前回」を参考に、arduinoの動作環境を設定して、コンパイルを実行する。
 2. ディスプレイに下図のようなMNIST画像を拡大して表示する。
 3. 「 画像収集ソフト」を起動し、画像読込を行う。
  ※画像収集のタイミングで画像認識を行っている。単独で動かしたい場合はarduino-nnc-cam.ino loop(){}の//nnc_loop();の//を削除。
 4. ディスプレイ上の数値画像をカメラで撮影する。(例えば9)
  ※画像は外光の影響を避けた状態で、なるべく画面いっぱいに、カメラを傾けずに撮影するのがコツ。

 5. 下記のようにシリアルに表示され、( 9 )と認識されれば成功。
  ※上記画像(0-9)を一通り認識できる事を確認している。
   esp-idf版とほぼ同様でが、エラー(他の数字と誤認識)の数値が上がっている。

    Pos= -3 -1
    ............................
    ............................
    ............................
    .........OOOOOOO............
    ........OO.....O............
    .......OO...................
    ......OOO...........O.......
    .....OOO...........OO.......
    .....OO...........OOO.......
    .....OO...........OOO.......
    .....O............OO........
    ....OO...........OOO........
    ....OO...........OOO........
    ....OOO.........OOO.........
    .....OOO......OOOOO.........
    .....OOOOOOOOOOOOOO.........
    .......OOOOOO..OOO..........
    ...............OOO..........
    ...............OOO..........
    ...............OOO..........
    ..............OOO...........
    ..............OOO...........
    ..............OOO...........
    .............OOO............
    .............OOO............
    .............OOO............
    .............OO.............
    ............................
     +0.000 +0.000 +0.000 +0.458 +0.000 +0.000 +0.000 +0.007 +0.079 +0.966 ( 9 )
    PGM: 39200B 142ms

「TTGO T-CAMERA」使用上の注意

 1. 上記にも書いたが、デモプログラムはそのままでは動作しない。黒魔術が必要。
  ESP32-CAMERA側での改善が望まれる
 2. WiFiの設定
  app_camera.cpp内にWiFiのSSID等の設定が有る。
  これを設定しないとデモプログラムは先に進まない。(....が表示されるだけ)
 3. 標準の魚眼レンズでは認識が悪い。
  標準では魚眼レンズ付きとなっているが、画像の周辺が歪むので認識に影響が出ている。
  標準レンズに交換することにより、同程度の認識になる。(魚眼の方が高いのに)
 4. 温まると起動が遅くなる。
  温まると(?)「Brownout detector was triggered」が発生し、再起動を暫く繰り返す。
  ※当方だけの現象かも知れない。アンテナの当たりを軽く撫ぜてやると機嫌がよくなる。
 5. グレィスケールが使えない。
  「PIXFORMAT_GRAYSCALE」を指定すると「2BPP/YUV422」で出力される。
  仕方が無いので、Yだけを取り出し半分に圧縮してグレィスケールを作成。でもメモリは倍(38400バイト)も使っている。

デモプログラムの他機種への転用

 デモプログラのピン設定を書き換え、他の環境(esp-idfでの動作環境)で動作確認を行った。
 結果的には画像認識は上手くいっているが、画像にラインが表示される。
 クロックを12MHzにする事により、多少緩和される。(10MHzはダメ)
 10MHzでダメな事より、クロックスピードではなくデモプログラムに何か落とし穴が有る模様だが、良く判っていない。



 今後は src main内のc_source 派生のプログラムを差し替えれば(一部変更要)、esp-idf版に追随できる。(多分)
 なお、もし追試する奇特な方がおられた場合、上記記載内容は無保証であり、各自の責任においてご利用願います。