5 нейросетей для создания уникальных фотографий и рисунков. Нейросеть рисующая картины по описанию.

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

Изящные речи чистого разума: может ли нейросеть быть художником?

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

У меня есть знакомый знакомого из Бостона. Знакомый из Бостона пишет алгоритмы, а также сочиняет стихи. Когда я сменил фотографию профиля на Facebook, из Бостона пришло сообщение, что у меня есть квартет, который написан не для вас и не о вас, но вы подходите под описание:

В жаркий летний полдень Я словно в бассейн ледяной Я брошен в твои сине-зеленые, океанские глаза Твои волосы медные, окрашенные в осенний цвет.

Прекрасно, — отвечаю я, — осьминог Есенина и Лермонтова. «Волосы цвета осени» — из «Голубого костра»: хулиган Есенин обещает, чтобы «тонко коснуться твоей руки / И волос цвета осени», забыть кабаре и отказаться от поэзии. А у Лермонтова были голубые глаза, вернее, сине-зеленые: «С глазами, полными голубого огня, / С улыбкой радужной, как юный день…».

Однако эта история не о поэзии или поэтах. Я выбрал квартет на основе фотографии профиля, когда прочитал о нейронной сети, преобразующей текст в изображения. Алгоритм был разработан Open AI, некоммерческой компанией по искусственному интеллекту. Нейронная сеть была названа DALL.E — в честь усатого сюрреалиста Сальвадора Дали и его робота WALL.E. На основе текстового описания DALL.E может нарисовать что угодно — от стула с авокадо до редиски в балетной юбке, выгуливающей собаку. В открытом доступе можно найти совместимый код, который рисует вполне убедительные портреты Волдеморта и пейзажи Хогвартса. В эту нейронную сеть я загрузил стих из Бостона (что еще я собираюсь с ним делать?).

В ответ алгоритм выдал «жаркий летний полдень» и абстракцию в оттенках бирюзы и меда. Но целью было получить портрет — что я, хуже Волдеморта? Поэтому вопрос был ограничен двумя последними строчками «Твои глаза бирюзовые, цвета океана / Твои волосы медные, цвета осени…». Нейросеть послушно нарисовала пару любительских портретов и голубого щенка.

Когда реальная фотография превратилась в поэтическое описание, а затем в нейропортрет, я увлекся — прогнал через нейросеть Есенина, Блока и Бродского. В конце концов, я отобразил стихи из Neural Defence, нейронной сети, обученной на стихах Егора Летова. В 2016 году Алексей Тихонов и Иван Ямщиков из «Яндекса» создали эту нейронную сеть поэта. В своей домашней студии они записали 13 песен на тексты нейросети — альбом по замене музыки под названием 404. Что получается, если загрузить тексты нейропоэта в нейросеть художника? Алгоритм рисует красный мак на ногах и оранжевые глаза.

Игры с нейронными сетями увлекают многих людей. Немецкий энтузиаст машинного обучения Тюменцев создал ролик на тему Бытие 2:7. Иллюстрации создаются искусственным интеллектом на основе текста Библии, а текст выражается нейронной сетью, обученной на голосе Дарта Вейдера. Послушайте, как Дарт Вейдер произносит фразу «И создал Господь Бог человека из праха земного, и вдохнул в лице его дыхание жизни, и стал человек душою живою» под видеоряд психоделических образов из Ветхого Завета на Instagram энтузиаста.

Сам ты художник

Издалека «Портрет Эдмона де Беллами» выглядит как произведение классического искусства: из прямоугольника позолоченной рамы на зрителя задумчиво смотрит размытый незнакомец в темном пальто и белой рубашке. Алгоритмическое происхождение изображения раскрывается только в подписи — математической формуле, по которой был создан портрет (min G max D x log (D(x)) + z log (1 — D (G(z)))). Это Generative Adversarial Network (GAN) — система, которая ставит алгоритмы друг против друга: Одна нейронная сеть генерирует шаблоны изображений, а другая пытается отличить «правильные» шаблоны от «неправильных». Нейронные сети с общей инверсией были впервые разработаны ученым Яном Гудфеллоу. Фамилия Беллами является своего рода данью уважения к ее оригинальному создателю: good и fellow переводятся на французский язык как bel ami — Belamy.

