Вступление
В России модно грустить. Популярная культура под разными соусами толкает нам депресняк: всякие майки "Россия для грустных", фестивали "боль", подборки "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 существенно снижают порог вхождения и затраты для получения интересных результатов.
Qra
Недавно тоже занимался панельными домами но немного в другом ключе — сделал сеть, которая стилизует их под готику.
kareon
Прикольно получилось :) Особенно хорош крупный план!
ferluht Автор
Круто! Ещё бы в обратную сторону — барселонский готический квартал в Чертаново:)
Qra
madcatdev
Добавьте генерацию вывесок пятерочки, красного-белого и кондиционеров на фасадах!
d33
Что-то на города вселенной вархаммера похоже.
Javian
Скорее вселенная Варламова.
MaxALebedev
Хтонь — это от «хтонический»? Тогда некорректное использование термина. Хтонический подразумевает подземное происхождение.
MainBelia
Думается, «хтонь» передаёт настроение фонетически.
MaxALebedev
«Она металась как стрелка осциллографа» — Латынина.
CrashLogger
Что вас смущает в этой фразе? Осциллограф изначально записывал показания пером на движущейся бумажной ленте. И это перо было закреплено на длинной "стрелке". А то, что мы сейчас называем осциллографом, называлось осциллоскопом.
rencom66
Латынина, про такой прибор точно не в курсе.
lazywicked
оцифровывал такие данные на ленту
vvzvlad
Да и сейчас называется: oscilloscope. Это в русском трансформация неверная произошла и закрепилась.
tyomitch
Вернее, в английском трансформация произошла (вместо «катодный осциллограф» придумали новое слово), а в русском — не произошла, оставили прежнее название.
MichaelBorisov
Важно понимать разницу между суффиксами "-граф" и "-скоп".
"-scope" — суффикс, означающий «смотреть». Из Wiktionary:
С другой стороны, "-граф" соответствует:
Таким образом, "-скоп" — это прибор, который позволяет наблюдать, а "-граф" — записывающий, регистрирующий прибор. Вспомните другие приборы с этими суффиксами:
Стетоскоп, эерископ, эндоскоп, телескоп, микроскоп, спектроскоп — все они могут «смотреть», но не могут записывать.
Томограф, фонограф, виброграф, спирограф — записывающие, регистрирующие приборы.
Но «Катодный осциллограф», он же «осциллоскоп», мог только отображать сигнал, но не записывать. Поэтому, для поддержания системности и единообразия языковых правил, правильно было бы называть его «осциллоскопом», как в англоязычной среде.
tyomitch
Наверное, вместо «кинематограф» вы говорите «кинескоп»?
nlykl
Кинематограф — запись движения, кинескоп — показ. Все логично.
tyomitch
А это билет на запись или на показ?
lxsmkv
Вот нашел самое подходящее по смыслу определение:
«Русская Хтонь — это серое небо над серым миром, застрявшим в своей безнадёге, словно муха в янтаре.»
— author.today/work/97348?c=5982471&th=5982471 (Денис Старков, «Русская Хтонь», сборник рассказов)
MaxALebedev
Когда писатель пишет «Волны падали вниз стремительным домкратом», это не означает, что определение волн или домкрата нужно переписать.
anomatver
Я думаю, автор под «хтонью» имел ввиду андеграунд.
maverickcy
Я думаю, автор под хтонью :)
farm
Там средь неведомой хтони
Следы невиданной хрони
mjmartmail
"Ведь что может быть более бессмысленно и тоскливо чем нейросеть, рисующая гипертрофированно-хтоническую Россию?"
… разве что, сама Россия…
mjmartmail
Что за "минусы"? Это как на зеркало пенять… Нейросеть рисует Россию. И если не нравится копия, так может с оригиналом проблемы?
murzilka
Нейросеть рисует не Россию, а типовые дома. Россия же это не только серии панелек, но и Петроградка, Арбат, Сириус парк и множество других мест
Vadimatorikda
А если выйти за пределы сталиц и нескольких достопримечательностей и операться на большинство?)
murzilka
На какое именно большинство опираться надо? Человек написал про всю Россию, что она бессмысленная и тоскливая. А Россия это и Ленские столбы, и долина гейзеров, и Байкал с Карелией — достаточно удалённо от столиц? И что, тоже тоскливо?
Да даже если человек неправильно выразился и имел в виду конкретно города и архитектуру, вы уверены, что города России представляют из себя только такие кварталы типовой застройки? А как же Казань, Калининград и нижний Новгород, города золотого кольца?
Barbaresk
Ну насчет того, что в России красивая природа — никто не спорит. Речь идёт про антропогенные произведения. И тут всё не так уж и радужно за пределами Москвы и Питера. Обычно всё ограничивается церквями и иногда всякими крепостями.
murzilka
Ну я привёл примеры красивых городов. Или там, по вашему, тоже не радостно? Конечно, кварталы однотипных многоэтажек практически везде есть. Но ведь не только они
iDm1
Новороссийск (заезжал летом) вполне себе за пределами Москвы и Питера, но выглядит на мой взгляд нормально. Велодорожки, широкие газоны, разнообразная архитектура. Если город «сегодняшний» заметно лучше себя «вчерашнего», то это все же важнее отставания его в этом плане от Москвы.
Moskus
К большому сожалению, все куда более прозаично. Хотя процент частной застройки довольно заметно варьируется от большего на юге к меньшему на севере, факт остается фактом: архитектура, заметно отличающаяся от глубоко утилитарной, встречается практически только в (исторических) центрах городов. Утверждать обратное — довольно сложно, потому что есть спутниковые снимки, на которые может взглянуть каждый. Вот как раз найти на этих снимках парки и историческую застройку на фоне характерных прямоугольников типовых кварталов (в том числе — в Казани и Нижнем Новгороде) — не так-то просто.
murzilka
Открыл гибридную карту Казани. Парк победы, парк химиков. Квартал рядом с ними выглядят так, будто бы там много зелени. Да, есть участки, которые даже со спутника выглядят "не очень", но судя по форме и размеру сооружений это промзоны. В районах дальше от центра визуально зелени меньше, но и там — ометьевский лес, горкинский лес. И у меня сложилось впечатление, что для Казани озвученные вами прямоугольники типовых кварталов не так уж актуальны
Moskus
Я не знаю, куда вы смотрели, но давайте смотреть вместе:
Авиастроительный район, все внутри многоугольника ул. Челюскина, академика Павлова, Дементьева, Кошевого, Копылова, Тэцевская.
Весь Новосавиновский район, Горки, Азино.
«Зелень» определяющим фактором не является — типичная хрущевская застройка тоже много где утыкана деревьями довольно густо, от этого менее однообразной не становится.
Vadimatorikda
Ну я не видел. У меня дом-работа) Иногда проезжаю мимо илитных районов. Там красиво, да. Но чаще поднимаюсь и вижу ТЭЦ и собак по дороге на работу) Так что нет… Ясное дело, что есть в России хорошие и красивые места. Не спорю. Но видет ли их большинство?)
mjmartmail
А то, что "… бессмысленно и тоскливо...", так это не моё утверждение, а автора статьи.
mjmartmail
Прошу модератора (если он это прочитает) удалить все мои комментарии в этом топике. А то, разговор куда-то не туда зашёл. Страна это люди, а не однообразные панельки (хотя и они тоже). И вот, именно из-за некоторых из них, которым, бесполезно вообще что-то говорить, становится бессмысленно и тоскливо.
murzilka
Ну круто. Сначала всю Россию назвали бессмысленной и тоскливой, теперь людей
От тоскливого жителя бессмысленной России — спасибо за ваше мнение
dzhidzhoev
У каждого своё восприятие действительности. Вы можете просто не ассоциировать себя с чужим восприятием.
Если Вас это обижает — это Ваша проблема, необязательно делиться своими токсичными комментариями. Такие комментарии — одна из причин тоскливости, которую Вы отрицаете.
DreamingKitten
Не хотелось бы как-то задеть патриотические чувства автора (задумка хорошая и реализация отличная), но ничего особо российского в такой стилистике нет — Пхеньян за пределами центральных проспектов точно так же выглядит и ощущается. Это просто следствие экономии на стройматериалах и непродуманной урбанистики.
kisaa
У Северной Кореи и идей чучхе с современной Россией ооочень много общего, на самом деле )
Igor_O
В Южной Корее — не прям вот настолько лучше… На выбор… Или районы элитных человейников, которые под дождичком будут выглядеть как Северное Чертаново (если корейские буквы спрятать).
Или районы вроде прославленного PSY и "стилем" Гангама, (который, кстати, судя по припаркованным машинам, тоже далеко не трущобы) где в окно можно увидеть на выбор или окно соседа, или стену. Если повезет, то не на расстоянии вытянутой руки, а на расстоянии 4 метра, если "окна на улицу"...
Valeratal
Вообще не выглядит как Чертаново. Чертаново и другие застроены типовые панельками.
Или Вы про тот, кусочек, "креативное северное чертаново" — несколько экспериментальных домов?
tyomitch
По-русски его принято называть «Каннам»
ru.wikipedia.org/wiki/Каннамгу
CJay
А цель-то какая была? Скормить нейросети фотографии панелек чтобы… что? Чтобы получить те же самые фотки панелек, назвав это «Россией»?
Получилась не Россия, а так себе переходы между так себе «фотками».
Кто-то из буханки делает троллейбус, а вы из буханки буханку.
MilesSeventh
Чтобы искусство, вестимо. Картины художников позволяют открыть для себя новые образы и идеи, продукты невросети — по-новому взглянуть на уже знакомые пейзажики.
CJay
Так а где искусство? Тот же Qra выше показал свой опыт отображения панелек в готические храмы (и наоборот). Самое первое, что приходит в голову, это заставить GAN рисовать панельки в стиле какого-то художника (акварель, масло, пастель). Или же превратить мрачные панельки в яркое русское деревянное зодчество с хохломой. А тут НИЧЕГО.
MilesSeventh
Тут из одних панелек произвольно получаются другие, их элементы непредсказуемо комбинируются, образуя интересные акценты. Для этого вообще не обязательно комбинировать архитектурные стили или элементы живописи — это лишь один из многих методов создания новых образов.
В конце статьи можно изображения посмотреть — они явно содержат отличия от фотографий плановой застройки: узнаваемые элементы настолько вплетаются в сюрреалистичные сюжеты, что чем-то даже на работы Дали походят.
CJay
Ну хорошо, раз вам понравилось, то может в этом что-то и есть, тем более, для искусства. Я же не увидел никаких новых образов, только изменение вектора скрытого пространства для получения промежуточных результатов от того, на чём тренировали.
kvazimoda24
А чем это отличается от работы мозга любого художника/поэта/композитора? :)
CJay
А вы думаете, что композитор смешивает все имеющиеся музыкальные произведения какого-то жанра в звуковом редакторе и радуется появлению новой композиции? Мне кажется, что как-то иначе процесс его творчества должен проходить.
tyomitch
На это непосредственно указывает то, что техно-композиторы называют себя диджеями, т.е. переставляющими пластинки.
RigelNM
Именно так композитор и делает. Всю жизнь вкачивает в свою голову тысячи произведений и на их «вдохновении» выдаёт оригинальную музыку. Так же художник поступает с образами. Более того — точно так же среди всех работ отбирает только лучшие на показ (или вы думаете гении не работают в холостую?).
adrianleonard
Смотрится красиво, но жутковато. Ещё бы поставить на фон домов детские качели и какого-нибудь «эмо» посадить… и привет из 2011
CrashLogger
В 2011 эмо уже повзрослели и стали хипстерами
yleo
Недоперемордор.
phikus
Было бы гораздо интереснее, если бы домики под музыку трансформировались, а так — скучновато
PastWood
Это не самая сложная задача для нейросети. В России все панельные дома одинаковые.
89vitaliklyadkin
Странно что еще никто не пошутил «Дэл Спунер: Ты всего лишь машина, только имитация жизни. Робот сочинит симфонию? Робот превратит кусок холста в шедевр искусства?»
Agent00008
Хтонь)хорошо описывает 2020 год :3