Code for YAMATOKORIMAYAでは, 「アーバンデータチャレンジ2018 」への取り組みの一つとして, 金魚AI(愛)育成プロジェクトなるものに取り組んでいる.
関連記事:
・金魚って見分けられる? (1)
・金魚って見分けられる? (2)
・金魚って見分けられる? (3)
・金魚って見分けられる? (4)
前回, 「ちょびっと金魚AI」ということで, 金魚の分類をDeep Learningを使ってやってみた.
今回は, 金魚のデータ収集があまり進まない中, Data Augmentatioの一種であるRandom Erasing[1]とMixup[2]を試してみた.
1. Random Erasing[1][3]
1.1 Random Erasingとは?
学習データの画像を一部ランダムな矩形領域でマスクするという手法.
シンプルで分かりやすい!!
1.2 実装
[アルゴリズム]
[コード]
@yu4uさんのコード[3]を利用.
1.3 画像生成
金魚画像で, Random Erasingやってみた結果.
2. Mixup[2][4][5]
2.1 Mixupとは?
2つの訓練サンプルのペア(X1, y1), (X2, y2)を混合して新たな訓練サンプルを作成する手法
ラベルy1, y2も混合するところが特徴的.
こちらもシンプルで分かりやすい.
2.2 実装
@yu4uさんのコード[4]だと, kerasのImageDataGeneratorで学習時に逐次混合することができないので, @koshian2さんのコード[5]を活用.
2.3 画像生成
金魚画像でMixupやってみた結果.
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のできる独自のジェネレーターを作る
|
現場で使える! TensorFlow開発入門 Kerasによる深層学習モデル構築手法 (AI & TECHNOLOGY)
|
詳解 ディープラーニング ~TensorFlow・Kerasによる時系列データ処理~
|
直感 Deep Learning ―Python×Kerasでアイデアを形にするレシピ
|