Создание выборки для обучение нейронной сети по классификации изображений

Мне нужно создать выборку для обучения моей нейронной сети классификации изображений. Так как тема достаточно специфичная, готовых изображений очень мало. Как из одного изображения получить достаточное количество? Есть ли готовые решения для изменения четкости изображения, его поворота и т.д.?


Ответы (1 шт):

Автор решения: Mark Petrov

Функция для аугментации изображений:

def augment(image, label):
    new_height = new_width = 32 # размер изображения
    image = tf.image.resize(image, (new_height, new_width))

    if tf.random.uniform((), minval=0, maxval=1) < 0.1:
        image = tf.tile(tf.image.rgb_to_grayscale(image), [1, 1, 3]) # с вероятностью 0.1 делаем изображение серым

    image = tf.image.random_brightness(image, max_delta=0.1)
    image = tf.image.random_contrast(image, lower=0.1, upper=0.2)

    # a left upside down flipped is still a dog ;)
    image = tf.image.random_flip_left_right(image)  # 50%
    # image = tf.image.random_flip_up_down(image) #%50%

    return image, label

Если датасет в виде tf.tensor, применить к нему эту функцию можно так:

ds_augmented = ds_train.map(augment)

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

→ Ссылка