Когда я писал статью Использование узких мест для многоклассовой классификации в Keras и TensorFlow, некоторые из вас спрашивали об использовании увеличения данных в модели. Итак, я решил написать несколько статей, экспериментируя с различными дополнениями данных на модели узкого места. Для начала, вот краткое руководство, объясняющее, что такое увеличение данных и как это сделать в Keras.

Идея дополнения данных проста: мы выполняем случайные преобразования и нормализацию входных данных, чтобы обучаемая модель никогда не встречала одни и те же входные данные дважды. При небольшом количестве данных это может значительно снизить вероятность переобучения модели.

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

Вот почему в Keras есть встроенные функции для этого.

Пакет Keras Preprocessing имеет функцию ImageDataGeneraor, которую можно настроить для выполнения случайных преобразований и нормализации входных изображений по мере необходимости. Кроме того, в сочетании с функциями flow() и flow_from_directory() их можно использовать для автоматической загрузки данных, применения дополнений и подачи в модель.

Давайте напишем небольшой скрипт, чтобы увидеть возможности увеличения данных ImageDataGeneraor.

Я буду использовать следующее изображение,

Мы используем следующий код, чтобы загрузить изображение, запустить над ним дополнения 20 раз и сохранить полученные дополненные изображения.

from keras.preprocessing.image import ImageDataGenerator, img_to_array, load_img

datagen = ImageDataGenerator(
    rotation_range=40,
    width_shift_range=0.2,
    height_shift_range=0.2,
    shear_range=0.2,
    zoom_range=0.2,
    horizontal_flip=True,
    fill_mode='nearest')

img = load_img('data/Car.jpg')  # this is a PIL image

# convert image to numpy array with shape (3, width, height)
img_arr = img_to_array(img)

# convert to numpy array with shape (1, 3, width, height)
img_arr = img_arr.reshape((1,) + img_arr.shape)

# the .flow() command below generates batches of randomly transformed images
# and saves the results to the `data/augmented` directory
i = 0
for batch in datagen.flow(
    img_arr,
    batch_size=1,
    save_to_dir='data/augmented',
    save_prefix='Car_A',
    save_format='jpeg'):
    i += 1
    if i > 20:
        break  # otherwise the generator would loop indefinitely

Мы использовали следующие параметры для увеличения нашего изображения:

  • rotate_range — диапазон (в градусах), в пределах которого можно применять случайные повороты к изображениям.
  • width_shift_range — диапазон, в котором применяются случайные сдвиги по горизонтали.
  • height_shift_range — диапазон, в пределах которого применяются случайные вертикальные сдвиги.
  • shear_range — диапазон, в пределах которого применяются случайные преобразования сдвига.
  • zoom_range — диапазон, в пределах которого применяется случайное масштабирование к изображениям.
  • horizontal_flip — применять ли случайные горизонтальные перевороты к изображениям.
  • fill_mode=’nearest’ — метод заполнения вновь созданных пикселей.

ImageDataGeneraor имеет еще несколько параметров для дополнений. О них можно прочитать на странице официальной документации.

Функция flow() объекта ImageDataGeneraor может принимать входные изображения, применять определенные нами дополнения и бесконечно создавать пакеты дополненных данных в цикле. Хотя в этом примере у нас есть только одно входное изображение, функция fit() действительно предназначена для пакетов изображений.

Полученные дополненные изображения сохраняются в каталоге data/augmented, и они будут выглядеть примерно так (преобразования случайны, поэтому ваши результаты могут отличаться):

Используя подобные дополнения к данным, мы сможем уменьшить вероятность переобучения модели глубокого обучения при обучении на небольшом наборе данных.

Статьи по Теме:

Использование узких мест для мультиклассовой классификации в Keras и TensorFlow

Neptune.ai — Увеличение данных в НЛП

Если вам понравилась эта статья, ознакомьтесь с моей новой книгой по глубокому обучению ниже.

Глубокое обучение в Windows: создание систем компьютерного зрения с глубоким обучением в Microsoft Windows

Научитесь создавать системы глубокого обучения и компьютерного зрения с использованием Python, TensorFlow, Keras, OpenCV и других инструментов прямо в знакомой среде Microsoft Windows.

Получите копию прямо сейчас!

(Примечание: статья содержит партнерские ссылки)

Первоначально опубликовано на www.codesofinterest.com 11 января 2019 г.