Погружаемся в дебри Stable Diffusion, часть 3

Лонг для тех, кто смог отвлечься от генерации красивых барышень и хочет сделать с помощью нейросети что-то еще. Разбор Hypernetwok, Dreambooth и прочих новшеств.

"Lofi nuclear war to relax and study to". Работа <a href="https://api.dtf.ru/v2.8/redirect?to=https%3A%2F%2Fwww.reddit.com%2Fuser%2Falexiuss%2F&postId=1429401" rel="nofollow noreferrer noopener" target="_blank">alexiuss</a><br />
"Lofi nuclear war to relax and study to". Работа alexiuss

Оглавление

Самые полезные части:

0. Что в этом гайде?

От моего прошлого лонга по Stable Duffusion на сборке AUTOMATIC1111 прошел месяц, а значит самое время рассказать вам о том, что происходит в сообществе, какие новые фичи для генерации изображений появились и как вы можете использовать их для воплощения своих идей.

Если вы открыли пост случайно - рекомендую сначала почитать мои предыдущие гайды (по простой сборке от NMKD или по более сложной от Automatic1111) и погенерить изображений себе на радость. Смотреть этот лонг дальше раздела "Что нового" без хоть какого-то своего опыта работы с Stable Diffusion смысла немного. Разве что сразу нырять в комментарии и дискуссию про искусство в эру нейросетей разводить, но с этим и так неплохо справляются в этом посте и комментариях к нему.

Как и в прошлый раз - описываю все на примере сборки Automatic1111, Nvidia GTX1080 и своих запросов, на экспертность и наличие вкуса не претендую.

1. Что нового в сообществе?

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

1) Утекла в сеть дообученная модель от платного сервиса novelAI, неплохо рисующая анимешных персонажей. На днях стала не так актуальна, так как появилась модель для анимешников еще лучше - Anything V3

2) Автора самой популярной сборки - Automatic1111 - забанили в дискорде Stability-AI за то, что взял себе что-то из кода novelAI. Он отвечал, что наоборот - стырили у него. Независимое мини- расследование утверждает, что обе стороны взяли код из одного и того же опен-сорс репозитория.

"Разработчик опен-сорса, когда его код кому-то пригодился". Img2img с Chad-yes мема. Portrait of beautiful blonde man , blonde beard, blue eyes, black t-shirt, photorealistic, ( matrix code as a scene:1.2) by Agnes Cecile and Charlie Bowater<br />
"Разработчик опен-сорса, когда его код кому-то пригодился". Img2img с Chad-yes мема. Portrait of beautiful blonde man , blonde beard, blue eyes, black t-shirt, photorealistic, ( matrix code as a scene:1.2) by Agnes Cecile and Charlie Bowater

3) Stability-AI, создатели Stable Diffusion подняли 100 млн $ инвестиций и стали компанией - "единорогом" (оцениваются более чем в 1 млрд $).

4) Stability-AI получила админский доступ к крупнейшему реддит - сообществу Stable Diffusion , после чего выперло оттуда всех старых модераторов и поставило сотрудников своей компании вместо них. Начали тереть все темы, связанные с Automatic1111 и вопросами *какого черта происходит?*. Из-за этого стали быстро появляться новые альтернативные сообщества, вроде sdforal; посыпались обвинения *проклятые капиталисты захватывают open-source*, *контора-сами-знаете-кого* в сторону Stability-AI.

5) Глядя на стремительно падающий имидж компании, Emad Mostaque, глава Stability-AI, принес публичные извинения забаненному, а его новый глава по стратегии восстановил всех старых модераторов в правах и пообещал, что сообщество останется независимым. Ситуация улеглась, сообщество бухтеть перестало, все временно довольны.

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

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

6) Все больше опытных художников понимает ценность SD (и, конечно же, опасность) как еще одного инструмента в арсенале - откровения 1, 2, 3, 4, сравнивая нынешнее время для профессии с появлением на рынке фотошопа. Самые крутые дообучают модели на своих же собственных работах и имеют с этого профит в виде ускорения процесса получения отличного результата для продажи/выполнения проекта. Но больше стало и сопротивления от площадок для размещения изображений, массово убирающих изображения, у которых написано, что они сделаны при помощи ИИ. Самый громкий последний случай - ShutterStock, ввел у себя свой собственный генератор изображений на основе DALL-E и запретил все загружаемые пользователями изображения, сделанные с использованием ИИ.

7) Бюро авторских прав США в глубоких раздумьях, кому же принадлежат права на сгенерированные изображения. Диванные эксперты-пессимисты ожидают принятия решения, что изображения от ИИ сразу становятся публичным достоянием, как в случае с изображениями от дельфинов/слонов/обезьян.

