Keras: низкая производительность с ImageDataGenerator

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

Здесь я хотел применить увеличение данных с помощью ImageDataGenerator, Чтобы преобразовать оба изображения одинаково, я использовал подход, описанный в документации Keras, где описано преобразование изображения с соответствующей маской. Мой случай немного отличается, так как мои изображения уже загружены и их не нужно извлекать из каталога. Эта процедура уже была описана в другом посте StackOverlow.

Чтобы проверить мою реализацию, я сначала использовал ее без дополнения и использования ImageDataGenerator без указания какого-либо параметра. Согласно справочному классу в документах Keras, это не должно изменять изображения. Смотрите этот фрагмент:

img_val = img[0:split_seperator]
img_train = img[split_seperator:]

target_val = target[0:split_seperator]
target_train = target[split_seperator:]

data_gen_args = dict()

# define data preparation
src_datagen = ImageDataGenerator(**data_gen_args)
target_datagen = ImageDataGenerator(**data_gen_args)

# fit parameters from data
seed = 1
src_datagen.fit(img_train, augment=False, seed=seed)
target_datagen.fit(target_train, augment=False, seed=seed)

training_generator = zip(
    src_datagen.flow(img_train, batch_size=batch_size_training, seed=seed),
    target_datagen.flow(target_train, batch_size=batch_size_training, seed=seed))

_ = model.fit_generator(
    generator=training_generator,
    steps_per_epoch=image_train.shape[0] // batch_size_training,
    epochs=num_epochs, verbose=1,
    validation_data=(img_val, target_val), callbacks=callbacks)

К сожалению, моя реализация, похоже, имеет некоторые проблемы. Я не получаю ожидаемых выступлений. Потеря проверки как-то стабильна около определенного значения и лишь немного уменьшается (см. Изображение ниже). Здесь я ожидаю, так как я не использовал никакого дополнения, такую ​​же потерю, как и без расширенного базового уровня.

Для сравнения, мои тренировки без ImageDataGenerator похоже

_ = model.fit(img, target,
              batch_size=batch_size_training,
              epochs=num_epochs, verbose=1,
              validation_split=0.2, callbacks=cb)

Я думаю, что я как-то перепутал с использованием ImageDataGenerator, flow и fit функция. Итак, мои вопросы:

  • является одной из прикладных функций fit или же flow избыточно и вызывает такое поведение?
  • у меня проблема с реализацией?
  • имеет ли эта реализация вообще смысл?
  • имеет ли смысл устанавливать исправление для валидационного набора или оно тоже должно быть дополнено?

Обновление (2019-01-23 и продолжение): что я уже пробовал (в ответах на ответы):

  • создание генератора для данных проверки, а также
  • удаление примененной функции подгонки
  • установка shuffle=True в функции потока (данные уже перетасованы)

Ни один из этих подходов не помог улучшить результаты.

1 ответ

Решение

Наконец, я понимаю, что вы пытаетесь сделать, это должно сделать работу.

aug = ImageDataGenerator(**data_gen_args)

# train the network
H = model.fit_generator(aug.flow(img_train, target_train, batch_size=image_train.shape[0]),
    validation_data=(img_val, target_val), steps_per_epoch=image_train.shape[0] // BS,
    epochs=EPOCHS)

Дайте мне знать, если это работает.

Другие вопросы по тегам