Взгляд на «нейронный алгоритм художественного стиля»

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

Для меня PyTorch оказался больше, чем просто интересной альтернативой TensorFlow с динамическими графиками и императивным стилем кодирования. Один из примеров из их официальных документов вдохновил меня на поиск некоторых научных работ и поближе познакомиться с внутренней работой методики глубокого обучения, которая очаровывала меня довольно долгое время - Neural Style Transfer.

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

Что такое «передача стиля»?

На высоком уровне алгоритм довольно прост. В качестве входных данных возьмите 3 изображения: одно для содержания, одно для стиля и цель. «Целевое» изображение обычно представляет собой пустой холст, из которого мы строим наш вывод, поэтому его пока можно игнорировать. Что нас действительно беспокоит, так это два других - изображение нашего контента и изображение, из которого мы будем извлекать художественный стиль. В итоге мы получаем одно совершенно новое изображение, представляющее исходное содержание одного изображения в стиле другого изображения. Чтобы еще лучше понять, как выглядит перенос стиля, все изображения в этой статье были созданы с помощью этого метода, чтобы дать несколько примеров.

Когда я понял, что здесь происходит, у меня в голове возникли всевозможные возможности. Я подумал обо всех знаковых художниках на протяжении всей истории, которых можно было бы применить к современным произведениям искусства, создавая невозможное ранее сотрудничество. Фотографии известных групп можно было воссоздать в стиле обложек популярных альбомов, я мог «погрузиться» в свои любимые видеоигры и многое другое!

На этом этапе мне не терпелось поиграть с некоторыми собственными изображениями, но мне еще нужно было многое узнать о том, как все это работает. К счастью, в Model Asset eXchange (MAX) доступна модель, которая позволяет экспериментировать с работающей реализацией PyTorch Neural Style Transfer без необходимости писать какой-либо код. Увидев, что возможно с некоторыми из образцов стилей, включенных в модель MAX, я был более чем когда-либо полон решимости понять, как работает этот алгоритм, и придумать некоторые творения с использованием моделей, обученных на моих собственных стилях.

Вы МОЖЕТЕ научить старую модель новым трюкам

Я думал, что мне нужно ответить, чтобы разобраться во всем этом, был вопрос: Как мне обучить модель передачи стиля? Однако я быстро обнаружил, что это был совершенно неправильный вопрос! Думаю, я знал даже меньше, чем думал, но это осознание часто бывает первым шагом на пути к большему обучению. Правильные вопросы и ответы изложены в статье Передача стилей изображения с использованием сверточных нейронных сетей, написанной Леоном Гэтисом, Александром Эккером и Матиасом Бетге, в которой они описали метод использования хорошо известного, существующая архитектура по-новому. Я был удивлен, узнав об этом, поскольку еще не видел, чтобы модель изменялась таким образом, и просто предполагал, что для такой задачи потребуется новый тип модели.

Архитектура, которую использовали Гэтис и его команда, называлась VGG-19 и была уже хорошо известна как модель классификации изображений, но я не понимал, как ее можно использовать для отделения стиля от контента в изображение. Как можно использовать подобную модель типа классификатор для создания чего-то нового? Казалось, что я генерировал больше вопросов, чем ответов, но по мере того, как я работал над каждым ломающим голову моментом, я постепенно приближался к истине.

Пробираясь в глубокий конец

Прежде чем я начал разбираться в деталях того, как эту архитектуру можно использовать для чего-то неожиданного, например, передачи стиля, я знал, что мне нужно освежиться в некоторых основах глубокого обучения. Как обычно работают сверточные нейронные сети (CNN)? Я рассмотрю соответствующие части здесь, но если вы ищете более подробную информацию о CNN, я бы порекомендовал этот курс на Coursera или это занимательное видео от Siraj Rival.

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

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

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

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

Напомним: как следует из названия, архитектура VGG-19 включает 19 сверточных слоев, которые разделены на стеки 5 макс. Не вдаваясь в технические подробности, вы можете думать о каждом максимальном уровне объединения как о «мягком сбросе», когда процесс извлечения данных в карты функций начинается заново, причем каждый максимальный уровень объединения начинается с меньшего, более оптимизированного изображения, чем предыдущий.

Нейронный алгоритм художественного стиля

