Быстрое обучение нейронных художников! с использованием PyTorch и Fast.ai

от Dr. Эрнесто Диас-Авилес , соучредитель и генеральный директор Libre AI
Twitter: @vedax

Код:. Нашу реализацию можно найти в этом репозитории Github: https://github.com/libreai/neural-painters-x

Я уверен, что вы знаете Боба Росса и его программу Радость рисования, где он научил тысячи зрителей рисовать красивые пейзажи простым и увлекательным способом, сочетая цвета и мазки, чтобы добиться отличные результаты очень быстро. Вы помните, как он тогда учил рисовать пиксель? конечно, нет!

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

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

В качестве первого шага нам нужно научить машину рисовать. Он должен научиться рисовать так, как это делает человек: мазками и сочетанием цветов на холсте. Мы исследовали современное состояние и, несмотря на великолепные работы, не нашлось ни одной бумаги, которая удовлетворяла бы нашим требованиям, пока мы не нашли Нейронные художники: изученное дифференцируемое ограничение для создания рисунков мазками от Рейитиро Накано [1]. Это открытие было весьма воодушевляющим.

Нейронные художники

Neural Painters [1] - это класс моделей, которые можно рассматривать как полностью дифференцируемую симуляцию конкретной недифференцируемой программы рисования, другими словами, машина «рисует», последовательно генерируя мазки кисти (т. Е. действия , которые определяют мазки кисти) и нанести их на холст, как это сделал бы художник.

Эти действия характеризуют мазки кисти и состоят из 12-мерных векторов, определяющих следующие переменные:

  • Начальное и конечное давление: давление, прикладываемое к кисти в начале и конце мазка.
  • Размер кисти: радиус созданного мазка.
  • Цвет: цвет мазка кисти в формате RGB.
  • Координаты кисти: три декартовых координаты на двухмерном холсте, определяющие форму мазка кисти. Координаты определяют начальную точку, конечную точку и промежуточную контрольную точку, составляющую квадратичную кривую Безье.

Тензор с действиями выглядит так:

tensor([
    [0.7016, 0.3078, 0.9057, 0.3821, 0.0720, 0.7956, 0.8851, 0.9295,   0.3273, 0.8012, 0.1321, 0.7915],
    [0.2864, 0.5651, 0.5099, 0.3430, 0.2887, 0.5044, 0.0394, 0.5709, 0.4634, 0.8273, 0.1056, 0.1702], 
    ...
])

и это примеры некоторых мазков кисти в наборе данных:

Цель Neural Painter - преобразовать эти векторы действий в мазки на холсте. В статье исследуются две нейронные архитектуры для достижения такой трансляции: одна основана на вариационном автокодировщике (VAE), а вторая - на генеративной состязательной сети (GAN), при этом Neural Painter на основе GAN (рисунок 1) дает лучшие результаты в терминах. качества сформированных мазков. Подробнее см. Статью [1].

Работа с нейронными художниками

Код, доступный для воспроизведения экспериментов, предлагается автором в серии блокнотов Google Colaboratory, доступных в этом репозитории Github, а используемый набор данных доступен в Kaggle. В реализации используется TensorFlow, который великолепен с точки зрения производительности, но давайте посмотрим правде в глаза, переваривать код TensorFlow (особенно без Keras;) - не очень весело.

Обучающие машины - лучший способ изучить машинное обучение - Э. Д. А.

Мы поигрались с предоставленными блокнотами, они были чрезвычайно полезны для понимания бумаги и создания хороших образцов рисунков, но мы решили, что для того, чтобы действительно изучить и освоить Neural Painters, нам нужно поэкспериментировать и воспроизвести результаты бумаги с помощью наших собственная реализация. С этой целью мы решили использовать PyTorch и fast.ai в качестве фреймворков глубокого обучения вместо TensorFlow в качестве эталонной реализации документа, чтобы возиться и в процессе, надеюсь, получить более доступный фрагмент кода.

Быстрое обучение нейронных художников

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

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

Чтобы преодолеть эти известные ограничения GAN и ускорить процесс обучения Neural Painter, мы использовали возможности Transfer Learning

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

Точнее, поскольку основными компонентами GAN являются Generator и Critic, идея состоит в том, чтобы предварительно обучить их независимо, то есть в несостязательной таким образом, и передайте обучение, связав их вместе после предварительного обучения, и продолжите состязательное обучение, т. е. режим GAN. Этот процесс показал замечательные результаты [2], и мы здесь следуем именно этому процессу.

Основные шаги описаны ниже:

(1) Pre-train the Generator with a non-adversarial loss, e.g., using a feature loss (also known as perceptual loss)
(2) Freeze the pre-trained Generator weights
(3) Pre-train the Critic as a Binary Classifier 
(i.e., non-adversarially) using the pre-trained Generator (in evaluation mode with frozen model weights) to generate `fake` brushstrokes. That is, the Critic should learn to discriminate between real images and the generated ones. This step uses a standard binary classification loss, i.e., Binary Cross Entropy, not a GAN loss
(4) Transfer learning for adversarial training (GAN mode): continue the Generator and Critic training in a GAN setting. Faster!

