IMUを用いた行動認識(k近傍法)をした話

 

もくじ

  • やったこと
  • 実装
  • 実行結果
  • まとめ

やったこと

IMUセンサ(加速度,ジャイロセンサ)を腕につけ,行動ごとのデータをとる.
行動の種類は,歯磨き,歩く,食べる,洗顔,階段の上り下りなど,9動作.
このラベリングされたデータ前処理し,特徴値を抽出,knnアルゴリズムを用い,教師データとテストデータを交差検証法にかけ,Confusion Matrixを作成した.これらを全て一からC#で実装した.

加速度,ジャイロセンサのデータをサンプリングしたもの.

f:id:finite_star:20190822210713p:plain

 

実装

コードはこちら.

github.com

C#, Visual Studioで実装
データ収集部分は省略.データを行動ごとに読み込み,それをれを移動平均,移動分散にかけListにする.加速度データとジャイロデータの周期の差があるようだったため,それぞれwindowサイズを変えた.
これを交差検証法にかけるため,教師データとテストデータに分ける.全体の1/3をテストデータ,2/3を教師データとした.それぞれのデータについて,特徴地を移動分散の和とし,k近傍法にかける.正規化すればよかったのだが,うまくいかなかったため加速度データ,ジャイロデータに重み付けをすることで対応した.計算量削減のためソートは用いず,kこのデータを順次に入れ替えて行く形式を取った.
交差検証したらそれぞれの結果についてConfusion Matrixを作成した.

実行結果

行動は順番に洗顔,食べる,歩く,書く,歯磨き,階段上り下り,立着席,読む,話す.

f:id:finite_star:20190822210523p:plain

まとめ

Pythonを使えばもっと簡単に実装できるだろうが,練習のためC#で一から全て実装した.認識率は芳しくなかった.
パラメーターを遊ばせればよかったが,実行時間がかかりすぎるため試せなかった.実行時間を短くする工夫をもっとできればよかった.また,Confusion Matrix から誤認識の傾向を探り,アルゴリズムに組み込めればよかった.