みらいテックラボ

音声・画像認識や機械学習など, 週末プログラマである管理人が興味のある技術の紹介や実際にトライしてみた様子などメモしていく.

金魚って見分けられる? (2)

Code for YAMATOKORIMAYAでは, 「アーバンデータチャレンジ2018 」への取り組みの一つとして, 金魚AI(愛)育成プロジェクトなるものに取り組んでいる.

f:id:moonlight-aska:20180729174722j:plain:w400


関連記事:
金魚って見分けられる? (1)
・金魚って見分けられる? (2)
金魚って見分けられる? (3)
金魚って見分けられる? (4)


前回, 「ちょびっと金魚AI」ということで, 金魚の分類をDeep Learningを使ってやってみた.
今回は, 金魚のデータ収集があまり進まない中, Data Augmentatioの一種であるRandom Erasing[1]とMixup[2]を試してみた.


1. Random Erasing[1][3]
1.1 Random Erasingとは?
学習データの画像を一部ランダムな矩形領域でマスクするという手法.
f:id:moonlight-aska:20180909144111p:plain:w400
シンプルで分かりやすい!!

1.2 実装
[アルゴリズム]
f:id:moonlight-aska:20180909144637p:plain

[コード]
@yu4uさんのコード[3]を利用.

1.3 画像生成
金魚画像で, Random Erasingやってみた結果.
f:id:moonlight-aska:20180909150234p:plain


2. Mixup[2][4][5]
2.1 Mixupとは?
2つの訓練サンプルのペア(X1, y1), (X2, y2)を混合して新たな訓練サンプルを作成する手法
f:id:moonlight-aska:20180909150826p:plain:w500
ラベルy1, y2も混合するところが特徴的.
こちらもシンプルで分かりやすい.

2.2 実装
@yu4uさんのコード[4]だと, kerasのImageDataGeneratorで学習時に逐次混合することができないので, @koshian2さんのコード[5]を活用.

2.3 画像生成
金魚画像でMixupやってみた結果.
f:id:moonlight-aska:20180909151401p:plain


3. 学習&評価
学習時にRandom Erasing, Mixupを行い, 精度評価を行った.
[モデル]

ベース InceptionResNetV2(学習済)

[学習条件]

学習データ 880
Optimizer Adam
ミニバッチサイズ 32
Epoch数 100
Random Erasing使用比率 0.5
Mixup αパラメータ 0.5

[評価]

評価データ 87

<結果>

DataAugmentation 正解率(1位) 累積正解率(1-3位)
なし 88.5% 94.3%
Random Erasing 88.5% 96.6%
Mixup 87.4% 92.0%

(注) 学習データが少ないので, ImageDataGeneratorでrotation, shift, zoom, horizontak_flip等は使用.

結果的にはほぼ性能差は見られなかったが, 学習/評価データがかなり少ないので差がでなかった可能性もあると思っている.

分類精度が90%に近くなってきたので, 精度upの取組みは金魚データが増えるまでいったん置いておき, 次はモバイルアプリにするためにML Kitで扱えるようTensorFlow Liteモデル化を検討してみようと思う...

----
参照URL:
[1] Random Erasing Data Augmentation
[2] mixup: Beyond Empirical Risk Minimization
[3] yu4u/cutout-random-erasing
[4] yu4u/mixup-generator
[5] KerasのImageDataGeneratorを継承してMix-upやRandom Croppingのできる独自のジェネレーターを作る




PythonとKerasによるディープラーニング

PythonとKerasによるディープラーニング


現場で使える! TensorFlow開発入門 Kerasによる深層学習モデル構築手法 (AI & TECHNOLOGY)

現場で使える! TensorFlow開発入門 Kerasによる深層学習モデル構築手法 (AI & TECHNOLOGY)


詳解 ディープラーニング ~TensorFlow・Kerasによる時系列データ処理~

詳解 ディープラーニング ~TensorFlow・Kerasによる時系列データ処理~


直感 Deep Learning ―Python×Kerasでアイデアを形にするレシピ

直感 Deep Learning ―Python×Kerasでアイデアを形にするレシピ