M5StickVで超お手軽エッジAI画像認識

f:id:karaage:20190811180324j:plain:w640

超お手軽エッジAIデバイス「M5StickV」

 ファブコア・カフェでお話しした「AIエッジデバイス入門」(詳細は以下記事参照下さい)。

 主に、Jetson Nanoについてお話ししたのですが、小ネタとして使えないかなと、最近私のTL周りで話題の「M5StickV」も買っていました。初めて触ったのがプレゼン当日ということもあり、プレゼン自体には直接活かすことは無かったのですが(プレゼン後の質疑応答で少し話題に出しました)、なかなか予想外に面白いデバイスでした。

f:id:karaage:20190809114331j:plain:w640
 外観

f:id:karaage:20190809114426j:plain:w640
 ケースに描いてあるこの可愛い図が回路図(!?)らしい。まあソフト開発にはたしかにこれで良いですね

 このサイズで、カメラの写真をリアルタイムでAI(ディープラーニング)で画像認識することができます。

 また、M5StickVは、マイクロSDカードを使うことで、色々可能性が広がるのですが、かなり相性が厳しいです。SDカードに関しては、@ksasao さんが、確認済みSDカードのリストを作成しているので、参考にしてみると良いと思います(公式情報ではないので、うまく動かなくても怒らないようにして下さい)。

M5StickV動作確認済み microSD - Google スプレッドシート

M5StickVセットアップ

 私はMacだったのでIAMASの小林先生 @kotobuki の以下記事が非常に参考になりました。

 ちょっと自分の好みで変えた部分もあるので、一応メモがわりに上記記事との差分を中心に自分の手順をメモしておきます。

ファームウェアのダウンロードと書き込み

 公式の手順は以下です。

 Downloadからファームウェアを、Flashから書き込みツールをダウンロードします。私のときは「m5stickV_Firmware_0630Fixed.kfpkg」と「kflash_gui_v1.2.5_macOS.dmg」でした。

 書き込みツールの設定は以下の通りです。

f:id:karaage:20190809115101p:plain:w640

 以下のように書き込みが進んで完了したらOKです。 f:id:karaage:20190809115113p:plain:w640

 書き込み完了すると同時に「チーン」と音が鳴って、M5StickVが起動して勝手に画像認識を開始し始めます。初期状態だと、顔認識をしてくれます。

f:id:karaage:20190809120606j:plain:w640
 フリー素材のロンスタさんを認識中!

シリアルログイン

 シリアルでログインできます。公式の「MaixPy IDE」というツールもありますが、ラズパイ等と同じ要領でターミナルからログインできます(ラズパイのケースは、この記事の末尾の関連記事を参照下さい)。今回は「CoolTerm」というターミナルソフトを使いました。

 「CoolTerm」は以下からインストールできます。

Roger Meier's Freeware

 パッケージ管理ソフトのHomebrew Caskが使えるなら、ターミナルで以下コマンド1発でインストールできます。

$ brew cask install coolterm

 Homebrewに関しては、以下記事参照下さい。

 「CoolTerm」のOptionsの設定は以下の通りです。

f:id:karaage:20190809115840p:plain:w640

 以下の通りログインできます。

f:id:karaage:20190809115827p:plain:w640

 この状態で顔認識すると、M5StickVのログなどが見れます。

M5StickV応用例

 まだあまり情報出てこないのですが、すぐ試せる面白そうな応用例を紹介します。

物体判別の音声付きデモ(Brownie)

 @ksasao さんのBrownieというソフトで、カメラを使って物体検出したものを音声で教えてくれるデモができます。使い方は、以下のサイトを参考にして下さい。基本的には、SDカードにファイルをコピーして、M5StickVに挿入して起動するだけです。

 認識する際は、ボタンを長め(1,2秒)に押さないといけないので注意して下さい。

 以下動かしてみた様子です。

 以前PCで似たようなデモを作って動かしたことがあるのですが、これだけのサイズでディープラーニングを使った同じようなデモが出来てしまうのは驚異的ですね。

