前回 raspberry pi picoでtensorflow lite for microcontrollersのmagic wandというサンプルを動かしてみた。
結果としてはうまく認識してくれなかったので、自分の環境でデータを集め、再学習してみることにした。
今回は、学習部分のドキュメントを読んだので、そちらのメモとなる。
GithubのREADME に学習方法は書いてある。
3つのジェスチャーを7人から集めた。一連の動作から分割して作った模様。
ジェスチャーに該当しないものはnegativeとしてランダムに自動生成。
datasetは公開されている
私の環境がwindowsなので、tarかー
と思ったが、windows 10にはコマンドがはいっているよう。
https://rcmdnk.com/blog/2021/09/17/computer-windows/
ジェスチャごとにフォルダがあり、その下に人物ごとにテキストファイルがある。
テキストファイルを見た感じ、一回のジェスチャは-,-,-
で区切られる模様。
また、ジェスチャの長さは特に固定ではなさそう。
Collecting new dataの項にこうあり、データをキャプチャする際に、ボタンを押している模様。
Press the RST button to start capturing a new gesture, then press Button 14 when it ends. New data will begin with a line "-,-,-".
colabとソースコードからの二択だが、colabなら環境が楽なのでcolabを使うことにする。
二つ学習のやり方がある。
randomは学習のaccuracyはいいが、new dataのパフォーマンスが劣る。
personは逆
Random data splitの時
$ python data_prepare.py
$ python data_split.py
$ python train.py --model CNN --person false
Person data splitの時
$ python data_prepare.py
$ python data_split_person.py
$ python train.py --model CNN --person true
data_splitのpythonプログラムとtrain時のオプション引数に差がある。
また、--modelでは CNN
か LSTM
が選択できる。CNNの方がサイズ小さくてレイテンシも低い。
cp: cannot stat 'tensorflow/tensorflow/lite/micro/examples/magic_wand/train': No such file or directory
まあ、そんなもん
tensorflowのリポジトリから分かれているので、cloneするリポジトリを変更する。
!git clone --depth 1 -q https://github.com/tensorflow/tflite-micro.git
また、コピー元も変わるので
!cp -r tflite-micro/tensorflow/lite/micro/examples/magic_wand/train train
Load TensorBoardのところで、「No dashboards are active for the current data set.」と出るが、まだ学習してなく表示するものがないだけなのでスルー。
学習は5分かからず終わった。 TensorBoardは図のようになった。(後半のvalidationが気になるけど動かしたかっただけなのでスルー)
最後のセルが実行されると、 /content
に model.cc
というファイルができる。
この中身を、
magic_wand_model_data.cppの g_magic_wand_model_data
と model_tflite_len
に移せばいい、はず。
Collecting new dataの項に、 SparkFun Edge development board を使った動作例が書かれている。
私はraspberry pi picoを使いたいので、独自でプログラムを組む必要がある。
そのために、重要そうなポイントだけ抜き出すと
"-,-,-\r\n"
がある。("%04.2f,%04.2f,%04.2f\r\n", acceleration_mg[0], acceleration_mg[1], acceleration_mg[2])
であるoutput_{gesture_name}_{person_name}.txt
とするこの辺りを守れば学習用データになるだろう。
今回は、magic wandを再学習するドキュメントの調査をした。
再学習時に自分のデータを使いたく、集め方の指針が立ったので、次は集めるためのプログラムを書くのに挑戦する。
また、モデルの構造も特にみていないので、そのうちそのあたりも確認したい。