【行動認識 #3】機械学習/深層学習で人間行動認識 ~CNNしてみる~
これの続き
【行動認識 #2】機械学習/深層学習で人間行動認識 ~データ確認~ - MotoJapan's Tech-Memo
やりたいことの1つでもあるtensorflowを使った。
結果
1. 精度
下記条件で検証して、精度としてはCNN(Convolutional Neural Network)で93.43%程度でた。
testセットの結果(93.25%時点)
条件
- データは、trainデータをtrainセット/testセットに7:3で分割 (Subject未考慮)
- 精度は、testセットに対して分類した結果
2. tensorflowを使って良かった点
- 実行速度が速い(いちいちpython層まで帰ってこない)
- tensorboardがめちゃ使える
- tensorflow mobileにも使える(まだやってないけど)
- コミュニティが大きく、文献が多い
3. 逆に辛かった点
- chainer上がりなので計算グラフを先に作るという概念なくて最初辛かった(慣れればOK)
- 動的に計算グラフを更新できない(とりあえず簡単にはできなそう)
- 学習中のネットワークのデバックができない(やり方がわからない)
Data
入力データは、前回の通り、下記の計6軸。
# 重力未分離加速度情報
total_acc_x_train、total_acc_y_train、total_acc_z_train
# 角速度情報
body_gyro_x_train、body_gyro_y_train、body_gyro_z_train
ラベルデータは、次の6行動。
WALKING(0), WALKING_UPSTAIRS(1), WALKING_DOWNSTAIRS(2), SITTING(3), STANDING(4), LAYING(5)
1データは、特に前処理せずに1軸あたり128 [samples]ずつ突っ込む。
Network
まず下記の感じで、[Convolution層 + pooling層] x 2で作って回す。
tensorboardでvisualize!
忘れそうだらtensorboardの実行方法を記載。
>tensorboard --logdir=[target_logdir]
ちなみに精度やロスを出すときに、trainとtestのディレクトリを分けておくと、
tensorboardが色分けしてくれる。
Accuracy/loss
精度とロスはこんな感じになりました。
一応、学習はちゃんと進んでいる。
200 epoch 回したが、189 epoch目でtestがbestに。
epoch=189 | train | test |
accuracy | 0.9998 | 0.9343 |
loss | 0.0004 | 0.5572 |
学習曲線は以下。(ありがとうtensorboard)
(※ただ、結局細かいところは自分でダンプした方がいい。)
Accuracy graph
Loss graph
analysis
実行速度(throughput)
環境は、Ubuntu 16.04 LTS / RAM 4G / Core-i7 CPU
このnetworkで 314.039 frame/secでした。
混合行列 (confusion matrix)
200 epoch目の結果で考察
bestの189 epochと比較してもそこまで大きく違わないので。
trainから分かること
- ちゃんとOverfitするだけの表現力がある
testから分かること
- WALK系[WALKING(0), WALKING_UPSTAIRS(1), WALKING_DOWNSTAIRS(2)]と、WALK系以外[SITTING(3), STANDING(4), LAYING(5)]は分離できている。(予想通り)
- ちなみに、WALK系は遷移系統、SITTING/STANDING/LAYINGは姿勢系統の動き。
- WALKING_DOWNSTAIRSの推定はまず間違えない。
- WALKINGは、UPSTAIRS, DOWNSTAIRSの一部であるから、間違える可能性がある。
- 姿勢系統は、ぼちぼちお互いに勘違いするケースがあるが、0.87は精度が出せている。
- 姿勢は、動きが少なく、特徴的な変化が少ないかもしれない。
同一Subjectが含まれる学習でも上記のような結果。
他の考察もそのうち。