我的数据集中某些课程的训练图像数量太少。我使用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
中的目录包含所有类的子目录。
答案 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)