8) Nvidia присоединилась к хайпу нейросетей-диффузоров, выпустив демонстрацию своей сетки eDiffi . Судя по демо - новая нейросетка в разы лучше понимает отношения между объектами за счет введения дополнительной нейросети T5, анализирующей текст. Генерировать сложные по содержанию изображения с ней должно быть намного легче. Приятный бонус - читаемые надписи на картинке-результате. Когда сетка станет доступна и на каких условиях - неизвестно. Не удивлюсь, если её на какое-то время привяжут к профессиональным картам/4090/ облачным сервисам компании. Диванные эксперты считают, что быстро прикрутить T5 к Stable Diffusion не выйдет без обучения новой нейросети, но посмотрим, что скажут создатели - StabilityAI.

9) "Пока ты рисуешь анимешных вайфу - Midjourney качается!". Midjourney получил крупное обновление v4, которое сильно повысило качество генерируемых лиц, рук, не так сильно - понимание композиции и добавило фишек вроде "Remix", результаты которой уже в вашей ленте на DTF. Сделать стиль как у v4 Stable Diffusion может без особых проблем, уже даже появились дообученные модели для этого , но общее качество изображений и понимание запроса так просто не повысить.

10) Появились полезные ресурсы для новичков, разжевывающие, как составлять хорошие запросы к нейросети:

  • https://publicprompts.art/ - небольшой (пока) сборник из дообученных моделей и удачных "стилей".
  • https://openart.ai/promptbook - презентация на 100+ страниц с понятными описаниями, какими словами генерировать разные стили. Рекомендую пробежаться даже тем, кто уже сгенерировал 10к+ изображений, есть нестандартные вещи.
  • https://www.reddit.com/r/sdnsfw/comments/ylo4eh/huge_list_of_sexy_tested_photorealism_keywords/ - отличный гайд для тех, кто хочет генерировать изображения с красивыми людьми. В этом паблике почти все изображения - NSFW, будьте осторожны.
  • В urania.ai -теперь на сайте список из 1,833 художников/фотографов, которых *знает* Stable Diffusion 1.4 с примерами результатов. Отсортировано по числу изображений, которые были доступны нейросети для тренировки
"Куда ты смотришь, Нео из 30-ых?". Пробую <a href="https://api.dtf.ru/v2.8/redirect?to=https%3A%2F%2Fwww.reddit.com%2Fr%2Fsdnsfw%2Fcomments%2Fylo4eh%2Fhuge_list_of_sexy_tested_photorealism_keywords%2F&postId=1429401" rel="nofollow noreferrer noopener" target="_blank">sexy-гайд</a>. Запрос Redhead bombshell woman, beautiful detailed face, onlyfans, green eyes, curly windblown hair, hips, Cinched, revealing red dress, in a crowded street, view from behind, by Slim Aarons<br />
"Куда ты смотришь, Нео из 30-ых?". Пробую sexy-гайд. Запрос Redhead bombshell woman, beautiful detailed face, onlyfans, green eyes, curly windblown hair, hips, Cinched, revealing red dress, in a crowded street, view from behind, by Slim Aarons

10) В публичный доступ выложили официальную модель новой версии 1.5. Кардинального улучшения от предыдущей версии не заметно. Люди стали рисоваться чуть лучше, стили передаются чуть хуже. Следом за ней выложили 1.5 - inpainting, которая лучше работает с модификацией отдельных участков изображения. Теперь она - выбор по-умолчанию для добавления/изменения чего-либо с помощью метода inpainting и img2img.

11) Обновилась версия сборки NMKD до 1.7.0, которую я все еще рекомендую для первого ознакомления с Stable Diffusion из-за простоты установки и интерфейса, в котором глаза не разбегаются. Из нового - в версии улучшена поддержка работы с разрешениями выше 512*512 и новых VAE (о них - ниже в гайде), отдельный интерфейс под негативные запросы, отдельный запуск апскейлинга и восстановления лиц. Мой гайд по этой сборке слегка устарел, но если запутаетесь в установке - начните с него.

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

13) Для Apple вышло приложение, которое позволяет запускать Stable Diffusion на Iphone 11 и выше прямо в телефоне без всякого веб-клиента. Долго (минута на изображение), зато ограничений по сети никаких.

2. Новые фичи и настройки

Если у вас нет какой-то фичи/настройки - обновите свою сборку Automatic1111, сделав git-pull или выкачав новую версию с репозитория напрямую.

0) Запуск на процессоре. Если видеокарты подходящей нет совсем, а счастья хочется - В webui-user. bat, по которому обычно запускаете, нужно прописать

set COMMANDLINE_ARGS=--precision full --no-half --use-cpu all --skip-torch-cuda-test

set CUDA_VISIBLE_DEVICES=-1