Подробнее:

(1) Предварительно обучите генератор с помощью несостязательного проигрыша

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

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

Результатом работы генератора является изображение мазка кисти. Потери, вычисленные между изображениями, - это потеря характеристик, представленная в [3] (также известная как потеря восприятия [4]). Процесс изображен на рисунке 1.

(2) Заморозьте предварительно обученный генератор

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

(3) Подготовьте критика к работе с двоичным классификатором

Мы обучаем Critic как двоичный классификатор (рисунок 3), то есть Critic предварительно обучается задаче распознавания истинных и сгенерированных изображений мазков кисти (шаг (2) ).

Мы используем двоичную кросс-энтропию в качестве двоичной потери для этого шага.

(4) Перенос обучения на обучение противоборству (режим GAN)

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

Из рисунка 2 видно, что предварительно обученный Генератор неплохо заучивает мазки кисти. Тем не менее, по сравнению с истинными штрихами в наборе данных все еще есть определенные недостатки.

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

От мазков к живописи

После завершения процесса обучения Генератора у нас есть машина, способная преобразовывать векторы действий в мазки кисти, но как научить машину рисовать, как ученик Боба Росса?

Чтобы добиться этого, в статье Neural Painters [1] представлен процесс, называемый Intrinsic Style Transfer, похожий по духу на Neural Style Transfer [6], но не требующий стиля изображение. Интуитивно понятно, что функции изображения ввода контента и изображения, созданного Neural Painter, должны быть похожими.

Чтобы реализовать этот процесс, мы фиксируем веса модели Генератора и изучаем набор векторов действий, которые при вводе в Генератор будут создавать мазки кисти, которые после объединения создадут картину с учетом входного изображения содержимого. Функции изображения извлекаются с помощью VGG16 [ 7] как средство извлечения признаков, обозначенное как CNN на рисунке 6, которое отображает весь процесс.

Обратите внимание, что процесс оптимизации нацелен на изучение тензора действий, при этом оставшиеся веса модели не меняются, то есть веса моделей Neural Painter и CNN. Мы используем ту же потерю функции, что и раньше [3].

Наконец, получив входное изображение для вдохновения, например фотографию красивого пейзажа, машина может создать мазок кисти для этого изображения :) ∎

Эта реализация Neural Painters является основной техникой, используемой в нашем сотрудничестве с коллективом diavlex для их коллекции Art + AI Residual в Cueva Gallery.

Примечания

  • Для смешивания мазков мы следуем стратегии линейного наложения, чтобы объединить сгенерированные мазки на холсте, этот процесс подробно описан в очень хорошем посте под названием Обучает агентов рисовать внутри их собственных мечтаний также Рейитиро Накано [5]. В настоящее время мы изучаем альтернативный процесс, в котором для смешивания используется альфа-канал.

Благодарности

Мы хотели бы поблагодарить Рейитиро Накано за помощь в прояснении сомнений во время реализации наших Neural Painters, а также за его поддерживающие и обнадеживающие комментарии и отзывы. Большое спасибо, Рейитиро! [@Reiinakano].

Ссылки

[1] Нейронные художники: усвоенное дифференцируемое ограничение для создания рисунков мазками. Рейитиро Накано
Препринт arXiv arXiv: 1904.08410, 2019.

[2] Обесцвечивание, деолдификация и суперразрешение. Джейсон Антич (Deoldify), Джереми Ховард (fast.ai) и Ури Мэнор (Институт Солка) https://www.fast.ai/2019/05/03/decrappify/, 2019.

[3] Fast.ai MOOC Урок 7: Реснет с нуля; U-net; Генеративные (состязательные) сети. Https://course.fast.ai/videos/?lesson=7; Блокнот: https://nbviewer.jupyter.org/github/fastai/course-v3/blob/master/nbs/dl1/lesson7-superres.ipynb [Дата обращения: 2019-08]

[4] Потери восприятия для передачи стиля в реальном времени и сверхвысокого разрешения
Джастин Джонсон, Александр Алахи, Ли Фей-Фей https://arxiv.org/abs/1603.08155, 2016 г.

[5] Обучение агентов рисованию в своих мечтах. Рейитиро Накано.
https://reiinakano.com/2019/01/27/world-painters.html, 2019

[6] Нейроалгоритм художественного стиля. Леон А. Гэтис, Александр С. Эккер, Матиас Бетге. Https://arxiv.org/abs/1508.06576, 2015 г.

[7] Очень глубокие сверточные сети для распознавания крупномасштабных изображений. Карен Симонян, Андрей Зиссерман. Https://arxiv.org/abs/1409.1556, 2014 г.