Изучаем возможности Stable Diffusion, часть 2

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

Работа <a href="https://www.reddit.com/user/Gavmakes/" rel="nofollow noreferrer noopener" target="_blank">Gavmakes</a>. Запрос для генерации указан у пользователя на странице<br />
Работа Gavmakes. Запрос для генерации указан у пользователя на странице

0.Что нового?

За неполный месяц, что прошел с моего первого гайда, сообщество Stable Diffusion невероятно выросло как в качестве генерируемых изображений, так и в методах работы с нейросетью. Дошла до пика и пошла на спад любовь к Грегу Рутковски и Альфонсо Мухе, животным в броне; вошли в моду изображения разных химер и вставка портрета себя любимого куда можно и нельзя через методы Dreambooth и Textual Inversion.

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

Следующее достижение, до которого, судя по всему, осталось недолго - генерация экспортируемой 3D-модели. Уже появились первые открытые репозитории на базе Stable diffusion, которые с этим справляются. 3D-моделлерам тоже пора начинать думать, на какую сторону спора вставать - "Вау, удобное подспорье для повседневных задач" или "Опасно, многих выкинет из профессии".

Whocareswhoami и Ok_Entepreneur_5833 поняли, как повторить "стиль" Midjourney даже без дополнительного обучения. Надо всего лишь... сформировать свой запрос к Stable Diffuson как " {subject}, stunning, highly detailed, 8k, ornate, intricate, cinematic, dehazed, atmospheric, (oil painting:0.75), (splash art:0.75),(teal:0.2),(orange:0.2), (by Jeremy Mann:0.5), (by John Constable:0.1),(by El Greco:0.5),(acrylic paint:0.75). Вместо {subject} - ваш желаемый объект. Весовые коэффициенты могут по-разному задаваться в зависимости от вашей сборки. Не забывайте про ограничение в 75 понятий(токенов) на 1 запрос!

Версия нейросети Stable Diffusion 1.5 с исправленными лицами так и не вышла в широкий доступ, но сообщество уже приноровилось исправлять лица с помощью прогона через CodeFormer/GFPGAN. Корявые руки с лишними пальцами все еще остаются слабым местом базовой нейросетки.

1. Что будет в этом гайде?

Прошлый гайд был про простую в установке сборку от NMKD, которая на днях получила апгрейд до версии 1.5, обзавелась must-have функцией исключения лишних деталей изображения ("негативный запрос") и кучей улучшений качества жизни. Я все еще рекомендую начинать с нее, если не хочется возиться с самостоятельной установкой python, git и вы просто хотите понять базовые возможности, предоставляемые нейросетью.

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

В гайде буду рассматривать все на примере своей системы (Win10, Nvidia GTX1080) и запросов, на экспертность и чувство прекрасного не претендую. Буду рад любым дополнениям и исправлениям по содержимому, особенно от тех, кто понимает, что находится "под капотом" у методов.

Здесь не будет каких-либо сложно сделанных изображений в примерах, т.к цель - показать, как тот или иной аспект сборки поможет вам реализовать ваше виденье с помощью нейросети. Ну и самому освоить весь этот зоопарк инструментов :)

Если у вас Мак с M1 - есть гайд внутри самой сборки либо сборка InvokeAI (спасибо за уточнение, Arthur Netsvetaev !). Если у вас хорошая видюха от AMD - тоже есть гайд по установке (попробуйте и скажите, работает ли). На линуксе все и так должно идти концептуально по +- тем же шагам, что описаны у меня.

2. Установка

0) Ставим Python 3.10.6. Можно и выше, но автор сборки просит тогда не донимать вопросами вида "а почему у меня не работает". У меня самого стоит более свежая 3.10.7, полет нормальный.

Во время установки нужно отметить галочкой "Add Python to Path"

1) Ставим git. Будет МНОГО разных опций во время установки; не пугайтесь и оставляйте везде варианты по умолчанию, если не знаете, про что они.

Качайте этот установщик, если у вас 64-битная версия Windows<br />
Качайте этот установщик, если у вас 64-битная версия Windows

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

Вам нужна выделенная опция<br />
Вам нужна выделенная опция

Установили git-клиент - пора выкачать с гитхаба нужную сборку. Щелкните правой кнопкой на том месте, где хотите разместить сборку (весит она сама по себе без моделей всего 1.6 мб), нажмите Git Clone. В новом окне скопируйте в URL вот это - https://github.com/AUTOMATIC1111/stable-diffusion-webui.git ,при желании поменяйте название папки в строке Directory, нажмите OK.

