Arducam Pico4ML TinyMLを触ってみた

Switch Scienceで面白そうなボードを見つけたので買ってみました。

www.switch-science.com

最近注目されているTiny MLのためのRaspberry Pico互換ボードです。

もともとマイコンのような安価なガジェットを使った高度な処理をするというところに魅力を感じていて、そのポテンシャルを触って体感したいなと思ってました。

というわけで今回は一通りデモを触るだけですがボードを動かしてみたいと思います。

開封の儀

付属品はマニュアルとスイッチ付きのマイクロUSBケーブルです。

このスイッチ付きっていうところがファームウェアを書き込む作業をするときのことを想定されていていいですね!

f:id:KMiura:20220319201736p:plain

環境構築

こちらで紹介されている方法でRaspberry Pi 400で構築していきます(デモプログラムを動かすだけなら飛ばしてもいいですが、今後自作モデルを動かすために一応やっておきます)。

github.com

以下のコマンドでスクリプトをクローンしてセットアップしていきます

git clone https://github.com/raspberrypi/pico-setup.git
./pico-setup/pico_setup.sh

スクリプトを実行したら一度Raspberry Piを再起動してUARTの設定を完了させます。

デモプログラムを動かす

環境構築を終えたら今回使用するデモプログラムを動かしてみます。

github.com

以下のコマンドでサンプルプログラムのレポジトリをクローンします。

git clone https://github.com/ArduCAM/pico-tflmicro
cd pico-tflmicro

このレポジトリにはビルド済みのファームウェアが用意されているのでいくつか試してみましょう。

micro speech

まずは特定の単語に反応するデモを試します。

書き込むときには BOOTSELボタンを押しながらボードの電源を入れて書き込みモードにします。(このときにスイッチ付きのケーブルを使えばそこで電源のON・OFFができるのでとても効率いいです)

f:id:KMiura:20220319215031j:plain

以下のコマンドでRaspberry Piのストレージとマイコンボードのストレージをマウントします。

sudo mkdir -p /mnt/pico
sudo mount /dev/sda1 /mnt/pico

マウントしたら以下のコマンドで使用するuf2ファイルをコピーします。

sudo cp bin/micro_speech.uf2 /mnt/pico
sudo sync

書き込みを終えると以下のようにボードに実装されたマイクに「yes」か「no」を話して認識するとディスプレイに文字が表示されるようになります。(動画ではyesしか認識してませんが頑張ればnoも認識できますw)

ちなみにスマートスピーカーのWake Word(「Alexa」とか「OK, Google」みたいに最初の声掛けのこと)の認識にはこのTiny MLが使われているそうです。

person detection

次はカメラを使って人を識別するデモを試します。

書き込みモードにしたら以下のコマンドでファームウェアを書き込みます。

sudo mkdir -p /mnt/pico
sudo mount /dev/sda1 /mnt/pico
sudo cp bin/person_detection_int8.uf2 /mnt/pico
sudo sync

書き込んだら以下のように人の画像にカメラを向けると人の認識率が表示されるようになります。

画像認識は定番のデモですが、やっぱり小さいガジェットで識別するとなると楽しいもんですね。

magic wand

最後はmagic wandという魔法の杖のようにボードを振り回してそのジェスチャーを認識するデモをやってみます。

書き込みモードにしたら以下のコマンドでファームウェアを書き込みます。

sudo mkdir -p /mnt/pico
sudo mount /dev/sda1 /mnt/pico
sudo cp bin/magic_wand_ble.uf2 /mnt/pico
sudo sync

以下のようにボードを持ちながら手で数字を書くジェスチャーをするとディスプレイにその軌跡と認識した数字・識別率が表示されます

これはマイコンならではのセンサーを使ったデモで面白いですね。

まとめ

というわけでTiny MLのマイコンボードを触ってみました。

ソースコードC++なのでソースコードをいじるにはちょっと気合が入りますが、いずれ自前モデルを用意してなにかデモ作ってみたいですね。

それはいつかまたやります(こういうときに限って結局やらなかったり…)