LoginSignup
0
0

More than 1 year has passed since last update.

小型IoT端末開発キット「SensorTile.box」 を使って機械学習を体験②

Last updated at Posted at 2022-04-04

STマイクロエレクトロニクスの小型IoT端末開発キット「SensorTile.box」を使用してさまざまな機能を試してみるシリーズ、機械学習編の第2回です。

前回は、サイコロのような静的な“姿勢”データに基づくサンプルを試しました。今回は、別のサンプルである「ジム・アクティビティ検出」を使って、動きのあるものでテストしてみます。ジムなどで行うトレーニング時のフォームを検出できるサンプルです。

機械学習データのセットアップ概要については、こちらの記事を参照してください。
小型IoT端末開発キット「SensorTile.box」 を使って機械学習を体験①

SensorTile.boxのセットアップ方法や基本情報については、こちらの記事を参照してください。
小型IoT端末開発キット「SensorTile.box」 をセンサ・アプリで使ってみた① セットアップと使い方

1.準備

サンプル・データのダウンロード

「機械学習を体験①」記事と同様に、学習済みデータのucfファイルをGitHubからダウンロードします。
すでに全ファイルをPC経由でまとめてダウンロード & スマートフォンへファイルをコピー済みの場合(→「機械学習を体験①」の”補足2”を参照)、ここは読み飛ばして「2.ジム・アクティビティ検知: Gym Activity Recognition」へ進んでください。

スマートフォンからGitHubにアクセスし、STMicroelectornics/STMems_Machine_Learning_Coreのページを開きます(google等で“github st mlc”などと検索してください)。View codeクリック後、対象ファイルの場所までフォルダを下っていきます。

ファイルの場所: STMems_Machine_Learning_Core/application_examples/lsm6dsox/Gym activity recognition/

100_Github_smartphone_1_.png

対象ファイルはlsm6dsox_gym_activity_recognition_left.ucfです。右腕用と左腕用の2種類が用意されており、私は右利きなので、左腕取り付け用のxxxx_left.ucfを選択しました。ファイルを開いたら、以下手順でダウンロードします。ファイル名が長いので、スマートフォンの画面ではファイル名全体が表示されない可能性があります。ファイルクリック時に一応確認してください。

101_Github_smartphone_2_.png

ダウンロードの際に“.txt”拡張子が追加されてしまうため、これを削除しておきます。Filesアプリなどで該当ファイルを確認後、Renameしてください

102_Github_smartphone_3_.png

以上で準備完了です。

2.ジム・アクティビティ検知: Gym Activity Recognition

それでは、早速スマートフォンでアプリを設定して動かしていきましょう。スマートウォッチやリストバンドのように手首に取り付けて使います。

GitHub_GymActivityページの情報によると、設置方向が決まっているようです。デバイスの各軸(加速度)が以下方向になるようにセットします。
X軸: 腕方向と平行(手の方向が+)
Y軸: 腕方向に対して直角(自分に対して外向きが+方向)
Z軸: 手の垂直上方向(甲側が+)

200_gym_overview__.png

2-1.セットアップ

以下手順でカスタムアプリをセットアップします。ここでは念のため新規アプリ作成手順として解説します(手順A)。なお、「機械学習を体験①」の際に作成したポジション検知アプリを再利用してもOKです。その場合、手順Bの解説を参照ください。

A.新規アプリとして作成

作成開始

Expert modeから新規アプリ作成へ進みます。

210_gym_setup1_.png

入力センサ選択 & ucfファイル設定

機械学習コア(MLC)使用時は、仮想センサとしてMLC Virtual sensorを選択後(= LSM6DSOX)、MLC用のコンフィグレーションファイル(.ucf)を設定します。さきほどGitHubからダウンロードしてスマートフォンのストレージに保存したので(Defaultでは“Download”フォルダに入ってます)、そこから探します。ファイル / フォルダ表示はスマートフォンによって異なります。

lsm6dsox_gym_activity_recognition_left.ucf

211_gym_setup2_.png

ucfファイル設定完了、出力先設定

こちらのサンプルは、すでにラベリングされていました。“squats(スクワット)”などの表記が確認できます。
出力先としてBluetoothを選択します。

212_gym_setup3_.png

アプリ全体セーブ後、SensorTile.boxへ設定データ送信

213_gym_setup4_.png

以上でセットアップ完了です。動作確認に進んでください。

B.前回アプリの再利用

次に別の方法として、「機械学習を体験①」で作成したポジション検知アプリを再利用する手順を解説します。
アプリの編集画面に入り、既に設定されているコンフィギュレーション・ファイルを入れ替えます。

再利用アプリの編集

214_gym_setup_B1_.png

アプリ全体セーブ後、SensorTile.boxへ設定データ送信

アプリ全体を別名で保存すれば完了です。最後に同じようにSensorTile.boxへアップロードします。

215_gym_setup_B2_.png

以上でセットアップ完了です。動作確認に進んでください。

カスタム・アプリ設定まとめ
選択アイテム 設定内容
Input MLC Virtual Sensor(LSM6DSOX) ucf: lsm6dsox_gym_activity_recognition_left.ucf
Function 無し
Output Stream to Bluetooth Bluetooth経由でスマートフォンへ演算結果送信