Когда захотите обновить сборку (стоит делать каждые дня 2-3, автор невероятно продуктивен) - нажимаете правой кнопкой по папке, выбираете TortoiseGit- Pull, проверяете, что Remote Branch = "master", нажимаете Ок

2) Качаете саму нейросеть. Например, с файлообменника (без регистрации) или официального сайта (с регистрацией). Кидаете ее в папку models\StableDiffusion. Должно получиться так:

Изучаем возможности Stable Diffusion, часть 2

Почти все дополнительные нейросети - апскейлеры (повышают разрешение изображения) / исправители лиц выкачаются сами при первом их использовании, отдельно скачивать их не надо. Если у вас есть какой-то предпочтительный апскейлер на базе ESRGAN - можете закинуть его в папку models\ESRGAN.

3) Запускаем webui-user.bat в корневой папке, он сам выкачает все необходимые библиотеки. Первый запуск может занять довольно много времени. Когда все установится, вы увидите в командной строке надпись "Running on local URL: http:127.0.0.1:7860". Копируете адрес в свой любимый браузер и все готово!

Изучаем возможности Stable Diffusion, часть 2

2.5 Особенности установки на системы с недостатком видеопамяти и Nvidia16XX

Если у вас карта 16-ой серии или вам не хватает видеопамяти для генерации изображений, потребуется немного поправить запускаемый файл webui-user.bat.

Открываете его "Блокнотом" или другим редактором и вписываете в поле "set COMMANDLINE_ARGS=" нужные аргументы :

  • Для старших моделей 16-ой серии надо прописать --precision full --no-half . Может также потребоваться --medvram, если не будет хватать видеопамяти
  • Для других карт с 4 ГБ памяти и ниже вписываете --medvram. Если все еще жалуется, что не хватает памяти - добавляете --opt-split-attention. Если и это не помогло, пишите --lowvram --always-batch-cond-uncond --opt-split-attention
  • Ту же самую опцию --medvram можно использовать, если хочется сразу генерировать 1024*1024 изображения на картах с 6-8 ГБ памяти.

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

Пример настроек для владельцев 16XX карт<br />
Пример настроек для владельцев 16XX карт

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

3. Настройки

...и это меньше половины настроек.<br />
...и это меньше половины настроек.

Настроек очень много, но можно ничего не менять и переходить к 4 разделу сразу.

После внесения желаемых изменений нужно нажать сверху "Applу Settings" и, иногда, перезагрузить все приложение.

Если вам захочется разобраться, что делает каждая настройка:

1) Always save all generated images | grids - Если не боитесь забыть сохранить удачный вариант/хочется экономить место/лень потом чистить лишнее - убирайте галку. Тогда надо будет нажимать "Save" на нужные изображения/сохранять их средствами браузера. Имхо - сетку нагенерированных изображение (grid) хранить смысла мало, ее удобно только для предпросмотра использовать

2) File format for images | grids - По умолчанию стоит формат png. Пробовал сохранять в jpeg, pdf, tiff, gif, eps - работает. psd, raw - нет.

3) Images | Directory filename pattern - по какому принципу называть изображения или папки. По умолчанию стоит [seed]-[prompt_spaces]. Возможные варианты: любая комбинация из [steps], [cfg], [prompt], [prompt_spaces], [width], [height], [sampler], [seed], [model_hash], [prompt_words], [date], [model_hash], [date], [datetime], [job_timestamp]. Я себе для изображений поставил [seed]-[datetime], а все описания пусть сохраняются в текстовике.

4) Add extended info (seed, prompt) to filename when saving grid - добавлять ли какое-то особенное название к сетке изображений. По умолчанию они называются просто grid-xxxx, где xxxx- номер запроса

5) Do not save grids consisting of one picture - на самом деле, не только сохранять, но еще и создавать не будет сетки в этом случае

6) Grid row count; use -1 for autodetect and 0 for it to be same as batch size - сколько строк будет в сетке изображений. при -1 будет стараться сделать квадратную/прямоугольную сетку

7) Save text information about generation parameters as chunks to png files - будет зашивать информацию о параметрах генерации внутрь самого png изображения. Прочитать эту информацию потом можно будет через специальные программы-инспекторы либо вкладку "PNG Info" в самой сборке

Изучаем возможности Stable Diffusion, часть 2

