白のトイプードルの画像を集める:物体検出+クラス分類

やること

画像を入力すると、白のトイプードル(latte)の部分を切り出して保存するプログラムを作る。latteは家で飼っている白のトイプードルの名前です。

以下のようなことがやりたいです。

  1. 様々な画像がフォルダに含まれている f:id:wada0421514:20191102113725p:plain

                  ↓

                  ↓

  1. 白のトイプードル(latte)の部分だけ切り出して、保存する f:id:wada0421514:20191102113729p:plain

 

ルール

物体検出の学習はNG クラス分類の学習はOK 理由:物体検出+クラス分類の併用をやってみたかったため

実装の説明

  1. 学習データ収集 Kerasの物体検出モデル、YOLOv3、学習済みモデル(ImageNet)を使って、犬を切り出して、学習用の犬の画像を集める

  2. 学習 切り出した犬の画像で、Kerasのクラス分類モデル、VGG16をFine-Tuningする。クラスはdogとlatte。

  3. 推論 Kerasの物体検出モデル、YOLOv3、学習済みモデル(ImageNet)を使って、犬を切り出す 切り出した犬の画像を、KerasのFine-Tuningした、クラス分類モデル、VGG16で、クラス分類する クラス分類して、latteと分類された画像だけ、保存する

プログラム

作成したプログラムは全てgithubに上げてあります。 github.com

 

1.学習データ収集

Kerasの物体検出モデル、YOLOv3、学習済みモデル(ImageNet)を使って、犬を切り出して、学習用の犬の画像を集める

  1. 収集した犬が写っている画像をディレクトリyoloinputに入れる

  2. yolo.py実行

  3. 切り出された犬の画像がディレクトリyolooutputに保存される
  4. 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

 

説明

  1. 学習データをそれぞれ、上記のようにディレクトリに入れる。上記のようにそれぞれディレクトリ作って画像入れておけば、ImageDataGeneratorが読み込んで、水増ししてくれる

  2. classification_dog_train.py実行

  3. 50epochで収束した。精度は95%くらい。

  4. 重み、モデル情報保存。

    学習した重み:vgg16_dog_fine.h5。

    モデル情報:vgg16_dog_fine.json

作成したプログラムはclassification_dog_train.pyです。

3.推論

 

手順

  1. 収集した犬が写っている画像をディレクトリyoloinputに入れる

  2. yolo.py実行

  3. 切り出された犬の画像がディレクトリyolooutputに保存される
  4. classification_dog_predict.py実行
  5. 切り出された犬の画像をyolooutputから読み込んで、クラス分類実行する。

  6. 白のトイプードル(latte)画像はディレクトリlatteに保存される

結果

  1. 入力:ディレクトリyoloinput:9枚の画像 f:id:wada0421514:20191102195624p:plain

  2. 出力:ディレクトリlatte:白のトイプードル(latte)の画像のみ4枚 f:id:wada0421514:20191102195631p:plain

作成したプログラムはclassification_dog_predict.pyです。

 

参考文献

  1. VGG16を転移学習させて「まどか☆マギカ」のキャラを見分ける、Qiita、@God_KonaBanana qiita.com

  2. 人検出モデルの実行、iTAC_Technical_Documents、

www.itd-blog.jp