在Keras中是否可以仅将数据扩充应用于指定的目录?

时间:2019-06-24 10:30:29

标签: keras

我的数据集中某些课程的训练图像数量太少。我使用Keras的数据增强功能。但是,某些类具有足够的数据。我该如何指示Keras,以不同的方式将增强应用于每个课程?例如。在那些仅具有H / V-flip数据的类上,在图像旋转,移位等很少的类上?

当前相关代码如下:

    train_datagen = ImageDataGenerator(
        rescale=1. / 255,
        rotation_range=45,  # randomly rotate images in the range (degrees, 0 to 180)
        width_shift_range=0.02,  # randomly shift images horizontally (fraction of total width)
        height_shift_range=0.02,  # randomly shift images vertically (fraction of total height)
        zoom_range=0.2,
        horizontal_flip=True,  # randomly flip images
        vertical_flip=True,
        validation_split=0.2
    )

    train_generator = train_datagen.flow_from_directory(
        self.train_base
        ,target_size=(self.img_width, self.img_height)
        ,batch_size=self.batch_size
        ,class_mode='categorical'
        ,color_mode='grayscale'
        ,classes=self.classes
        #,save_to_dir = "c:/temp/train_in"
    )

    learnhist = self.model.fit_generator(
        train_generator,
        steps_per_epoch=self.nb_train_samples // self.batch_size,
        epochs=self.epochs,
        callbacks=callbacks_list,
        initial_epoch=self.start_epoch
    )

变量self.train_base中的目录包含所有类的子目录。

1 个答案:

答案 0 :(得分:0)

对于Keras,您可能可以实现多个ImageDataGenerator,然后定义不同的增强方法-完全公开,我从未尝试过。

有一个Augmentor软件包,它采用漂亮的流水线方法来进行数据扩充,从而可以直接以特定方式扩充不同的目录。 这就是我倾向于走的路。

import Augmentor

# Define augmentation pipelines
p1 = Augmentor.Pipeline("/path/to/images1")
# Initialised with 100 images found in selected directory.
p2 = Augmentor.Pipeline("/path/to/images2")
# Initialised with 100 images found in selected directory.

# Define different augmentations depending on the pipeline
p1.rotate(probability=0.7, max_left_rotation=10, max_right_rotation=10)
p2.rotate(probability=0.1, max_left_rotation=0, max_right_rotation=90)

# Augment images
p1.sample(10000)
p2.sample(10000)