サイトアイコン 知的好奇心

KerasのImageDataGeneratorで学習用画像を水増しする方法

KerasのImageDataGeneratorで学習用画像を水増しする方法をご紹介します。

条件

画像のランダム生成

ImageDataGeneratorを用いて、元画像から10個の画像を生成します。

ソース

今回指定した、ImageDataGeneratorのパラメータは以下の通りです。

from keras.preprocessing.image import ImageDataGenerator
import os
import cv2


DATA_DIR = 'C:/data/train/dogs'  # データディレクトリ
IMAGE_NAME = 'dog1.jpg'  # 対象画像ファイル
SAVE_DIR = os.path.join(DATA_DIR, 'preview')  # 生成画像の保存先ディレクトリ

datagen = ImageDataGenerator(
        rotation_range=40,
        width_shift_range=0.2,
        height_shift_range=0.2,
        shear_range=0.2,
        zoom_range=0.2,
        horizontal_flip=True,
        fill_mode='nearest')

img_array = cv2.imread(os.path.join(DATA_DIR, IMAGE_NAME),)  # 画像読み込み
img_array = img_array.reshape((1,) + img_array.shape)  # 4次元データに変換(flow()に渡すため)

# 保存先ディレクトリが存在しない場合、作成する。
if not os.path.exists(SAVE_DIR):
    os.makedirs(SAVE_DIR)

# flow()により、ランダム変換したイメージのバッチを作成。
# 指定したディレクトリに生成画像を保存する。
i = 0
for batch in datagen.flow(img_array, batch_size=1,
                          save_to_dir=SAVE_DIR, save_prefix='dog', save_format='jpeg'):
    i += 1
    if i == 10:
        break  # 停止しないと無限ループ

実行結果

元画像

生成画像

指定したディレクトリに、生成画像が保存されます。

学習用データを増やす意義

ネットワークの精度を高める方法の1つに、「学習用データを増やす」というものがあります。

学習を改善するもうひとつの手法は、より多くの学習データを用意することです。

出典:直感 Deep Learning

Data Augumentation

画像の拡大、縮小、左右反転などにより、手元の画像を拡張する(バリエーションを増やす)ことが出来ます。
これは「Data Augumentation」と呼ばれており、画像の変更に強くする効果があり、ネットワークの精度を高めることが出来ます。

本記事で紹介した通り、KerasのImageDataGeneratorを用いれば、簡単に学習用データを増やすことが出来ます。

参考

Keras Documentation:ImageDataGenerator

https://keras.io/ja/preprocessing/image/

The Keras Blog:Building powerful image classification models using very little data

https://blog.keras.io/building-powerful-image-classification-models-using-very-little-data.html

モバイルバージョンを終了