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



Уже не в первый раз на хайпе мы трогаем тему нейросетей. Впервые поглядывали в 2015 году в Нейроразминке, затем несколько раз тема поднималась в уютном чатике спектрум художников zxgfx в телеграме и однажды даже разговорчики вылились в небольшой перфоманс для DiHalt 2022 года, где несколько авторов рисовали «Нейрооленей» по референсам, которые любезно нагенерировала нейросеть от Сбера ruDALL-E Malevitch.

И вот, (в очередной нейросетевой приступ) в чатике возник вопрос, можно ли провернуть фарш назад, т.е. дать нейросети на вход пиксельарт картинку с zx spectrum и получить нечто, что уже не будет пиксельартом, но сюжетно будет очень близко напоминать оригинал.

Тут такое дело, что совершенно случайно у меня под рукой была развернута сборка Stable Diffusion (далее SD) и вот что из этого вышло…

Сперва нужно пояснить, почему меня вдруг сподвигло потратить n-ное количество времени на это. В чатике пролетело видео, мол, смотрите что нейросети умеют (gif вставить сюда не вышло, поэтому сделал раскадровку):



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



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






Короче, посмотрели, посмеялись и решили, что нейросеть неспособная совсем к спектруму. ОГО! Подумал я, хороший челендж, а у меня тут и стабильная диффузия под рукой!

У сборки SD от AUTOMATIC1111 есть прекрасный инструмент img2img — это такой подход к генерации изображения, который использует модель для синтеза на основе не только текстового запроса, но и исходного изображения. Также есть возможность составить список слов и уровней уверенности или предположений, которые описывают входное изображение (interrogation).

Соответственно, простейший подход сложился сам собой:
  1. даём на вход картинку со спектрума
  2. с помощью SD пытаемся получить описание того, что изображено (по мнению нейросети)
  3. дополняем, уточняем и исправляем запрос, при необходимости определяем веса для отдельных слов и понятий
  4. с помощью img2img и нового запроса генерируем новое изображение
  5. опционально подстраиваем веса (для пункта 1) и параметры генерации (для пункта 4)
  6. повторяем пока не получим удовлетворительный результат

Интересно, что некоторые картинки нейросеть довольно точно описывает, но генерирует подобие не всегда удачно, а для некоторых даёт описание с ошибками или уходит в зацикливание, но по этому же запросу довольно похоже генерирует новую картинку, а с исправлением запроса и совсем идеально. Т.е. нет такого, что нейросеть отлично распознала содержимое на входе и идеально сгенерировала новую картинку на выходе. Текстовый запрос всегда требует дополнения, доработки и перефразирования (с учетом того, как и какие запросы лучше всего нейросеть понимает). Например, описание точки съемки в запросе «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 комментариев

avatar
Отличная тема и интересные результаты, спасибо за затаскивание этого всего на спектрум.
avatar
Прекрасное. Было бы интересно посмотреть на всякие классические игровые заставки. Втч какой-нибудь кринж должен получится из заставок, типа PSSST и Atic Attac.
avatar
С заставками и прочим мелкопиксельным большая проблема т.к. нейросеть плохо распознает предмет\лицо\позу в несколько пикселей по контексту :) Та же картинка стилизованная, где рыцарь на коне в схватке с драконом и замком на заднем плане — уже непросто, хотя образы достаточно просто идентифицируются. Тут нужна предобученная модель на размеченном датасете, где к оригинальной картинке будет точное описание, что слева зеленый дракон с красными перепочатыми крыльями, рыцарь к копьем на белом коне и на заднем фоне белый замок…

Проще всего дела обстоят с крупными лицами, пейзажами, зарисовками зданий, крупными легко определяемыми предметами — машина, стул, окно, пистолет, нож.
avatar
вот именно поэтому 53c (ну и ручное обучение на которое у нас просто нет денег)
avatar
avatar
Дед вам так молвит… Для победы там всё уже есть. Нужно совсем чуток.
1) Время (оно решается через более быструю видеокарту с бОльшим объемом памяти. Сейчас у нас карты на 12 Гб, скоро будут на 24 Гб.
2) Мороз должен напрячься. Надо прописывать теги ZXArt в PNG для экспорта.
3) Надо проставлять теги на ZXArt. Более того. Надо все русские теги конвертнуть в латинские на четком и внятном языке вероятного противника.

Для победы этого будет достаточно. Отдельная тема — датасет на полностью Ч/Б и датасет на 53с — последний вообще бомба, но нужны теги.

И да… вот откуда нападения мы не ждали. Можно генерить БК-графику, более того, ее даже УДОБНЕЕ генерить и учить. Такие вот дела.
avatar
То с чего коллега начал называется img2img. Да, оно очень прикольное и круто заходит, но есть деталь: чтобы одно ZX-изображение превратить в другое все равно нужно обучение. Поэтому мы конкретно решаем именно эту задачу.

То есть все это источник для референсов тоже предельно понятно. Вот классика emulate.su/2009/konferentsiya-razrabotchikov-kompyuternyh-igr-1979/ постараюсь добавить ее как видео сюда. Смотрите на русском там нормальный перевод. Момент, когда борода под глубокой Бугульмой начинает просто выдавать названия видеоигр. И сравните, как долго другие участники совещание выдавали свои мысли. А борода быстро. Вот он и есть нейросеть. Только нейросеть питается электричеством и работает так, что печени на аналогичное количество Бугульмы не хватит у нас всех вместе взятых. Соответственно, нейросеть не зло, но штука эта очень опасная для неподготовленного мозга. Если кто помнит историю Запилятора то там были детские шутки по сравнении с этими возможностями.

www.youtube.com/watch?v=T2PiUWW2S9c
avatar
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.