Фарш (не)возможно провернуть назад

Уже не в первый раз на хайпе мы трогаем тему нейросетей. Впервые поглядывали в 2015 году в Нейроразминке, затем несколько раз тема поднималась в уютном чатике спектрум художников zxgfx в телеграме и однажды даже разговорчики вылились в небольшой перфоманс для DiHalt 2022 года, где несколько авторов рисовали «Нейрооленей» по референсам, которые любезно нагенерировала нейросеть от Сбера ruDALL-E Malevitch.
И вот, (в очередной нейросетевой приступ) в чатике возник вопрос, можно ли провернуть фарш назад, т.е. дать нейросети на вход пиксельарт картинку с zx spectrum и получить нечто, что уже не будет пиксельартом, но сюжетно будет очень близко напоминать оригинал.
Тут такое дело, что совершенно случайно у меня под рукой была развернута сборка Stable Diffusion (далее SD) и вот что из этого вышло…
Сперва нужно пояснить, почему меня вдруг сподвигло потратить n-ное количество времени на это. В чатике пролетело видео, мол, смотрите что нейросети умеют (gif вставить сюда не вышло, поэтому сделал раскадровку):

Это ведь чатик спектрум графики, поэтому сразу же возникает логичное предложение:

Узнаёте картиночки?




Короче, посмотрели, посмеялись и решили, что нейросеть неспособная совсем к спектруму. ОГО! Подумал я, хороший челендж, а у меня тут и стабильная диффузия под рукой!
У сборки SD от AUTOMATIC1111 есть прекрасный инструмент img2img — это такой подход к генерации изображения, который использует модель для синтеза на основе не только текстового запроса, но и исходного изображения. Также есть возможность составить список слов и уровней уверенности или предположений, которые описывают входное изображение (interrogation).
Соответственно, простейший подход сложился сам собой:
- даём на вход картинку со спектрума
- с помощью SD пытаемся получить описание того, что изображено (по мнению нейросети)
- дополняем, уточняем и исправляем запрос, при необходимости определяем веса для отдельных слов и понятий
- с помощью img2img и нового запроса генерируем новое изображение
- опционально подстраиваем веса (для пункта 1) и параметры генерации (для пункта 4)
- повторяем пока не получим удовлетворительный результат
Интересно, что некоторые картинки нейросеть довольно точно описывает, но генерирует подобие не всегда удачно, а для некоторых даёт описание с ошибками или уходит в зацикливание, но по этому же запросу довольно похоже генерирует новую картинку, а с исправлением запроса и совсем идеально. Т.е. нет такого, что нейросеть отлично распознала содержимое на входе и идеально сгенерировала новую картинку на выходе. Текстовый запрос всегда требует дополнения, доработки и перефразирования (с учетом того, как и какие запросы лучше всего нейросеть понимает). Например, описание точки съемки в запросе «photo shoot from bottom» работает хуже, чем «low angle photo» или просто «low angle».
Так вот, для чатика я сразу закинул несколько примеров того, что я назвал «ФАРШНАЗАД». На входе zx spectrum pixelart, на выходе либо фото, либо иллюстрация.
— А нейросеть-то могёт!





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


