2-2.動作確認

3種のトレーニング・フォーム(3クラス)検知が用意されています。“Decision Tree 0: DT1”の値が変化します(4 / 8 / 12の数字で出力。ただし16進数なので12はCと表示)。

  • MLC0_SRC (70h) register values
    • 0 = No activity
    • 4 = Bicep curls(プリーチャーカール。上腕カール)
    • 8 = Lateral raises(サイドレイズ)
    • 12 = Squats(スクワット)

220_gym_result_.png

プリーチャーカール(4)とサイドレイズ(8)は一応認識できましたが、姿勢やフォームが正しくないと判定されないようで、なかなか難しいと感じました。また、動作を3秒以上は継続させないと判定に至りません。
スクワットは、最初、腕を腰に置いて単に屈伸運動をしてみたところ、まったく認識されませんでした。前方に腕を伸ばした状態でひざを屈伸すると認識できました。腕を前に伸ばしたまま行うのが正しいフォームのようです。

221_gym_result2_.png

実際にアプリケーションにおいてマイコンなどで使う場合、値が変化するとINT1 pinにパルス信号が出力されます。この後LSM6DSOXのレジスタ70hを読むと、値を確認できます。

2-3.ディシジョン・ツリー

GitHubのファイルおよびLSM6DSOXのアプリケーションノート(AN5259)を調べましたが、該当するディシジョン・ツリー情報は見つけられませんでした。一応AN5259では、EXAMPLEの説明箇所にgym activity recognitionの項目があり、ディシジョン・ツリー図も載っていました。ところがよく見ると、使用センサやFeaturesなどの設定情報がGitHubに記載されている内容と異なります(AN5259内の情報ではジャイロが使用されており、クラスの内容も異なる)。つまり、AN5259内のディシジョン・ツリー情報はGitHubのものと異なるので、参考程度にしてください。

GitHubからの設定情報

設定内容 Note
Sensors ACC (Accelerometer) ±8 g full scale, 26Hz ODR, ultra-low power mode
Feature mean, peak-to-peak, min, max
Filter Low pass filter(IIR1)
MLC rate, Window MLC run at 26Hz, windows=78samples Window / MLC ODR = 78 / 26 = 約3秒
Node 30
A meta-classifier No use

3.コンフィギュレーション・データの書き込みについて

最後に、前回の「機械学習を体験①」記事や今回の記事で使った「コンフィギュレーション・データ(xxxx.ucf)」についてもう少し見てみます(例 : lsm6dsox_six_d_position.ucf)
テキスト・エディタで開くと、294個のデータ配列らしきものが並んでいます(データ個数はサンプルによって異なる)

300_ucf_.png

同じフォルダにヘッダファイルもあったのでチェックしたところ、アドレスとデータのペアだとわかりました。
ところで、LSM6DSOXのデータシートを見ても、MLC用設定データの具体的な書き込み方法・アドレス情報は見つけられませんでした。ではいったいどうやって書き込めばいいのかと悩むところですが、このヘッダファイルを利用すればOKです。Unico-GUI>optionsタグページに”C code generation”ボタンがありますので、ここからucfファイルをLoadすればヘッダファイル(ucfの中身データを構造体配列にしている)を生成できます。ファームウェア上で利用する際は、このヘッダファイルを利用してください。中身詳細を意識しなくても使えるようになっています。

レジスタ・アドレスおよびデータ書き込み内容から、どんな操作設定をしているのか以下に記載しました。
LSM6DSOXはレジスタ・マップが少し複雑(0x01へのBit設定によってアクセスできるレジスタページが切り替わる)で、見方には少し注意が必要です。

301_ucf_header_.png

以下はデータ配列の最後の方です。MLC用の初期設定(センサの基本設定、MLCを有効にするなど)のためのレジスタ・アクセスを行っています。最初の方(書き込み準備)と最後の方(初期設定)のアクセスは、どのサンプルでもほとんど共通の内容になっています。

302_ucf_header_end.png

MLCデータ書き込み用のレジスタは、Embedded Function registerエリアにありますが、詳細は非公開です。基本的にMLCを利用するだけであればUnico-GUIにより生成されるヘッダファイルを利用すればいいので、アクセス方法詳細を知る必要はありません。
代わりの情報として、同じEmbedded Function Registerへの設定が必要なPedometer機能(歩数カウント)やTilt機能(傾き検知)が参考になります。レジスタ・アクセス例がアプリケーション・ノート(AN5272)に載っているので興味のある方は見てみて下さい。AN5272もAN5259と同じくLSM6DSOXのwebページからダウンロードできます。

305_pedometer.png

以上、今回は機械学習のサンプル・データを試してみました。他にもサンプルはありますので、ご興味があればぜひ試してみてください。

なお、前回と今回の記事で使ったサンプル・データはあくまで「トライアル用」であり、そのまま製品に利用する目的で提供されているわけではありません。実際の製品化に際しては、ご自身でデータを取得してください。
次回はデータ収集と、Unico-GUIツール上でディシジョン・ツリーを作成してみたいと思います。
小型IoT端末開発キット「SensorTile.box」 を使って機械学習を体験③

0
0
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
0
0