Не забудьте сохранить изменения.

Генерировать будет медленно, 3-5 минуты на одно изображение 512*512, плюс некоторые продвинутые методы могут не работать совсем. Но зато никакой привязки к вендору видеокарт!

1) Xformers. Способ ускорить генерацию изображений в том случае, когда у вас видеокарта от Nvidia на архитектурах Pascal (10-ая серия) , Turing (16-ая и 20-ая серии), Ampere (30XX), Lovelace (40XX) или Hopper(GH100). По описанию скорость генерации 1 изображения должна возрастать до 2х раз, но в некоторых случаях изображения становятся хуже и не получается повторять результаты с идентичными настройками.

Чтобы активировать надо прописать в webui-user. bat:

set COMMANDLINE_ARGS=--xformers

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

Вот так выглядит прописывание дополнительных параметров запуска<br />
Вот так выглядит прописывание дополнительных параметров запуска

Весь список доступных аргументов есть вот тут.

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

В моем случае среднее время на генерацию изображения с Euler_a, 20 шагами и показыванием промежуточных результатов раз в 5 изображений изменилось с 12.55 с. до 11.91 с. Эффект есть, но в моих обычных условиях он пренебрежительно мал. Для DDIM и 100 шагов результат - 54 и 50 секунд. Разрыв растет, но не сказать, что очень быстро.

Я в итоге отключил, чтобы не ловить лишних ошибок. Если у вас вышел большой прирост скорости - напишите в комментарии.

2) VAE. Появилась возможность заменить дефолтный Variational Autoencoder - систему, которая разжимает-сжимает изображения. На практике - с новым VAE в img2img чуть-чуть лучше глаза, чуть лучше тени и гамма, по сравнению с старой версией. Но в 90% случаев надо с лупой выискивать разницу.

Для установки - скачиваете и закидываете новый VAE в папку models/VAE. В вкладке "Settings" выбираете новый VAE вот тут:

Не забываем сохранять изменения по кнопке "Apply settings"!<br />
Не забываем сохранять изменения по кнопке "Apply settings"!

Появятся и свои VAE под отдельные дообученные модели (лучше знающие, как сжимать-разжимать именно анимешные изображения, например), но пока их мало.

Сравнение результатов:

3) Inpainting conditioning mask strength - очень мощная настройка для новых "inpainting" моделей, которая определяет, насколько будет сохраняться композиция изображения в методах img2img и inpainting. 0 - композиция почти такая же даже при высоком denoising strength, 1 - нейросетка почти забивает на композицию (вариант по умолчанию). Если ваши изменения небольшие и вы хотите, чтобы оригинал хорошо узнавался - ставьте 0.

Пример с разными настройками conditioning mask/denoising strength:

"This is really fine". Запрос -  Dog sitting on a chair in a room full of flowers and butterflies, table with a cup of tea,  by Mark Keathley and Armand Guillaumin; негативный запрос - fire, smoke, fog. Модель sd-1.5-inpainting. Смотрите на картину в рамке<br />
"This is really fine". Запрос -  Dog sitting on a chair in a room full of flowers and butterflies, table with a cup of tea, by Mark Keathley and Armand Guillaumin; негативный запрос - fire, smoke, fog. Модель sd-1.5-inpainting. Смотрите на картину в рамке

4) Increase coherency by padding from the last comma within n tokens when using more than 75 tokens - настройка для тех, у кого больше 75 слов-токенов в запросе и кто отделяет части запроса запятыми. Если вы превысили лимит - выкинет не только не влезший в запрос токен, но и все те, что шли до последней запятой. Насколько далеко от края ищет последнюю запятую - настраиваемо.

Условный пример - вы пишете запрос *..(70 каких-то слов-токенов)... цвета, изящные руки в кожаных перчатках *. По-умолчанию выкинет только * перчатках*. С этой настройкой - *изящные руки в кожаных перчатках*.

5) Stop At last layers of CLIP model - влияет на то, через сколько слоев текстовой нейросетки - CLIP пройдет ваш запрос. Чем больше слайдер - тем меньше слоев. Результаты зависят от того, как учили отдельные модели. Например, утекшую нейросеть NovelAI учили без последнего слоя, соответственно, настройка Stop At last layers of CLIP model = 2 должна показывать лучшие результаты. После 5 выкинутых слоев у большинства моделей полностью теряется связь с исходным запросом.

Пример одного изображения с разным числом выкинутых слоев нейросети в разных моделях. Какие модели были проверены (сверху-вниз):

  • Stable Diffusion v.1.5-inpainting
  • NovelAI
  • Waifu Diffusion v.1.3
  • Stable Diffusion v.1.4
  • Stable Diffusion v.1.5