«До аукциона портрет Беллами был просто предметом искусства. Проблема началась с момента продажи», — говорит Анастасия Четверикова, культурный критик, автор подкаста «Искусство для детей» и одноименной книги. — И тут началось: программист, создавший эту нейронную сеть, сказал: «Я автор», а ребята из французской команды Obvious, которые все это придумали, сказали: «Ты ни хрена не автор» (хотя в публичных выступлениях они благодарно кланяются программисту); если бы у нейронной сети был собственный голос, она бы, наверное, тоже сказала: «Конечно, вы меня создали, но автор здесь я». Это триада, которая еще не решена ни на каком уровне, юридическом или ином: мы не можем сказать, кто прав.

От авторства напрямую зависит ответ на вопрос: является ли работа нейросетей искусством.

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

Дебаты вокруг нейроискусства плотны и полны противоречий. Может ли искусственный интеллект быть художником? Может ли быть так, что алгоритм — это всего лишь инструмент? Кому — или чему — принадлежит авторское право: алгоритму, программисту, который его написал, или художнику, который его реализовал?

К сожалению, мы не можем спросить, что думает нейронная сеть. Художники, напротив, с этим не согласны. Пьер Фотрель из коллектива Obvious сказал в интервью:

«Я считаю, что нейронные сети — это инструменты в руках творческих людей. Они просто воспроизводят что-то сами по себе. Я не говорю «создает», потому что настоящим творцом остается художник. Творчество присуще только людям. Какой бы умной ни была ваша собака, ее нельзя назвать творческой.

Герман Тюменцев, создатель нейроклипа Библии, больше не рассматривает алгоритм как простой инструмент, но он не готов отдать авторство машине:

«Все данные, на которых обучается алгоритм, а также его архитектура, определяются человеком. Поэтому в своем качестве автора я упомяну всех участников одновременно. Например: Работа была выполнена автором X с использованием алгоритма Y инженером Z. Кто является главным автором? Следует ли считать программиста соавтором — это вопрос в смысле «являются ли изобретатели фотоаппарата соавторами всех фильмов»? Идея играет большую роль в любой творческой работе. Разные люди могут прийти к совершенно разным результатам, используя один и тот же алгоритм, учитывая свой жизненный опыт и мнение по тому или иному поводу.

Допустим, мы с Германом Тюменцевым по-разному использовали один и тот же код. Я загрузил Эссена; Герман загрузил Библию. Я загрузил его, потому что он «случился»; история клипа Германа более интересна. Первоначально он обучил нейронную сеть «разговаривать» с образцами электронной музыки. Однако из-за малого количества слов в электронной музыке нейронной сети не хватило данных, и произошло то, что называется недоподгонкой — сеть пыталась что-то сказать, но звучало это как адские крики. «Крики из ада» стали поводом для размышлений на религиозные темы и создания иллюстраций на основе библейских текстов.

Кто с кого списывал

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

Помните ли вы, что в бостонском стихотворении «голубые» глаза были позаимствованы у Лермонтова? Михаил Юрьевич не в первый раз сталкивается с литературным воровством. Голубой» также был взят у Владимира Соловьева (не того, о котором вы думаете, а поэта, философа и мистика XIX века). «С пурпуром небесного великолепия, с глазами, полными голубого огня», София, Премудрость Божия, явилась Соловьеву в пустыне близ Каира во время его третьей встречи. Владимир Соловьев признался, что украл «голубой огонек» у Лермонтова. Его чувство юмора таково: украл и украл, так что не надо мямлить. Но тот, кто смеется последним, смеется хорошо. Блок даже пошутил после этого. Он сказал, что Софья Соловьева превратилась в Прекрасную Женщину, то есть в траурную проститутку. Мудрость Божья была унижена.

Кредиты также не являются единичными в живописи. В своей книге «Искусство для детей» Анастасия Четверикова объясняет, как Босх очаровал сюрреалистов своего времени. Сальвадор Дали также копировал Босха: характерные монстры появляются на некоторых его набросках. А из триптиха «Сад наслаждений» Дали взял холм с ползающими по нему всевозможными существами, перевернул его вверх ногами и создал человеческий профиль для своей картины «Великий мастурбатор». Этот профиль, заимствованный у Босха, в котором Дали узнал себя, потом долгое время блуждал по работам сюрреалиста.