8) Create a text file next to every image with generation parameters - очень важно включить, если вы хотите повторяемости своих результатов / возможности поделиться всеми настройками генерации с кем-то еще. У содержимого текстового файла нет ограничений на размер содержимого, а вот впихнуть все-все параметры в название изображения вряд-ли получится из-за базового ограничения в 256 символов на длину пути (куда входит и название файла) в Windows. Вы можете снять это ограничение у windows но мне кажется, что отдельный текстовый файл удобнее.

9) Save a copy of image before doing face restoration - стоит включить, если вы планируете включать исправление лиц всегда и везде, так как иногда после "исправления" становится хуже. Я бы просто рекомендовал делать исправление лиц только на отдельных изображения - вычислительные ресурсы сэкономите, как минимум.

10) Quality for saved jpeg images - актуально, если выбрали jpeg как способ сохранения. Чем ближе к 100, тем меньше артефактов и больше вес у изображения.

11) If PNG image is larger than 4MB or any dimension is larger than 4000, downscale and save copy as JPG - включайте, если вам по каким-то причинам нужно ограничение на максимальный размер файла в 4 мб.

12) Use original name for output filename during batch process in extras tab - влияет на название файлов с результатами, когда будете сразу несколько изображений через апскейлеры/ исправители лиц прогонять. С галкой у результата будет имя, как у оригинала, без нее - просто номер запроса

13) When using 'Save' button, only save a single selected image - с галкой будет сохранять только 1 изображение, без него - все, что получились в результате запроса. Обратите внимание, когда вы нажимаете "Save", изображения сохраняются не в папку по умолчанию (output/txt2img и прочие), а в папку log/images. Можно таким образом отдельно сохранять самые удачные, что б быстрее искать их потом.

14) Paths for saving - выбирайте директории для сохранения результатов каждого метода. Нюанс только 1 - если укажете что-то в "Output directory for images |grids ; if empty, defaults to three directories below" - будет сохранять все изображения в выбранную папку вне зависимости от метода генерации.

15) Saving to a directory - можете включить создание отдельных папок под результат каждого запроса. Структура возможных наименований подпапок такая же, что и у изображений ( пункт 3) ). Если выберете [promt_words] в структуре наименований - можно указать, сколько слов из запроса брать в название папки. Так можно объединять в папки изображения, у которых первые слова в ваших запросах совпадают. Удобно, так как часто с 1 идеей в запросе различаются последние слова, а по первым можно их группировать.

16) Upscaling. Основные опции тут связны с "Tiling" - разбиением изображения на множество мелких участков для их апскейла с их возможным наложением друг на друга. Все хорошо, но есть нюанс - я с лупой не увидел никаких различий при любых настройках тайлинга для любых апскейлоров. Возможно, баг текущей версии. Напишите в комментариях, если вы нашли разницу.

17) LDSR processing steps. Lower = faster . Апскейлер LDSR тяжеловесный и медленный. Результат получается отличный от остальных, он больше мелких деталей "додумывает", но при этом появляются артефактные участки (краснл-синие точки) . На моей карте каждый его шаг занимает примерно 4 секунды и что спустя 100, что спустя 200 шагов артефакты не исчезают.

18) Select which Real-ESRGAN models to show in the web UI. (Requires restart) - можно выбрать дополнительные специализированные апскейлеры, например для аниме. Если знаете, зачем они вам - включайте и перезагрузите приложение.

19) Upscaler for img2img - не обнаружил никакого эффекта, возможно баг.

Предлагаю вам сравнивать разные апскейлеры - приближайте простой пример изображения с мелким кружевом и волосами и поймите, что подходит вашей ситуации. Я для себя решил, что для большинства задач подойдет SwinIR, а для создания супер-детализированных волос и шерсти - LDSR. Если хочется и разрешение увеличить и размытие сразу сделать - ScuNET GAN

20) Face restoration model

Можно выбрать, какая из моделей исправления лиц будет применяться в методе txt2img при включенной галочке "Restore faces". Я опять топлю за их применение только в случае необходимости - через вкладку "Extra", в которой вы и так можете выбрать метод и настройки для улучшения лиц.

Часто встречается высказывания, что CodeFormer лучше подойдет для реалистичных изображений, а GFPGAN - для околоанимешных. Чем хуже оригинал, тем заметнее будет улучшение. На и так неплохих становится только хуже - смотрите пример:

