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

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

А также каким будет 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
Делаем форму обратной связи на сайте

Говорят, что если программист может написать форму обратной связи, он может написать всё.

Задача про вёрстку баннера
Задача про вёрстку баннера

Для тех, кто любит конкурсы разработчиков.

hard
Делаем парсер, чтобы массово тянуть с сайтов что угодно
Делаем парсер, чтобы массово тянуть с сайтов что угодно

Собираем текст со всех страниц журнала «Код» простым скриптом

medium
Делаем свой слайдер для картинок «было — стало»
Делаем свой слайдер для картинок «было — стало»

Космический проект

medium
Анализируем тексты Льва Толстого: как привести все слова к одному виду
Анализируем тексты Льва Толстого: как привести все слова к одному виду

Нормально делаем — нормально получается

easy
На что способен менеджер пакетов
На что способен менеджер пакетов

Управляем программами как программисты

easy
medium