вступление

Советское архитектурное наследие очень омерзительно и романтично одновременно. В каждом городе от Владивостока до Калининграда есть одинаковые платтенбауские постройки. Это заставляет многих людей чувствовать эту панельную архитектуру частью своего культурного кода и природы - депрессивной и хтонической. У нас в России даже есть популярный слоган Россия для грустных (который также является игрой слов с правыми Россия для русских). Люди создают много грустного контента (музыку, видеоматериалы, искусство) на основе этих архитектурных отсылок. Однажды я подумал: а что, если бы нейронную сеть научили рисовать эту Печальную Россию. Что, если бездушный алгоритм может рисовать пейзажи, которые доставляют душевное удовольствие целому поколению русских думеров. Так родился проект Neurussia.

Часть 1: интеллектуальный анализ данных

Выбор источника данных пал на крупнейшую российскую социальную сеть - ВКонтакте. И вот почему: у ВКонтакте есть механизм постов, где люди могут предлагать свой контент для публикации в больших группах. Это приводит к тому, что ВК содержит намного больше тематического визуального контента, чем другие социальные сети. Например, самая большая группа об эстетике русских гетто насчитывает около 200 тысяч изображений!

Для скрапинга данных я использовал python-обертку для VK API. На случай, если кто-то захочет воспроизвести мой конвейер, вот описания методов API, а ниже - пример того, как загружать изображения из последнего поста группы.

Для фильтрации скачанных изображений я использовал EfficientDet и NLTK. Идея использования детектора NN состоит в том, чтобы найти все объекты, которые он может найти, и выбросить эти изображения, оставив только кадры пейзажей. Natural Language Toolkit немного помог мне отфильтровать сообщения по их подписям с помощью стемминга. В итоге у меня получилось около 10к изображений русских пейзажей.

Часть 2: Обучение StyleGAN

Я использовал знаменитую архитектуру Nvidia StyleGAN2 с расширениями дискриминатора. Авторы утверждают, что дополнения позволяют получать лучшие результаты на небольших наборах данных (до 30 тыс. Изображений). Вот официальный код и вот моя модификация изоленты для обучения Colab и генерации видео (подробнее об этом ниже).

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

На Colab каждая эпоха занимает около получаса для набора данных из 10 тыс. Изображений с разрешением 1024. Интересный факт: в самые первые эпохи палитра быстро трансформировалась из случайных ярких цветов в 50 оттенков серого :)

Часть 3: Генерация видео

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

Дело в том, что во время обучения нейронная сеть научилась описывать всю картинку вектором размерности 512. И все параметры финальной раскраски заложены в этот вектор. Таким образом, можно найти комбинацию тех параметров, которые соответствуют, например, времени суток, высоте здания или количеству окон. Сама это может быть сложной задачей (однако есть несколько подходов), поэтому для своих целей я решил просто интерполировать между ключевыми кадрами изображений, используя их скрытые векторы. Для этого я изменил всего несколько строк кода в generate.py, чтобы он считывал список ключевых кадров с соответствующими скрытыми векторами и генерировал N промежуточных кадров, линейно интерполируя между ними со скоростью 60 кадров в секунду.

Заключение

С появлением таких подходов, как StyleGAN, генеративное искусство получило новый виток роста. Некоторые даже продают генеративное искусство на аукционе Christie’s, не написав ни строчки кода. Кроме того, Colab резко сокращает начальный уровень и количество времени, чтобы сделать что-то интересное. Надеюсь, что эта статья также поможет кому-то расширить свой творческий потенциал, используя современные методы искусственного интеллекта.

Ссылки