21) VRAM usage polls per second during generation. Set to 0 to disable. - из названия кажется, что должно влияет на частоту оценки объема видеопамяти. По-идее большая частота позволит не пропустить какое-то пиковое значение нагрузки, но я не нашел пока сценария, когда это на что-то влияет в обычном применении сборки и оставил на 1 опросе в секунду

22) Always print all generation info to standard output - не увидел никакого эффекта на выдаваемую информацию ни в интерфейсе ни в текстовых файлах

23) Add a second progress bar to the console that shows progress for an entire job. - влияет на то, будет ли в консоли дополнительных прогресс-бар для подсчета ожидаемого времени на генерацию всех изображений. На браузерный интерфейс не влияет

24) Stable Diffusion checkpoint - выбор варианта модели. Вам в раскрывающемся списке будут доступны все модели, которые вы закинули в папку models\Stable-diffusion. Большой список моделей, которые уже кто-то обучил, есть вот здесь. Будьте осторожны, там не только безобидная модель для Вайфу, но и модели для фурри, фут-фетешизма и прочего непотребства.

25) Apply color correction to img2img results to match original colors и Save a copy of image before applying color correction to img2img results - должно делать общую гамму скорректированного изображения более похожей на оригинал, но в моих тестах с автокоррекцией обычно получается хуже, чем без нее. Поэтому включить отдельное сохранение результата без коррекции, мне кажется, разумно. Нюанс - изображение без коррекции не покажет в браузере, оно будет только в папке для сохранения с пометкой "-before-color-correction"

Пример img2img с выключенной и включенной коррекцией:

26) With img2img, do exactly the amount of steps the slider specifies (normally you'd do less with less denoising). - слегка меняет результаты img2img при одинаковых настройках числа шагов.. Разница непринципиальная, но если вам важна повторяемость результата - зафиксируйте настройку в каком-то положении.

27) Enable quantization in K samplers for sharper and cleaner results. This may change existing seeds. Requires restart to apply. - ни малейшего изменения результатов не обнаружил ни на одном семплере из сборки. Возможно, баг, который поправят.

28) Emphasis: use (text) to make model pay more attention to text and [text] to make it pay less attention - очень удобная функция для изменения важности (веса) отдельных слов в запросе. Не рекомендую убирать.

29) Filter NSFW content - если вы не хотите видеть обнаженку при случайном запросе - поставьте здесь галку. По умолчанию ее нет.

30) Allowed categories for random artists selection when using the Roll button - если будете пользоваться местной функцией "Мне повезет", можете добавить, будет ли она брать художников из выбранных списков. Какого художника куда отнесли можно посмотреть здесь

31) Interrogate Options - влияет на функцию CLIP Interrogate, которая вызывается в img2img.

  • Interrogate: keep models in VRAM - включайте, если у вас много видеопамяти и вы хотите, что б отрабатывало быстрее
  • Interrogate: use artists from artists.csv - использовать ли список художников по умолчанию. Если сделаете свой - отключайте
  • Interrogate: num_beams for BLIP - по описанию в вики - насколько детализованное описание будет без учета художников. Я не увидел никакой разницы
  • Interrogate: minimum/maximum description length - заствать нейросеть выдавать описание заданного размера. Точно имеет смысл задавать минимум, т.к без него описание будет слишком генерализованным. Но переборщите с минимумом - нейросеть просто будет повторять 1 и тот же признак в описаниии, пока требуемого объема не достигнет. Максимум имеет смысл просто поставить на 256, хуже описания от этого не станут.

32) Show show image creation progress every N sampling steps. Set 0 to disable. - полезная опция, которая покажет, как меняется изображение на каждом шаге. С учетом того, что с каждым шагом изображение может сильно поменяться композиционно, особенно для _a семплеров, отображение позволит понять, на каком шаге стоило остановиться. Минус - время на отработку запроса возрастает, и процесс отрисовки будет показываться только для первого изображения в batch (соответсвенно - хотите, что б показывало все - увеличиваете Batch count, а Batch size ставите 1)

33) Show grid in results for web и Do not show any images in results for web - показыать ли сетку из изображений и результаты вообще. И то и то достаточно полезно, особенно если вы генерите много изображений сразу

34) Add model hash to generation information - полезно, если вы используете разные модели, что б вспомнить потом, с помощью какой именно сделали изображение.

35) Enable full page image viewer - изображение в браузере становится кликабельным и увеличенного масштаба. По-умолчанию оно масштабируется, если на него нажать, но можно это отключить в "Show images zoomed in by default in full page image viewer". Show generation progress in window title - не увидел эффекта

