WICの中から

機構設計者が株式投資や育児に奮闘するblog

M5StickVを使ってプラレールを画像認識させたかった

ちょっと前に、M5StickVを手に入れてました。
AIカメラが付いており、小型ながら単独でディープラーニングを用いた画像認識が出来るスゴいやつです。

デフォルトで人の顔を認識するようになってるのですが、せっかくなので自分が設定したものを認識できるようにしたいなーってことで、痛み分けまで持ち込めたので記録を残しておきます。

やりたい事

最近、ムスコが「カンカン踏切セット」を欲しがっています。

このセット、踏切にプラレールが近づいたときにアナウンスが流れるそうなんですが、新幹線・特急・SLの3パターンのアナウンスがあるんですよね。CM見てると、プラレールの種類に応じてアナウンスが変わってるように見えます。さすが令和にもなると、子供のおもちゃでも画像認識できるのか!

で、現実は↓でした。

f:id:temcee:20191104214439p:plain

今は令和でしょ?画像認識を使ってハイテク感を見せて欲しかった。

でもM5StickVなら簡単に画像認識できるのでは?新幹線とか在来線の区別とか、なんなら車両ごとを分けて認識できるのでは?

これがゴールです。

用意するもの

  • M5StickV
  • microSDカード
  • モバイルバッテリー

www.switch-science.com

本体はAmazonよりスイッチサイエンスさんが安いです。

microSDは相性で使えたり使えなかったり、みたいです。@ksasao さんが動作確認済みのSDをリストにしてくれているので、自分はそれを参考にしました。一応、上に貼ってるアフィのSDは自分が使って問題なかったものです。

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

M5StickVにはバッテリが積んでありますが、単独だと1分もたたずに落ちてしまうので、モバイルバッテリーを繋いで使うのが基本となります。何でも良いので用意しておきましょう。

V-Trainingを使えば素人でも画像認識できる!

公式で、画像撮ってアップすれば学習済みデータを吐き出してくれる、ありがたいサービスを用意してくれています。その名もV-Training。さすが令和の時代。

M5Stack - A series of modular stackable development devices

上のリンクにファームを焼くところから書いてあります。基本コレを読めばOKですが、自分もやったこと書いておきます。

Kflashでファーム焼き

V-Trainingのリンクに、ファームと書き込みツール(Kflash)のダウンロード先があります。

WindowsだとEasyLoaderを使って焼くのがシンプルそうですが、先にKflashを使って焼いてしまいました。まぁ、KflashならMacでも大丈夫なので、応用が効くってことで。
自分は、下記の設定で焼きました。

f:id:temcee:20191104222933p:plain

BootコードをM5StickV内SDカードへ移動

公式のページからコードその他が入ったzipを落として解答し、microSDに入れます。

f:id:temcee:20191105231811p:plain

で、それをM5StickVに挿入して起動すると認識させる物体を撮影するモードに入ります。撮影ボタン、Classの切り替えボタンは起動時に出てくる案内のとおりです。

f:id:temcee:20191105232511p:plain

f:id:temcee:20191105232548j:plain

下記のように、学習させたいモデルのみを写した写真を1class35種類撮っていきます。

f:id:temcee:20191105234241j:plain f:id:temcee:20191105234130j:plain f:id:temcee:20191105234154j:plain

撮影してる時はわからなかったけど、レンズかセンサにゴミが付いてますね。。。

撮影データをアップロード

撮影後にSDを見てみると、train, vaildの2つのフォルダが出来ており、中には撮影した写真がClassごとのフォルダの中に格納されています。(vailedでもvalidでもないのか...)
間違った写真がないか確認したら、train, vaildを同じ階層のままZipに圧縮しましょう。

f:id:temcee:20191105232903p:plain

Zipを圧縮したら下記ページからアップロードします。結果はメールで送られてくるので、受け取るためのアドレスを記載しておきましょう。

v-training.m5stack.com

f:id:temcee:20191105233502p:plain

学習が終わり、エラーが無ければ学習状況を示す(?)データと共に、学習済みデータとサンプルコードが送られてきます。

f:id:temcee:20191105233909p:plain

これらを再びmicroSDに入れて、M5StickVに差し込んで起動すれば、完成です。

結果

f:id:temcee:20191105235246j:plain

f:id:temcee:20191105235258j:plain

f:id:temcee:20191105235311j:plain

何となく、3種類とも認識出来ています。

f:id:temcee:20191105235342j:plain

ジェームスをトーマスと誤認。他にも角度や画角によっては認識が甘いところもあり、撮影データに工夫が必要みたいですね。とはいえ、こんなに手軽に画像認識できるのは素晴らしい!

撮影するときの背景とか、明るさとか、取る角度と種類とか。工夫すべき点は色々ありそうです。どのパラメータが結果に効いてくるのか、じっくり実験計画法やりますかね。精度を上げるためのアドバイスは随時募集中です。

エラー集

撮影データのアップロードに失敗する

タイミングが悪いのか、度々アップロードに失敗しました。何度かやってるうちにアップロード出来るので、気にせず上げましょう。

失敗メールが来た

こんなメールが2度送られてきました。

f:id:temcee:20191105234716p:plain

1度目は、train, vaildフォルダの上にもう一階層作ってからZip圧縮したための失敗です。
2度目は、そもそも撮影データが各35枚に満たなかった事による失敗です。

撮影モードのとき、撮影枚数が35/35となっているので十分かと思いましたが、34枚しかデータがありませんでした。撮り始めが1/35から始まるので、35/35は35枚撮り終わったことを意味するわけではないんですよね。

参考にさせていただいたページ

M5Stack - A series of modular stackable development devices

Image · MaixPy DOC

M5StickVで超お手軽エッジAI画像認識 - karaage. [からあげ]

https://colab.research.google.com/drive/1mirG8BSoB3k87mh-qyY3-8-ZXj0XB6h6

V-TrainingでM5stickV用学習ファイルを作った話|設備のマニアどっとこむ

brownie/README.ja.md at master · ksasao/brownie · GitHub

こんな記事も書いています。

temcee.hatenablog.com

temcee.hatenablog.com