MotoJapan's Tech-Memo

技術めも

【行動認識 #6】tensorflowでCAE(Convolutional Auto-Encoder)を実装してみた

これの続き
【行動認識 #5】データ量別でCNNの性能差 - MotoJapan's Tech-Memo


今回はCAEの実装をしてみた。

CAEってなに?

CAEとは、Convolutional Auto-Encoderの略で、次元削減/圧縮テクニックの1つである。
AE(Auto-Encoder)のConvolutional版ということで、Convolution層を使い、情報量を少なくして特徴量を抽出する半教師学習。
特にCAEが画像などの多次元データを扱うにはそのままテンソル変換せずに使えるので筋が良い気がするのでこれで今回はやってみる。

構造はencoderとdecoderで構成され、

  • encoderの入力は画像等のデータ、出力は圧縮特徴量
  • decoderの入力は圧縮特徴量、出力は、画像等のデータ
  • decoderの出力とencoderへの入力が一致するように学習していく


活用方法は、次などがある。

  • 圧縮した特徴量を抽出できる
  • データが少ない場合の事は前学習として用い、encoder部分を再利用する
    • モデルの局所最適への落ち込みを回避できるという点。(最近だとデータが多いなら不要という話)

概要イメージは下記。

f:id:motojapan:20170815034208p:plain

詳細はいろいろなとこで記事になっているので他に譲ります。

実践

今回は前回に引き続き6行動のCAEを行う。
入力は、6ODF(加速度3軸、角速度3軸)の復号化。

今回のモデルは、Convolution + maxpooling 1 layer (=encoder) + unpooling + Deconvolution (=decoder) 1 layerで実装。
tensorflowだと、decoderは、tf.nn.conv2d_transposeが使える。
注意としては、ピクセル毎に回帰するので最後はsigmoidで0~1に収める必要がある。

結果

結果は例えばWALKを学習してみると、次の正解信号に対して、

f:id:motojapan:20170815032531p:plain

学習epochを回す毎にどんどん近づいていく。
(見てておもしろい)

f:id:motojapan:20170815032558g:plain

100[epoch]目以降はかなりオーバフィットさせ過ぎている感じもあるのでちょうどよいところ、
(WALKで言えば周期性が見えてくるところで)で打ち切る必要がありそうだ。

他の行動についてもすべてが並べてみるとなかなかの光景。

左上から右下までの順は次の通り。(横方向)
WALKING, WALKING_UPSTAIRS, WALKING_DOWNSTAIRS, SITTING, STANDING, LAYING
f:id:motojapan:20170815035856g:plain

学習曲線はこんな感じで学習できている。
f:id:motojapan:20170815104840p:plain

今後やりたいこと

  • 学習データが少ない状況で、CAEで事前学習
    • これで精度が上がるのであればいいなと。
  • 生成モデルとしてVAEの実装

以上。