57
52

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

NSSOLAdvent Calendar 2023

Day 19

1000円以下のマイコンだけで物体形状の学習と推論を行う

Last updated at Posted at 2023-12-19

はじめに

まずは下記の動画をどうぞ

1000円以下のマイコンだけで物体形状の学習、推論が動いた。

緑色のは8×8ピクセルのToFセンサVL53L7CX、マイコンはSeeed XIAO RP2040、学習アルゴリズムはSEFR(multi-class)、学習時間は約12ms。
前半で、無、👊、✌️、✋を学習して、後半は推論。推論時間は1ms以下ですが、ToFセンサ読み出しに時間がかかっています。

2023年現在、1000円以下の低価格帯マイコンモジュールは動作周波数100MHz以上、Flash 1MB以上、SRAM 100KB以上などが普通になってきています。また、マイコン向けの低消費電力、省メモリな機械学習アルゴリズムも開発がすすんでいます。これらを利用して物体の学習と推論を行ってみました。

構成

形状計測

物体形状の計測には、ToFセンサVL53L7CXを利用しています。このセンサは、8x8ピクセルと解像度は低いものの約3.5m程度の距離の深度情報を1mm単位で取得することができます。このセンサは60Hzで動作するはずなのですがSparkFun_VL53L5CX_Library.hを利用したところ、フレームレートは1~2FPS程度でした。計測したデータは、秋月電子通商にて850円(2023年現在)で売られているSeeed XIAO RP2040をつかって取り込みました。

データセット作成

計測結果は、8x8=64個の数値データとして取得できるので、これにラベルをつけてデータセットを作成します。上の動画の前半では、白、白点滅、赤、赤点滅、緑、緑点滅、青、青点滅のようにLEDの色が変化していきますが、1回点滅するごとに、マイコン上で数値データとID(色)を対応付けていきます。動画では、各色5回ずつ点滅しているので、全部で20組のデータが生成されます。こういったデバイスでは、いかに簡単にアノテーションするかというUI設計も重要です。

学習

機械学習アルゴリズムには、SEFR: A Fast Linear-Time Classifier for Ultra-Low Power Devicesというアルゴリズムを利用しました。これは、リソースが限られたマイコンで機械学習を行うアルゴリズムの一つで、論文によると、データセットによってはXGBoostやSVMなどと同程度のAccuracyで消費電力が非常に少ないことが示されています。今回の場合には、データセット作成直後に64次元×20個のデータに対して学習しています。12ms程度で学習することができました。

なお、多少使いやすく実装したコードを作成しましたのでご利用ください。以下のような感じで使います。1クラス当たりのデータセット数はクラスごとに異なっても問題ありませんが便宜上定数にしています。

#include "SEFR.h"

#define FEATURES 64     // 特徴量の次元数
#define LABELS 4        // 分類したいクラスの数
#define SAMPLES_PER_CLASS 5  // 1クラス当たりのデータセット数
#define DATASET_MAXSIZE (SAMPLES_PER_CLASS*LABELS)  // 全データの最大値

SEFR sefr;

...

void setup(){
   // 初期化
   sefr.setup(FEATURES, LABELS);

   // データセットの準備
   float** X_train = new float*[DATASET_MAXSIZE];
   uint8_t* y_train = new uint8_t[DATASET_MAXSIZE];
 
  ...
   // X_train, y_train に値を設定
  ...
  
   // 学習
   sefr.fit(X_train, y_train, DATASET_MAXSIZE);
   
}

void loop() {

    ...
  
    // センサデータを current に入れて
    // 推論
    uint8_t c = sefr.predict(current);
  
}

推論

学習が終わると推論モードに移行します。推論は1ms以下となっています。推論結果をLEDの色で表しています。手の動きが変わってからLEDの色が変化するまで多少時間がかかっていますが、これはToFセンサからのデータ読み取りに時間がかかるためです。

まとめ

マイコンとセンサの組み合わせで、物体形状の学習と推論が簡単にできることをご紹介しました。このようにうまく工夫することで、機械学習対応デバイスが簡単に作れますので是非皆さんも試してみてください。計測結果をif文で分類したくなったら機械学習に頼ってみましょう。

57
52
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
57
52

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?