Стабильная диффузия для самых маленьких. Или строим свою собственную ярмарку с хороводом и скоморохами

Волшебная сказка с лубочными картинками.

f360c63329f2c0785d3db049edac0c02.png

Далеко ли, близко ли, высоко ли, низко ли, а летает нонче в небе жар-птица павлин из самого из города Муничинска. И где перо она потеряет, там картинки лубочные множатся, да не на бересте, а на бумаге белёной, да все больше с девками грудастымя вида неблагонравного, да воинами суровыми из земель былинных. Вельми старательно те лубки выведены, хотя с перстами иногда и перебор случается. Смотрит народ на картинки те и только губами причмокивает, да крестятся православные на земные чудеса удивляючись.

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

А купцы-перекупы заморские, усладившись рисунками дивными, принялись ставить лавки на плошади. Будь ты вой или девица красная, да хоть кажний прохожий иль лапотник или даже дитё безответное, в лавке той на лубки ты подивишься или весть на перо то заветное. А добавишь коль денюжку малую, то пропустят и к духу из пёрышка и дозволят шепнуть ему ласково пару слов для тебя со значением. Да лубок со слов тех намалеванный, не отымут холопы на выходе.

Чудно в лавке той теплой и сказочной, да вот только варяги охранные перят взгляд свой и злой и прищуренный на купцов из лесов под Архангельском. Да все больше себе позволяючи начинают на ножны поглядывать, лишь кивка от старшого охранника, ждут чтобы вовсе прогнать их из города.

Дисклеймер: Не беспокойтесь. С Wednesday все в порядке. Пострадала только косичка и потом мы же с вами знаем что это не её кровь.

Для создания продвинутой артельной молотилки нам понадобится 8 перьев сокола, варенье из ромашек, две пчелы и половозрелый питон ростом не менее трёх аршин, 10 пядей и 6 вершков. Знатоки бают что не в чин гоняться за слишком матёрыми питонами и более 6–9 вершков в хвосте быть не должно. Если же отрок читающий сие и не охотник и не зверолов, то морёного питона можно взять вот в этом лабазе

https://www.python.org/downloads/release/python-3106/

Не забудьте пересчитать зубы у питона. Если вы и сами знатно улыбаетесь, то ищите чтобы было 64 зуба, а ежели улыбка ваша блёклая и неблестючая, то и 32 вам хватит.

Всё сие колдунство нужно сложить в футляр от гитары вот отсюда

https://gitforwindows.org/

Поскольку наша сказочка пишется для самых мусипусеньких мышевозюнчиков, предположим что мы находимся в среде windows 10 с админскими правами. По тем же соображениями мы не будем писать собственные скрипты на питоне, а воспользуемся готовым решением от AUTOMATIC 1111

Непосредственный конкурент stable-diffusion-webui от cmdr2 stable-diffusion-ui беднее по возможностям и хотя и у него есть некоторые плюсы, рассматривать в нашей сказочке мы его не будем.

Перво-наперво проверяем есть ли у нашей системы 16Гб, а у видеокарты 4Гб памяти и если есть, переходим ко второму хоралу святочных песнопений. Если памяти не хватает, то в принципе это не приговор, но тогда наша сказочка превратится в былину и этот вариант пока оставим за сараем.

Фигура вторая.

Ежели ура и с памятью все хорошо, устанавливаем гит и пайтон в формате инсталлера. Некоторые инструкции советуют поставить еще и взрослую Анаконду или ее дочку, но у меня и без лишних хвостатых все сработало. Ставить Python с установками по умолчанию, куда-то в аппдату я бы не стал. Поперек то заветам завещанным, часто отроками отвергаемым. Я б не стал гневать духов-хранителей и поставил бы в папку в отдельную — без пробелов куда-нибудь в C:\Python3\ . Кроме пути никаких особых настроек установщики не требуют, но не забудьте проверить галочку насчёт добавки Python в системный путь и перезагрузиться.

После перезагрузки нажимаем Win+R и вводим cmd. От админа запускать командную строку совершенно излишне.

Проверяем установки и говорим в командной строке

git -v

если git установлен правильно должно ругнуться номером версии и сказать что-то типа

git version 2.39.0.windows.2

после этого говорим

python -V

