«Это 11-й день моего участия в ноябрьском испытании обновлений, ознакомьтесь с подробностями события:Вызов последнего обновления 2021 г."
Улучшение передачи стиля
Перенос нейронного стиля вызвал большой интерес в отрасли после того, как он был предложен, но затем люди также осознали некоторые недостатки оригинального переноса нейронного стиля. Одно из ограничений заключается в том, что передача стиля берет всю информацию о стиле, включая цвет и обводку всего изображения стиля, и передает ее всему изображению содержимого. Например, вTensorFlow2 реализует передачу нейронного стиля, синий цвет в изображении стиля переносится на деревья, но иногда мы хотим иметь возможность передавать только обводку, но не цвет, и только на определенные области для более тонкого контроля.
Команда Neural Style Transfer разработала новый алгоритм для решения этих проблем. На следующем рисунке показан пример управления, которое может обеспечить алгоритм, и результаты:
Элементы управления, предложенные командой переноса нейронного стиля, следующие:
- Пространственный контроль: контроль пространственного положения передачи стиля в содержимом и изображениях стилей. Это делается путем применения пространственной маски к функциям стиля перед вычислением матрицы Грама.
- Управление цветом: можно использовать для сохранения цвета изображения содержимого. Для этого мы конвертируем формат RGB в цветовое пространство, такое как HCL, чтобы отделить яркость от других цветовых каналов. Затем мы выполняем передачу стиля только в канале яркости, который затем объединяется с каналом цвета в исходном изображении стиля для создания окончательного стилизованного изображения.
- Контроль степени: управляйте детализацией мазков кистью. Этот процесс более сложен, так как требует нескольких прогонов передачи стиля и выбора признаков стиля на разных уровнях для вычисления матрицы Грама.
Две основные темы улучшения передачи стиля — повышение скорости и улучшение передачи стиля — давайте подробнее рассмотрим некоторые варианты классического алгоритма, чтобы заложить основу для следующего проекта, который мы будем реализовывать, передачи произвольного стиля в реальном времени.
Более быстрая передача стилей через сети прямой связи
Передача нейронного стиля основана на оптимизации, аналогичной обучению нейронной сети, поэтому даже при использовании графических процессоров он выполняется медленно и часто занимает несколько минут, чтобы получить результаты переноса стиля. Это ограничивает его применение на мобильных устройствах, поэтому существует практическая необходимость в разработке более быстрых алгоритмов передачи стилей, и передача стилей с прямой связью появляется по мере необходимости. На схеме ниже показана одна из первых сетей с такой архитектурой:
Архитектура на самом деле выглядит проще, чем на диаграмме архитектуры выше. В этой архитектуре есть две сети:
- Обучаемая сверточная сеть (часто называемая сетью передачи стиля) для преобразования входных изображений в стилизованные изображения. Это может быть реализовано как что-то вроде
U-Net
илиVAE
Архитектура, подобная кодировщику/декодеру. - Фиксированные сверточные сети, обычно предварительно обученные
VGG
, который измеряет потери контента и стиля.
Подобно исходному переносу нейронного стиля, мы сначала используемVGG
Цели содержимого и стиля извлекаются, но использование этой архитектуры больше не будет обучать входные изображения, а вместо этого обучать сверточную сеть для преобразования изображений содержимого в стилизованные изображения. пройти черезVGG
Извлеките элементы содержимого и стиля из стилизованных изображений, вычислите потери и распространите их обратно в обучаемую сверточную сеть. Мы можем обучить другихCNN
Тренируйтесь так же. На этапе вывода нам нужно выполнить только одно прямое вычисление, чтобы преобразовать входное изображение в стилизованное изображение!
При использовании такой сети решается проблема скорости, остается проблема - такая сеть может обучиться только одному стилю передачи. Одна сеть должна быть обучена для каждого стиля, который мы хотим выполнить, что гораздо менее гибко, чем передача необработанного нейронного стиля.
Особенности стиля, которые контролируют передачу
Первоначальный документ о переводе нейронного стиля не объясняет, почему матрицы Грама можно использовать для эффективного извлечения признаков стиля. Многие последующие улучшения передачи стилей (например, передача стилей с прямой связью) продолжают использоваться.Gram
Матрица как подход к стилю. бумагаDemystifying Neural Style Transfer
изменил это, обнаружив, что информация о стиле в основном состоит изCNN
Распределение активации в представлении, соответствующее активацииGram
Матрица эквивалентна минимизации максимальной средней разницы распределения активации (maximum mean discrepancy, MMD
). Следовательно, мы можем выполнить перенос стиля, сопоставив распределение активации изображения с распределением активации образа стиля.
следовательно,Gram
Матрицы — не единственный способ добиться передачи стиля. Мы также можем использовать противоборствующие потери, такие какpix2pix
какой-то типGAN
Перенос стиля может быть выполнен путем сопоставления распределения пикселей сгенерированного изображения с реальным изображением. Разница в том,GAN
Пытаясь свести к минимуму разницу в распределении пикселей, передача стиля применяет ее к распределению активаций сетевого уровня.
Позже исследователи обнаружили, что мы можем представить стиль, используя только среднее значение и дисперсию активаций. Другими словами, если мы подадим два одинаковых изображения вVGG
, их активации на сетевом уровне будут иметь одинаковое среднее значение и дисперсию. Следовательно, мы можем обучить сеть выполнять передачу стиля, сводя к минимуму разницу в среднем значении активации и дисперсию между сгенерированным изображением и изображением стиля. Это привело к использованию слоев нормализации для управления стилем.
Используйте слой нормализации для управления стилем
Простой и эффективный способ управления статистикой активации — изменение слоя нормализациии. Другими словами, мы можем сделать это, используя различные параметры аффинного преобразования (и) чтобы изменить стиль, нормализация партии и нормализация экземпляра обрабатываются с использованием одного и того же уравнения:
Разница в том, что нормализация партии (batch normalization, BN
)рассчитано(N, H, W)
среднее значение по измерениюи стандартное отклонение, а нормализация экземпляра (instance normalization, IN
) только по(H, W)
Рассчитано.
Однако на каждый слой нормализации приходится только одиниДа, это ограничивает сеть изучением только одного стиля. Так как же заставить сеть изучать несколько стилей? Можно использовать несколько группикоэффициенты, где каждая группа изучает стиль. Это как раз условная нормализация экземпляра (conditional instance normalization, CIN
) было предложено.
Он основан на нормализации экземпляров, но имеет несколько наборовиправильно. каждый другойиВсе пары значений используются для обучения определенному стилю, другими словами, они зависят от образов стилей. Уравнение для условной нормализации экземпляра выглядит следующим образом:
Предположим, у нас естьS
изображения разных стилей, то в слое нормализации для каждого стиля естьS
КусокиS
Кусок. В дополнение к изображениям контента мы также передаем метки стилей с горячим кодированием в сеть передачи стилей. По факту,иреализуется в виде формы(S×C)
матрица. Мы кодируем метки, выполняя однократное кодирование(1×S)
с матрицей(S×C)
умножение матриц для получения каждого стиля(1×C)
канали, чтобы получить стильи.
Далее мы можем закодировать стиль вив пространстве вложения , а затем интерполироватьидля выполнения интерполяции стиля:
Хотя все вышеперечисленные варианты достигли значительного прогресса, сеть по-прежнему ограничена фиксированным N стилями, используемыми при обучении. В следующей серии сообщений в блоге мы изучим и внедрим улучшения, позволяющие использовать произвольные стили!