Переносим стиль известных рисунков на изображение с реализацией на питоне

Подобласть глубокого обучения машинного обучения особенно полезна при обработке изображений. Сверточная нейронная сеть, одна из подсистем глубокого обучения, предлагает пользователю гибкий доступ с помощью сверточных слоев, которые отображают несколько характеристик содержимого изображения. Эти возможности могут быть настроены разработчиками для использования во многих областях, таких как обнаружение объектов и сегментирование изображений под заголовком классификации и распознавания изображений. В этой статье объясняется передача нейронного стиля, которая относится к передаче стиля изображения при сохранении содержимого изображения с использованием предварительно обученной модели VGG-19. Рисунок 1 создан с использованием знаменитой картины Винсента Ван Гога «Звездная ночь» и фотографии автора.

Передача нейронного стиля

Чтобы сделать тему более понятной, полезно напомнить CNN об основных вещах, которые нужно знать. Сверточные нейронные сети (CNN), как следует из названия, фильтруют изображение с помощью базовой математической операции с пикселями, используя сверточный процесс. Эта фильтрация выявляет различные особенности изображения (края, текстуры, цвета и т. д.), тем самым обеспечивая более осмысленный и простой процесс обучения модели.

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

«Динамизм футболиста», одно из лучших произведений футуристического периода итальянского художника Умберто Боччони, 1913 год. По словам Боччони, не нужно было рисовать человека, чтобы изобразить человека на картине. По этой причине он сосредоточился на движении, изобразив актера так, чтобы была видна только его нога.

Передача нейронной сети сочетается со следующими процессами с использованием вышеупомянутого:

Изображения:

Импортируются два изображения, изображение содержимого и изображение стиля. Изображение контента, как следует из названия, является основным изображением, на которое влияет изображение стиля. Изображение стиля — это изображение, которое передает изображение содержимого. Функции нижнего уровня необходимы, потому что изображение стиля является фидером. Изображение контента, с другой стороны, нуждается в функциях более высоких уровней сети для поддержания своих атрибутов.

Сеть:

Предварительно обученная модель VGG-19 построена с использованием весов imagenet. Авторы оригинальной статьи предложили использовать VGG-19. Уникальные результаты также можно получить, попробовав/построив разные модели. Карты признаков должны давать оптимальные результаты, так как здесь изучается извлечение признаков изображения. VGG-19 рекомендуется в качестве стандарта. Свойства изображения содержимого и изображения стиля извлекаются с использованием этой сети.

Функции более высокого уровня извлекаются таким образом, чтобы основные атрибуты изображения содержимого сохранялись. Эти слои могут быть conv4_2 и/или conv5_2. Конечно, попытки различных комбинаций здесь дают совершенно разные визуальные результаты. Для изображения стиля различные визуальные результаты получаются с использованием низких признаков, а именно комбинаций conv1_1, conv2_1, conv3_1, conv4_1 и conv5_1 различными способами.

Потери

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

Потеря стиля:Потеря стиля выражает сходство корреляции слоев активации между изображением стиля потери стиля и сгенерированным изображением. Здесь корреляция между сгенерированным изображением и изображением стиля находится с помощью матрицы грамм.

Матрица грамматики. Значение корреляции, выражающее сходство между изображением стиля и сгенерированным изображением, является одним из ключевых моментов предмета. Различные особенности изображения извлекаются с помощью сверточных слоев. Этими функциями являются края, точки, кривые, линии, текстура, цветовое распределение и т. д. Корреляция определяет отношения между этими функциями, и значение потери стиля обновляется, чтобы сохранить это отношение в изображении стиля и сгенерированном изображении. Более конкретно, как видно на рисунке 1, солнца (желтые кружки) в таблице «Звездная ночь» также видны как желтые кружки на сгенерированном изображении. Было установлено, что существует связь между желтым цветом и кругом с матрицей граммов, и это было предпринято для переноса в сгенерированное изображение путем уменьшения потери стиля.

Общая потеря:общая потеря рассчитывается как потеря стиля + потеря контента, полученная, как указано выше.

На рис. 3 показан алгоритм переноса стиля (расчет потерь) по оригинальной бумаге. Доступ к статье можно получить из раздела ссылок ниже. Следующий блок кода включает реализацию Neural Style Transfer с использованием Tensorflow в Python:

Заключение

Самым приятным аспектом Neural Style Transfer является то, что вместо единообразия результатов получаются различные визуальные результаты с настройкой гиперпараметров. Разнообразие получаемых здесь результатов достигается изменением

  • контент_вес=1e4,
  • стиль_вес=1e2,
  • content_layers = [‘block5_conv2’]
  • style_layers = [‘block1_conv1’, ‘block2_conv1’, ‘block3_conv1’, ‘block4_conv1’, ‘block5_conv1’]

гиперпараметры в блоке кода выше, и результаты показаны на рис. 4 и рис. 5. Видно, что текстура изображения, которая начиналась с большого веса потери стиля, больше склоняется к содержанию изображения. С другой стороны, изображение, показанное на рисунке 5, которое начинается с низкой потери веса стиля, имеет тенденцию к изображению стиля, что означает, что функции, извлеченные из изображения стиля, передаются лучше, чем на рисунке 4.

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

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

Рекомендации

  • Л. А. Гатис, А. С. Экер и М. Бетдж, «Передача стиля изображения с использованием сверточных нейронных сетей».
  • Л. А. Гатис, А. С. Экер и М. Бетге, «Нейронный алгоритм художественного стиля», 2015 г.