白のトイプードルの画像を集める:物体検出+クラス分類
やること
画像を入力すると、白のトイプードル(latte)の部分を切り出して保存するプログラムを作る。latteは家で飼っている白のトイプードルの名前です。
以下のようなことがやりたいです。
- 様々な画像がフォルダに含まれている
↓
↓
- 白のトイプードル(latte)の部分だけ切り出して、保存する
ルール
物体検出の学習はNG クラス分類の学習はOK 理由:物体検出+クラス分類の併用をやってみたかったため
実装の説明
学習データ収集 Kerasの物体検出モデル、YOLOv3、学習済みモデル(ImageNet)を使って、犬を切り出して、学習用の犬の画像を集める
学習 切り出した犬の画像で、Kerasのクラス分類モデル、VGG16をFine-Tuningする。クラスはdogとlatte。
推論 Kerasの物体検出モデル、YOLOv3、学習済みモデル(ImageNet)を使って、犬を切り出す 切り出した犬の画像を、KerasのFine-Tuningした、クラス分類モデル、VGG16で、クラス分類する クラス分類して、latteと分類された画像だけ、保存する
プログラム
作成したプログラムは全てgithubに上げてあります。 github.com
1.学習データ収集
Kerasの物体検出モデル、YOLOv3、学習済みモデル(ImageNet)を使って、犬を切り出して、学習用の犬の画像を集める
収集した犬が写っている画像をディレクトリyoloinputに入れる
yolo.py実行
- 切り出された犬の画像がディレクトリyolooutputに保存される
- 347枚の犬画像を収集,164:latte,183:dog
作成したプログラムはyolo.pyです。
2.学習
切り出した犬の画像で、Kerasのクラス分類モデル、VGG16をFine-Tuningする。クラスはdogとlatte。
ディレクトリ構成
keras-yolo3/train/dog:151枚、keras-yolo3/train/latte:150枚 keras-yolo3/validation/dog:22枚、keras-yolo3/validation/latte:9枚
keras-yolo3/classification_dog_train.py
説明
学習データをそれぞれ、上記のようにディレクトリに入れる。上記のようにそれぞれディレクトリ作って画像入れておけば、ImageDataGeneratorが読み込んで、水増ししてくれる
classification_dog_train.py実行
50epochで収束した。精度は95%くらい。
重み、モデル情報保存。
学習した重み:vgg16_dog_fine.h5。
モデル情報:vgg16_dog_fine.json
作成したプログラムはclassification_dog_train.pyです。
3.推論
手順
収集した犬が写っている画像をディレクトリyoloinputに入れる
yolo.py実行
- 切り出された犬の画像がディレクトリyolooutputに保存される
- classification_dog_predict.py実行
切り出された犬の画像をyolooutputから読み込んで、クラス分類実行する。
白のトイプードル(latte)画像はディレクトリlatteに保存される
結果
作成したプログラムはclassification_dog_predict.pyです。