Автокодировщик не обучается на трансформации изображений в режиме walk forward.

Вопрос или проблема

У меня есть серия из 15 кадров (60 строк x 50 столбцов). На протяжении этих 15 кадров луна движется от верхнего левого угла к нижнему правому углу.

Данные = https://github.com/aiqc/AIQC/tree/main/remote_datum/image/liberty_moon

введите описание изображения здесь

введите описание изображения здесь

введите описание изображения здесь

Я пытаюсь создать авто编码ер с продвижением вперед, где:

  • Входные данные – это изображение 60×50.
  • Этикетка оценки – это изображение 60×50 из через 2 кадра.
  • Все данные масштабированы в диапазоне от 0 до 1.
    model = keras.models.Sequential()
    model.add(layers.Conv1D(64*hp['multiplier'], 3, activation='relu', padding='same'))
    model.add(layers.MaxPool1D( 2, padding='same'))
    model.add(layers.Conv1D(32*hp['multiplier'], 3, activation='relu', padding='same'))
    model.add(layers.MaxPool1D( 2, padding='same'))
    model.add(layers.Conv1D(16*hp['multiplier'], 3, activation='relu', padding='same'))
    model.add(layers.MaxPool1D( 2, padding='same'))

    model.add(layers.Conv1D(16*hp['multiplier'], 3, activation='relu', padding='same'))
    model.add(layers.UpSampling1D(2))
    model.add(layers.Conv1D(32*hp['multiplier'], 3, activation='relu', padding='same'))
    model.add(layers.UpSampling1D(2))
    model.add(layers.Conv1D(64*hp['multiplier'], 3, activation='relu'))
    model.add(layers.UpSampling1D(2))

    model.add(layers.Conv1D(50, 3, activation='sigmoid', padding='same'))
    # последний слой пробовал с сигмоидой и BCE потерей.
    # последний слой пробовал с relu и MAE.

Учебники говорят использовать последний слой с сигмоидой и потерей BCE, но значения, которые я получаю, вероятно, не должны находиться в диапазоне от 0 до 1, потому что потеря уходит в сильно отрицательное значение.

введите описание изображения здесь

Если я использую последний слой relu с потерей MAE, он, похоже, обучается чему-то.

введите описание изображения здесь

Но предсказанное изображение не очень хорошее:

введите описание изображения здесь

Авто编码еры изображений отлично подходят для изменения стиля, но не так хороши для изменения содержания.

В любом случае, поскольку вы оставляете ~95% нетронутым в вашей трансформации, ResNet вероятно, будет очень полезен!
Если вы используете сеть песочных часов, вы увидите, как она быстро сходит на нет в само编码ер (что примерно на 95% правильно) и затем сосредоточьтесь на всей тренировке только на разнице (часть с луной).

Ответ или решение

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

Проблема с Обучением Автоэнкодера

В вашем случае задача заключается в том, чтобы предсказать изображение, соответствующее текущему кадру с учетом его состояния через два кадра (или через два временных шага). При этом изображение имеет размеры 60×50 пикселей. Важно учитывать, что автоэнкодеры хорошо подходят для стиля и текстуры, но могут демонстрировать сложности в обучении, когда речь идет о значительных изменениях в содержимом.

Архитектура Модели

Вы используете архитектуру, основанную на сверточных слоях с последовательным уменьшением и увеличением разрешения. Однако имеет смысл проанализировать несколько моментов, которые могут повлиять на эффективность обучения:

  1. Сверточные Слои: Для обработки изображений вместо Conv1D следует использовать Conv2D, так как ваши входные данные представляют собой двумерные изображения. Это может значительно улучшить способность модели извлекать пространственные особенности.

  2. Выходной Слой и Функция Потерь: Если ваши выходные значения не попадают в диапазон 0-1, это может указывать на проблемы с функцией активации выходного слоя или применяемой функцией потерь. Вы можете попробовать:

    • Использовать sigmoid в сочетании с binary_crossentropy (BCE), но убедиться, что ваши данные предварительно нормализованы.
    • Вариант с relu и mean_absolute_error (MAE) может быть более подходящим, если вы ожидаете, что значения могут выходить за пределы [0,1].
  3. Архитектурные Изменения: Рассмотрите возможность использования более сложных сетей, таких как ResNet или Hourglass. Эти архитектуры лучше справляются с извлечением признаков и могут помочь в фокусировке на важных изменениях, таких как перемещение Луны. Hourglass сети, в частности, могут сосредоточиться на различиях между кадрами.

Альтернативные Подходы

  1. Изменение Стратегии Обучения: Подумайте о перенастройке подхода к обучению. Возможно, вам стоит рассмотреть бинарную классификацию таких областей, как фон и предмет (Луна), чтобы модель могла сосредоточиться на основных изменениях.

  2. Увеличение Данных: Если возможно, примените техники увеличения данных (data augmentation) для создания новых примеров, что позволит улучшить обобщающую способность вашей модели.

  3. Тестирование с Разными Параметрами: Экспериментируйте с гиперпараметрами вашей модели, такими как количество фильтров, размер ядра, скорость обучения и параметры регуляризации. Рекомендуется использовать адаптивные оптимизаторы, такие как Adam или RMSprop.

Заключение

Ваши наблюдения о том, что автоэнкодеры и ResNet могут эффективно работать для задач с небольшими изменениями в содержании, являются правильными. Учитывая вашу задачу, более твёрдый подход с использованием более сложных архитектур, таких как ResNet или Hourglass, в сочетании с правильными стратегиями обучения и тестирования, может предоставить вам значительное улучшение в качестве прогнозируемых изображений. Пробуйте различные подходы и изучайте их результаты, чтобы определить наиболее эффективные решения для вашей конкретной задачи.

Оцените материал
Добавить комментарий

Капча загружается...