Теперь, когда я немного больше разбирался в архитектуре, о которой читал в статье, я был готов заняться деталями. Давайте посмотрим, как передается стиль:

  • Чтобы получить «контент» из нашего изображения контента, нам нужно извлечь представление нашего изображения только из нужного места в нашей сети. Авторы определили вывод 2-го слоя 4-го сверточного стека как идеальное место для этого.
  • Чтобы получить «стиль» из нашего стилевого изображения, мы применяем аналогичный подход и собираем данные нашего изображения , поскольку они покидают первый сверточный слой в каждом стеке. Таким образом, мы получаем хорошее сечение нюансов, содержащихся в изображении, от вещей, которые могут быть очевидны невооруженному глазу, до тонких закономерностей, которые человек может никогда не уловить.

Наблюдение за тем, что разные части сети по-разному смотрят на изображение, было ключом к открытию, сделанному Гэтисом и его командой, и центральным в идее отделения контента от стиля. Он также красиво подчеркивает некоторые «динамические» свойства PyTorch.

Есть еще одна важная часть этого процесса, о которой мы еще не говорили - обучение модели. Теперь, когда мы выяснили, как получить необходимые данные из наших исходных изображений, как нам создать новое изображение, которое отражает оба из них? Что ж, эти ответы тоже есть в газете:

  • Вместо минимизации потерь между «прогнозируемым» и «фактическим» выходными данными, как это делается в типичной задаче классификации изображений, используются аналогичные уравнения, чтобы минимизировать потерю «контента», которая определяется как разница между нашим контентом и целевыми изображениями на указанная «содержательная» точка в сети. Это то, что делает наше сгенерированное изображение похожим на изображение содержимого.
  • Чтобы свести к минимуму потерю стиля, мы сравниваем данные стиля из каждого слоя стиля в нашем целевом изображении с извлеченным стилем из соответствующего слоя из нашего изображения стиля. Эти значения хранятся в структурах, известных как матрицы Грама, которые полезны при работе с картами функций изображений, как мы здесь.
  • Наконец, эти два значения умножаются на их индивидуальные веса, чтобы сформировать значение «общих потерь», которое затем минимизируется с помощью обратного распространения и традиционных функций оптимизации. Эти веса содержимого и стиля являются одними из многих параметров, которые можно настроить для получения различных результатов и выходных изображений, хотя в документе они предлагают значения около 1 для содержимого и 10 ^ -6 для стиля, чтобы поддерживать правильный баланс.

С сетью VGG, настроенной таким образом, и несколькими функциями предварительной и постобработки, определенными для помощи в некоторой обработке данных, это все, что вам нужно знать, чтобы иметь возможность обучать свои собственные модели со стилями вашего own, который затем можно использовать или развернуть в любом месте, где вы хотите создавать новые образы в определенном стиле. Имейте в виду, что для обучения такой модели может потребоваться довольно серьезное оборудование или мощная облачная среда. Если вы просто хотите немного повеселиться и поэкспериментировать с переносом стилей, самым быстрым и легким способом начать все равно будет Модель MAX Fast Neural Style Transfer, о которой я упоминал ранее.

Заключение

Без сомнения, работы Леона Гэтиса, Александра Эккера и Матиаса Бетге являются новаторскими. Хотя они были одними из первых, кто изучил подобные методы и опубликовал свои исследования, важно отметить, что такие концепции, как передача художественного стиля, еще не являются точной наукой. Например, есть другие, более ориентированные на производительность алгоритмы, которые могут предоставлять аналогичные результаты намного быстрее, например, алгоритм Fast Neural Style Transfer, используемый в модели MAX. Этот метод улучшает методы, которые я описал здесь, и утверждает, что они на три порядка быстрее. Если вас это волнует, вы можете прочитать все об этом в этой статье Потери восприятия для передачи стиля в реальном времени и сверхвысокого разрешения, написанные Джастином Джонсоном, Александром Алахи и Ли Фей-Фей. . Как и статья, в которой я основал эту статью, она довольно интенсивно читается, но ничто не сравнится с получением информации из источника! Если вы хотите узнать больше от Lean Gatys из оригинальной статьи, он выпустил Блокнот Jupyter, демонстрирующий его реализацию PyTorch.

Прежде чем я уйду, есть пара других интересных проектов в области искусства и искусственного интеллекта, которые я недавно обнаружил, и которые стоит посмотреть: GANPaint от MIT-IBM Watson AI Lab и Veremin, видео-терменвокс. 'разработан моим коллегой va barbosa. И то, и другое отлично подходит независимо от того, хотите ли вы удивить своих коллег по работе или просто вдохновиться тем, что другие создают с помощью этой новой технологии.

Спасибо за прочтение! Если вы знаете какие-либо хорошие проекты в области искусства и искусственного интеллекта, которые я пропустил, поделитесь ими в комментариях!