Вопрос или проблема
Я пытаюсь построить автокодировщик, который будет кодировать изображение в латентное пространство, а затем декодировать его обратно в оригинальное изображение без каких-либо изменений. В основном я пытаюсь реализовать эту статью Универсальная передача стиля через преобразования признаков. Блок кодировщика – это предварительно обученный VGG19, выходной слой relu4_1, а декодер – это обратное направление кодировщика, где макспулинг заменен на слой увеличения. Также я использовал tanh после последнего слоя. Это оригинальное изображение
Это вывод моего обученного декодера
Как вы можете видеть, модель смогла довольно хорошо захватить признаки, но все изображение выглядит темным и имеет некоторые небольшие артефакты. Я пробовал менять размер пакета, изменять скорость обучения или даже удалять слой tanh. Но ничего не помогает, и обучение модели на большем количестве эпох тоже не даёт результатов. Я просто не знаю, что не так. Стоит отметить, что если я увеличиваю размер пакета до 32 или 64 вместо текущих 4, то маленькие артефакты в основном исчезают, но изображение всё равно выглядит темным. Буду признателен за любую помощь.
Лично я заметил, что когда модель CNN становится слишком “узкой” или ограниченной в середине (много каналов с маленькой высотой и шириной), сети может быть трудно воспроизвести оригинальное изображение без артефактов. Если возможно, попробуйте убрать несколько слоев из вашей модели, чтобы она была “шире” в середине.
Ответ или решение
Ваш вопрос о том, почему восстановленное изображение выглядит темнее оригинала, поднимает несколько важных аспектов, связанных с архитектурой автоэнкодера и особенностями обработки изображений.
-
Нормализация данных: Один из наиболее распространенных факторов, влияющих на цветовой баланс восстанавливаемого изображения, — это способ, которым вы нормализуете входные изображения. Если вы применяете нормализацию (например, вычитая средние значения и увеличивая стандартное отклонение), вам следует убедиться, что выходные данные модели и данные для обратного распространения (обучения) обрабатываются аналогичным образом. Например, если вы используете
tanh
на выходном слое, то ваши входные данные также должны быть нормализованы в диапазон от -1 до 1. -
Активационная функция: Использование функции активации
tanh
может ограничить диапозон значений, которые ваш декодер может выдавать. Возможно, вам стоит попробовать заменитьtanh
наsigmoid
, который выводит значения в диапазоне от 0 до 1, что может помочь сохранить яркость исходного изображения. Также можно рассмотреть добавление линейной активации (без активации) на последнем слое. -
Потеря яркости в процессе декодирования: Трехмерные сверточные сети могут терять некоторую информацию о яркости из-за особенностей свертки и подвыборки. Убедитесь, что декодер действительно способен восстановить все актуальные детали. Посмотрите на количество слоев и на размер фильтров — слишком маленькие размеры могут приводить к дублированию данных.
-
Обучение и переобучение: Убедитесь, что ваш модель действительно обучена. Мелкие артефакты могут исчезнуть с увеличением размерности пакета, но если модели не хватает данных или она переполнена, это может привести к потере контекста. Переосмысните свою стратегию обучения, чтобы избежать переобучения и исследуйте разные методы регуляризации, такие как дроп-аут.
-
Анализ градиентов: Моя рекомендация — внимательно исследовать, как градиенты проходят через вашу сеть. После каждой эпохи вы можете проверять статистику активаций в слоях, чтобы убедиться, что они находятся в подходящем диапазоне и не обрезаются.
-
Попробуйте другие архитектуры: В некоторых случаях, если архитектура слишком узкая, как вы уже упоминали, это может затруднить восстановление качественной информации. Подумайте о добавлении дополнительных каналов (шире) в слоях или уменьшите количество слоев, чтобы улучшить качество выходного изображения.
-
Энкодер-декодер: Возможно, стоит пересмотреть подход к созданию декодера. Иногда более глубокий может быть улучшен за счет добавления дополнительных заготовок и блоков пропуска, что может помочь улучшить качество реконструируемых изображений.
Если вы учтете эти рекомендации, вы сможете получить более яркие и четкие реконструированные изображения. Hazlo и удачи в ваших экспериментах!