前回の続きです)

前回は最も簡単な分類として「写真の鳥がユリカモメであるか?」を行いましたが、今度はもう少し鳥の種類を増やしてみました。
公園でよく見かけるハト(カワラバト)やスズメ、川で見かけるコサギ、海辺や河口近くで見かけるユリカモメ、
それから「深層学習 Keras 学習済モデルで動物画像分類」のときにはコサギがツル、ユリカモメがアホウドリと間違われたのでツル(タンチョウ)とアホウドリを加えて6種類の分類をしてみました。

【プログラム概要】
前回とほぼ同じ。
学習用の画像のファイル名は以下の通り。先頭の一文字が分類を表すことにする。
カワラバト h0001〜
コサギ   k0001〜
ユリカモメ y0001〜
アホウドリ a0000〜
タンチョウ t0000〜
スズメ   s0000〜
結果は、それぞれ種ごとに可能性がどの程度であるか示すこととします。

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

学習用の画像は、ネット検索で各鳥の画像を各120枚と、ユリカモメについては前回のデータに夏毛の画像を60枚を追加しました。
(※著作権の都合で画像は公開できません。)

テスト用の画像は、前回と同じく自分で撮影した写真を使いました。
ただし、アホウドリは撮影できないのでウィキベディアの画像を利用してテストしました。

実行結果をまとめると以下の通り―――――――――――――――ー

 

【カワラバト】hat001.jpg, hat002.jpg, hat003.jpg

hat001hat002hat003

——
画像ファイル名: hat001.jpg
カワラバト: 100.0
コサギ: 0.0
ユリカモメ: 0.0
アホウドリ: 0.0
タンチョウ: 0.0
スズメ: 0.0
——
画像ファイル名: hat002.jpg
カワラバト: 100.0
コサギ: 0.0
ユリカモメ: 0.0
アホウドリ: 0.0
タンチョウ: 0.0
スズメ: 0.0
——
画像ファイル名: hat003.jpg
カワラバト: 100.0
コサギ: 0.0
ユリカモメ: 0.0
アホウドリ: 0.0
タンチョウ: 0.0
スズメ: 0.0

いずれの写真もカワラバトのスコア100で全問正解でした。

 

【コサギ】kos001.jpg, kos002.jpg, kos003.jpg
kos001kos002kos003

——
画像ファイル名: kos001.jpg
カワラバト: 0.0
コサギ: 46.9
ユリカモメ: 0.0
アホウドリ: 0.0
タンチョウ: 0.0
スズメ: 0.0
——
画像ファイル名: kos002.jpg
カワラバト: 0.0
コサギ: 99.9
ユリカモメ: 0.0
アホウドリ: 0.0
タンチョウ: 0.0
スズメ: 0.0
——
画像ファイル名: kos003.jpg
カワラバト: 0.0
コサギ: 100.0
ユリカモメ: 0.0
アホウドリ: 0.0
タンチョウ: 0.0
スズメ: 0.0

コサギのスコアが100ではない写真もありますが他の鳥は0なので全問正解でした。

 

【ユリカモメ】yri001.jpg, yri002.jpg, yri003.jpg, yri004.jpg, yri005.jpg
yri001yri002yri003yri004yri005

——
画像ファイル名: yri001.jpg
カワラバト: 0.0
コサギ: 0.0
ユリカモメ: 27.2
アホウドリ: 0.0
タンチョウ: 0.0
スズメ: 0.0
——
画像ファイル名: yri002.jpg
カワラバト: 0.0
コサギ: 0.0
ユリカモメ: 100.0
アホウドリ: 0.0
タンチョウ: 0.0
スズメ: 0.0
——
画像ファイル名: yri003.jpg
カワラバト: 0.0
コサギ: 0.0
ユリカモメ: 85.3
アホウドリ: 0.4
タンチョウ: 0.0
スズメ: 0.0
——
画像ファイル名: yri004.jpg
カワラバト: 0.0
コサギ: 0.0
ユリカモメ: 100.0
アホウドリ: 0.0
タンチョウ: 0.0
スズメ: 0.0
——
画像ファイル名: yri005.jpg
カワラバト: 0.0
コサギ: 0.0
ユリカモメ: 0.0
アホウドリ: 0.0
タンチョウ: 0.0
スズメ: 0.0

