ResNet50
, VGG16
, InceptionV3
を用いたKerasベースの分類、推論、Grad-Cam実装です。
必要なソースコードをgit clone
します。
$ git clone https://github.com/kohheinomura/keras_classification_tools.git
以下では、KaggleのDogs vs. Cats Redux: Kernels Editionのデータを用いて利用方法を示します。
全体にまたがる設定を行うコンフィグ・ファイルを作成します。コンフィグ・ファイル名は任意の名前を指定可能です。以下では、config_dogcat
とします。
$ cd keras_classification_tools
$ vi config_dogcat
以下はconfig_dogcat
の設定内容です。
[Base]
CLASSES = dog,cat
RESULT_DIR = ./results_dogcat
IMG_FORMAT = jpg
学習用データとバリデーション用データを任意のディレクトリ配下に置きます。以下の例では、data/train_images
に、学習データを、またバリデーション用データをdata/val_images
以下に配置しています。それそれのディレクトリには、コンフィグ・ファイルで指定したクラス名と同じディレクトリを作成し、各ディレクトリにはクラスに応じた画像を配置します。
例:
data/train_images
|-dog
| |-dog.1.jpg
| |-dog.2.jpg
|
|-cat
|-cat.100.jpg
data/val_images
|-dog
| |-dog.1.jpg
| |-dog.2.jpg
|
|-cat
|-cat.100.jpg
学習を実行します。学習には以下のpythonスクリプトを実行します。
実行例:
$ python train.py --config ./config_dogcat --model VGG16 --batch-size 16 --num-epoch 3 --out-file vgg16_dogcat --train-data-dir ./data/train_images --val-data-dir ./data/val_images
VGG16
、ResNet50
、InceptionV3
が指定可能です。.h5
、.txt
の2種類が生成されます。前者が学習結果としての重みが格納され、後者が学習時のログになります。学習済みモデルを利用して画像の分類を実行します。推論には以下のpythonスクリプトを実行します。
実行例:
$ python predict_batch.py --config config_dogcat --model VGG16 --restore-from vgg16_dogcat.h5 --target-dir ./data/val_images
VGG16
、ResNet50
、InceptionV3
が指定可能です。学習済みモデルを利用してヒートマップ画像を生成します。ヒートマップの作成には以下のpythonスクリプトを実行します。スクリプト実行後、コンフィグ・ファイルで指定したRESULT_DIRに以下のファイル名でヒートマップ画像が生成されます。
<学習済みモデルの重みファイル名>-gradcam-<画像ファイル名>.jpg
実行例:
$ python gradcam_batch.py --config config_dogcat --model VGG16 --restore-from vgg16_dogcat.h5 --target-dir ./data/val_images
VGG16
、ResNet50
、InceptionV3
が指定可能です。