"Пандария наносит ответный удар". Large Panda as shaolin monk sith, holding a (lightsaber:1.1), standing, by Brooke Shaden and Ohara Koson. Negative prompt: bad, deformed, extra hands, lackluster<br />
"Пандария наносит ответный удар". Large Panda as shaolin monk sith, holding a (lightsaber:1.1), standing, by Brooke Shaden and Ohara Koson. Negative prompt: bad, deformed, extra hands, lackluster

5) Localization. Добавлена поддержка разных языков. Русский перевод сделан на весьма достойном уровне, переводчику - респект! Если вам комфортнее работать с русским интерфейсом и вам не нужно/не парит переводить термины туда-сюда для поиска информации - ставьте смело.

6) Eta noise - настройки для семлеров DDIM либо имеющих литеру "a" в названии. Добавляет незначительную вариативность к изображению, однозначно сказать, что какая-то настройка лучше не выйдет. Оптимальный вариант использования, как мне кажется - нашли изображение, которое вам уже нравится и прогнали через скрипт "X/Y plot" с разными настройками Eta noise.

"Правильный каст на роль императора человечества". Основа запроса - paiting of Henry Cavill as emperor in golden spacemarine power armor and (laurel wreath:1.1),  detailed portrait, long curly black hair<br />
"Правильный каст на роль императора человечества". Основа запроса - paiting of Henry Cavill as emperor in golden spacemarine power armor and (laurel wreath:1.1), detailed portrait, long curly black hair

6) DeepDanbooru - добавили альтернативный способ в метод interrogate/ разметку изображений для нейросетей, который натренирован распознавать подвиды анимешных дам. Включается через webui-user.bat

set COMMANDLINE_ARGS= --deepdanbooru

При первом включении будет достаточно долго скачиваться/ устанавливаться.

DeepDanbooru развешивает картинке теги, которые представлены на сайте Danbooru. Сайт огромный и старый, персонажей там представлено полно, теги есть на любой вкус, извращенный и не очень. Можно задать порог уверенности нейросети в своих выводах, через настройку "Interrogate: deepbooru score threshold" - чем меньше порог - тем больше тегов выдаст. Теги можно попросить отсортировать по алфавиту (deepbooru sort alphabetically)

Во кладке img2img появится кнопка "Interrogate DeepBooru". Нажмете ее - в поле запроса появятся предполагаемые теги.

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

Вполне себе правильно распознает Курису из Steins-gate даже в таком шакальном качестве. <br />
Вполне себе правильно распознает Курису из Steins-gate даже в таком шакальном качестве.

7) Hypernetworks - новый вариант дообучения сети. Для тех, кто хочет понять, как они устроены - нашел неплохую статью. Коротко - в методе Textual Inversion из прошлого гайда вы не добавляете новых изображений, вы делаете новый эмбеддинг (вектор/токен/слово) , который указывает на то, между каким понятиями лежит желаемое новое. Например, при обучении textual inversion изображениям Карлсона-который-живет-на-крыше новый эмбеддинг будет указывать нейросети на нечто среднее между рыжим мужиком, вареньем и вентилятором. Но самого Карлсона сетка так и не запомнит, нет у нее такой исходной картинки (Дисклеймер - может и есть, но я не нашел, одни хоккеисты на крыше вылезают). Т.е textual inversion хорош, когда вам надоело подбирать конкретные слова, на которые отреагирует нейросеть, но вы точно уверены, что она должна знать, а чем идет речь.

Пруф про незнание сетью Карлсона. "Photo of karlsson_on_the_roof". Как можно было его в датасет не добавить?! Эта нейросетка хреновая, несите следующую!*sarcasm* <br />
Пруф про незнание сетью Карлсона. "Photo of karlsson_on_the_roof". Как можно было его в датасет не добавить?! Эта нейросетка хреновая, несите следующую!*sarcasm*

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

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

Показываю на ровно тех же самых изображениях Инь из Darker-than-black из предыдущего гайда, чтобы сравнить результаты Textual Inversion и Hypernetwork.

Пошагово:

1) Убираем в настройках свой новый VAE, если ставили.

2) В настройках, в разделе "Training" ставим галку около "Move VAE and CLIP to RAM when training if possible. Saves VRAM" . "Number of repeats for a single input image per epoch; used only for displaying epoch number" выставляем на 100.

Если боитесь, что у вас может быть вылет системы по любым причинам посреди процесса обучения 0 - поставьте галку у "Saves Optimizer state as separate *.optim file. Training can be resumed with HN itself and matching optim file.". Я вот не поставил, потерял 4 часа обучения :(

3) Идем во вкладку Train-Hypernetwork. Называем как-то нашу новую гиперсеть. Тут много настроек, связанных с функциями для обучения нейросети, сказать, какая лучше будет в каждой ситуации заранее практически невозможно. Оставляйте для начала все по умолчанию (activation function - linear, Layer weights initialization - normal).