—
На чём это всё генерировалось?
Как я уже упоминал, на десктопе стоит локальная сборка Stable diffusion Web UI от AUTOMATIC1111
Что нужно для установки SD?
В первую очередь — видеокарта с большим объемом памяти на борту, прежде всего это nvidia 16** 20** 30** 40**.
Будет ли работать на видеокартах от AMD?
Да, существуют сборки которые работают на Radeon, но медленнее и не очень стабильно, хотя стабильность — это не то слово и для варианта с nvidia.
А если нет достаточного мощной видеокарты?
Можно заставить работать SD и на CPU, но это если вы готовы долго и упорно ждать непонятных результатов, править одну цифру/слово и снова долго ждать.
А можно не на домашнем компьютере?
Можно. Но мне это не очень интересно и я этот момент особо не изучал. Как минимум есть Google collab, опять же есть возможность помучать не SD, а Midjourney через бот в дискорде. Ну и сейчас уже достаточно много онлайн решений, как бесплатных, так и условно бесплатных. По крайней мере можно попробовать и приобщиться.
А для чего вообще это всё, ну эти ваши «картинковые» нейросети?
Во-первых — это интересно. Во-вторых, сильно прокачивается навык составления/формулирования запросов (promt) к нейросети. В-третьих, это бесконечный и бездонный колодец референсных картинок по вашему желанию и в любой стилистике. В-четвертых, пятых, шестых и т.д. — это прогресс, с которым нужно дружить и уметь пользоваться.
А можно ли научить сразу генерировать в спектрум графику?
Можно в какой-то степени обучить и собрать свою модель. Вот на это уже нужны ресурсы и время. Для обучения, в отличие от генерации по готовой модели, нужны большие вычислительные ресурсы. Нужен (очень желательно) вычищенный и отлично размеченный датасет. Т.е. Textual inversion с готовой модели и сейчас может примерно предположить, что изображено на картинке и на основе этого обучать другую модель. Но, большинство моделей обучены на фотографических данных высокого разрешения (хотя и приводятся зачастую к размеру 512×512px для экономии видеопамяти), а вот в пиксели, да еще и в малом разрешении — это сложно. Даже если стандартный экран спектрума 256×192 привести к размеру 512×512 с лишним фоном получится без потерь, то дискретность пикселей все равно играет плохую роль. Попасть в клешинг модель идеально не сможет, как и в пиксельперфект линии скорее всего тоже не сможет. Все равно нужно будет пропускать через конвертер. Может быть получится чуточку удачнее, чем просто картинку с генерации любой моделью закинуть в конвертер, но точно не намного удачнее.
Если помните такой слайд перед началом Cafeparty`2022 (вручную добавлены лого и надписи)


Спектрум версия получена простым пробросом сгенерированной картинки через конвертер и вручную добавлена нижняя надпись.
Если нейросеть научится делать так, сниму шляпу перед моделью и тем кто её обучил :)
На данный момент знаю только об одной попытке обучения (пока не очень удачной) от Макса Мучкаева на датасете zxart (без текстуальной разметки я так понимаю). На результаты можно взглянуть в телеграм чатике Деда.


И что в пиксели нейросеть совсем не умеет?
Умеет. Есть и пикселизаторы и есть несколько моделей обученных на разных пиксельарт датасетах.
Я сам плотно этим не занимался пока и не изучал, но там качество вполне приличное.
И где что посмотреть\почитать по теме?
Wiki Stable-diffusion-webui
Большая инструкция по Stable Diffusion
Парочка статей на DTF как раз про локальные сборки NMKD и AUTOMATIC1111
Плейлист на YouTube по SD
Модели для нейросети брать тут — huggingface.co и тут — civitai.com.
Плейлист о нейросетях в дизайне от Olivio Sarikas на YouTube
Чат в Telegram «Генерируем Чат»
Огромнейшая база по самым разным нейронкам.
И еще одна большущая библиотека всевозможных AI-инструментов.
Ну а дальше искать в сети, пробовать и удивляться будущим, которое уже заглядывает к нам в дверь.
8 комментариев
Проще всего дела обстоят с крупными лицами, пейзажами, зарисовками зданий, крупными легко определяемыми предметами — машина, стул, окно, пистолет, нож.
1) Время (оно решается через более быструю видеокарту с бОльшим объемом памяти. Сейчас у нас карты на 12 Гб, скоро будут на 24 Гб.
2) Мороз должен напрячься. Надо прописывать теги ZXArt в PNG для экспорта.
3) Надо проставлять теги на ZXArt. Более того. Надо все русские теги конвертнуть в латинские на четком и внятном языке вероятного противника.
Для победы этого будет достаточно. Отдельная тема — датасет на полностью Ч/Б и датасет на 53с — последний вообще бомба, но нужны теги.
И да… вот откуда нападения мы не ждали. Можно генерить БК-графику, более того, ее даже УДОБНЕЕ генерить и учить. Такие вот дела.
То есть все это источник для референсов тоже предельно понятно. Вот классика emulate.su/2009/konferentsiya-razrabotchikov-kompyuternyh-igr-1979/ постараюсь добавить ее как видео сюда. Смотрите на русском там нормальный перевод. Момент, когда борода под глубокой Бугульмой начинает просто выдавать названия видеоигр. И сравните, как долго другие участники совещание выдавали свои мысли. А борода быстро. Вот он и есть нейросеть. Только нейросеть питается электричеством и работает так, что печени на аналогичное количество Бугульмы не хватит у нас всех вместе взятых. Соответственно, нейросеть не зло, но штука эта очень опасная для неподготовленного мозга. Если кто помнит историю Запилятора то там были детские шутки по сравнении с этими возможностями.
www.youtube.com/watch?v=T2PiUWW2S9c