36) Sampler parameters - можно выбрать, какие семплеры спрятать, что б глаза не мозолили и настроить условия работы части из них. Например, eta (noise multiplier) for ancestral samplers влияет на все семлеры с буквой "а", сильно меняя их стартовые условия, и, соответственно, результат. Эти настройки не сохраняются в описаниях генерации, поэтому, если вам важна повторяемость, зафиксируйте настройку 1 раз в каком-то положении.

Разные настройки sigma влияют на семплеры euler, heun и dpm2. Например, при sigma churn =1 и sigma noise =1, обычный euler выдает результат, аналогичный euler_a.

Смотрите пример влияния разных настроек сигмы на euler(Beautiful cat sprite on fire elemental,intricate detailed fur, flame, vivid colors,
Steps: 50, Sampler: Euler, CFG scale: 7, Seed: 1766758075, Size: 512x512, Model hash: 7460a6fa).

Мне больше всех нравятся варианты 0/0, 1/1.
Мне больше всех нравятся варианты 0/0, 1/1.

Влияние Sigma tmin на результат практически незаметно. Больше примеров можно посмотреть здесь

4. Возможности

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

Цифрами обозначены элементы в описании<br />
Цифрами обозначены элементы в описании

0) Выделение отдельных слов - теперь можно задавать отдельным элементам запроса большую/меньшую важность. Примерно как указать "хочу, что б точно было вот это, а вот то - как пойдет)

Универсальный вариант синтаксиса - (понятие:вес). Более простой - (поняти ) - умножит важность на 1.1, [понятие] - разделит на 1.1

Пример с одинаковым запросом по содержимому "Apple tree, snake, man and woman, bible, old painting) и параметрами генерации, но разными весами

1) Negative promt - на мой взгляд, самая важная функция для улучшения качества изображений. Как оказалось, сетке надо сказать не просто "Делай как надо", но и "Как не надо - не делай" и качество результата значительно вырастет. Просто вбиваете, каких элементов быть на изображении не должно - принципы запроса от противного такие же, что и для обычного. Можно дополнительно акцентировать внимание на отдельных элементах негативного запроса с помощью (). Пример с запросами ниже :

2) Create Style /Apply Style. Ускоряет набивание одних и тех же фраз в запросах. Вбиваете свой запрос, который как-то описывает желаемый вами повторяющийся стиль, нажимаете Create Style, придумываете ему имя. Появятся 2 дополнительные кнопки "Style 1", "Style 2". Вбиваете свой новый запрос, выбираете в одной или в обеих кнопках нужный вам стиль, нажимаете "Apply style". Стили добавятся к концу нового запроса.

Рядом еще расположены кнопки добавления случайного имени художника к запросу из списка artist.csv (см. Настройки - пункт 30), и распознавания настроек генерации. Кидаете в "Promt" всю обвязку запроса - sampler, разрешение, шаги и т.д, нажимаете на синюю кнопку с белой стрелкой и все эти параметры перейдут из запроса в их положенные части интерфейса. Удобно, когда хотите максимально повторить чей-то уже готовый и хорошо описанный запрос.

Помните про ограничение на 75 условных объектов (векторов). Под кнопками стиля идет счетчик для вашего запроса. Обновляется с небольшой задержкой

3) Restore Faces - применяет к результату одну из сетей, улучшающих качество лиц (см. Настройки - пункт 20). Лучше делать отдельно через раздел Extras

4) Tiling - делает изображение, все грани которого не содержат каких-то четких элементов, что позволяет поставить несколько таких изображений рядом друг с другом. Хорошо для создания текстур, наверное. Посмотреть, как будет выглядеть "плитка" из таких изображений, можно, нажав на готовое изображение и нажав на иконку плитки в верхнем левом углу.

Пример (Grass, by Tomas Kinkade Steps: 50, Sampler: Euler a, CFG scale: 7, Seed: 42, Size: 512x512, Model hash: 7460a6f):

5) Highres. fix - влияет на изображения больше 512*512, у которых встречается частая проблема с дублирование элементов в разных частях изображения . Сначала строит композицию на 512*512, затем увеличивает разрешение, а потом использует на этом всем img2img

Пример с 1 и тем же запросом :