4) Поставьте галку около "Use dropout" - помогает избежать переобучения гиперсети (когда она упирается в какое одно изображение и не учитывает остальные). Жмем "Сreate Hypernetwork" - создастся пустой файл с настройками гиперсети.

5) Делаем предобработку наших изображений во вкладке Preprocessing. Загружаем все изображения с нужным концептом в одну папку, указываем, куда класть результаты. Из новых опций за месяц - возможность использовать DeepDanbooru для автоматического создания описаний, и возможность использования Autofocal point crop для обрезки изображений неправильных форматов - будет обрезать лишнее не по краям, а относительно глаз. Мне такая обрезка понравилось больше, чем Split images, так меньше шансов потерять лицо персонажа при изменении разрешения.

Помните - качество изображений важнее количества. Нет смысла указывать 50 почти одинаковых изображений, лучше сделать 20, но в разных условиях показывающих 1 и тот же концепт.

Пример настроек препроцессинга:

Погружаемся в дебри Stable Diffusion, часть 3

6) Учим гиперсеть. Переходим во вкладку Train.

Оставляем поле Embedding пустым, а в Hypernetwork указываем наш чистый файл с гиперсетью.

Hypernetwork learning rate ставим очень низким - 0.000005 или даже 0.00000005.

Batch size можно повысить для владельцев карт с большой видеопамятью. При Batch size 1 нужно 6.6-7.1 Гб видеопамяти для обучения 512*512, так что если вы - счастливый владелец 3090/4090 - можно ставить 3, должно влезть.

Dataset directory - путь для обработанных и размеченных изображений,

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

Max steps - как долго учить. По дефолту рекомендуют 100000, но я встречал тех, кто и 5000 ставит. Обучение нейросети - штука не очень предсказуемая, иногда при большем числе шагов результат может быть хуже. Например, внутренняя метрика loss, которую нейросеть и пытается шаг за шагом уменьшить во время обучения, скачет плохопредсказуемо + не всегда этот loss хорошо соотносится с тем, что мы ожидаем от модели. Иногда изображение через 1500 шагов обучения на взгляд намного лучше соответствует идее, чем через 50000.

Promt template file - указывайте путь до файла "Адрес сборки"\textual_inversion_templates\hypernetwork.txt - в таком варианте для обучения гиперсети будут использоваться текстовые описания, лежащие рядом с файлом. Чем лучше описания - тем быстрее и лучше гиперсеть ухватит общий элемент среди всех изображений. У меня, например, в тегах DeepDanbooru в трети случае проставил "звездное небо" и нейросеть искренне пыталась учесть это при отрисовке нового персонажа. Так что качество разметки (описаний) - важная штука.

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

Можно выставлять через сколько шагов делать промежуточные проверки результата и по ним принимать волевое решение останавливать обучение.

Проверьте, какая исходная модель (Sd v.1.4, Waifu diffusion или еще какая-то) выставлена у вас в настройках, от этого будет зависеть результаты гиперсети. Работать она будет после обучения в итоге для всех моделей, но лучше всего - для той, поверх которой училась.

Пример итоговых настроек:

Погружаемся в дебри Stable Diffusion, часть 3

Нажимаем "Train Hypernetwork"; молимся, что б все влезло в видеопамять.

У меня изначально не влезало, пришлось перелезть с мозиллы в Chrome (он почему-то жрет намного меньше видеопамяти), отрубить все лишние приложения вроде клиентов Steam/Epic/Gog, отрубить все доп.аргументы в webui-user.bat. Создание облегченной основной модели через перевод ее весов в float16 не помогает, увы.

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

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

Промежуточные результаты можно посмотреть в папке, которую указали в Log_directory\дата старта обучения\название гиперсети\images. Глядя на них понял, что учить дольше 50к шагов смысла особого не было. Промежуточные результаты суммарно немало места занимают, не забудьте их почистить потом.

Обучилось? Идем в настройки и выбираем нашу гиперсеть, задаем ей видимость вносимых ей изменений. Для конкретных персонажей ставить меньше 1 я не увидел смысла (см. пример ниже), но если использовать Hypernetwork для стилизации, то может иметь смысл ставить силу в 0.5 и ниже.

Погружаемся в дебри Stable Diffusion, часть 3

Сравнение итогов эмбеддинга Textual inversion (из моего прошлого гайда) и новой Hypernetwork и их комбинации.(Одинаковые параметры генерации. Запрос - Digital painting of a Yin, purple dress and eyes, elegant hands, small black jacket, white ponytail hair with a ribbon, sad face, fireworks in the night sky, playing on a piano, in a forest, view from the side). Для теста без эмбеддинга - заменил "Yin" на "girl".

