Нейроссия: как я научил нейросеть рисовать русскую хтонь

  • Tutorial

Вступление

В России модно грустить. Популярная культура под разными соусами толкает нам депресняк: всякие майки "Россия для грустных", фестивали "боль", подборки "Russian doomer music" на ютубе и так далее. Рунет завален однотипными постпанком, панельками и серостью, которые тем не менее довольно много людей видят чем-то родным и уютным, ощущают частью своего культурного кода. Мне стало интересно, сможет ли ИИ если не победить то хотя бы возглавить эту моду и затронуть струны душ рашн думеров. Ведь что может быть более бессмысленно и тоскливо чем нейросеть, рисующая гипертрофированно-хтоническую Россию? Так появился проект нейроссия.

Собираем данные

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

Примеры скачанных фотографий
Примеры скачанных фотографий

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

Качаем картинки из последнего поста на стене группы
import os
import vk_api
import urllib.request

def captcha_handler(captcha):
    print (f"url: {captcha.get_url()}\n")
    key = input("Enter captcha code: ")
    return captcha.try_again(key)

def auth_handler():
    code = input("Enter 2FA code: ")
    return (code, True)

def save_post_pictures(post, imgfolder, imres):
    pictures = []
    
    if not os.path.exists(imgfolder):
        os.makedirs(imgfolder)
    
    for attachment in post['attachments']:
        if attachment['type'] == 'photo':
            photo = attachment['photo']
            for size in photo['sizes']:
                if size['type'] == imres:
                    url = size['url']
                    filename = ('_'.join(url.split('/')[-2:])).split('?')[0]
                    urllib.request.urlretrieve(url, os.path.join(imgfolder, filename))
                    pictures.append(filename)
                    
    return pictures

phone = input("phone ")
password = input("password ")
domain = 'plattenbauten' # vk.com/plattenbauten

sess = vk_api.VkApi(phone, password, captcha_handler=captcha_handler, auth_handler=auth_handler)
sess.auth()
api = sess.get_api()

posts = api.wall.get(domain=domain, count=1)['items']
save_post_pictures(posts[0], domain, 'z') # https://vk.com/dev/photo_sizes - z максимальный размер

Так я накачал чуть больше чем 100к фоточек из нескольких пабликов. Дальше встал вопрос, как их отфильтровать. Для фильтрации я использовал детектор EfficientDet (чтобы выкинуть из датасета фотки с людьми, машинами, котиками и.т.д, оставив только пейзажи), а также совсем чуть-чуть NLP в лице NLTK чтобы обработать подписи к фотографиям - сделать стемминг слов и найти по тегам то что не нашёл детектор. В итоге осталось около 10к фотографий.

Обучаем стайлган

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

У этой реализации стайлгана есть одна особенность - на вход ему нужны данные в формате .tfrecord (как их получить из картинок описано в readme). А особенность заключается в том, что картинки записываются в tfrecord-ы без сжатия, что в условиях работы на Colab может быть критично. Так, например, датасет из 10 тысяч картинок разрешения 1024х1024, будучи сконвертированным в .tfrecord забьёт диск Колаба под завязку. Говорят, что есть модификация stylegan2 которая использует сжатие в .tfrecord-ах, но я её пока не проверял.

Отчего так в России берёзы шумят?
Отчего так в России берёзы шумят?

Обучение на Google Colab в бесплатной версии идёт со скоростью примерно полчаса на эпоху для разрешения 1024х1024. Когда уже на первых эпохах на генерируемых сеткой картинках проступила родная цветовая гамма, вспомнился мем про "отчего так в России берёзы шумят".

Несколько эпох спустя
Несколько эпох спустя

Генерируем видео

В какой-то момент проект из гиковских прикольчиков превратился в прикольчики творческие. Возникла идея привлечь к этому друзей-музыкантов и сделать генеративное видео с генеративной музыкой (впоследствие трансформировавшаяся в вариативный стрим на платформе mubert). Хотелось чтобы переходы в видео были хоть немного осмысленными и согласующимися с музыкой.

Латентный вектор это промежуточное сильно сжатое представление картинки, в котором скрыты все выученные нейросетью свойства. Наверное, можно было заморочиться и найти в латентном векторе (размерности 512) компоненты отвечающие за тот или иной параметр картинки (чтобы например плавно менять освещение, сохраняя структуру картинки), но я решил что проще сгенерировать видео по ключевым кадрам. Если плавно переходить от вектора соответствующего одной картинке (ключевому кадру) к вектору соответствующему другой, то картинки также будут плавно перетекать одна в другую. Для этого я поменял несколько строк в скрипте generate.py так, чтобы на вход он принимал папку с латентными векторами выбранных картинок, и список, в котором эти картинки должны появляться в видео.

