LoginSignup
11
10

More than 5 years have passed since last update.

KerasのImageDataGeneratorが出力する画像の順番について

Posted at

KerasのImageDataGeneratorを使用すると簡単にデータ拡張が実現できます。
ImageDataGeneratorの使用方法については以下の記事が参考になりますが、
複数の画像を入力したときにどのような順番で画像が出力されるか気になったので調べてみました。

Kerasによるデータ拡張
Kerasでデータ拡張(Data Augmentation)後の画像を表示する

使用したコードと概要

from tensorflow.keras.preprocessing.image import ImageDataGenerator
from tensorflow.keras.preprocessing import image
import numpy as np
import matplotlib.pyplot as plt

def load_img(name):
    img = image.load_img(name, target_size=(256, 256))
    return image.img_to_array(img) / 255

def show_imgs(imgs, row, col):
    for i, img in enumerate(imgs):
        plot_num = i+1
        plt.subplot(row, col, plot_num)
        plt.tick_params(labelbottom=False)
        plt.tick_params(labelleft=False)
        plt.imshow(img)
    plt.show()


imgs = np.array([load_img('b.png'), load_img('c.png'), load_img('t.png')])
# 各画像にラベルを付けるための配列
labels = np.array([0,1,2])
# 画像の表示
show_imgs(imgs, 1, 3)

使用した3枚の画像はペイントで適当に作った以下のものです。

a.png

ImageDataGeneratorは以下のコードで作成します。

datagen = ImageDataGenerator(
    rotation_range=40.,
    width_shift_range=0.3,
    height_shift_range=0.3,
    zoom_range=0.3)

# 全体を見る必要があるパラメータを使用する場合はfitが必要
# 今回は特に必要ないけど一応やっておく
datagen.fit(imgs)

# 指定したバッチサイズで3回生成する
def create(batch_size):
    gen = datagen.flow(imgs, labels, batch_size=batch_size)
    for i in range(0, 3):
        data = next(gen)
        print('len:{}, labels:{}'.format(len(data[0]), data[1]))
        show_imgs(data[0], 1, len(data[0]))

画像を生成する

バッチサイズと画像の総数が同じ場合

create(3)

b3.PNG

ランダムな順番で画像が生成されているみたいです。
元画像と全く同じものは出力されず、変形が加えられたもののみが出力されています。

バッチサイズのほうが画像の総数より少ない場合

create(2)

b2.PNG

2,1,2...というような感じで出力されるようです。

バッチサイズのほうが総数より多い場合

create(10)

b10.PNG

画像の総数が1バッチの最大個数のようです。

まとめ

画像はランダムな順番で出力される。
元々の画像は出力されず常に変形されたものが出力される。
画像の総数より小さいバッチサイズを指定するとすべての画像を使い切るまで同じ画像をもととしたものは現れない。

11
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
10