Если Python добавлен в системный путь, то он ответит номером версии типа

Python 3.10.6

В случае ошибок гит лучше переустановить, а пайтона можно оставить как есть — мы потом в конфиге путь к нему укажем.

Фигура третья.

Чудны дела заморские и перед началом установки интерфейса нужно позаботиться о модели. Предлагаю особо не замахиваться прямо со старта и не брать сразу 2.1 . Для тренировки вполне хватит какой-нибудь стандартной 1.5 модели. Забираем по ссылке файл v1–5-pruned-emaonly.ckpt и откладываем его пока в прохладное место. Еще нам наверняка понадобится файл vae-ft-mse-840000-ema-pruned.ckpt — возьмем и его тоже.

Прежде чем приступать к установке, нужно определиться со свободным местом на диске. Хотя на SSD дисках все шевелится, конечно, как-то побыстрее, но это не так чтобы уж прямо очень критично. Плюс ко всему, неизбежно руки будут тянуться скачивать все новые и новые модели (у меня сейчас вот только папка с моделями разрослась до 90Гиг) и всегда нужно рассчитывать что места будет потрачено очень много. Кроме того новые 2.1 модели скачивают в папку профайла на системном диске нужные им дополнительные файлы и она тоже может превысить гиг 5–10. А еще нежелательно выбирать диск с форматом отличным от NTFS иначе задолбаетесь потом говорить git config --global --add safe.directory для каждой папки после каждой ошибки.

Предположим что установка будет производиться на диск E: в папку Ai

возвращаемся в открытое окошко командной строки или открываем новое и говорим

E:

и

cd Ai

Дальше все по инструкции с гитхаба. Говорим

git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git

через пару минут в папке E:\Ai у нас появится папка stable-diffusion-webui

Не закрывая командное окошко, откроем ее в проводнике и найдем в ней файл webui-user.bat

Перед началом установки его нужно открыть в блокноте и отредактировать

Если на этапе проверки пайтона, он не нашелся в системном пути, то в третьей строке впишем полный путь и получится что-то типа

set PYTHON=С:\Python\python.exe

если пайтон нашелся, то эту строчку не трогаем. Шестую строку обязательно редактируем следующим образом

set COMMANDLINE_ARGS= --disable-safe-unpickle --no-half

здесь параметр disable-safe-unpickle разрешает загрузку небезопасных моделей, а no-half понадобится для свежих 2.1 моделей. Перед вызовом интерфейса не помешает обновить скрипты, поэтому последние 2 строчки должны выглядеть вот так

git pull
call webui.bat

Пока открыт блокнот, перетащим в его окошко еще и файл launch.py, хотя возможно нам повезет и редактировать его не понадобится. Сохраняем webui-user.bat и запускаем. Установка может занять прилично по времени и зависит от скорости вашего соединения. Давайте разберем две наиболее частые ошибки чтобы не отвлекаться на гугл.

  1. Вечно висит Installing torch and torchvision и больше ничего не происходит

    В этом случае все печально. Скорее всего у вас слишком древняя видеокарта. Если это Nvidia можно попытаться отдельно установить CUDA без установки драйвера, а потом скачать и поставить последний драйвер.

  2. Ошибка выглядит как-то так

    окно с ошибкой webui-user.batокно с ошибкой webui-user.bat

    Такое возникает если при скачивании одной из зависимостей (в данном случае это taming-transformers), она обновилась и ее хеш перестал совпадать с заданным в файле launch.py (не зря же мы его открывали). Чтобы победить ошибку заходим в папку со скаченным пакетом.

    У нас это будет D:\Ai\stable-diffusion-webui\repositories\taming-transformers говоря

    cd stable-diffusion-webui\repositories\taming-transformers

    путь можно скопировать или вбить вручную помогая кнопкой Tab и находясь в этой папке говорим

    git rev-parse --verify HEAD

    в результате в последней строке высветится хеш скаченного пакета

    В нашем случае это 3ba01b241669f5ade541ce990f7650a3b8f65318В нашем случае это 3ba01b241669f5ade541ce990f7650a3b8f65318

    Копируем хеш выделив его левой кнопкой мыши и щелкнув по выделению правой. И переходим в launch.py — находим в нем строчку

    taming_transformers_commit_hash = os.environ.get

    и прописываем в ней новый хеш

    c83817289895b763220a354acb66047a.png

    Сохраняем, закрываем окно с ошибкой и заново запускаем webui-user.bat

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

    Это уже практически ураЭто уже практически ура