В заключение

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

Ещё картиночки
Ещё картиночки

Ссылки

Нейроссия в ВК

Нейросеть Stylegan2-ada

Python-обёртка api вконтакте

Ads
AdBlock has stolen the banner, but banners are not teeth — they will be back

More

Comments 73

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





      +3
      Прикольно получилось :) Особенно хорош крупный план!
        +11

        Круто! Ещё бы в обратную сторону — барселонский готический квартал в Чертаново:)

          +59
          Так тоже можно













            +12

            Добавьте генерацию вывесок пятерочки, красного-белого и кондиционеров на фасадах!

          +1
          Что-то на города вселенной вархаммера похоже.
            +10

            Скорее вселенная Варламова.

          +1

          Хтонь — это от «хтонический»? Тогда некорректное использование термина. Хтонический подразумевает подземное происхождение.

            +12
            Думается, «хтонь» передаёт настроение фонетически.
              +3

              «Она металась как стрелка осциллографа» — Латынина.

                +9

                Что вас смущает в этой фразе? Осциллограф изначально записывал показания пером на движущейся бумажной ленте. И это перо было закреплено на длинной "стрелке". А то, что мы сейчас называем осциллографом, называлось осциллоскопом.

                  –3

                  Латынина, про такой прибор точно не в курсе.

                    0
                    зато она в курсе про запятые ;)
                    0
                    оцифровывал такие данные на ленту
                      0
                      Да и сейчас называется: oscilloscope. Это в русском трансформация неверная произошла и закрепилась.
                        0
                        Вернее, в английском трансформация произошла (вместо «катодный осциллограф» придумали новое слово), а в русском — не произошла, оставили прежнее название.
                          0
                          Важно понимать разницу между суффиксами "-граф" и "-скоп".

                          "-scope" — суффикс, означающий «смотреть». Из Wiktionary:

                          From Ancient Greek σκοπέω (skopéō, “examine, inspect, look to or into, consider”). Suffix -scope Used to make terms denoting an instrument used for viewing or examination.


                          С другой стороны, "-граф" соответствует:
                          Etymology
                          From Ancient Greek suffix -γραφω (-graphō), from γράφω (gráphō, “to scratch, to scrape, to graze”), whence also -graphy.
                          Suffix
                          -graph
                          that writes
                          stenograph
                          (metonymically) that is written


                          Таким образом, "-скоп" — это прибор, который позволяет наблюдать, а "-граф" — записывающий, регистрирующий прибор. Вспомните другие приборы с этими суффиксами:

                          Стетоскоп, эерископ, эндоскоп, телескоп, микроскоп, спектроскоп — все они могут «смотреть», но не могут записывать.

                          Томограф, фонограф, виброграф, спирограф — записывающие, регистрирующие приборы.

                          Но «Катодный осциллограф», он же «осциллоскоп», мог только отображать сигнал, но не записывать. Поэтому, для поддержания системности и единообразия языковых правил, правильно было бы называть его «осциллоскопом», как в англоязычной среде.
                            0
                            Наверное, вместо «кинематограф» вы говорите «кинескоп»?
                              +1

                              Кинематограф — запись движения, кинескоп — показ. Все логично.

                                +2
                                А это билет на запись или на показ?

                  +6
                  Вот нашел самое подходящее по смыслу определение:
                  «Русская Хтонь — это серое небо над серым миром, застрявшим в своей безнадёге, словно муха в янтаре.»
                  author.today/work/97348?c=5982471&th=5982471 (Денис Старков, «Русская Хтонь», сборник рассказов)
                    –6

                    Когда писатель пишет «Волны падали вниз стремительным домкратом», это не означает, что определение волн или домкрата нужно переписать.

                    +1
                    Я думаю, автор под «хтонью» имел ввиду андеграунд.
                      +12
                      Я думаю, автор под хтонью :)
                      +2

                      Там средь неведомой хтони
                      Следы невиданной хрони

                      –1

                      "Ведь что может быть более бессмысленно и тоскливо чем нейросеть, рисующая гипертрофированно-хтоническую Россию?"


                      … разве что, сама Россия…

                        –2

                        Что за "минусы"? Это как на зеркало пенять… Нейросеть рисует Россию. И если не нравится копия, так может с оригиналом проблемы?

                          +7

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

                            +8
                            А если выйти за пределы сталиц и нескольких достопримечательностей и операться на большинство?)
                              +4

                              На какое именно большинство опираться надо? Человек написал про всю Россию, что она бессмысленная и тоскливая. А Россия это и Ленские столбы, и долина гейзеров, и Байкал с Карелией — достаточно удалённо от столиц? И что, тоже тоскливо?
                              Да даже если человек неправильно выразился и имел в виду конкретно города и архитектуру, вы уверены, что города России представляют из себя только такие кварталы типовой застройки? А как же Казань, Калининград и нижний Новгород, города золотого кольца?

                                +1
                                Ну насчет того, что в России красивая природа — никто не спорит. Речь идёт про антропогенные произведения. И тут всё не так уж и радужно за пределами Москвы и Питера. Обычно всё ограничивается церквями и иногда всякими крепостями.
                                  0

                                  Ну я привёл примеры красивых городов. Или там, по вашему, тоже не радостно? Конечно, кварталы однотипных многоэтажек практически везде есть. Но ведь не только они

                                    +2
                                    Новороссийск (заезжал летом) вполне себе за пределами Москвы и Питера, но выглядит на мой взгляд нормально. Велодорожки, широкие газоны, разнообразная архитектура. Если город «сегодняшний» заметно лучше себя «вчерашнего», то это все же важнее отставания его в этом плане от Москвы.

                                    Заголовок спойлера
                                    image

                                    +1
                                    К большому сожалению, все куда более прозаично. Хотя процент частной застройки довольно заметно варьируется от большего на юге к меньшему на севере, факт остается фактом: архитектура, заметно отличающаяся от глубоко утилитарной, встречается практически только в (исторических) центрах городов. Утверждать обратное — довольно сложно, потому что есть спутниковые снимки, на которые может взглянуть каждый. Вот как раз найти на этих снимках парки и историческую застройку на фоне характерных прямоугольников типовых кварталов (в том числе — в Казани и Нижнем Новгороде) — не так-то просто.
                                      0

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

                                        +2
                                        Я не знаю, куда вы смотрели, но давайте смотреть вместе:
                                        Авиастроительный район, все внутри многоугольника ул. Челюскина, академика Павлова, Дементьева, Кошевого, Копылова, Тэцевская.
                                        Весь Новосавиновский район, Горки, Азино.
                                        «Зелень» определяющим фактором не является — типичная хрущевская застройка тоже много где утыкана деревьями довольно густо, от этого менее однообразной не становится.
                                      0
                                      Ну я не видел. У меня дом-работа) Иногда проезжаю мимо илитных районов. Там красиво, да. Но чаще поднимаюсь и вижу ТЭЦ и собак по дороге на работу) Так что нет… Ясное дело, что есть в России хорошие и красивые места. Не спорю. Но видет ли их большинство?)
                                  0
                                  В других странах сплошь и рядом достояния архитектуры и никаких однотипных панелек? Ну-ну
                                    0
                                    Хмм, ну попробуйте найти квартал однотипных панелек где-нибудь в Дании.
                                      0
                                      Ну не панельки, и 3 этажа, но одинаковые что братья близнецы.
                                      Заголовок спойлера
                                      Скриншот просмотра улиц в Google картах в Дании

                                      Или вот, Копенгаген. Уличные фонари на проводах выглядят прикольно, в остальном, застройка типовыми домами.
                                      Заголовок спойлера
                                      Скриншот просмотра улиц в Google картах в Дании
                                      www.google.com/maps/@55.683902,12.4856946,3a,75y,9.74h,105.72t/data=!3m6!1e1!3m4!1sko7FCORwEXGjUgmnKJdo9w!2e0!7i16384!8i8192
                                        0
                                        Три типовых этажа — это не 24-этажные «стены». И тем более это выглядит жутко как микрорайон «Кошелев» в Самаре.
                                          0
                                          Кошелёк такой известный?
                                            0
                                            Им пугают маленьких кучерявых блогеров.
                                  –1

                                  А то, что "… бессмысленно и тоскливо...", так это не моё утверждение, а автора статьи.

                                    –1

                                    Прошу модератора (если он это прочитает) удалить все мои комментарии в этом топике. А то, разговор куда-то не туда зашёл. Страна это люди, а не однообразные панельки (хотя и они тоже). И вот, именно из-за некоторых из них, которым, бесполезно вообще что-то говорить, становится бессмысленно и тоскливо.

                                      +2

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

                                        0
                                        У каждого своё восприятие действительности. Вы можете просто не ассоциировать себя с чужим восприятием.
                                        Если Вас это обижает — это Ваша проблема, необязательно делиться своими токсичными комментариями. Такие комментарии — одна из причин тоскливости, которую Вы отрицаете.
                                    +4
                                    Не хотелось бы как-то задеть патриотические чувства автора (задумка хорошая и реализация отличная), но ничего особо российского в такой стилистике нет — Пхеньян за пределами центральных проспектов точно так же выглядит и ощущается. Это просто следствие экономии на стройматериалах и непродуманной урбанистики.
                                      +8

                                      У Северной Кореи и идей чучхе с современной Россией ооочень много общего, на самом деле )

                                        +5

                                        В Южной Корее — не прям вот настолько лучше… На выбор… Или районы элитных человейников, которые под дождичком будут выглядеть как Северное Чертаново (если корейские буквы спрятать).


                                        Или районы вроде прославленного PSY и "стилем" Гангама, (который, кстати, судя по припаркованным машинам, тоже далеко не трущобы) где в окно можно увидеть на выбор или окно соседа, или стену. Если повезет, то не на расстоянии вытянутой руки, а на расстоянии 4 метра, если "окна на улицу"...

                                          +2

                                          Вообще не выглядит как Чертаново. Чертаново и другие застроены типовые панельками.
                                          Или Вы про тот, кусочек, "креативное северное чертаново" — несколько экспериментальных домов?

                                            –1
                                            По-русски его принято называть «Каннам»
                                            ru.wikipedia.org/wiki/Каннамгу
                                        –4
                                        А цель-то какая была? Скормить нейросети фотографии панелек чтобы… что? Чтобы получить те же самые фотки панелек, назвав это «Россией»?
                                        Получилась не Россия, а так себе переходы между так себе «фотками».
                                        Кто-то из буханки делает троллейбус, а вы из буханки буханку.
                                          +5

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

                                            –1
                                            Так а где искусство? Тот же Qra выше показал свой опыт отображения панелек в готические храмы (и наоборот). Самое первое, что приходит в голову, это заставить GAN рисовать панельки в стиле какого-то художника (акварель, масло, пастель). Или же превратить мрачные панельки в яркое русское деревянное зодчество с хохломой. А тут НИЧЕГО.
                                              +2

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

                                                –1
                                                Ну хорошо, раз вам понравилось, то может в этом что-то и есть, тем более, для искусства. Я же не увидел никаких новых образов, только изменение вектора скрытого пространства для получения промежуточных результатов от того, на чём тренировали.
                                                  +1

                                                  А чем это отличается от работы мозга любого художника/поэта/композитора? :)

                                                    0
                                                    А вы думаете, что композитор смешивает все имеющиеся музыкальные произведения какого-то жанра в звуковом редакторе и радуется появлению новой композиции? Мне кажется, что как-то иначе процесс его творчества должен проходить.
                                                      0
                                                      На это непосредственно указывает то, что техно-композиторы называют себя диджеями, т.е. переставляющими пластинки.
                                                        +2

                                                        Именно так композитор и делает. Всю жизнь вкачивает в свою голову тысячи произведений и на их «вдохновении» выдаёт оригинальную музыку. Так же художник поступает с образами. Более того — точно так же среди всех работ отбирает только лучшие на показ (или вы думаете гении не работают в холостую?).

                                                          –1
                                                          Каковы принципы работы нейронной сети, генерирующей новые изображения? Нелинейное уменьшение размерности входных данных и восстановление этих данных из меньшей размерности обратно.

                                                          Если запаковать большое изображение в это скрытое пространство и попробовать восстановить полученный вектор обратно, то должны получить оригинальное изображение (с некоторыми потерями). «Новым» это изображение назвать сложно, скорее, «распакованным». Если говорим про музыку, то посчитаем, что музыканты сыграли какое-то произведение по нотам.

                                                          Можно попробовать у полученного вектора изменить какой-то параметр, тогда мы получим точно такое же изображение, только что-то другое, скажем, нос длиннее или губы толще. Это «новое» изображение или «подредактированное»? Неважно, но с музыкантами можно было бы сказать, что они сыграли знакомую мелодию в другой тональности или с какими-то изменениями, но оригинал мы всё же узнали.

                                                          Можно сгенерировать входной вектор случайно. Полученный результат уже сложно будет отнести к какому-то конкретному примеру из обучающего набора. Пусть уж будет «новым». Хотя, по факту, это лишь некоторая нелинейная интерполяция обучающей выборки. Вот тут уже в игре музыкантов мы сможем услышать что-то новое, и даже отнести к какому-то музыкальному жанру и сказать, что композитор был явно вдохновлён Моцартом или Шопеном. Творчество? Творчество, бога ради. Так ли работает мозг человека? Пусть так, мне это неважно. Я не хочу об этом спорить.

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

                                                          Сложно получить качественный результат. Тот же thispersondoesnotexist.com показывает результаты, в которых даже в голову не придёт, что это не фотография реального человека.

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

                                                          Переходы между кадрами — так себе. Какие-то некачественные транзишены в after effects. Автор сам написал, что можно было бы, наверное, поизучать, какой из 512 параметров за что отвечает, найти интересные, проанимировать через них, но не стал. Забил.

                                                          И уж если мы говорим про творчество и про музыку, то я бы сравнил эту работу с диджеем, который поставил странные переходы между уже существующими трэками, но с сильно низкой дискретизацией. Какофония. Творчество?! Мне так не кажется.
                                                            0
                                                            Полученный результат уже сложно будет отнести к какому-то конкретному примеру из обучающего набора.
                                                            И уж если мы говорим про творчество и про музыку, то я бы сравнил эту работу с диджеем, который поставил странные переходы между уже существующими трэками.

                                                            Бога ради, именно так это и работает у человека. В каждом произведении можно увидеть заимствование. В наш век технологий есть масса работ, где с помощью алгоритмов поиска разбираются известные произведения и что характерно находятся как отдельные мелодии, так и ритмы и нотные размеры. И что характерно, многие из авторов соглашаются: да действительно, вдохновлялся этими песнями.
                                                            И никто не говорит что это плагиат, просто человек не так уж и независим в своем творчестве от того творчества на котором он вырос.
                                                            Посмотрите вокруг — никто в 18 веке не сочинил джазовых композиций. Здесь как с эволюцией, обезьяна не рождает человека, но минимальные мутации на большом временном отрезке приводят к значительным изменениям. Количество переходит в качество.
                                                            Но всегда возможен брут форс, в живописи он имеет большую силу (простите за тавтологию), нанести случайным образом мазки, нарисовать обычные объекты, но силуэты случайным образом размазать (то есть не перенести картину из сознания, а наносить краски случайным образом) и из 1000 картин может получиться общепризнанный шедевр и основоположник нового жанра.
                                                              +2
                                                              И не лень же писать было) Или вам обязательно надо чтобы сложно было?) Вот для меня лично эти картинки — арт, тк я сам рисовать не умею но с помощью ганов вроде нормально выходит, в этом и идея. Плюс, разделяйте арт и науку — одно дело сделать полноценное исследование (на что не претендую) и какой-нибудь этапанельканесуществует.рф запилить, другое — не прикладывая больших усилий получить прикольные результаты которые невозможно (или достаточно сложно) получить иными способами. Ну а насчёт результат хороший/плохой — могу сказать что статистически хороший, судя по активности и интересу людей, если не нравится — ставьте минус и всё тут, статистика вас не забудет)
                                              +2
                                              Смотрится красиво, но жутковато. Ещё бы поставить на фон домов детские качели и какого-нибудь «эмо» посадить… и привет из 2011
                                                +4

                                                В 2011 эмо уже повзрослели и стали хипстерами

                                                0

                                                Недоперемордор.

                                                  –2

                                                  Было бы гораздо интереснее, если бы домики под музыку трансформировались, а так — скучновато

                                                    0
                                                    Это не самая сложная задача для нейросети. В России все панельные дома одинаковые.
                                                      0
                                                      Странно что еще никто не пошутил «Дэл Спунер: Ты всего лишь машина, только имитация жизни. Робот сочинит симфонию? Робот превратит кусок холста в шедевр искусства?»
                                                        –1
                                                        Хтонь)хорошо описывает 2020 год :3
                                                          0
                                                          Спасибо, заинтересовался данной схемой
                                                            0
                                                            Этот стиль выглядит как то крипово

                                                            Only users with full accounts can post comments. Log in, please.