web-dev-qa-db-ja.com

ケラスでImageDataGeneratorとflow_from_directoryを使用してサイズ変更された画像を保存する方法

次のコードを使用して、フォルダー(2つのクラス)に保存されているRGB画像のサイズを変更しています。

from keras.preprocessing.image import ImageDataGenerator
dataset=ImageDataGenerator()
dataset.flow_from_directory('/home/1',target_size=(50,50),save_to_dir='/home/resized',class_mode='binary',save_prefix='N',save_format='jpeg',batch_size=10)

私のデータツリーは次のようなものです:

1/
 1_1/
     img1.jpg
     img2.jpg
     ........
 1_2/
     IMG1.jpg
     IMG2.jpg
     ........
resized/
        1_1/ (here i want to save resized images of 1_1)
        2_2/ (here i want to save resized images of 1_2)

コードを実行した後、次の出力が表示されますが、画像は表示されません。

Found 271 images belonging to 2 classes.
Out[12]: <keras.preprocessing.image.DirectoryIterator at 0x7f22a3569400>

画像を保存するには?

6
Hitesh

1つの画像の拡張画像をどこにでも保存できる非常にシンプルなバージョンを次に示します。

手順1.画像データジェネレーターを初期化する

ここで、元の画像にどのような変更を加えたいかを理解し、拡張画像を生成します
diff効果については、こちらで確認できます- https://keras.io/preprocessing/image/

datagen = ImageDataGenerator(rotation_range=10, width_shift_range=0.1, 
height_shift_range=0.1,shear_range=0.15, 
zoom_range=0.1,channel_shift_range = 10, horizontal_flip=True)

ステップ2:ここで、拡張を実行する元の画像を選択します

画像で読む

image_path = 'C:/Users/Darshil/gitly/Deep-Learning/My 
Projects/CNN_Keras/test_augment/caty.jpg'

image = np.expand_dims(ndimage.imread(image_path), 0)

ステップ3:拡張画像を保存する場所を選択します

save_here = 'C:/Users/Darshil/gitly/Deep-Learning/My 
Projects/CNN_Keras/test_augment'

ステップ4.元の画像に合わせる

datagen.fit(image)

ステップ5:画像を繰り返し処理し、「save_to_dir」パラメーターを使用して保存する

for x, val in Zip(datagen.flow(image,                    #image we chose
        save_to_dir=save_here,     #this is where we figure out where to save
         save_prefix='aug',        # it will save the images as 'aug_0912' some number for every new augmented image
        save_format='png'),range(10)) :     # here we define a range because we want 10 augmented images otherwise it will keep looping forever I think
pass
10
DrDEE

出力で説明されているように、flow_from_directoryメソッドは「イテレータ」を提供します。イテレータはそれ自体では何もしません。繰り返されるのを待っており、実際のデータが読み取られて生成されます。

Kerasのフィッティング用イテレータは次のように使用されます:

generator = dataset.flow_from_directory('/home/1',target_size=(50,50),save_to_dir='/home/resized',class_mode='binary',save_prefix='N',save_format='jpeg',batch_size=10)

for inputs,outputs in generator:

    #do things with each batch of inputs and ouptus

通常、上記のループを実行する代わりに、ジェネレータをfit_generatorメソッドに渡すだけです。 forループを実行する必要はありません。

model.fit_generator(generator, ......)

Kerasは、画像が読み込まれ、ジェネレーターを反復して拡張された後にのみ画像を保存します。

1
Daniel Möller