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

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

А также каким будет Half-Life 3

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

В чём суть

Разработчик Кэтрин Кроусон написала алгоритм, в котором нейросеть по текстовому описанию на английском языке пытается нарисовать подходящую картинку. Например, мы ей пишем (на английском, естественно) «программист-полуночник», а она выдаёт картинку:

Как сгенерировать нейросетью любые картинки
Это «полуночное программирование» — очевидно, от первого лица

Или, например, «Семь грехов», а она в ответ:

Как сгенерировать нейросетью любые картинки
Сложно сказать, что здесь изображено, но атмосфера греховная

Мы, разумеется, попросили алгоритм показать нам кадр из ещё не вышедшей игры Half-Life 3. Фанаты по всему миру ждут, когда же будет продолжение серии про Гордона Фримена и борьбу с «Комбайном». У алгоритма для нас плохие новости:

Как сгенерировать нейросетью любые картинки
«Мистер Фримен, я что-то неважно себя чувствую»

Интересно, что в оригинальной игре у главного героя ровно такие же очки и оранжевый защитный костюм. Сложно сказать, о чём думал алгоритм, когда рисовал эту картинку, но он явно что-то знает. 

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

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

Для работы с алгоритмом достаточно интернета и гугловского ноутбука в облаке. Мы уже писали про jupyter-ноутбуки, но на всякий случай вот суть:

  1. Ноутбук — это среда выполнения для кода, которая позволяет сразу видеть результат работы всех частей кода. В нашем случае это среда для Python, но бывают и ноутбуки для других языков.
  2. Можно эту среду запустить на своём компьютере, а можно использовать облачные ноутбуки. Если запускать у себя, то ноутбук сможет использовать все системные ресурсы и работать быстрее. Если в облаке — ресурсы облачного компьютера. 
  3. Пример такого облачного ноутбука — «Гугл Колаб». Им можно делиться с кем угодно, и тот, у кого есть ссылка на ноутбук, может тоже запустить тот же самый алгоритм. 

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

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

Промотайте ноутбук до середины и найдите раздел Settings for this run. В нём будет переменная prompt — в ней и задаётся фраза, по которой алгоритм будет рисовать картинку. Что вы здесь напишете — то и получите. Ну или не совсем то, но тоже будет в тему. Или нет. Мы не знаем, это нейросеть, там всё непредсказуемо.

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

Как запустить

Заходите в меню и выбираете «Среда выполнения» → «Выполнить всё»:

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

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

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

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

Она показывает, на сколько процентов готова ваша картинка. Каждые 10% ноутбук выдаёт промежуточный результат. Можно посмотреть, как менялась картинка на очередном этапе вычислений:

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

Самая последняя картинка с надписью Step 999 и будет итоговым результатом работы алгоритма.

Красивые гифки с процессом

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

Как сгенерировать нейросетью любые картинки
Исходная фраза — man with books. Очень похоже на вырезанную сцену из фильма «Интерстеллар» 🙂
Как сгенерировать нейросетью любые картинки
А это — иллюстрация к названию фильма «Карты, деньги, два ствола» (Lock, Stock and Two Smoking Barrels). Двух стволов нет, но один точно дымится.

Что там под капотом

Внутри работают два нейросетевых алгоритма. 

Первый — ImageNet из OpenAI. Он генерирует картинки 256 на 256 пикселей. Его задача — получить картинку максимального качества. Для этого он раз за разом улучшает детализацию и делает картинку чётче и подробнее.

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

Вместе они работают так:

  1. CLIP говорит второму алгоритму, к какой картинке она должна стремиться.
  2. ImageNet старательно делает первый набросок и показывает его.
  3. CLIP оценивает, насколько это совпадает с запросом, и говорит, в каком направлении нужно двигаться дальше.
  4. ImageNet делает второй набросок и показывает его снова.
  5. Так продолжается до тех пор, пока CLIP не скажет «всё, хорош» или когда точность приближения, по мнению нейросети, не будет ниже той, что нужна для остановки.

Откуда нейросеть всё это знает

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

Если бы не было такого набора с данными, нейронка сама бы не поняла, что кошка — это кошка, и выдавала бы просто квадрат из несвязных пикселей.

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

Похожим образом работает «Балабоба» Яндекса — это нейросетевой алгоритм, обученный на огромном корпусе текстов из интернета. Когда мы даём задание «Балабобе», алгоритм дёргает нужные фразы из корпуса и выдаёт результат. 

Текст:

Михаил Полянин

Редактор:

Максим Ильяхов

Художник:

Даня Берковский

Корректор:

Ирина Михеева

Вёрстка:

Кирилл Климентьев

Соцсети:

Олег Вешкурцев

Любишь Python? Зарабатывай на нём!
Изучите самый модный язык программирования и станьте крутым бэкенд-разработчиком. Старт — бесплатно.
Попробовать
Любишь Python? Зарабатывай на нём! Любишь Python? Зарабатывай на нём! Любишь Python? Зарабатывай на нём! Любишь Python? Зарабатывай на нём!
Получите ИТ-профессию
В «Яндекс Практикуме» можно стать разработчиком, тестировщиком, аналитиком и менеджером цифровых продуктов. Первая часть обучения всегда бесплатная, чтобы попробовать и найти то, что вам по душе. Дальше — программы трудоустройства.
Начать карьеру в ИТ
Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию
Еще по теме
Простой калькулятор на JavaScript
Простой калькулятор на JavaScript

Проще уже некуда

easy
Пианино на JavaScript для Chrome
Пианино на JavaScript для Chrome

Не «Мир Дикого запада», но тоже сгодится.

medium
Пишем собственный лапшесниматель
Пишем собственный лапшесниматель

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

easy
Добавляем секретный уровень в пинг-понг на JavaScript
Добавляем секретный уровень в пинг-понг на JavaScript

Мини-проект для тех, кому всё ещё просто.

medium
Как добавить кнопки «Поделиться» на страницу
Как добавить кнопки «Поделиться» на страницу

Простой рецепт от Яндекса.

easy
Как сделать красивый сайт на Вордпрессе

Быстрее, чем экспресс-дизайн. Дешевле, чем экспресс-дизайн. Лучше, чем экспресс-дизайн.

medium
Пинг-понг на JavaScript

Да, вдвоём тоже можно.

easy
Прокачиваем собственный генератор паролей

Тройная защита для вашей семьи!

hard
Эпидемия
Эпидемия
medium
Как очень быстро и яростно добавить музыкальный трек на страницу
Как очень быстро и яростно добавить музыкальный трек на страницу

Всё для семьи

easy
Одной строкой: новые CSS-команды для фронтендов
Одной строкой: новые CSS-команды для фронтендов

Что можно сделать в современном вебе.

medium
Как работает язык SQL
Как работает язык SQL

Управляем базой данных из командной строки

medium
Генератор статей для Кода
Генератор статей для Кода

Почти настоящие статьи на цепях Маркова

medium
medium