3. Аддоны/ Extensions

В одном из последних дополнений прикрутили менеджер аддонов, что б упростить сторонним разработчикам добавление опциональных фич и замедлить раздувание и без того монструозного интерфейса. Любимая многими игра в "собери работающую сборку из 10к модов" теперь и в Stable Diffusion! Я в ней уже проиграл пару раз, всем рекомендую.

Заходим во вкладку Extensions - Available, нажимаем "Load From". Можно выбрать только аддоны с нужными тегами, но тегов пока мало. Уже появились аддоны с рекламой, но к ним идет тег "ads".

Для некоторых может потребоваться обновить Microsoft Visual C++ Redistributable.

Обзор на некоторые аддоны:

0) Image browser. Какое-то время побыл частью официальной сборки, но потом переехал в отдельное расширение. Просто дает возможность просматривать историю нагенерированных изображений прямо в отдельной вкладке браузерного интерфейса, а не в файловом менеджере. Должно быть удобно, но я по привычке смотрю в Проводнике.

1) Artists to study. В отдельной вкладке показывает примеры генерации изображений с разными именами художников в запросе. Идея хорошая, но мне отдельное окно с urania.ai больше нравится, если честно.

У аддона Inspiration - похожая задумка, предлагается либо нагенерить либо выкачать аж 6000 вариантов того, как Stable Diffusion видит типичные работы художников и разные художественные стили, с последующей возможностью поиска по художнику, запоминания понравившихся работ и т.д. Чуть лучше, но у меня все равно глаза разбегаются и вместо "поиска вдохновения" получается ступор.

2) Wildcards и их старший брат Dynamic Prompts. Wildcards позволяет вставлять в запрос специальные значения (например __random__), которые вместо себя подставляют случайное слово из текстового файла с таким же именем, которые лежат в папке Wildcards (т.е __random__ будет брать что-то из random.txt). Dynamic Promts поверх этого еще и добавляет случайный выбор внутри самого поля запроса.

Запрос "A {girl|boy|helicopter|Shrek} in {dress|__random__|swamp|air} by {2$$Picasso|Rembrandt|__artist__}" превратится в случайную комбинацию того, что внутри {}, например:

  • A girl in swamp by Picasso, Rembrandt
  • A Shrek in dress by Picasso, Claude Monet (если он есть в artist.txt)

X$$ - сколько разных случайных элементов одновременно взять из {}. Можно даже делать диапазон, например 2-4$$ - взять от 2 до 4 элементов разом.

Еще есть "magic promt" - подставит к вашему исходному запросу полу-случайную кучу слов из типичных запросов, которые есть в lexica.art.

Моя реакция на такие опции:

Древний мем для новой ситуации<br />
Древний мем для новой ситуации

Есть еще опция в настройках делать не рандом, а сгенерировать по 1 или нескольким изображению на каждую комбинацию элементов. Если в запросе есть что-то из вроде __wildcart__ - сделает комбинации со всеми элементами из wildcart.txt.

Если зафиксировать seed, то это неплохой способ проверить эффект от применения разных слов к 1 концепту.

3) Dreambooth . Еще 1 популярный способ дообучить нейросеть, на этот раз позволяет действительно узнавать новые конкретные концепты.

Пока в аддоне много багов, которые оперативно чинятся/появляются новые. Если что-то не взлетает - имеет смысл подождать недельку и обновить версию. Я сравнительно легко отделался - мне понадобилось только вручную поставить несколько питоновских библиотек нужных версий и все-таки поставить Python 3.10.6, а не 3.10.7/3.11.

Если совсем не получается - можно воспользоваться Google Colab от TheLastBen. Там меньше настроек и понадобится свободное место на Гугл-диске, но зато работает стабильно и быстро. Если будут вопросы по интерфейсу - помогу.

Дообучим модель на Карлсоне, который живет на крыше, раз этот мужчина не знаком нейросети.

Пошагово:

1)Идем во вкладку "Dreambooth", как то называем модель и выбираем, на основе какой мы будем дообучать. Нюанс - если выбранная модель не равна той, что в целом сейчас используется в интерфейсе - выдаст ошибку.Нажимаем "Create Model"

2) Переходим во вкладку "Dreambooth-Train". Здесь опять много настроек, половина работает непойми как, подбор комбинации настроек пока у каждого - чисто экспериментальное занятие. Если возникает ошибка за ошибкой - смотрите "Issues", может кто-то нашел обходные пути решения вашей проблемы.

Базовые системные требования для запуска с разными настройками такие (Не волнуйтесь, можно запустить на процессоре, как пришлось мне) :