Deep Janken on M5StickV

 自分で好きな画像を認識させるときに学習させる方法は、IAMASの小林先生 @kotobuki が公開しているGoogle ColaboratoryのNotebookが非常に参考になります。

 せっかくなので、私は上記のNotebookを参考に、過去にGoogleのAIカメラ「Vision Kit」で作った「Deep Janken」というジャンケンの手の形を認識するソフトをM5StickVで再現してみました。ジャンケンの手の形を認識する学習モデルを作るNotebookは以下になります。

 Google Chromeで上記のリンク先にアクセスして、クリックをしていくだけで教師データのダウンロードから、学習モデルの生成、モデルのダウンロードまでができます。

 Google Colaboratory自体に関しての使い方は活用方法は、以下記事を参照下さい。

 生成した学習モデルでテストしたところ、以下のように手の形をグー、チョキ、パーで認識できます。

f:id:karaage:20190811180324j:plain:w640

f:id:karaage:20190811180344j:plain:w640

 ノートブックでは、Confusion Matrixを確認できます。

f:id:karaage:20190812231828p:plain:w480

 これで、パー(pa)は、問題ないものの、グーとチョキをちゃんと区別できていないことがわかります。

 その他、Grad-Camという技術を用いて、AI(ニューラルネットワーク)が、認識の際に画像のどの部分に注目しているかを可視化してくれます。例えば、以下の画像の例では、チョキを認識している場合は、どこにも注目していないことが多いことが分かります。つまり、チョキを認識しているわけでなく、グーでもパーでもないからチョキと判断しているだけ(チョキの学習が不足している)かもしれないということが予想できたりします。面白いですね。

f:id:karaage:20190811225545p:plain:w640

 以下は動画です。ノートブックの可視化結果通り、チョキの認識率が悪いです。興味ある方は、ぜひ認識率向上にチャレンジしてみて下さい!

公式の学習済みモデル(MaixHub)

 以下サイトで様々な学習モデルがダウンロードできるようです(まだ試せてないです)。手軽に試せる学習モデルのプラットフォームが、ハードウェアとリンクした形であるのは面白いですね。

まとめ

 M5StickVで画像認識を試してみました。このサイズでディープラーニングで画像認識できるというのは、結構インパクトあって面白いですね。あと、電源入れるとすぐ音が出てデモが動く点も良いですね。M5シリーズのこの辺りのユーザーフレンドリーなサービス精神は結構好きです。

 正直オモチャ感はありますが、このオモチャ感も逆に良いかなと感じたりしています(笑)Raspberry Piも最初はずっとオモチャと言われていましたが、今や教育の枠を飛び越え色々なところに使われていますしね。

 ただ、今は単独でネットに繋がらないですし、できることは基本的に画像の物体判別と物体検出のみと限られています。Jetson Nanoのように、ネットで公開されているソフトをそのまま動かしたりはできません。なので中々使い所は難しそうですが、この記事で紹介した偉大な先人の知見のおかげで、自分の好きな画像を手軽に学習させることができますので、うまくハマれば従来のセンサーを置き換えるような面白い使い方ができる可能性は十分ありそうです。

 M5StickVがネットに接続できるようになれば、超手軽なAIカメラIoTデバイスとしての可能性も広がりそうでわくわくしますね。

参考リンク

 参考にしたサイトや、これからやりたいこと関係のリンクです。

M5StickV - () ◉ - ◉)<さいとてつや

はじめてのM5stickVレビュー——購入してから転送までのセットアップ

Wi-FiがないM5StickVを、M5StickCと繋ぎLINEに投稿してみるまでの手順 - Qiita

M5StickVのファームウェアビルド手順 | ラズパイ好きの日記

M5StickV での QRコード認識|Mori Naoyuki|note

関連記事