前編で、トレーニングに必要な生データがすべて揃いました。
(ただ、前回10秒間のデータ収集ではこころもとないので、トレーニング用に新しく100秒で収集し直してみました。)
しかし、最後の画像で見たように、生データは時系列タイプのデータであり、そのようなタイプのデータを理解するモデルを作成するのは簡単ではありません。
したがって、データは前処理する必要があります。
そのために、サイズが2 秒のウィンドウを取得し、そこからいくつかの関連する値 (例えば、そのようなデータ グループの RMS 値とその主な周波数成分 (FFT) ) を抽出します。 各ウィンドウから 33 個のフィーチャが生成されます (軸ごとに 11 個)。
複雑に思えるかもしれませんが、良いニュースは、Edge Impulse がこれをほぼ自動的に実行してくれることです。
Feature Engineering and Model definition (特徴量エンジニアリングとモデル定義)
生データを入手したら、「Impulse Design」セクションに移動して、プロジェクトのインパルスを作成します。
左端にメインメニュが表示されていない場合は、左上のバーガーアイコンをクリックします。
メインメニュでImpulse design からCreate impulse をクリック。
Impulseは生データを取得し、信号処理を使用して特徴を抽出し、学習ブロックを使用して新しいデータを分類します。
最初のprocessing block には「Spectral Analysis」を追加します。
次のlearning block では「Classification」を追加します。
追加したら名前を「NN Classifier」にします。これは慣例のようです。
終わったら右下の「Save impulse」をクリックして保存します。
メインメニュに「Spectral features」と「NN Classifier」が表示されます。
左端にメインメニュが表示されていない場合は、左上のバーガーアイコンをクリック。
Spectral features をクリック。
Spectral features (スペクトル特徴) セクションでは、特徴生成の一般的なパラメーターを定義できます。
パラメータを保存しておきます。
デフォルト値をそのまま使用し、「Generate features」タブで特徴生成します。
こんな感じ。
Feature explorer は以前は3Dで表示されていたようですが、現在は2D表示になっています。
Design and Train the Neural Networks (NN) Classifier (ニューラル ネットワーク (NN) 分類器の設計とトレーニング)
NN 分類子モデルは非常に単純です。
モデルには、最初の層に 33 個のニューロン (各特徴に 1 個のニューロン) があり、最後の層に 4 個のニューロン (4 つのクラスごとに 1 個のニューロン) があります。 モデルには 2 つの隠れ層があり、それぞれ 20 個と 10 個のニューロンがあります。
デフォルトのハイパーパラメータは 30 エポック (これは多いため、この場合は半分に減らすことができます)、学習率は 0.0005 です。
CPU のタイプはPico に合わせています。
トレーニングを実行します。
実行ですが、そんなに時間はかかりません。
終了。Accuracy は70%を超えているのでほぼほぼOKです。
テストしてみます。
Live classification を使ってみます。
生データをサンプリングして分類します。
今回は20秒間の内、最初の10秒はleft-rightの動作をし、残りの10秒はup-downします。それを分類します。
やってみます。
結果です。
前半の動きは確かにleft-right に分類されています。
で、後半の後ろの方はup-downに分類されています。
まあ、こんなもんかしら……ということで、
Conversion & Deployment (変換と展開)
モデルの開発、トレーニング、テストが完了したら、機械学習ワークフローの次のステップは変換とデプロイです
このモデルをライブラリに落とします。
まず、Deployment を選択。
C++Library で、EON Compiler を使い、8bit整数で推論するようにビルドします。
Edge Optimized Neural (EON™) コンパイラーを有効にすることで、マイクロコントローラー向け TensorFlow Lite と比較して、同じ精度を維持しながら、25 ~ 55% 少ない RAM、最大 35% 少ないフラッシュでニューラル ネットワークを実行できるようになります。
さほど時間もかからずにビルド完了。
C/C++ パッケージの成果物はアーカイブされて、ダウンロードされます。
内容はこんな感じ。
Inference
今度は、組み込みデバイスで機械学習を実際に実行する時が来ました。 インターネット接続なしで完全にオフラインでジェスチャを認識するように Pico をプログラムします。 これは TinyML が行っている革命です。
Next
Preparing the GestureRecognitionproject environment (GestureRecognitionプロジェクト環境の準備)
最後のステップは、は今回の成果物を母艦であるラズパイ4Model Bにコピーして、ビルド環境を作成し、Pico 用のファームウェアファイル(uf2)を生成して、Pico にデプロイしてシリアルモニターで結果をみてみます。
Previous
Pi Pico でエッジAI を試してみる(4-1/3)TinyML – Raspberry Pi Pico を使ったモーション分類(抜粋)- データ収集編
Leave a Reply