Если у вас меньше 10ГБ - не спешите страдать.<br />
Если у вас меньше 10ГБ - не спешите страдать.

Instance Prompt - какое-то уникальное для StableDiffusion сочетание символов. Пусть для нас это будет crlsn.

Class Prompt - опциональная настройка. Ближайшие объекты к нужным нам изображениям. Для нас - painting of fat redhead man cartoon character in a white pants, electric fan on his back. Не знаете, что выбрать - запустите 1 картинку в метод interrogate. Опция полезна, если у нейросети и так полно изображений, похожих на ваши целевые. В моей случае с Карлсоном - скорее вредило результату и отнимало время.

Dataset directory - где лежат ваши изображения. Много не нужно. Подготовьте их, обрезав до целевого разрешения. Это можно сделать в обычной вкладке Train-Preprocess images.

Classification dataset directory - Опциональная настройка. Можно указать папку с готовыми картинками, похожих на нужные нам, но все-таки не тех, что б нейросеть лучше уловила разницу.

Можно самому сгенерировать изображений по "Class Prompt" с нужными настройками, можно отдать на откуп системе, выбрав ненулевой настройку Total number of classification images to use. Имеет смысл, если будете учить Dreambooth на процессоре, что б не тратить по 5 минут на генерацию 1 *левого* изображения, а сразу начать учить модель.

Total number of classification images to use - ставьте 10*число ваших изображений, если не сделали датасет сами. Система будет генерить изображения по "Class Promt".

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

Training steps - рекомендации разные, но базово советуют ставить от 100*число изображений до 200*число изображений и смотреть и смотреть промежуточные результаты. Если поставить слишком много шагов - есть шанс, что модель переобучится и просто будет давать какое-то из исходных изображений без измененений

Learning rate и прочие лучше просто так не трогать, но если хочется - хороший разбор эффектов от разных настроек обучения есть здесь.

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

Еще рекомендация по мотивам личной боли - поставьте для начала 10 шагов на обучение, и 5 - на промежуточное сохранение, что б проверить, что все нормально работает. Терять 10+ часов из-за того, что у вас не сохраняется результат на последнем шаге - неприятно. У меня с промежуточными сохранениями обучение останавливается на этапе сохранения и надо перезапускать вручную.

Во вкладке "Advanced" можно выставить дополнительные оптимизирующие настройки, например использование только обычного процессора для обучения. Будет медленно и с сжиранием кучи обычной RAM (у меня отъедало до 18ГБ оперативки и 52% ресурса процессора), зато можно параллельно что-то генерировать, запустив еще копию Stable Diffusion. На Intel i-6700k обучение с 1400 шагами = задача на 11 часов. Перед запуском на процессоре надо отключить xformers и удалить папку с ними из папки venv\Lib\site-packages.

Настройки Don't Cache Latents, Gradient Checkpointing, Use 8bit Adam, Mixed Precision позволяют сохранить видеопамять ценой скорости обучения. Смотрите по таблице, что вам стоит включать. При запуске на процессоре ничего включать не нужно.

Train Text Encoder - заодно обучит что-то вроде текстового эмбеддинга. Повысит качество, но сильно увеличит потребление видеопамяти.

Проверку остальных настроек оставим тем ПК-боярам, у которых есть несколько профессиональных видеокарт с 40ГБ видеопамяти

Скоро обещают подключить библиотеку accelerate, которая должна позволить и на 8ГБ видеопамяти запускать, но в момент написания гайда ее включение в рамках Automatic1111 - непростая задача. Чувствуете силы - скачайте отдельно вот этот репозиторий, на основании которого и сделан аддон, и попробуйте обучить по его инструкциям для 8ГБ.

Пример настроек без дополнительных изображений и сохранения промежуточных результатов<br />
Пример настроек без дополнительных изображений и сохранения промежуточных результатов

3) Нажимаем кнопку "Train" и ждем. Учится не так дого, как Hypernetworks, т.к шагов обучения нужно меньше. Даже с учетом обучения на процессоре.

4) Когда дообучится - может понадобиться нажать кнопку "generate ckpt" - что б создалать обычная модель. Но должно и так на последнем шаге ее создать и поместить к остальным вашим моделям для (которые лежат в models\Stable Diffusion)

Результат:

4) Aesthetic Gradients - "обучение нейросети на минималках", по 1-5 изображениям. Учится моментально, используется легко, но эффект не такой сильный, как у остальных способов дообучения. Выглядит как изменение гаммы/ легкое изменение стиля/ добавление нескольких деталей.