Если «вселенная не будет разбираться, кто с кого списывал», — так ли отличается заимствование паттернов алгоритмом от заимствований художников?

«Искусство — это все-таки отображение реальности через призму эмоционального состояния, — говорит Денис Малимонов, автор телеграм-канала «Нейроарт», — а нейронная сеть — это просто копия. Нет ни эмоционального опыта, ни размышлений, ни воображения. Нейронная сеть может составить карту заката — но закат не делает ее грустной. Он может синтезировать лица несуществующих людей — но он «воображает» их только в строгом контексте данных, которому его обучили. Допустим, нейронная сеть была обучена на тысячах фотографий людей: все они отличаются пропорциями, шириной носа, цветом глаз — но по расположению носа, глаз и рта они одинаковы. Алгоритм не пойдет дальше этого, переставляя рот и глаза, он никогда не «представит» три глаза и т.д.».

«Человеческий разум, с другой стороны, абсолютно невозможно втиснуть в рамки, — продолжает Анастасия Четверикова, — он мыслит иначе, нетривиально, не «механически». Машина не может конкурировать с этим, даже если вы обучите ее самым креативным данным, таким как работы Уорхола.

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

Рассматривая архитектуру VGG-19 (см. пункт 2), мы видим, что выход блока слоя_1_conv_1 имеет размерность (m, n, 64). Для простоты предположим, что m,n = 3,2 и количество фильтров также равно 2, а не 64.

Где попробовать

Интернет и ноутбук Google в облаке — это все, что вам нужно для работы с алгоритмом. Мы уже писали о ноутбуках Jupyter, но вот основные моменты для каждого случая:

  1. Блокнот — это среда выполнения кода, которая позволяет видеть результат выполнения всех частей кода сразу. В нашем случае это среда Python, но есть блокноты и для других языков.
  2. Вы можете запустить эту среду на своем компьютере или использовать облачные ноутбуки. Если вы запустите его самостоятельно, ноутбук сможет использовать все системные ресурсы и работать быстрее. Если он находится в облаке, то используются ресурсы облачного компьютера.
  3. Примером такого облачного ноутбука является Google Kolab. Им можно поделиться с кем угодно, и каждый, у кого есть подключение к ноутбуку, может запустить тот же алгоритм.

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

Куда писать свой текст?

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

Как сгенерировать нейросетью любые картинки

Где увидеть результат

Прокрутите страницу до самого низа, и вы увидите индикатор выполнения:

Как сгенерировать нейросетью любые картинки

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

Как сгенерировать нейросетью любые картинки

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

В жаркий летний полдень Я словно в бассейн ледяной Я брошен в твои сине-зеленые, океанские глаза Твои волосы медные, окрашенные в осенний цвет.

Создание нового изображения

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

3.1. Информация о содержимом

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

