M5StickVとは
M5Stack社が提供しているAIカメラです。(製品情報の詳細はこちらから)
コンパクトなサイズながら、単体で画像処理や顔認識・物体検出といった画像認識をすることができます。またプログラムの読み込みに関しても、microSDカードから読み込ませることができます。
M5StickVを用いた画像認識を実現する上で、学習済みモデル(kmodel形式)が必要となります。
しかし、このモデルを作成するためには、Kerasによる学習後、h5形式(Keras)→tflite形式(TensorFlowLite)→kmodel形式に変換する必要があり、環境構築や学習にかかるコストを考えるとなかなか大変そうだと思いました。
そこで、今回はV-Trainingを利用してモデルの生成と識別を試したので紹介したいと思います。
V-Trainingとは
M5Stack社が提供しているサービスで、学習データをアップロードすることでモデルを生成することができます。
http://v-training.m5stack.com/
V-Trainingの流れは以下の画像の通りです。(引用元)
ポイントとして以下の3点があります。
- M5StickVのカメラを用いて対象となる物体をこちらのプログラムで撮影し、microSDカードに保存(1classあたり最低35枚必要)
- microSDカードに保存された画像をV-Trainingにアップロード
- アップロード後、指定したメールアドレスに対して、生成したモデルおよびboot.py(物体を識別するプログラム)と起動時の画像をダウンロードできるURLが送られてくるため、それらをダウンロードし、microSDカードに入れて起動するとそのモデルを用いた識別が可能となります。
これだけでモデルの生成および識別が可能になります。
物体検出を試してみた
生成したモデルを使用して、物体検出を試してみました。
以下、試した例です。識別結果に応じてサーボモータを動かしています。
M5StickVを用いたベイマックスの識別。識別結果に応じてサーボモータを動かしています。 pic.twitter.com/3GJb4pi3vF
— クラクス (@kuracux) October 27, 2019
気づいたこと
対象物体の背景が変わっても影響があまりなかった💡
M5StickVにて撮影したものを学習データとしてそのまま利用しているため、対象物体の背景の影響を受けそうだなと思っていましたが、その点は影響があまりなく、物体の周囲が変わっても識別出来ました。
類似する物体の識別は難しい😢
上記のツイートにある例の場合、白い円形の物体と赤い円形の物体であっても認識してしまいました。
また、人の顔やトランプの柄(特にJ, Q, K)の判別も難しく、誤認識が起こりやすかったです。
これらのことから、識別時には似たようなものが映らない状況でかつ分類対象は大きく異なるものが良さそうです。
対象の物体以外が写ると最後に学習した物体だと判断される場合がある😪
例えば、3つの物体(a, b, c)を学習させてモデルを生成したとします。
このモデルとboot.pyを利用すると、a, b, cのどれも写っていないにも関わらず、cと分類されることがあります。
対処方法としては、背景画像のみを写したクラスを1つ用意することで、そのクラスだと分類されるようになります。
おわりに
V-Trainingを使用すれば比較的短時間でモデルが生成できるため、あまりコストも掛からず好きなものを分類できるようになります。手軽に試せるため、色々なデータで試してみると良いかと思います。