Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Data Augmentation Image Data Generator Keras Semantic Segmentation

I'm fitting full convolutional network on some image data for semantic segmentation using Keras. However, I'm having some problems overfitting. I don't have that much data and I want to do data augmentation. However, as I want to do pixel-wise classification, I need any augmentations like flips, rotations, and shifts to apply to both feature images and the label images. Ideally I'd like to use the Keras ImageDataGenerator for on-the-fly transformations. However, as far as I can tell, you cannot do equivalent transformations on both the feature and label data.

Does anyone know if this is the case and if not, does anyone have any ideas? Otherwise, I'll use other tools to create a larger dataset and just feed it in all at once.

Thanks!

like image 957
TSW Avatar asked Jul 02 '16 02:07

TSW


1 Answers

Yes you can. Here's an example from Keras's docs. You zip together two generators seeded with the same seeds and the fit_generator them. https://keras.io/preprocessing/image/

# we create two instances with the same arguments  data_gen_args = dict(featurewise_center=True,                      featurewise_std_normalization=True,                      rotation_range=90.,                      width_shift_range=0.1,                      height_shift_range=0.1,                      zoom_range=0.2)  image_datagen = ImageDataGenerator(**data_gen_args)  mask_datagen = ImageDataGenerator(**data_gen_args)  # Provide the same seed and keyword arguments to the fit and flow methods seed = 1  image_datagen.fit(images, augment=True, seed=seed)  mask_datagen.fit(masks, augment=True, seed=seed)  image_generator = image_datagen.flow_from_directory(     'data/images',     class_mode=None,     seed=seed)  mask_generator = mask_datagen.flow_from_directory(     'data/masks',     class_mode=None,     seed=seed)  # combine generators into one which yields image and masks  train_generator = zip(image_generator, mask_generator)  model.fit_generator(     train_generator,     samples_per_epoch=2000,     nb_epoch=50) 
like image 58
Dennis Sakva Avatar answered Sep 28 '22 11:09

Dennis Sakva