Изменения

Перейти к: навигация, поиск

Neural Style Transfer

8378 байт добавлено, 23:06, 18 апреля 2020
Нет описания правки
== Описание алгоритма NST==
[[Файл:Image1.jpeg|500px|thumb|right|[https://towardsdatascience.com/neural-style-transfer-tutorial-part-1-f5cd3315fa7f Рис. 1. Принцип работы алгоритма]]]
Алгоритм '''нейронного переноса стиля'''<ref>[https://arxiv.org/pdf/1508.06576.pdf Gatys, L.A., Ecker, A.S., Bethge, M.: A neural algorithm of artistic style, 2015]</ref> (англ. ''Neural Style Transfer, NST''), разработанный Леоном Гатисом, Александром Экером и Матиасом Бетге, преобразует полученное на вход изображение в соответствии с выбранным стилем. Алгоритм берет два изображения:
* Изображение контента (англ. ''Content Image''), в котором нас интересует содержание. Обычно оно является фотографией.
Затем алгоритм изменяет входные данные так, чтобы они соответствовали содержанию изображения контента и художественному стилю изображения стиля. Авторами в качестве модели сверточной нейронной сети предлагается использовать сеть [[Сверточные_нейронные_сети#VGG | VGG16]].
== Принцип работы История алгоритма NST==
===Обзор предыдущих методов=== До появления NST исследования расширились вокруг области, называемой '''нефотореалистичным рендерингом''' (''non-photorealistic rendering, NPR''). В настоящее время это твердо установленная область в сообществе компьютерной графики. Однако большинство алгоритмов NPR стилизации обычно сильно зависят от конкретных художественных стилей (например, масляные картины, анимация), которые они имитируют, и эти алгоритмы не могут быть легко расширены для получения стилизованных результатов для других художественных стилей. В отличие от NST, алгоритмы NPR не используют нейронные сети. Рассмотрим некоторые NPR-алгоритмы без [[Сверточные_нейронные_сети|CNN]], a именно NPR-алгоритмы художественного рендеринга 2D-изображений, который называется '''художественным рендерингом на основе изображений''' (''image-based artistic rendering, IB-AR''): ====Stroke-Based Rendering==== [[Файл:Image sbr.jpg|400px|thumb|right|[https://web.cs.ucdavis.edu/~ma/SIGGRAPH02/course23/notes/S02c23_3.pdf Рис. 2. SBR в действии.]]]''Рендеринг на основе штрихов (SBR)'' относится к процессу размещения виртуальных штрихов (например, мазков кистью, фрагментов, штрихов) на цифровом холсте для визуализации фотографии с определенным стилем. Процесс SBR, как правило, начинается с исходной фотографии, поэтапно комбинируя мазки для соответствия фотографии и, наконец, создает нефотореалистичные изображения, которые выглядят как фотография, но с художественным стилем (Рис. 2).  SBR обычно эффективен при моделировании определенных типов стилей (например, масляной живописи, акварели, эскизов). Однако каждый алгоритм SBR тщательно спроектирован только для одного конкретного стиля и не способен моделировать произвольный стиль, который не является гибким. ====Region-Based Techniques==== [[Файл:Image region.jpg|200px|thumb|right|[https://2ch.hk/td/res/57804.html Рис. 3. Рендеринг на основе регионов]]]''Рендеринг на основе регионов (RBT)'' должен включать сегментацию регионов, чтобы обеспечить адаптацию рендеринга на основе контента в регионах. Алгоритмы RBT используют форму регионов для определения расположения штрихов. Таким образом, различные образцы штрихов могут быть созданы в разных семантических областях изображения (Рис. 3).  Учет регионов при рендеринге позволяет осуществлять локальный контроль над уровнем детализации. Однако проблема SBR сохраняется: RBT не способен имитировать произвольный стиль. ====Example-Based Rendering====  ''Рендеринга на основе примеров'' изучает соответствия между образцовой парой, то есть соответствия между исходными и целевыми стилизованными изображениями под наблюдением. Обучающий набор содержит пары не стилизованных исходных изображений и соответствующие стилизованные изображения с определенным стилем. ''Алгоритм аналогии'' изображений затем изучает аналогичное преобразование из примерных обучающих пар и создает аналогичные стилизованные результаты при получении тестовой входной фотографии.  В целом, аналогии с изображениями эффективны для различных художественных стилей. Однако пары тренировочных данных обычно недоступны. К тому же аналогии изображений используют низкоуровневые функции, которые не позволяют эффективно захватывать контент и стиль, что ограничивает производительность. ===Происхождение NST=== Несмотря на то, что некоторые алгоритмы IB-AR без [[Сверточные_нейронные_сети|CNN]] способны точно отображать определенные предписанные стили, они обычно имеют ограничения в гибкости, разнообразии стилей и эффективном извлечении структуры изображения. Следовательно, существует потребность в новых алгоритмах для устранения этих ограничений, что порождает область NST. Леон Гатис первый, кто изучил, как использовать [[Сверточные_нейронные_сети|CNN]] для воспроизведения известных стилей рисования на естественных изображениях. Он предложили смоделировать контент фотографии в качестве ответа функции от предварительно обученного [[Сверточные_нейронные_сети|CNN]], а затем смоделировать стиль художественного произведения в качестве сводной статистики функции. Его эксперименты показали, что [[Сверточные_нейронные_сети|CNN]] способен извлекать информацию о содержании из произвольной фотографии и информацию о стиле из произведения искусства. На основании этого открытия Гатис впервые предложил использовать активацию функции [[Сверточные_нейронные_сети|CNN]] для рекомбинации содержания данной фотографии и стиля известных произведений искусства. Основная идея его алгоритма состоит в том, чтобы итеративно оптимизировать изображение с целью сопоставления желаемых распределений функций [[Сверточные_нейронные_сети|CNN]], которые включают в себя как информацию о содержании фотографии, так и информацию о стиле произведения искусства.  == Принцип работы алгоритма NST== [[Файл:Image2.png|500px|thumb|right|[https://towardsdatascience.com/neural-style-transfer-tutorial-part-1-f5cd3315fa7f Рис. 24. Архитектура сверточной сети VGG16]]]
Рассмотрим 1-й [[Сверточные_нейронные_сети#Сверточный слой | сверточный слой]] (англ. ''convolution layer'') VGG16, который использует ядро 3x3 и обучает 64 карты признаков (англ. ''feature map'') для генерации представления изображения размерности 224x224x64, принимая 3-канальное изображение размером 224x224 в качестве входных данных (''Рисунок 2''). Во время обучения эти карты признаков научились обнаруживать простые шаблоны, например, такие как прямые линии, окружности или даже не имеющие никакого смысла для человеческого глаза шаблоны, которые тем не менее имеют огромное значение для этой модели. Такое "обнаружение" шаблонов называется обучением представления признаков. Теперь давайте рассмотрим 10-й сверточный слой VGG16, который использует ядро 3x3 с 512 картами признаков для обучения и в итоге генерирует вывод представления изображения размерности 28x28x512. Нейроны 10-го слоя уже могут обнаруживать более сложные шаблоны такие как, например, колесо автомобиля, окно или дерево и т.д.
В уравнении выше, чтобы получить общую потерю <math>L_{total}</math> нужно рассчитать потерю содержимого <math>L_{content}</math> и потерю стиля <math>L_{style}</math>, а также <math>\alpha</math> и <math>\beta</math> {{---}} гиперпараметры, которые используются для определения весов для каждого типа потерь, то есть эти параметры можно представить просто как "рычаги" для управления тем, сколько контента / стиля мы хотим наследовать в сгенерированном изображении.
[[Файл:Image6.jpeg|500px|thumb|right|[https://towardsdatascience.com/neural-style-transfer-tutorial-part-1-f5cd3315fa7f Рис. 35. Различные представления, используемые для изображений контента, стиля и сгенерированного изображения]]]
Во время каждой итерации все три изображения, передаются через модель VGG16. Значения функции активации нейронов, которые кодируют представление признаков данного изображения на определенных слоях, принимаются как входные данные для этих двух функций потерь. Также стоит добавить: изначально мы случайным образом инициализируем сгенерированное изображение, например, матрицей случайного шума такого же разрешения, как и изображение контента. С каждой итерацией мы изменяем сгенерированное изображение, чтобы минимизировать общую потерю '''L'''.
74
правки

Навигация