При включенном highres. fix появляются 2 дополнительные настройки. Scale Latent - по описанию должно делать апскейл в латентном пространстве сразу. На практике - изображение становится четче, но немного меняется композиция. Denoising Strenght - насколько много шума положить поверх картинки низкого разрешения перед ее перерисовкой в большое. Меньше шума - меньше шанс на любые изменения, хоть позитивные, хоть негативные.

6) Кнопки включения рандомайзера и использования повторно seed из последнего запроса

7) Extra - здесь прячется возможность сделать смесь изображений из двух seed с разной степенью выраженности одного и другого. Тут снова будут лисы из предыдущего запроса в качестве примера, простите :

Изначальный seed- 42, изображение с ним (почти) - слева. Крайние справа - изображения с seed 44-47. <br />
Изначальный seed- 42, изображение с ним (почти) - слева. Крайние справа - изображения с seed 44-47.

Другая возможность - изменение высоты-ширины изображения без принципального изменения композиции. Сталкивались с тем, что голова/ноги в кадр не влезли, а если изменить размер - получается совсем другое изображение? Возможно, resize from вам поможет. Задаете сначала целевые высоту/ширину (например, надо сделать изображение чуть выше, что б голова влезла) , а в extras указываете из изображения какой высоты-ширины взять основную композицию. Пример работы функции:

8) Send to - отправить выделенное изображение на вход в:

  • базовый img2img
  • inpaint, где можно дорисовать что-нибудь с помощью маскиъ
  • extras, где можно сделать апскейл и поправить лица

9) Scripts - запускает последовательность действий со своими отдельными настройками. Скрипты можно спокойно писать самому или добавлять уже сделанные сообществом (многие доступны по ссылке). Помещаете .py файл в папку scripts и перезапускаете все приложение.

В базовую версию входит скрипт Promt Matrix, позволяющий быстро посмотреть, что будет если поменять отдельные слова в запросе. Разделяете слова через | . Все, что до первого | всегда будет в запросе, из остального сделает матрицу комбинаций

Пример - Sisters of Battle from Warhammer 40k , splash art, beautiful face, glowing angelic halo, white hair | in a flower garden| on a battlefield| dancing| preaching. Negative prompt: Miniatures, deformed, extra hands, bad, lackluster Steps: 25, Sampler: Euler a, CFG scale: 7, Seed: 42.0, Size: 512x512, Model hash: 7460a6fa

Получилось совсем не то, что ожидал, но принцип скрипта виден. Надо было использовать Waifu Diffusion для такого запроса) <br />
Получилось совсем не то, что ожидал, но принцип скрипта виден. Надо было использовать Waifu Diffusion для такого запроса)

Второй скрипт просто возьмет текст из файла вместо того, что у вас введено в поле Promt

Третий скрипт - X/Y plot, строит изображения с разными настройками. Выбираете 2 желаемые настройки и через запятую указываете нужны значения. Пример настроек для отрисовки матрицы с лисичками из 7-ого пункта:

Не будьте, как я - ставьте пробелы после запятой!<br />
Не будьте, как я - ставьте пробелы после запятой!

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

Изучаем возможности Stable Diffusion, часть 2

1) Interrogate - "Компьютер, что здесь нарисовано?". Позволяет лучше понять, как нейросетка называет сущности и стиль какого художника видит на картине. Загружаете изображение, нажимаете "Interrogate", ждете, пока загрузится специальная модель в несколько ГБ весом.

Пример - что видит нейросетка на картине Айвазовского "Радуга".

Айвазовский - на месте .Радуга - на месте. Лодка в окружении воды - на месте. Корабль на заднем фоне - на месте. Разве что людей не определило.<br />
Айвазовский - на месте .Радуга - на месте. Лодка в окружении воды - на месте. Корабль на заднем фоне - на месте. Разве что людей не определило.

2) Inpaint

Позволяет нанести на участок изображения слой-маску и сгенерировать что-то только на нем, не затрагивая остальной рисунок. Можно инвертировать - рисовать везде, кроме замаскированного слоя (Inpaint not masked) . Можно загружать изображение с готовой маской, сделанной где-то еще (Upload mask) , можно нарисовать в браузере самому. Края маски можно размывать через Mask blur, для более плавного перехода в основное изображение

Надо определиться с тем, что будет под маской на начало генерации - гамма изображения (fill), оригинальное изображение, цветовой шум или вообще нули (latent noise/ nothing). Рекомендую пробовать разные варианты в каждой ситуации, сходу не получается сказать, что какой-то лучше.