Процесс обучения простой - заходим во вкладку "Create aestetic embedding", вбиваем любое название для нашего файла-эмбеддинга, указываем путь до файла с нужными изображениями, на основании которых нейросети надо выучить какую-то эстетику. Batch size ставим какой-то степенью 2-ки, значения особого не имеет. На 5 изображениях создается за секунду.

Пример настроек<br />
Пример настроек

Далее в txt2img или img2img идем вниз интерфейса, где появилась вкладка "Open Clip Aestetic", кликаем на нее.

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

Здесь выбираем наш файл и настройки для применения эмбеддинга<br />
Здесь выбираем наш файл и настройки для применения эмбеддинга

Что было в примерах для градиента и как это повлияло на результат результат:

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

Мне не дает покоя история с Карлсоном. В оригинальной модели Karl - отдельно, son- отдельно, roof- отельно. Вместе = ерунда<br />
Мне не дает покоя история с Карлсоном. В оригинальной модели Karl - отдельно, son- отдельно, roof- отельно. Вместе = ерунда

Есть еще прикольный онлайн-инструмент DAAM (Diffusion-Attentive-Attribution-Maps) , который прямо на итоговом изображении подсвечивает в виде тепловой карты, какие, по мнению нейросети, участки нарисованного ей изображения соотносятся с исходным запросом. Можно запустить и локально, скачав с репозитория исходник. Отличный кандидат на аддон!

Нацепил черные очки в помещении? - Хакер! Поверх очков странный девайс? - Это киберпанк, 100%. <br />
Нацепил черные очки в помещении? - Хакер! Поверх очков странный девайс? - Это киберпанк, 100%.

6) Latent Mirroring - позволяет делать более симметричные изображения с разными вариантами того, относительно чего делать симметрию. Прикольная штука, если вам надоело указывать в запросах (((((symmetry))))) и вы хотите чуть лучше управлять этой составляющей композиции.

Очень сильно меняет изображение в txt2img, у меня не получилось взять результат по какому-то seed и сделать его более симметричным с этим инструментом - только сгененировать новое, более симметричное изображение

Включается прямо во вкладках txt2img и img2img, через выбор метода достижения симметрии в настройках "Latent mirror mode"(вместо "None" ставите "Alternate steps" или "Blend Average"). Результаты при методах получатся сильно разные. Вторая настройка - выбор оси симметрии. Произвольно ее задать пока нельзя, увы.

Пример результата с 2 разными методами достижения симметрии:

"Maximum steps fraction to mirror at" - с этой помощью можно управлять тем, насколько полной будет симметрия. При моих запросах уже примерно в 0.6 достигается полная симметричность

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

4. Вместо заключения

Надеюсь, что в этом гайде вы нашли для себя полезные инструменты, которые позволят вам лучше реализовать свои идеи. Единственный совет - не замыкайтесь в одном инструменте. Куда проще комбинировать референсы, графические редактороры и нейросеть, чем пытаться все сделать средствами одной нейросети.

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

Банально, но самое приятное ощущение от создания гайда - когда вы скидываете на DTF свои результаты!

173173
124 комментария

Очень крутой обзор! Твои гайды, наверное, лучшие на русском языке. Пиши ещё.
Пытался я в DreamBooth, но постоянно улетал в out of memory, хотя вроде карта 12 гигов. Вроде все возможные параметры попробовал, но он вылетает и вылетает.

12

У меня 2080ti с 11Gb памяти. Я пользовался вот таким локальным клиентом для dreambooth. Работает очень шустро и интерфейс понятный. Даже на 1000 шагов на объект даёт отличный результат (10 минут на всё про всё). Можно обучать как локальную модель, уже скачанную, так и дать приложению самостоятельно выкачать нужную с репозитория huggingface. В общем, рекомендую попробовать!
https://github.com/smy20011/dreambooth-gui

3

На коллабе быстрее всего выходит. Обучил на фото себя и своих другалей, вышло достаточно детально, только вот всякие особенности типа родинок, шрамов, принтов на одежде на исходных фотках портят результат: родинок становится не одна, а куча, как веснушек, причем беспорядочно, принты появляется на готовых картинках упоротыми надписями в стиле нейронки.
Сейчас думаю над тем, как совместить несколько моделей в одну. Там есть функция суммирования весов моделей, но я не уверен что она сработает как надо.

2

Я пытался в 8гб запустить, но сдался и пустил на проце) Глянь таблицу с настройками в разделе гайда, аддон и на 10 должен пойти сейчас.

Попробуйте файл подкачки в windows включить и увеличить! Я поставил 32Гб и мне помогло.

Самое приятное ощущение от создания гайда - когда вы скидываете свои результаты!

Кот-хлебушек в NovelAI. Ради этого уже стоило установить нейросетку

5

Прелесть какая) Делаем апгрейд кота в кошкодевочку с помощь Anything V3

9