<span></p><p>Изображение с шумом (сгенерировано Python)</span>» /> Изображение с шумом (сгенерировано в Python)</p><p>Рассмотрим приведенное выше изображение, состоящее из шума (X). Для простоты предположим, что конволюционная нейронная сеть, которую мы выбрали для передачи стиля, состоит только из двух слоев, A1 и A2. Посылая целевое изображение (Y) через сеть и используя выходы A2, A2(A1(Y)), мы получаем информацию о его содержании. Чтобы узнать/извлечь эту информацию, мы прогоняем X через ту же сетку. Поскольку X состоит из случайно распределенных значений пикселей, A2(A1(X)) также будет случайным. Далее мы определяем функцию потерь контента следующим образом:</p><p>Где i и j — индексы матрицы изображений (размеры целевого изображения с содержанием и изображения с шумом должны быть одинаковыми). Если полученные матрицы A2(A1(X)) и A2(A1(Y)) имеют размерность (m, n), то функция потерь вычисляет их разность в каждой точке, возводит их в квадрат, а затем суммирует все эти квадраты. С помощью этой функции потерь мы заставляем X стать изображением, которое предоставляет ту же информацию о содержании, что и Y. Мы можем минимизировать потери с помощью обратного распространения, как это делается в любой нейронной сети, но есть небольшое отличие. В нашем случае обучаемые параметры — это не веса нейронной сети, а сам X-сериал. Это и есть окончательное уравнение:</p><p>Мы можем распространить эту идею на сеть любого размера и выбрать любой подходящий слой, выходы которого вычисляются как содержимое.</p><h3>3.2. Информация о стиле</h3><p>Получение информации о стиле является более сложной задачей, чем получение информации о содержании. Это требует понимания таблиц Gram.</p><h4>3.2.1. Матрицы Грама</h4><p>Рассматривая архитектуру VGG-19 (см. пункт 2), мы видим, что выход блока слоя_1_conv_1 имеет размерность (m, n, 64). Для простоты предположим, что m,n = 3,2 и количество фильтров также равно 2, а не 64.</p><p>» /> Выходы двух фильтров</p><p>Как вы знаете, фильтры сверточных нейронных сетей обучаются распознавать различные пространственные признаки, такие как края/линии, интенсивность цвета и т.д. Предположим, что вышеуказанные фильтры обнаруживают красный и синий тона в разных местах. То есть, значение пикселя (от 0 до 1) в каждой ячейке фильтра 1 представляет интенсивность красного цвета в этом месте, а в фильтре 2 — интенсивность синего цвета. Теперь мы объединяем две выходные таблицы и умножаем результат на значение смещения. Что мы получаем в результате?</p><p>Конечным результатом является таблица корреляции между признаками, отобранными двумя фильтрами. Если вы проверите выходы наших двух слоев, вы заметите, что там, где красный цвет более интенсивный, синий менее интенсивный. Поэтому недиагональные значения корреляционной матрицы (корреляция между красным и синим) меньше. Если теперь мы изменим пиксели так, чтобы синий и красный цвета объединились, недиагональные значения увеличатся.</p><h2> Изменение гиперпараметров</h2><p>Теперь, когда мы обсудили всю теорию, давайте поэкспериментируем с передачей стилей различным гиперпараметрам. Код можно найти в тетрадях по ссылкам выше. Функция передачи стиля вызывается со следующими параметрами:</p><ol><li>Путь к изображению с содержимым.</li><li>Список путей изображения со стилями.</li><li>Вес потери содержимого.</li><li>Вес потери стиля.</li><li>Количество итераций (обратное распространение).</li><li>Список весов для изображений стиля — если вы хотите перенести стиль из нескольких изображений, вы должны перенести вес для каждого изображения стиля.</li><li>Список весов для уровней стиля — веса, присвоенные каждому уровню, используемому в функции потерь.</li></ol><p>Мы используем следующие изображения для наших экспериментов:</p><p><img decoding=4.1. 5 слоев с одинаковыми весами потерь, 1 слой содержимого

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

🤖🎨 ИИ для рисования: раскрываем секреты нейронного переноса стиля

4.2. Повышаем вес функции потерь стиля с 0.005 до 0.1

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

🤖🎨 ИИ для рисования: раскрываем секреты нейронного переноса стиля

4.3. Используем один слой для стиля

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

🤖🎨 ИИ для рисования: раскрываем секреты нейронного переноса стиля

4.4. Используем другой слой в функции потерь содержимого

Использование слоя block_1_conv_1 для получения информации о содержимом заставляет сетку извлекать глобальные особенности из целевого изображения. Скорее всего, это влияет на глобальные особенности образа стиля, и передача стиля становится ужасной. Я думаю, что результат показывает, почему глубокие слои являются рекомендуемым выбором для передачи нейронного стиля. Они сосредоточены исключительно на локальных деталях, связанных с основными объектами изображения содержания, и обеспечивают плавную передачу темы изображения стиля.

🤖🎨 ИИ для рисования: раскрываем секреты нейронного переноса стиля

4.5. Назначаем веса слоев стиля вручную 0.4, 0.3, 0.2, 0.05, 0.05

Хотя разница между изображением из шага 4.1 и этим изображением незначительна, мне кажется, что это изображение в целом имеет более светлый оттенок. Вероятно, это результат более сильного взвешивания слоя block_1_conv_1, который создает белый тон из панели «Звездная ночь» в соответствии с шагом 4.3.

🤖🎨 ИИ для рисования: раскрываем секреты нейронного переноса стиля

Оцените статью
club-cs.ru