2016年3月26日土曜日

Fully Convolutional Networks 〜 Chainerによる実装 追記 〜

はじめに


 先のページで Chainer を用いてFully Convolutional Networks(FCN)を簡略化したものを実装した。今回は、同じ問題に対し以下の修正を行った。
  1. Batch Normalization 層の導入
  2. 訓練データの増量
学習速度は速くなったが、過学習は依然として残ったままである。

Batch Normalization


 原論文はここにある。層間を流れるデータをミニバッチ単位で正規化すると、学習速度が速くなるというものである。幸いなことに Chainer はこれをサポートしているので、以下のように3つの Batch Normalization 層を導入した。

-- myfcn.py -- 49,50,51行目と68,75,82行目が追記したコードである。

データの増量


 訓練データに反転画像を追加し2倍に増やした。

結果


 学習過程の正解率と損失を以下に示す。ここで正解率とは1枚の画像当たり何割の画素が正解したかを全画像について平均したものである。
"no norm"は正規化なし、"no augmentation"はデータ増量なしを表す。上のグラフから分ることは、正規化とデータ増量は伴に学習速度を速くしているということである。 正規化あり、データ増量ありではテスト画像の正解率は0.85程度であり、20Epoch辺りで収束している(ここで言う学習速度とは、どれだけのEpoch数で収束するかを表す。少ないEpoch数で収束するなら学習速度は速いと表現した。データを増量した場合、1Epochの計算に要する時間は倍程度になるので、EC2インスタンスの課金量は変わらない)。しかしながら、テスト画像に於ける損失(期待損失)は依然として途中から上昇してしまう。訓練データが少ないのが原因だろう。

0 件のコメント:

コメントを投稿