Осталось переместить файл v1–5-pruned-emaonly.ckpt в папку E:\AI\stable-diffusion-webui\models\Stable-diffusion

а файл vae-ft-mse-840000-ema-pruned.ckpt в папку E:\AI\stable-diffusion-webui\models\VAE

и снова запустить webui-user.bat

Загрузка модели может занять довольно продолжительное время, но в результате увидим что-то типа

5e8adcec9073562830e9096d5847c2fa.png

Как видим на картинке, загрузка нашей модели заняла 57 секунд, запустился и работает вебсервер и он доступен по адресу http://127.0.0.1:7860

Фигура финальная.

Откроем браузер и вставим в строку адреса http://127.0.0.1:7860 чтобы открыть основной интерфейс WEBUI (имея в виду что в фаерфоксе глючит!)

f3a22d7e0c6d57d45f585bfc7d69ec4e.png

В верхнем селекте можно увидеть название выбранной модели, если их несколько, то там же можно переключить.

Sampling steps показывает сколько шагов будет делать скрипт во время генерации. Если число шагов увеличить, то время обработки увеличится. Считается что чем больше шагов, тем качественнее изображение. Мне больше всего нравится 30–40 шагов, но можно поставить хоть 100.

Width и Height определяют ширину и высоту сгенерированной картинки. Практически все 1.5 модели обучены именно на квадратах 512 на 512, но для удобоваримости лучше в зависимости от ситуации выбирать 512 на 768 (вертикальная картинка) или 768 на 512 (горизонтальная). Хотя конечно, можно выбрать любое значение, но чем дальше от 512, тем больше вероятность увидеть 2 головы или 15 человеческих пальцев у котенка.

Batch count показывает сколько картинок генерится за раз. Чтобы оценить размах мысли нейросети нужно минимум 16, а лучше 128, но это очень долго, процент брака будет немыслимым и вероятность что именно на 128-м шаге получится гениальная картинка минимальна. Поэтому чаще всего используют 4–6.

Batch size сколько процессов будет идти в параллель (у меня любые значение выше 1 приводят к необратимому многоручеству, но если у вас очень мощный комп, поэкспериментируйте).

CFG Scale — интересный параметр, который регулирует условное свободомыслие модели. Чем больше поставить, тем глубже в дебри машинной логики он будет погружаться и тем меньше будет обращать внимания на слова в запросе. Рекомендуют 7–10, но я иногда ставлю и 30 — местами получается интересно.

В принципе уже можно начинать играть с параметрами и словами в полях ввода, но сначала не помешает почитать о формате слов в запросе и понять зачем нужны скобки (на самом деле для усиления значимости части фраз) или даже двойные квадратные (для очень сильной значимости) и т.д. И ознакомиться с примерами удачных генераций где-нибудь на https://prompthero.com/stable-diffusion-prompts

Не стоит ожидать что у вас сразу начнут получаться такие художественные результаты (многие художники используют кастомные модели, тренируют свои и т.д.), но давайте попробуем сгенерить первую попавшуюся Эльзу.

Поле запроса (верхнее): Elsa, d & d, fantasy, intricate, elegant, highly detailed, digital painting, artstation, concept art, matte, sharp focus, illustration, hearthstone, art by artgerm and greg rutkowski and alphonse mucha, 8k

Поле отрицания (в нем мы перечисляем все что не хотим увидеть на картинке): deformed, cripple, ugly, additional arms, additional legs, additional head, two heads, multiple people, group of people

50 шагов, CFG Scale 11, 6 картинок в 1 поток. Нажимаем Generate и чтобы было не слишком скучно смотрим как идет процесс в командном окошке

3c95243804f5cdeca110279f3f917322.png

В результате Эльза конечно получилась, но не сказать чтобы прям супер-супер

b7d72789662689c2f0834fb7e6b57719.png

