Увеличение данных с помощью ImageDataGenerator

#python #tensorflow #keras

Вопрос:

Я пытаюсь выполнить простое увеличение данных для своих данных с помощью ImageDataGenerator. Однако мой генератор выдает мои искаженные изображения из-за параметра масштабирования. Я бы хотел, чтобы случайный масштаб увеличивал только мои данные, а при увеличении применял тот же масштаб по ширине и высоте (чтобы избежать искажения выходных данных изображения).

 gen = ImageDataGenerator(featurewise_center=False, featurewise_std_normalization=False,
                         samplewise_center = True, samplewise_std_normalization=True,
                         rotation_range=180, width_shift_range=0, height_shift_range=0,
                         shear_range=0, zoom_range=0.4, fill_mode='reflect',
                        horizontal_flip=True, rescale=1./255) 

 

На данный момент полученные изображения приведены ниже.

исходное изображение
выход

Комментарии:

1. AFAIK, использование увеличения ImageDataGenerator дает небольшой контроль, вместо этого используйте пользовательский генератор данных для применения такого увеличения.

2. У @M. Innat ImageDataGenerator есть аргумент preprocessing_function , который позволяет вам делать практически все, что угодно

3. О, да, я совсем забыл. Спасибо.

4. Вы проверили библиотеку imgaug? проверьте здесь: github.com/aleju/imgaug Это лучше по сравнению с keras IDG с дополнительными преимуществами

Ответ №1:

То, что вы ищете, — это случайное обрезание:

 def random_crop(image):
    height, width = image.shape[:2]
    random_array = numpy.random.random(size=4);
    w = int((width*0.5) * (1 random_array[0]*0.5))
    h = int((height*0.5) * (1 random_array[1]*0.5))
    x = int(random_array[2] * (width-w))
    y = int(random_array[3] * (height-h))

    image_crop = image[y:h y, x:w x, 0:3]
    image_crop = resize(image_crop, image.shape)
    return image_crop

# Data generator 
datagen = ImageDataGenerator(rotation_range=0.2,
                             width_shift_range=0.2,
                             height_shift_range=0.2,
                             shear_range=0.2,
                             zoom_range=0.2,
                             horizontal_flip=True,
                             fill_mode='nearest',
                             preprocessing_function=random_crop)
 

Источник здесь.

Комментарии:

1. Большое вам спасибо, вы отлично решили мою проблему!