Keras で転移学習(Transfer Learning)をやってみました。転移学習とは、学習済みモデルの一部を変更して学習し直すことです。
まず、簡単な例として2種類の野鳥(ユリカモメとコサギ)の写真の区別を試してみました。

【基本方針】
(1)簡単なケースとしてユリカモメとコサギの画像分類のみを試してみる。
(2)学習用の画像をネット検索であつめる。
(3)既存のモデル VGG16 のネットワークの一部を変更して再学習する。
(4)テストに使う画像は自分で撮影した野鳥を用いる。
(5)結果は、画像に写っているモノがユリカモメである可能性が何%あるかで表示する。

【プログラム概要】
(1)既存の学習済みモデル(VGG16)を出力層(1000クラスの分類)を含まない状態で読み込む。
(2)既存のモデルに再学習の全結合1層と出力層(ユリカモメかコサギかの分類のみ)を追加する。
(3)学習用の画像は学習データ用のフォルダから読み込む。
画像のファイル名は以下の通り。先頭の一文字が分類を表すことにする。
ユリカモメ y0001〜
コサギ  k0001〜
(4)学習用の画像をランダムに読み込み再学習を行う。
(5)テスト用画像は、テスト用のフォルダからソートして読み込む。
(6)再学習したモデルでテスト用画像の予測を行う。

Pythonプログラム(テキストファイル UTF-8)

学習用の画像は、ネット検索でユリカモメ、コサギの画像を各80枚を収集しました。
(※著作権の都合で画像は公開できません。)

テスト用の画像は、近所で撮影したコサギやユリカモメと思われる野鳥の写真を使いました。
コサギ kos001.jpg, kos002.jpg
kos001kos002
ユリカモメ yri001.jpg, yri002.jpg, yri003.jpg, yri004.jpg, yri005.jpg,
yri001yri002yri003yri004yri005
——実行結果
——数値はユリカメモである可能性を表す
——
kos001.jpg
0.0
——
kos002.jpg
0.0
——
yri001.jpg
100.0
——
yri002.jpg
100.0
——
yri003.jpg
100.0
——
yri004.jpg
100.0
——
yri005.jpg
40.8
——end.

ユリカモメの5枚目(yri005.jpg 40.8%)以外はきっちりと分類されました。
五枚目のユリカモメは頭の色が違いますが夏毛だそうです。
ユリカモメが夏毛で飛んでいる写真が学習用画像に少なかったのだと思います。

 

(S.Onda 2018/6/25)