Покрупнее картинки можно посмотреть если покликать на превьюшки или в папке, куда WebUI все по умолчанию сохраняет — вон кнопка с желтенькой иконкой. Можно попробовать поставить галочку Restore Faces (рекомендую алгоритм CodeFormer — его можно выбрать в настройках). Пример его работы на картинке

03315b75d9f1c3c04b5a5d21b42a134d.png

Но и это помогает не особо. Давайте попробуем добавить к запросу слова frozen и smile, увеличить число шагов до 150, а число картинок до 40 чтобы было время сбегать попить чайку. Прямо вижу немой вопрос у вас в глазах после того как весь чай выпит, а ни одного дельного результата среди 40 картинок не нашлось. Самое лучшее что у меня нагенерило выглядит странновато

be93ba4104291611c2fab2770a4a8879.png

В взгляде написано «Как же так? Ведь должно было получиться намного лучше…». И тут мы уже вплотную подошли к проблеме правильному составления запросов. Но даже если использовать все возможности по максимуму, для разных целей будут нужны разные модели. Источников в сети множество, но тема сравнительно новая и часто бывает что накачав 70 гиг моделей почти без описания, через полчаса в них разочаровываешься и сносишь нафиг с диска. Хороший сайт по этой теме https://civitai.com/ — все модели там бесплатные, а для регистрации нужна только почта. Там живет одна из моих любимых моделей Moistmix. Она, конечно немного мультяшная и NSFW, но все равно давайте попробуем ее качнуть. Обратите внимания на селектор на кнопке скачать. Кроме основного файла moistmixV1_moistmixV1.safetensors (который конечно же нужно положить в папку E:\AI\stable-diffusion-webui\models\Stable-diffusion), автор озаботился еще и кастомным VAE файлом (а это явный признак качества), который нужно положить в папку E:\AI\stable-diffusion-webui\models\VAE

Для верности перезапустим консоль. Закроем консольное окошко и браузер и снова запустим webui-user.bat

По умолчанию подхватится последняя использованная модель и это большой минус webui. В том же ui от cmdr2 загрузка модели происходит в момент нажатия кнопки Generate, а здесь сначала грузится прошлая, потом мы в селекте выбираем другую и она перегружается. Обладателям огромных объемов памяти это не критично, но если комп сравнительно слабенький, то консоль webui-user.bat частенько падает при смене модели. Возможно старшие товарищи меня поправят и можно как-то не грузить модель при запуске, но я пока не придумал как. Но в любом случае давайте попробуем. После перезапуска в селекте у нас появились 2 модели

29ebffdf49686401fc9b5d820a3282e5.png

Выбираем мостмикс и повторяем запрос. В этот раз ограничимся 40 шагами и 6 картинками.

В результате получаем несколько более мультяшных вариаций типа.

90fe9787be21978c6f540f0046841ebf.png

но в целом, по-моему выглядит уже поприличнее даже без использования модификаторов в запросе. Кроме моделей WebUI (в отличие от просто ui) понимает еще и Textual Inversion текстовые модификаторы. Это такие маленькие файлы, которые нужно положить в папку E:\AI\stable-diffusion-webui\embeddings

На том же сайте есть несколько интересных модификаторов, например Империя.

Для его активации нужно опять перезагрузить систему закрыв консольное окошко и браузер и запустив заново. Если модификаторы загрузились, это будет видно

Отгадайте с каким модификатором создавалась обложка поста :)Отгадайте с каким модификатором создавалась обложка поста :)

Теперь оставляя тот же запрос, добавляем Style-Empire. В результате получается что-то вроде

370f75ddd85d7b1b96f029f500172b4a.png

И это из-за мелкого файлика весом в 10 кб!

Обратите внимание, что на странице скачивания моделей и модификаторов на картинках обычно присутствует значок i — если на него нажать, то отобразятся конкретные запросы с которыми была сгенерирована эта картинка.

На этом разрешите откланяться и уступить дорогу новому поколению оптимизаторов запросов (а оно, я уверен, будет). Экспериментируйте, двигайте слайдеры, срисовываете приемы у лучших и пусть на этом пути вас неизбежно настигнет удача :)

PS Напоследок тяжелый спойлер для тех кому интересно как Wednesday с первой картинки будет выглядеть в разном возрасте. По мнению нейросети конечно же:)

Textual inversion W3DDDN3SD4Y

© Habrahabr.ru