2
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

データが少ない、GPUもない環境でCNNにチャレンジ(転移学習)

Posted at

記事の要約

転移学習とfine tuningを使って少ないデータで画像認識をおこなったという話。

ソースコードは→https://github.com/yuushiokamura/cnn_trainfer_learning

アウトライン

・想定する読者

・個人でDLする際の難点

・あらかじめ学習されたモデルを使おう

・転移学習をfine tuning

・顔画像で試してみよう

想定する読者

CNNの原理がなんとなくわかる方

ちまちましたデータ集めの苦手な方

仕事で画像認識に始めたばかりの方

転移学習・fine tuning という手法について知りたい方

文章ばっかの記事に飽きない方

個人で(自分のPCで)DLするときの障壁

これはまず大きい壁にぶち当たります。

GPUが搭載されていない!

これはどうにもならないですよね。まさかプライベート用のPCをdeep learningように買い替えるわけにもいきませんし。。。GPUなしには学習に時間がかかってしょうがないです。。。

解決策としては・・・

・クラウドコンピューティングサービスを使う←ぶっちゃけおすすめ。googleやamazonはdeep learning の学習用に無料でGPUが一部使えるようなので、それを使う。例えばgoogle colablatryでは12時間まで使えるはずです。

・外付けできるGPUをかう。←あんまりおお勧めしませんが、こういった手段もあります。

####・計算量を減らす。←これができれば一番いいわけで、そのためにどうしましょうというのが今回のメインテーマ。

deep learningをやるうえでもう一つ大変なのがデータ集めです。

何千枚ものデータを集める作業、くそめんどくさいですよできればやりたくないですよね?データ量が減れば学習時間もへるので一石二鳥でもあります。

少ないデータで学習する方法として、データの水増しがありますが、今回はアルゴリズム側の改善策、転移学習を紹介します。

転移学習とfine tuning

転移学習・fine tuningはどちらも似たような意味で、混同されがちですが、どちらもあらかじめ学習されたモデルを利用して効率よく学習しようという手法です。

vgg16.png

出典 http://cs231n.stanford.edu/syllabus.html

一般的に転移学習は特徴量抽出層をそのまま使い、全結合層のみを学習しなおします。一方fine tuningは特徴量抽出層の一部も学習し直す手法のことです。

例えばVGG16というモデルはImageNetという膨大な画像データセットで学習されており、1000クラス分類を行うことができるモデルです。このモデルを使うと、どんなメリットがあるかというと、VGG16は膨大で多様な画像データから、1000クラス分類を行うことのできる特徴量を抽出できるので、それを利用すれば、未知の分類も少ないデータでもできる、ということです。あとメリットといえば、実装が楽です

### kerasで学習済みのVGG16モデルを読み込むには

from keras.applications.vgg16 import VGG16

で読み込むことができます。

モデルに組み込むには

vgg = VGG16(weights='imagenet', include_top=False,
           input_tensor=Input(shape=(224, 224, 3)))

inputのサイズは(224,224,3)で固定のようです。ここで読み込まれるのは、全結合層を除く層なので、全結合層を作って、くっつけてください。

for layer in self.vgg.layers[:non_train_layers]:
                    layer.trainable = False

non_train_layersで指定した層までの学習を止めることができます。(重みパラメータの固定)

顔画像で試してみよう

cnnで手書き文字認識を試された方は、つぎは実際の画像データで試したくなるでしょう。その際に、犬猫でもいいんですが、少ないデータでは難易度の高い顔認識をやってみたいと思います。

今回学習用につかったデータは石原さとみさんの画像と長瀬智也さんの画像です。選んだ理由は特にありません。しいて言えば超美人な石原さとみさんと、もう一方はあんまり似てると識別がむずかしいかなと思ってわりとごつい方にしました。。。

顔部分のトリミングはめんどくさい時間不足のため、行っていません。顔メインの画像だけを抽出しました。だいたい300枚ずつくらいあります。それにしても石原さとみさんはクローリングしたら顔メインの画像が多かったですね。。美人だからでしょうか。。?

結果

結果というほどのグラフもないですが、転移学習、fine tuning フル学習での精度と学習時間を記載しておきます。

フル学習 転移学習 fine tuning
学習時間 3時間程度 1時間 50分
精度(val acc) 70%程度 92.2% 94.7%

学習済みモデルを利用するメリットがわかっていただけたと思います。精度もそうですが、学習時間の低下はうれしいですね!

フル学習では三時間を過ぎても終わりが見えず、精度も頭打ちになってきた感があったので止めました。

2
6
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
2
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?