最後の夏毛で飛んでいる写真(yri005.jpg)は0点でした。判別が難しかったと思います。
他の写真はユリカモメのスコアが他の鳥に比べてが最大なのでほぼ正解です。
三番目の写真(yri003.jpg)でアホウドリが少し混ざっているのは、足やクチバシが判別しにくい写真だったのではないかと思います。

 

【アホウドリ】aho001.jpg
ウィキベディアの画像を利用

——
画像ファイル名: aho001.jpg
カワラバト: 0.0
コサギ: 0.0
ユリカモメ: 0.0
アホウドリ: 100.0
タンチョウ: 0.0
スズメ: 0.0

ウィキペディアの写真は種の特徴をよくあらわした写真なので簡単に正解したのだと思います。

 

【タンチョウ】tan001.jpg, tan002.jpg, tan003.jpg
tan001tan002tan003

——
画像ファイル名: tan001.jpg
カワラバト: 0.0
コサギ: 0.0
ユリカモメ: 0.0
アホウドリ: 0.0
タンチョウ: 100.0
スズメ: 0.0
——
画像ファイル名: tan002.jpg
カワラバト: 0.0
コサギ: 0.0
ユリカモメ: 0.0
アホウドリ: 0.0
タンチョウ: 100.0
スズメ: 0.0
——
画像ファイル名: tan003.jpg
カワラバト: 0.0
コサギ: 0.0
ユリカモメ: 0.0
アホウドリ: 0.0
タンチョウ: 81.3
スズメ: 0.0

スコアが100ではない写真もありますが全問正解でした。

 

【スズメ】suz001.jpg, suz002.jpg, suz003.jpg
suz001suz002suz003

——
画像ファイル名: suz001.jpg
カワラバト: 0.0
コサギ: 0.0
ユリカモメ: 0.0
アホウドリ: 0.0
タンチョウ: 0.0
スズメ: 100.0
——
画像ファイル名: suz002.jpg
カワラバト: 0.0
コサギ: 0.0
ユリカモメ: 0.0
アホウドリ: 0.0
タンチョウ: 0.0
スズメ: 100.0
——
画像ファイル名: suz003.jpg
カワラバト: 0.0
コサギ: 0.0
ユリカモメ: 0.0
アホウドリ: 0.0
タンチョウ: 0.0
スズメ: 100.0

全てスズメ100で全問正解でした。

 

一部に難しかった写真もありましたが、6種類程度の画像分類で結構はっきりと正解が出ました。
転移学習を利用すれば、さまざまな分野で既存の学習済みモデルを流用して少ない時間と安価な設備でも結果が出せる可能性があります。

尚、ユリカモメのように夏毛と冬毛のある鳥や、飛んでいる写真の場合は種の特徴が見えにくく判別が難しい場合があると思います。
また対象の鳥の種類が多くなると特徴が似ている鳥など判別が難しくなると予想されます。
今後、それぞれの問題の改善策として考えられる方法を挙げておきます。

①学習のパラメータやネットワーク構成を変えてみる。
②画像分類を変える。たとえば「ユリカモメ(冬毛)」「ユリカモメ(夏毛)」のように画像分類を分ける。
③学習データを増やす。
④Keras の ImageDataGenerator を使う。
ImageDataGeneratorとは、学習に使う画像を加工する機能です。画像をスケール変換、回転、シフト、反転の機能があるので、少ない画像でも効果的な学習ができる可能性もあります。

 

(S.Onda 2018/7/14)