Улучшение передачи нейронного стиля

искусственный интеллект глубокое обучение
Улучшение передачи нейронного стиля

«Это 11-й день моего участия в ноябрьском испытании обновлений, ознакомьтесь с подробностями события:Вызов последнего обновления 2021 г."

Улучшение передачи стиля

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

Команда Neural Style Transfer разработала новый алгоритм для решения этих проблем. На следующем рисунке показан пример управления, которое может обеспечить алгоритм, и результаты:

风格迁移示例

Элементы управления, предложенные командой переноса нейронного стиля, следующие:

  1. Пространственный контроль: контроль пространственного положения передачи стиля в содержимом и изображениях стилей. Это делается путем применения пространственной маски к функциям стиля перед вычислением матрицы Грама.
  2. Управление цветом: можно использовать для сохранения цвета изображения содержимого. Для этого мы конвертируем формат RGB в цветовое пространство, такое как HCL, чтобы отделить яркость от других цветовых каналов. Затем мы выполняем передачу стиля только в канале яркости, который затем объединяется с каналом цвета в исходном изображении стиля для создания окончательного стилизованного изображения.
  3. Контроль степени: управляйте детализацией мазков кистью. Этот процесс более сложен, так как требует нескольких прогонов передачи стиля и выбора признаков стиля на разных уровнях для вычисления матрицы Грама.

Две основные темы улучшения передачи стиля — повышение скорости и улучшение передачи стиля — давайте подробнее рассмотрим некоторые варианты классического алгоритма, чтобы заложить основу для следующего проекта, который мы будем реализовывать, передачи произвольного стиля в реальном времени.

Более быстрая передача стилей через сети прямой связи

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

前馈网络架构

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

  1. Обучаемая сверточная сеть (часто называемая сетью передачи стиля) для преобразования входных изображений в стилизованные изображения. Это может быть реализовано как что-то вродеU-NetилиVAEАрхитектура, подобная кодировщику/декодеру.
  2. Фиксированные сверточные сети, обычно предварительно обученныеVGG, который измеряет потери контента и стиля.

Подобно исходному переносу нейронного стиля, мы сначала используемVGGЦели содержимого и стиля извлекаются, но использование этой архитектуры больше не будет обучать входные изображения, а вместо этого обучать сверточную сеть для преобразования изображений содержимого в стилизованные изображения. пройти черезVGGИзвлеките элементы содержимого и стиля из стилизованных изображений, вычислите потери и распространите их обратно в обучаемую сверточную сеть. Мы можем обучить другихCNNТренируйтесь так же. На этапе вывода нам нужно выполнить только одно прямое вычисление, чтобы преобразовать входное изображение в стилизованное изображение!

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

Особенности стиля, которые контролируют передачу

Первоначальный документ о переводе нейронного стиля не объясняет, почему матрицы Грама можно использовать для эффективного извлечения признаков стиля. Многие последующие улучшения передачи стилей (например, передача стилей с прямой связью) продолжают использоваться.GramМатрица как подход к стилю. бумагаDemystifying Neural Style Transferизменил это, обнаружив, что информация о стиле в основном состоит изCNNРаспределение активации в представлении, соответствующее активацииGramМатрица эквивалентна минимизации максимальной средней разницы распределения активации (maximum mean discrepancy, MMD). Следовательно, мы можем выполнить перенос стиля, сопоставив распределение активации изображения с распределением активации образа стиля.

следовательно,GramМатрицы — не единственный способ добиться передачи стиля. Мы также можем использовать противоборствующие потери, такие какpix2pixкакой-то типGANПеренос стиля может быть выполнен путем сопоставления распределения пикселей сгенерированного изображения с реальным изображением. Разница в том,GANПытаясь свести к минимуму разницу в распределении пикселей, передача стиля применяет ее к распределению активаций сетевого уровня.

Позже исследователи обнаружили, что мы можем представить стиль, используя только среднее значение и дисперсию активаций. Другими словами, если мы подадим два одинаковых изображения вVGG, их активации на сетевом уровне будут иметь одинаковое среднее значение и дисперсию. Следовательно, мы можем обучить сеть выполнять передачу стиля, сводя к минимуму разницу в среднем значении активации и дисперсию между сгенерированным изображением и изображением стиля. Это привело к использованию слоев нормализации для управления стилем.

Используйте слой нормализации для управления стилем

Простой и эффективный способ управления статистикой активации — изменение слоя нормализацииγγиββ. Другими словами, мы можем сделать это, используя различные параметры аффинного преобразования (γγиββ) чтобы изменить стиль, нормализация партии и нормализация экземпляра обрабатываются с использованием одного и того же уравнения:

BN(x)=IN(x)=γ(xμ(x)о(x))+βBN(x) = IN(x) = \gamma (\frac {x-\mu(x)}{\sigma(x)}) + \beta

Разница в том, что нормализация партии (batch normalization, BN)рассчитано(N, H, W)среднее значение по измерениюµµи стандартное отклонениеоо, а нормализация экземпляра (instance normalization, IN) только по(H, W)Рассчитано.

Однако на каждый слой нормализации приходится только одинγγиββДа, это ограничивает сеть изучением только одного стиля. Так как же заставить сеть изучать несколько стилей? Можно использовать несколько группγγиββкоэффициенты, где каждая группа изучает стиль. Это как раз условная нормализация экземпляра (conditional instance normalization, CIN) было предложено.

Он основан на нормализации экземпляров, но имеет несколько наборовγγиββправильно. каждый другойγγиββВсе пары значений используются для обучения определенному стилю, другими словами, они зависят от образов стилей. Уравнение для условной нормализации экземпляра выглядит следующим образом:

CIN(x;s)=γS(xμ(x)о(x))+βSCIN(x;s) = \gamma^S (\frac {x-\mu(x)}{\sigma(x)}) + \beta^S

Предположим, у нас естьSизображения разных стилей, то в слое нормализации для каждого стиля естьSКусокγγиSКусокββ. В дополнение к изображениям контента мы также передаем метки стилей с горячим кодированием в сеть передачи стилей. По факту,γγиββреализуется в виде формы(S×C)матрица. Мы кодируем метки, выполняя однократное кодирование(1×S)с матрицей(S×C)умножение матриц для получения каждого стиля(1×C)каналγSγ^SиβSβ^S, чтобы получить стильγγиββ.

Далее мы можем закодировать стиль вγγиββв пространстве вложения , а затем интерполироватьγγиββдля выполнения интерполяции стиля:

风格迁移示例

Хотя все вышеперечисленные варианты достигли значительного прогресса, сеть по-прежнему ограничена фиксированным N стилями, используемыми при обучении. В следующей серии сообщений в блоге мы изучим и внедрим улучшения, позволяющие использовать произвольные стили!

Ссылка на серию

TensorFlow2 реализует передачу нейронного стиля