Перенос нейронного стиля - это метод машинного обучения, который объединяет «содержание» одного изображения со «стилем» другого.



  • Контент: функции высокого уровня, описывающие объекты и их расположение на изображении. Примеры контента: люди, животные и фигуры
  • Стиль. Текстура изображения. Примеры стилей: шероховатость, цвет и резкость

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

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

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

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

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

На этом мы завершаем наше высокоуровневое объяснение передачи нейронного стиля.

Получение функций потери контента и стиля

Этот раздел предполагает базовые знания машинного обучения и сверточных нейронных сетей.

Мы используем модель обученной сверточной нейронной сети (CNN), такую ​​как VGG19, для получения функций потери контента и стиля.

Содержание

Напомним, что контент - это высокоуровневые функции, которые описывают объекты и их расположение на изображении. Модель классификации изображений должна быть хорошо обучена контенту, чтобы точно обозначить изображение как «собака» или «машина». Сверточная нейронная сеть (CNN) предназначена для фильтрации высокоуровневых характеристик изображения. CNN - это, по сути, последовательные сопоставления одного изображения с другим. Каждое последующее сопоставление отфильтровывает все больше высокоуровневых функций. Следовательно, мы заинтересованы в отображении изображений дальше в CNN, потому что они захватывают больше контента.

Для получения более подробной информации о том, как CNN захватывают высокоуровневые функции, я рекомендую эту статью от Google. В нем много отличных визуальных эффектов

Мы определяем представление содержания изображения как отображение изображения, которое находится относительно дальше в модели CNN.

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

Стиль

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

Давайте использовать слово слой для описания фрагмента изображения на одном конкретном канале. Мы определяем представление стиля как корреляцию между слоями в отображении изображения.

Более конкретно, это сумма поэлементного матричного умножения всех пар слоев в отображении изображения. Матрица Грамиана часто используется для выражения представления стиля. Для данного отображения изображения элемент в i-й строке и j-м столбце матрицы Грамиана будет содержать скалярное произведение между сглаженным i-м слоем и сглаженным j-м слоем.

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

Теперь мы можем определить функции потери контента и потери стиля.

Потеря содержания - это квадратная ошибка между выходным изображением и представлением содержания изображения содержания.

Потеря стиля - это квадратная ошибка между выходным изображением и представлением стиля изображения стиля.

Процедура высокого уровня для передачи нейронного стиля

  1. Решите, какие сопоставления изображений модели CNN вы хотите использовать для представлений содержимого и представлений стиля, а затем вычислите представления содержимого на основе изображения содержимого и представлений стиля на основе изображения стиля. Для всех этих изображений я использовал пятое отображение изображений для представления содержимого и первые пять отображений изображений для представления стиля
  2. Инициализируйте выходное изображение (это может быть изображение с белым шумом, копия изображения стиля или изображение содержимого, на самом деле не имеет значения)
  3. Вычислить представление содержимого и представление стиля выходного изображения из сопоставлений изображений одной и той же модели CNN
  4. Вычислить потерю контента и потерю стиля
  5. Оптимизируйте выходное изображение по взвешенной сумме потери контента и потери стиля. Это часто достигается с помощью стохастического градиентного спуска
  6. Повторяйте шаги 2–5, пока не будете удовлетворены результатами.

Еще примеры передачи нейронного стиля

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

Выполнение

Существует множество кодовых баз для переноса нейронного стиля. Я рекомендую проверить ту из серии руководств по PyTorch.