Искусственный интеллект

Компьютерное искусство: передача нейронного стиля

Компьютерное творчество

Что такое передача нейронного стиля?

Neural Style Transfer — это метод объединения двух изображений с помощью компьютера. Один как базовое изображение, а второй как стилизация. Это все равно, что сфотографировать своего лучшего друга и сделать так, будто его нарисовал сам Ван Гог!

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



Как именно это работает?

Что ж, передача нейронного стиля обычно выполняется с использованием сверточной нейронной сети (CNN), которая является типом нейронной сети, но что именно делает CNN?

Сверточные слои

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

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

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

Ранние слои могут быть предназначены для поиска краев, углов и форм, но более поздние слои могут обнаруживать более сложные функции, такие как конечности, лица и целые объекты.

Объединение слоев

Объединение намного проще и также похоже на свертку. Вместо обнаружения признаков объединение в пул предназначено для снижения нагрузки на сеть за счет уменьшения ее пространственного размера.

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

Максимальное объединение
Максимальное объединение — это первый тип, при котором вы берете наибольшее число в каждой ячейке изображения.

Усреднение
Второй тип объединения, при котором вы усредняете все числа в каждой ячейке изображения.

Слои активации

Слои активации обычно являются ключевыми для нейронной сети. Это позволяет нам сделать окончательный прогноз.

Однако здесь мы не будем делать прогноз, а будем использовать только сверточные (и объединяющие) слои. Что мы сделаем, так это создадим функцию потерь, которая будет смешивать изображение, а также позволит нам контролировать, как оно смешивается.

Функции потерь

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

Две функции потерь, о которых я упоминал ранее, относятся к двум изображениям, которые мы собираемся вводить: изображению содержимого и изображению стиля, которое мы хотим применить к изображению содержимого. Затем мы можем объединить их с некоторыми весами (числа применяются позже, которые мы можем изменить, чтобы настроить, сколько стиля/контента получается), а затем друг с другом, чтобы получить нашу общую функцию потерь.

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

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

Основные выводы

  • Neural Style Transfer — это техника, которая применяет стиль одного изображения к другому.
  • Neural Style Transfer использует тип нейронной сети, называемый CNN.
  • У CNN есть сверточные слои, которые одновременно смотрят на несколько пикселей.
  • У них также есть слои пула, чтобы уменьшить нагрузку на сеть.
  • В Neural Style Transfer сеть имеет функцию потерь, которая позволяет нам сохранять элементы стиля и изображения контента.
  • После того, как функция потерь точно представила оба изображения, мы успешно применили стиль одного изображения к другому!

Если вам понравилось читать эту статью или у вас есть какие-либо предложения или вопросы, дайте мне знать, комментируя или хлопая в ладоши! Вы можете найти меня в LinkedIn или на моем веб-сайте, чтобы узнать о моих последних работах и ​​обновлениях, или связаться напрямую с моей электронной почтой!