Если у вас изображение с 1 разрешением, а маску хочется нарисовать в другом - можно включить Inpaint at full resolution и уточнить границы изображения для него

Пример - хотим добавить капитану Джеку Воробью попугая.

3) Just resize, Crop and resize, Resize and fill - опции на случай, если вы хотите менять разрешение в новом изображении. В Just resize может поехать композиция, если целевое разрешение не квадратное. Рискуете неожиданно получить широкого Фила Спенсера. В Crop and resize - выкинет все выступающие части, в Resize and Fill - заполнит гаммой изображения.

Актуально пробовать разные варианты, если хотите делать неквадратные результаты.

4) Batch img2Img - берет все изображения в одной папке и применяет к каждой img2img, кладет в заранее указанную целевую папку. Взяли все пиксельные изображения из старой игры - сложили в одну папку - поставили этот скрипт на всю ночь - с утра смотрите результаты - выкладывете в соцсети - PROFIT!

5) Скрипты

img2img alternative test - меняем только часть изображения по текстовому описанию. Скрипт сложный и результаты не очень стабильные, будьте к этому готовы.Я очень рекомендую следовать шагам из wiki , за исключением CFG Scale. У меня он начал хоть как-то менять результат только от СFG 4 и выше.

Пример результата:

Loopback - прогнать 1 и то же изображение через img2img несколько раз. Можно задавать прогрессивную силу изменений на каждом шаге (Denoising strength change factor). При 1 - меняем с одинаковой силой на каждом шаге. Меньше 1 - изменения с каждым последующим шагом будут слабее и наоборот при больше 1.

На втором шаге явно стоило остановиться. А может и на этапе идеи.<br />
На втором шаге явно стоило остановиться. А может и на этапе идеи.

Outpainting - расширяет изображения с выбранных сторон согласно запросу. Можно выбрать произвольные стороны изображения для дорисовки, как 1, так и все сразу. Рекомендуется поставить семплер Euler_a, 80-100 шагов и Denoising strength: 0.8. Можно выставить ширину полосы для дорисовки( в пискелях), будет ли меньше четких деталей по краям и вариативность цвета относительно исходного участка. Запрос на то, что должно быть в этих дорисованных частях, все равно нужен.

Пример:

SD Upscale - повышает разрешение в два раза средствами самой нейросети. Разбивает изображение на много перекрывающихся квадратов (степень перекрытыя настраивается) и повышает разрешение каждого квадрата, а затем сшивает их вместе. Плюсы - можно сделать очень большое разрешение даже на средней видеокарте (я делал до 8 к) . Минусы - велик шанс появления лишних деталей, мозаики вместо цельного изображения и очень большое время на апскейл.

Вкладка Extras - здесь сидят апскейлеры и улучшатели лиц.

Изучаем возможности Stable Diffusion, часть 2

1) Resize - настройка множителя для итогового размера изображения, применяется в Upscaler 1. Примеры работ разных апскейлеров можно посмотреть в описании настроек (пункт 19)

2) Upscaler 2 не будет увеличивать разрешение, но может добавить дополнительных деталей/сгладить лишние. Не забудьте тогда выставить Upscaler 2 visibility поближе к 1

3) GFPGAN visibility и Codeformer visibility - улучшают лица, каждая по-своему. Codeformer хорошо делает реалистичную кожу лица, но плохо исправляет взгляд. GFPGAN исправляет взгляд, но лица делает как под тонной косметики. Можно комбинировать для лучшего эффекта. Примеры можно посмотреть в описании настроек (пункт 20)

Обратите внимание, у Codeformer weight, который отвечает за силу эффекта, инвертирована шкала - чем ближе к 0, тем сильнее эффект.

4) Batch Process - можно применить одинаковые настройки апскейла и исправления лиц сразу ко всем выбранным изображениям.

Вкладка Сheckpoint merger отвечает за возможность объединить две модели в 1. Например, можно сделать модель, которая представляет собой нечто среднее между стандратной Stable Diffusion и Waifu Diffusion - в результе будет рисовать лица, которые обладают только частично анимешными чертами

Отрабатывает запрос на объединение моделей очень быстро. Чем больше будет появляться обученных моделей, тем полезнее будет эта вкладка :)

Изучаем возможности Stable Diffusion, часть 2

1) Interpolation Amount - насколько итоговая модель будет тяготеть к стилю первой или второй. При 0.5 - возьмет поровну. При 0 - только от второй модели, при 1 - только от первой.

