Почему мое восстановленное изображение выглядит темнее оригинала?

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

Я пытаюсь построить автокодировщик, который будет кодировать изображение в латентное пространство, а затем декодировать его обратно в оригинальное изображение без каких-либо изменений. В основном я пытаюсь реализовать эту статью Универсальная передача стиля через преобразования признаков. Блок кодировщика – это предварительно обученный VGG19, выходной слой relu4_1, а декодер – это обратное направление кодировщика, где макспулинг заменен на слой увеличения. Также я использовал tanh после последнего слоя. Это оригинальное изображение

оригинальное изображение

Это вывод моего обученного декодера

вывод декодера

Как вы можете видеть, модель смогла довольно хорошо захватить признаки, но все изображение выглядит темным и имеет некоторые небольшие артефакты. Я пробовал менять размер пакета, изменять скорость обучения или даже удалять слой tanh. Но ничего не помогает, и обучение модели на большем количестве эпох тоже не даёт результатов. Я просто не знаю, что не так. Стоит отметить, что если я увеличиваю размер пакета до 32 или 64 вместо текущих 4, то маленькие артефакты в основном исчезают, но изображение всё равно выглядит темным. Буду признателен за любую помощь.

Лично я заметил, что когда модель CNN становится слишком “узкой” или ограниченной в середине (много каналов с маленькой высотой и шириной), сети может быть трудно воспроизвести оригинальное изображение без артефактов. Если возможно, попробуйте убрать несколько слоев из вашей модели, чтобы она была “шире” в середине.

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

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

  1. Нормализация данных: Один из наиболее распространенных факторов, влияющих на цветовой баланс восстанавливаемого изображения, — это способ, которым вы нормализуете входные изображения. Если вы применяете нормализацию (например, вычитая средние значения и увеличивая стандартное отклонение), вам следует убедиться, что выходные данные модели и данные для обратного распространения (обучения) обрабатываются аналогичным образом. Например, если вы используете tanh на выходном слое, то ваши входные данные также должны быть нормализованы в диапазон от -1 до 1.

  2. Активационная функция: Использование функции активации tanh может ограничить диапозон значений, которые ваш декодер может выдавать. Возможно, вам стоит попробовать заменить tanh на sigmoid, который выводит значения в диапазоне от 0 до 1, что может помочь сохранить яркость исходного изображения. Также можно рассмотреть добавление линейной активации (без активации) на последнем слое.

  3. Потеря яркости в процессе декодирования: Трехмерные сверточные сети могут терять некоторую информацию о яркости из-за особенностей свертки и подвыборки. Убедитесь, что декодер действительно способен восстановить все актуальные детали. Посмотрите на количество слоев и на размер фильтров — слишком маленькие размеры могут приводить к дублированию данных.

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

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

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

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

Если вы учтете эти рекомендации, вы сможете получить более яркие и четкие реконструированные изображения. Hazlo и удачи в ваших экспериментах!

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

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