推論用のコード
学習済みモデルの更新
magic_wand_model_data.cppの
g_magic_wand_model_data[]
に
前回 得られたmodel.ccからデータをコピペして代入する。
必要であれば、model_tflite_len
も更新する。
実行
constantを調整してもあまりいいい感じに認識しない。
状況整理
- constant.hでthresholdをかなり低くしても検知しないから、そもそもがおかしそう
- kTensorArenaSize を変えても変わらない※
- リングバッファに十分溜まるまでは25Hzで動いているが、推論が入ると遅くなって明らかに25Hzより遅くなっている
- modelへのinput_lengthは384、つまり128frame分のデータで、128x40=5120msecとかなり長い時間ためてる。
3はすごく怪しいが、リングバッファにためきるタイミングに動かしても認識しないからそもそも論な気がする。
4と関連して、再学習時に、自分で集めたデータのデータ長が短くてエラーが出ていたので、データ長周辺で調べてみた。
※ 下記のようなコメントだったのでいろいろ試したが駄目だった。
// Create an area of memory to use for input, output, and intermediate arrays.
// The size of this will depend on the model you're using, and may need to be
// determined by experimentation.
constexpr int kTensorArenaSize = 60 * 1024;
上記から、train.pyのseq_length を調整して再学習することにした。
再学習
基本は
前回の通りで、
train.pyの128を82にした。
収集したデータはだいたい半分ぐらいだったが、超える時もあったので少し余裕を持たせて82とした。
もう一回実行
なんか、認識しやすくなった。
constantを調整し、 リングバッファに貯め終わるタイミングで動作させる といい感じに認識した。
やはり、推論かけ始めると周波数がずれてしまうので認識に影響している気がする。
タイマー割り込みとかでmain loopで処理しない方がよさそう。
また、wing, slopeは認識するがringが認識しない。これに関してはまだよくわかっていない。
終わりに
独自で集めたデータがもとのデータ長より短いことを考慮し、ニューラルネットワークモデルの構造を調整して再学習し、ある程度ジェスチャ認識できるようになった。
ただ、まだ検出しないジェスチャがあったり、常に正常に認識できなかった理にするので、そのあたりを調査したい。