2) Interpolation Method - как именно объединять модели - взвешенной суммой с учетом Interpolation Amount или через функцию- сигмоид. По-идее, чем дальше от центра, тем больше будут видны изменения между методами интерполяции, при 0.5 они идентичны.

3) Safe as float16 сокращает вес файла с моделью в 2 раза ценой небольшой потери в точности.

Примеры одного запроса ( Portrait of a beautiful young woman with blue eyes in a flower field. Negative prompt: bad, deformed, lackluster Steps: 20, Sampler: Euler a, CFG scale: 7, Seed: 42, Size: 512x512) в разных моделях:

Вкладка Textual Inversion позволяет дообучить модель конкретному стилю или персонажу,

Пример настроек для обучения сети персонажу<br />
Пример настроек для обучения сети персонажу

Если я правильно понимаю, при textual inversion нейросеть не запоминает новые фото, но она понимает, что новое понятие, которому мы хотите ее обучить, выглядит как нечто среднее между уже известными ей ("учит эмбеддинг") . Поэтому точного повторения ваших фото этим методом не получится, но что-то вроде стиля сеть выучит.

Последовательность действий:

1) Как-то называем наше понятие. Этим словом вы потом будете вызывать результаты после дообучения

2) Initialization text - c какого ближайшего понятия стартовать обучение.

3) Number of vectors per token - насколько сложным получится новое понятие. Чем больше здесь значение, тем больше примеров потребуется для обучения и тем меньше места останется на весь запрос, когда будете его вызывать.

Задаете эти параметры на свое усмотрение и нажимаете "create" - создастся пустой файл с эмбеддингом

4) Source directory - вписываете путь до папки с всеми нужными изображениями. Изображения могут быть во всех форматах, которые читает сборка (см. Настройки, пункт 2. Webp тоже читает), ограничений на размер на этом этапе тоже нет

5) Destination directory -путь, по которому складывать результаты после предобработки. Этот же путь лучше всего прописать в Dataset directory чуть ниже

6) Flip - делать зеркальные копии изображений. Бесплатное увеличение обучающей выборки!) Split into... - разбивать большие изображения на 512*512 куски. Add caption - прогонять их через Interrogate метод (может быть полезно для лучшего обучению стилю конкретного художника)

Выбрали желаемые опции - нажали Preprocess.

Я рекомендую после этого проверил результаты, т.к могло обрезать изображения так, что на них желаемого объекта почти не видно

7) Embedding - выбираете тот файл, который создался на 3-ем этапе

8) Log directory - куда скаладывать промежуточные результаты обучения

9)Prompt template file - выбрать текстовый файл, в котором лежат типичные запросы, которые будет использовать система при обучении. Для конкретных объектов/персонажей - выбирайте в конце пути subject.txt. Для повторения чьего-то стиля - style.txt. Учтите, что во втором случае у ваших обучающих файлов название должно описывать содержимое каждого изображения (слова разделять через пробел) . Если лень вписывать самому - надейтесь на "Add caption"

10) Learning Rate - насколько быстро делать обучение (смещение на каждом шаге) . Поставите слишком много - рискуете "сломать" эмбеддинг, в консоли выпадет ошибка. Я оставил 0.005.

10) Max steps - насколько долго учить нейросеть ( в шагах). В моем случае разница между 500 и 5000 шагов составила 3%. (0.14 и 0.11). По - умолчанию стоит 100000, это избыточно, как мне кажется.

При таком Learning rate и 5000 шагов система учила эмбеддинг полтора часа.

Save a copy - делать ли копии промежуточных результатов обучения эмбеддинга, на случай внезапного выключения приложения. Тогда при повторном запуске обучение продолжится с последней копии.

Пример с и без textual inversion и одиним из исходных изображений(Инь из Darker than Black):

Итог: бело-черно-фиолетовую гамму изображения ухватило, анимешность и очертания +- ухватило, но до идеала далеко.

5. Заключение

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

Жду ваших результатов в ленте на DTF! Делитесь своими запросами и параметрами генерации, это позволит увеличить уровень изображений всем участникам.

Если остаются вопросы, что-то не получается - пишите в комментарии, будем вместе разбираться.

584
342 комментария
1000 ₽

Благодарю за отличное руководство!

5
Ответить
300 ₽
4
Ответить
300 ₽

От души душевно в душу,
Шаурмы тебе покушать...

3
Ответить