【M5stickV】3000円手のひらデバイスでリアルタイム畳み込み処理

ひょっこりはん

こんにちは,けいです.
今回はM5stickVで畳み込みニューラルネットワークを演算する方法について解説します.
今回の話は,今までの応用となるので,まだ以前の記事を読んでいない方はぜひ読んでみてください.

今回作るものは,畳み込みニューラルネットワークで顔認識を行い,もし,デバイスのカメラにひょっこり顔が現れたら,「はい,ひょっこりはん!」というシステムを作ることです.
これで,飲み会のむちゃぶり一発芸も乗り切ることができますね(笑)

コード解説

コード

SDカード内に以下のファイルを作成してください.

上のリンクのboot.py
初めのロゴのpicture3.jpg
ロゴの後の起動音logo.wav
ひょっこりはん!というためのhyokkori.wav

jpgファイルやwavファイルの注意点や作り方は以前の記事で説明したので,それを参考にしてください.

KPUモジュール

M5stickV上で畳み込みニューラルネットワークを行うためには,KPUモジュールを用います.

KPUモジュールに入っているYOLO2を使います。
yoloは高速で計算することができるモデルなので、M5stickVでもリアルタイムで動作させることができます。

import KPU as kpu
task = kpu.load(offset or file_path)
anchor = (1.889, 2.5245, 2.9465, 3.94056, 3.99987, 5.3658, 5.155437, 6.92275, 6.718375, 9.01025)
kpu.init_yolo2(task, 0.5, 0.3, 5, anchor)

上の文はyolo2の初期化を行っています。
kpu.load関数で引数に渡したモデルをロードします。
デフォルトの顔認証はフラッシュ内の 0xd00000 を渡します。

kpu.run_yolo2(task, img)

この関数で、畳み込み演算を実行します。
taskにはネットワークオブジェクト、imgには画像オブジェクトを入れます。
返り値は、モデルを見つけたら、Trueを返すようです。

まだ、やっていないのですが、kpuモジュールは画像オブジェクトしか計算できないのですが、データを画像オブジェクトに成形して、色々な学習ができそうです。

参考にさせて頂いたサイト

Sipeed公式ドキュメント

まとめ

最後までみて下さって、ありがとうございました。

下の記事にモジュールの解説をまとめてあるので、ぜひ読んでみて下さい。