У локаль­ных веб‑интерфей­сов к Stable Diffusion есть самые раз­ные воз­можнос­ти для улуч­шения резуль­тата генера­ции изоб­ражения. Сегод­ня мы погово­рим о рас­ширени­ях для WebUI reForge. Авто­мати­чес­кое исправ­ление рук и лиц, генера­ция кар­тинок в повышен­ном раз­решении, более «вни­матель­ное» отно­шение модели к мел­ким деталям, сег­менти­рован­ные зап­росы и рас­ширен­ный динами­чес­кий диапа­зон — лишь малая часть из того, что дос­тупно поль­зовате­лю.

WebUI reForge dev

Ин­терфейс reForge — это форк WebUI Forge, который, в свою оче­редь, явля­ется фор­ком WebUI AUTOMATIC1111, уже, воз­можно, зна­комо­го тебе по стать­ям «ReForge. Улуч­шаем кар­тинки, генери­руемые Stable Diffusion» и «Сем­пле­ры и шедуле­ры. Раз­бира­ем два важ­ных механиз­ма улуч­шения генера­тив­ных кар­тинок». В пер­вой я рас­ска­зывал об уста­нов­ке про­дук­та на компь­ютер и начале работы, во вто­рой опи­саны раз­ные сем­пле­ры и шедуле­ры.

Се­год­ня же мы будем говорить о рас­ширени­ях (extensions) — как уже встро­енных в про­дукт, так и сто­рон­них. Но преж­де, чем прис­тупить к иссле­дова­нию, мы обно­вим нашу копию веб‑интерфей­са reForge до све­жей сбор­ки и перек­лючим­ся на вет­ку «для раз­работ­чиков», что откро­ет дос­туп к некото­рым вещам, недос­тупным поль­зовате­лям ста­биль­ной сбор­ки.

На стра­нице про­екта перечис­лены вет­ки main, dev, dev2 и experimental; если ты видишь какие‑то дру­гие вет­ки, зна­чит, автор про­екта Panchovix зате­ял оче­ред­ное пере­име­нова­ние. По задум­ке раз­работ­чика, основная вет­ка main дол­жна быть мак­сималь­но ста­биль­ной и сов­мести­мой; в нее вхо­дят обновле­ния из A1111 (в час­тнос­ти, новые сем­пле­ры и шедуле­ры), в ней же сде­ланы пат­чи для одновре­мен­ной заг­рузки нес­коль­ких моделей.

В эту вет­ку не вхо­дят све­жие обновле­ния движ­ка Comfy; что­бы получить к ним дос­туп, нуж­но перек­лючить­ся на вет­ку dev, в которой есть все из main плюс выбороч­ные обновле­ния и фун­кции из Comfy.

В теории эта вет­ка работа­ет быс­трее основной, одна­ко мож­но добить­ся реаль­ного при­рос­та про­изво­дитель­нос­ти, обно­вив вруч­ную torch до вер­сии torch-2.5.1+cu12 и torchvision до вер­сии torchvision-0.20.1+cu124. Обновле­ния луч­ше брать с сай­та про­екта или сра­зу ка­чать wheel с соот­ветс­тву­ющи­ми име­нами фай­лов. Наде­юсь, с уста­нов­кой в пап­ку stable-diffusion-webui-reForge\system\python\Lib\site-packages и чис­ткой «хвос­тов» ста­рых вер­сий ты раз­берешь­ся.

Установка reForge dev с нуля

Для начала уста­нови Python вер­сии 3.12 (да, это ста­рая вер­сия Python; нет, 3.13 ста­вить не сто­ит, часть рас­ширений не заведет­ся) и Git, а так­же убе­дись, что они добав­лены в перемен­ную PATH. Python мож­но взять с офи­циаль­ного сай­та.

Са­мым пра­виль­ным спо­собом уста­нов­ки reForge dev будет уста­нов­ка «с нуля» в новую пап­ку, нап­ример stable-diffusion-webui-reForge или stable-diffusion-webui-reForge-dev. Раз­работ­чик неод­нократ­но пере­име­новы­вал фай­лы, выносил встро­енные рас­ширения «наружу» и совер­шал обратные опе­рации, в резуль­тате чего обра­зова­лось мно­жес­тво «хвос­тов» в виде «завис­ших» папок __pycache__, из‑за которых обра­зова­лись кон­флик­ты меж­ду остатка­ми рас­ширений.

Раз­работ­чик рекомен­дует для это­го такую пос­ледова­тель­ность команд:

git clone https://github.com/Panchovix/stable-diffusion-webui-reForge.git
cd stable-diffusion-webui-reForge
git checkout dev

Вни­мание: уста­новив све­жую сбор­ку reForge, пока не запус­кай про­дукт! Для начала отре­дак­тируй файл environment.bat и вклю­чи venv:

set SKIP_VENV=0

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

В фай­ле webui\webui-user.bat мож­но ука­зать еще и ряд перемен­ных, спо­соб­ных уве­личить про­изво­дитель­ность, изме­нить пути к моделям и вклю­чить тем­ную тему интерфей­са. Перечис­лю основные — они ука­зыва­ются в стро­ку, ее мож­но прос­то вста­вить в файл webui-user.bat; исполь­зовать их, разуме­ется, не обя­затель­но — параметр COMMANDLINE_ARGS мож­но оста­вить пус­тым.

set COMMANDLINE_ARGS=--vae-in-bf16 --pin-shared-memory --cuda-malloc --cuda-stream --theme dark

Все парамет­ры, кро­ме --theme dark, который акти­виру­ет тем­ную тему, отно­сят­ся к повыше­нию про­изво­дитель­нос­ти; если твоя виде­окар­та несов­мести­ма с какими‑либо из этих парамет­ров, не исполь­зуй их. Узнать, под­держи­вают­ся ли они, мож­но толь­ко пос­ле пол­ной уста­нов­ки и пер­вого запус­ка reForge; если при запус­ке в тер­минале выводят­ся подоб­ные стро­ки, то их име­ет смысл поп­робовать:

Hint: your device supports --pin-shared-memory for potential speed improvements, but may cause issues.

Hint: your device supports --cuda-malloc for potential speed improvements.

Hint: your device supports --cuda-stream for potential speed improvements, but may cause some issues.

Пути к моделям

Ба­зовые модели, а так­же все­воз­можные лоры и тек­сто­вые инверсии удоб­но хра­нить отдель­но от основной уста­нов­ки WebUI, в том чис­ле на дру­гом дис­ке. К при­меру, мож­но ука­зать сле­дующие пути:

set COMMANDLINE_ARGS=%COMMANDLINE_ARGS%^
--models-dir "%CD:~0,2%/models/"

С такими нас­трой­ками модели (как базовые, так и те, которые хра­нят­ся по умол­чанию в пап­ке \stable-diffusion-webui-reForge\models) дол­жны будут находить­ся в пап­ке /models того же дис­ка, куда уста­нов­лен reForge. Соот­ветс­твен­но, если ты решишь исполь­зовать такую схе­му, тебе нуж­но будет перенес­ти всю пап­ку моделей в корень дис­ка:

\stable-diffusion-webui-reForge\models \models

Так­же сто­ит сра­зу ска­чать в пап­ку \models\Stable-Diffusion какую‑нибудь модель SDXL — нап­ример, gtmUltimateBlendXL_v25CosXL, с которой мы будем экспе­римен­тировать даль­ше. Если ты это­го не сде­лаешь, то одна из моделей для начала работы будет ска­чана авто­мати­чес­ки.

Рань­ше это была реалис­тичная модель с архи­тек­турой SD1.5:

realisticVisionV51_v51VAE.safetensors

С недав­них пор раз­работ­чик reForge заменил модель, и теперь по умол­чанию будет ска­чана модель NoobAI 1.1 EPS, а имен­но файл NoobAI-XL-v1.1.safetensors. Обра­ти вни­мание: эта модель име­ет мало обще­го с обыч­ными моделя­ми SDXL; она уме­ет генери­ровать толь­ко ани­ме‑изоб­ражения, при­чем зап­рос нуж­но сос­тавлять из тегов Danbooru. Короче говоря, выбери и ска­чай в нуж­ную пап­ку более уни­вер­саль­ную модель.

При­меры моделей:

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

Пол­ностью сфор­мирован­ный файл webui-user.bat может выг­лядеть приб­лизитель­но сле­дующим обра­зом:

@echo off
set PYTHON=
set GIT=
set VENV_DIR=
set COMMANDLINE_ARGS=--vae-in-bf16 --pin-shared-memory --cuda-malloc --cuda-stream --theme dark
set COMMANDLINE_ARGS=%COMMANDLINE_ARGS%\^
--models-dir "%CD:\~0,2%/models/"
call webui.bat

Да­лее запус­ти файл webui-user.bat и дож­дись уста­нов­ки всех пакетов. Если в про­цес­се воз­никнет ошиб­ка «python.exe: no module named pip», тебе нуж­но будет зай­ти в пап­ку, в которой у тебя уста­нов­лен Python и выпол­нить сле­дующую коман­ду:

python -m ensurepip

Пос­ле это­го будут ска­чаны и уста­нов­лены зависи­мос­ти (око­ло 6,5 Гбайт) и прог­рамма наконец запус­тится.

Обновление существующей сборки

Ес­ли у тебя уже уста­нов­лена ста­биль­ная сбор­ка main, ты можешь поп­робовать перек­лючить­ся на вет­ку dev, открыв коман­дную стро­ку в пап­ке stable-diffusion-webui-reForge\webui пос­ледова­тель­ностью команд:

git switch dev
git pull

Ес­ли пос­ледова­тель­ность не сра­бота­ет, есть и дру­гой спо­соб, опи­сан­ный на стра­нице про­екта:

git remote add reForge https://github.com/Panchovix/stable-diffusion-webui-reForge
git branch Panchovix/dev
git checkout Panchovix/dev
git fetch reForge
git branch -u reForge/dev
git stash
git pull

Начало работы: раскладываем расширения по полочкам

Итак, WebUI reForge уста­нов­лен. При пер­вом запус­ке все рас­ширения (13 из них пре­дус­танов­лены) рас­положе­ны свер­ху вниз.

Ког­да рас­кры­ваешь нас­трой­ки рас­ширений, поль­зовать­ся интерфей­сом ста­новит­ся слож­новато из‑за необ­ходимос­ти все вре­мя прок­ручивать туда‑обратно. Поэто­му пер­вым рас­ширени­ем, которое я уста­нав­ливаю в reForge, ста­новит­ся SD Webui Tabs Extension. Пос­тавить его мож­но либо из вклад­ки Extensions → Install from URL, либо из коман­дной стро­ки, тог­да уста­нов­ка дол­жна выпол­нять­ся в сле­дующей пап­ке:

stable-diffusion-webui-reForge-dev\webui\extensions

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

Итак, заходим в пап­ку stable-diffusion-webui-reForge-dev\webui\extensions\ и выпол­няем сле­дующую коман­ду:

git clone https://github.com/Haoming02/sd-webui-tabs-extension

Пос­ле уста­нов­ки пла­гина и перезаг­рузки WebUI reForge (это мож­но сде­лать пря­мо из раз­дела нас­тро­ек) рас­ширения будут орга­низо­ваны в виде вкла­док, поль­зовать­ся которы­ми про­ще и удоб­нее.

Ес­ли тебе не нра­вит­ся цве­товая гам­ма вкла­док, то в нас­трой­ках Settings → User Interface → Tabs Extension ее мож­но поменять на один из цве­тов стан­дарта CSS Colors. Не забудь пос­ле это­го переза­пус­тить интерфейс коман­дой Reload UI.

Расширения-улучшения

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

Быстрый выбор соотношения сторон

В Stable Diffusion под­держи­вает­ся огра­ничен­ное количес­тво стан­дар­тных раз­решений, а нес­тандар­тные дол­жны быть крат­ными 64. Запом­нить все воз­можные раз­решения тяжело — да и не нуж­но, ведь их мож­но вывес­ти в поль­зователь­ский интерфейс одним из рас­ширений.

По­доб­ных рас­ширений соз­дано мно­жес­тво в силу вос­тре­бован­ности и прос­тоты. Рекомен­дую поп­робовать одно из двух сле­дующих (выбери что‑то одно, меж­ду собой подоб­ные рас­ширения могут кон­флик­товать):

git clone https://github.com/altoiddealer/--sd-webui-ar-plusplus

или

git clone https://github.com/alemelis/sd-webui-ar

Пос­ле уста­нов­ки и переза­пус­ка интерфей­са сра­зу под стро­кой Seed появит­ся ряд кно­пок для выбора соот­ношения сто­рон. Вер­хний ряд перес­читыва­ет кор­рек­тное соот­ношение, исхо­дя из текущих раз­меров кар­тинки, ниж­ний — уста­нав­лива­ет одно из стан­дар­тных раз­решений SDXL.

По­менять мес­тами высоту и ширину кар­тинки мож­но при помощи икон­ки спра­ва от цифр раз­решения.

Сохранение конфигурации

В нас­трой­ках WebUI мож­но сох­ранить толь­ко одну кон­фигура­цию «по умол­чанию», которая будет вос­ста­нав­ливать­ся при запус­ке при­ложе­ния. Для это­го нуж­но най­ти вклад­ку Defaults в самом низу нас­тро­ек Settings, пос­ле чего нажать View changes и Apply.

Те­кущая кон­фигура­ция, вклю­чая базовые нас­трой­ки и нас­трой­ки рас­ширений, будет сох­ранена в файл webui\ui-config.json. Удоб­но, но про­вер­нуть это мож­но толь­ко для одно­го набора нас­тро­ек. А что делать, если ты подоб­рал опти­маль­ные нас­трой­ки для раз­ных типов изоб­ражений или раз­ных моделей и хочешь быс­тро перек­лючать­ся меж­ду ними?

Для это­го сущес­тву­ют рас­ширения, сох­раня­ющие текущий кон­фиг. Ни одно из них не совер­шенно; я не смог най­ти ни одно­го вари­анта, который сох­ранял бы дей­стви­тель­но все нас­трой­ки, вклю­чая нас­трой­ки рас­ширений. Один из ком­про­мис­сных — рас­ширение Config Presets:

git clone https://github.com/Zyin055/Config-Presets

Пос­ле его уста­нов­ки (и переза­пус­ка WebUI) сни­зу от области превью появит­ся допол­нитель­ная панель с пре­сета­ми.

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

Очередь задач

Про­цесс генера­ции изоб­ражений может занять дли­тель­ное вре­мя, осо­бен­но в слу­чаях, ког­да генери­рует­ся сра­зу серия кар­тинок. По умол­чанию WebUI под­держи­вает толь­ко одну задачу и пос­ледова­тель­но генери­рует кар­тинки с одним и тем же зап­росом, нас­трой­ками и моделью; уве­личи­вает­ся лишь зна­чение seed. Орга­низо­вать оче­редь нас­тро­ек мож­но рас­ширени­ем Agent Scheduler. Оно — единс­твен­ное в сво­ем роде; никаких аль­тер­натив для него в рам­ках WebUI не сущес­тву­ет.

git clone https://github.com/ArtVentureX/sd-webui-agent-scheduler

Пос­ле уста­нов­ки (с это­го момен­та я перес­тану напоми­нать о необ­ходимос­ти переза­пус­ка WebUI) сра­зу под кноп­кой Generate появит­ся допол­нитель­ная кноп­ка Schedule и окно выбора модели.

Об­рати вни­мание: мож­но как добавить в оче­редь текущую задачу, так и выб­рать одну или нес­коль­ко дру­гих моделей. Эта воз­можность очень полез­на, если ты хочешь срав­нить резуль­тат работы нес­коль­ких раз­ных моделей с одни­ми нас­трой­ками и зап­росом; тог­да ты можешь выб­рать целую пап­ку с моделя­ми и соз­дать оче­редь задач, в которой твой зап­рос (со все­ми нас­трой­ками) будет обра­ботан пос­ледова­тель­но каж­дой моделью из пап­ки. А если ты еще и зафик­сиру­ешь зна­чение Seed, то мож­но будет про­вес­ти пря­мое срав­нение моделей.

Уп­равлять оче­редью задач мож­но из вклад­ки Agent Scheduler. При желании мож­но на лету редак­тировать текст зап­роса, менять выб­ранную модель и параметр CFG.

Превью моделей

Хо­чешь вот такое превью с кар­тинка­ми моделей?

Ставь рас­ширение Civitai Helper:

git clone https://github.com/zixaphir/Stable-Diffusion-Webui-Civitai-Helper

Пос­ле переза­пус­ка WebUI в интерфей­се появит­ся вклад­ка Civitai Helper. Зай­ди на нее, наж­ми Scan и подож­ди, пока пла­гин под­счи­тает кон­троль­ные сум­мы уста­нов­ленных у тебя моделей и вытащит с Civitai превью. Это удоб­но и работа­ет даже для пере­име­нован­ных фай­лов — но не сра­баты­вает для моделей, ска­чан­ных с дру­гих ресур­сов, если их авто­ры не раз­мести­ли их на Civitai. Для таких моделей мож­но прос­то положить рядом с фай­лом <модель>.safetensors превью с име­нем <модель>.preview.png (или jpg).

Теги Danbooru для аниме-моделей

Са­мые популяр­ные базовые модели для генера­ции изоб­ражений в сти­ле ани­ме (к ним отно­сят­ся модели семей­ств Pony и Illustrious, а так­же модели на осно­ве Animagine) обу­чены на кар­тинках с раз­нооб­разных ресур­сов booru (имид­жбор­ды с под­дер­жкой тегов). В час­тнос­ти, мно­гие раз­работ­чики исполь­зовали для обу­чения базу дан­ных Danbooru 2023 и ее акту­аль­ные допол­нения.

Все изоб­ражения из подоб­ных наборов опи­сыва­ются стан­дар­тны­ми тегами. В стан­дар­тные теги вхо­дят име­на худож­ников, изоб­разитель­ные сти­ли, пер­сонажи, сет­тинги, осо­бен­ности ком­позиции, объ­екты, дей­ствия и мно­гое дру­гое. Чем точ­нее твой зап­рос сле­дует син­такси­су, тем боль­ше шан­сов получить жела­емое — и наобо­рот. Разуме­ется, запом­нить все теги невоз­можно — и не нуж­но. Вмес­то это­го нуж­но пос­тавить рас­ширение Tag Autocomplete:

git clone https://github.com/DominikDoom/a1111-sd-webui-tagcomplete.git

Те­перь при вво­де тек­сто­вого зап­роса будут появ­лять­ся всплы­вающие под­сказ­ки, пред­лага­ющие вари­анты на осно­ве пре­дус­танов­ленно­го спис­ка тегов.

Пла­гин может исполь­зовать как пре­дус­танов­ленные спис­ки тегов (по умол­чанию — Danbooru), так и раз­нооб­разные аль­тер­натив­ные спис­ки (нап­ример, e621). Все они хра­нят­ся в виде тек­сто­вых фай­лов; их мож­но соз­давать и редак­тировать.

В качес­тве бонуса рас­ширение уста­нав­лива­ет скрипт, который упростит исполь­зование лор, авто­мати­чес­ки добав­ляя сло­ва‑акти­вато­ры и выводя спи­сок лор пос­ле того, как ты напеча­таешь откры­вающую угло­вую скоб­ку <.

Динамические запросы

Иног­да хочет­ся про­верить, как модель отри­сует изоб­ражение по зап­росу с нез­начитель­ными вари­ациями, нап­ример — как будет выг­лядеть изоб­ражение, выпол­ненное в сти­лис­тике раз­ных худож­ников. Для это­го тоже есть рас­ширение — Dynamic Prompts:

git clone https://github.com/adieyal/sd-dynamic-prompts.git

Пос­ле его уста­нов­ки ты смо­жешь перечис­лять вари­анты в скоб­ках или выбирать слу­чай­ный вари­ант из тек­сто­вого фай­ла. Нап­ример, __artists__ выберет слу­чай­ную стро­ку из фай­ла artists.txt, сох­ранен­ного в пап­ке webui\extensions\sd-dynamic-prompts\wildcards или одном из под­катало­гов (ког­да ты вве­дешь двой­ное под­черки­вание, спи­сок дос­тупных шаб­лонов появит­ся в выпада­ющем окне).

У рас­ширения дос­таточ­но мощ­ный син­таксис. Нап­ример, мож­но выб­рать двух слу­чай­ных худож­ников из фай­ла artist.txt:

{2$$__artist__}

Мож­но — слу­чай­ным обра­зом от одно­го до трех:

{1-3$$artist1|artist2|artist3}

Мож­но выбирать слу­чай­но, но пер­вый худож­ник будет выпадать вдвое чаще:

{2::artist1|artist2}

Мож­но исполь­зовать перемен­ные и шаб­лоны в фор­мате Jinja2. Наконец, дос­тупен режим PromptMagic, в котором облегчен­ные язы­ковые модели исполь­зуют­ся для допол­нения зап­роса релеван­тны­ми с точ­ки зре­ния этих моделей клю­чевы­ми сло­вами.

Детализация рук и лиц

Из­вес­тная проб­лема Stable Diffusion — иска­жения в мел­ких деталях, таких как паль­цы рук и чер­ты лица. Появ­ляют­ся эти иска­жения из‑за того, что сис­тема изна­чаль­но генери­рует изоб­ражение в невысо­ком раз­решении и лишь вто­рым про­ходом повыша­ет раз­решение исходной кар­тинки до жела­емо­го.

Уве­личе­нием парамет­ра Denoising strength в нас­трой­ках hires.fix мож­но до некото­рой сте­пени испра­вить огре­хи, одна­ко с опре­делен­ных зна­чений (завися­щих от ком­бинации мно­жес­тва парамет­ров, вклю­чая нас­трой­ки CFG, сем­пле­ра и шедуле­ра) он начина­ет вно­сить собс­твен­ные арте­фак­ты.

Что­бы обой­ти эту проб­лему, были соз­даны алго­рит­мы, поз­воля­ющие авто­мати­чес­ки выделять час­ти изоб­ражения и исправ­лять их на эта­пе пос­тобра­бот­ки. Работа­ют они сле­дующим обра­зом. Пос­ле того как генера­ция кар­тинки (вклю­чая вто­рой про­ход) завер­шилась, изоб­ражение переда­ется тому или ино­му рас­ширению (ADetailer, uDDetailer или подоб­ному).

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

Ос­новные рас­ширения это­го типа — ADetailer и uDDetailer (в наз­вании вто­рого при­сутс­тву­ет литера мю, которая вре­мя от вре­мени успешно лома­ет Gradio). Их мож­но уста­нав­ливать и исполь­зовать как по отдель­нос­ти, так и вмес­те — рас­ширения не кон­флик­туют.

git clone https://github.com/Bing-su/adetailer.git
git clone https://github.com/wkpark/uddetailer

ADetailer в целом нес­коль­ко мощ­нее; он под­держи­вает боль­ше нас­тро­ек, поз­воля­ет исполь­зовать про­изволь­ное количес­тво моделей для перери­сов­ки (нап­ример, мож­но сде­лать пос­ледова­тель­ную детали­зацию всей головы, а потом отдель­но лица и глаз). Под­держи­вает сох­ранение кон­фигура­ции через Settings → Defaults.

uDDetailer поз­воля­ет пос­ледова­тель­но исполь­зовать толь­ко две модели, но в допол­нение к стан­дар­тным фай­лам .pt под­держи­вает и фор­мат .onnx. Кро­ме того, здесь есть воз­можность заг­рузить любую кар­тинку и обра­ботать ее. В ADetailer такая воз­можность при­сутс­тву­ет толь­ко на вклад­ке img2img.

В обо­их рас­ширени­ях мно­жес­тво нас­тро­ек.

Начать можно с такого набора
На­чать мож­но с такого набора

К сло­ву, модели для рас­позна­вания объ­ектов мож­но как исполь­зовать пре­дус­танов­ленные, так и ска­чивать, к при­меру, с сай­та Civitai, Hugging Face или с GitHub.

Примерно так выглядит область, выделяемая моделью Anzhc’s Head Segmentation (архитектура YOLOv8)
При­мер­но так выг­лядит область, выделя­емая моделью Anzhc’s Head Segmentation (архи­тек­тура YOLOv8)
Или так
Или так

Ре­комен­дую сра­зу зай­ти в нас­трой­ки Settings → ADetailer и ука­зать в парамет­ре Extra paths to scan adetailer models допол­нитель­ный путь к пап­ке с моделя­ми, нап­ример \Models\models\yolo.

По­хожим обра­зом работа­ет и uDDetailer.

Улучшайзеры

Эта катего­рия рас­ширений пред­назна­чена для улуч­шения качес­тва сге­нери­рован­ных изоб­ражений. Сюда вхо­дят рас­ширения, допол­няющие или изме­няющие работу механиз­ма Self-Attention, метод, модифи­циру­ющий про­цесс генера­ции, а так­же нес­коль­ко раз­ных спо­собов избе­жать «выгора­ния» кар­тинки при исполь­зовании высоких зна­чений CFG.

Механизм внутреннего внимания

В этом раз­деле мы погово­рим о рас­ширени­ях, нап­равлен­ных на улуч­шение качес­тва мел­ких деталей и вза­имос­вязей меж­ду эле­мен­тами изоб­ражения. Таких рас­ширений нес­коль­ко; некото­рые из них кон­флик­туют, но дру­гие прек­расно допол­няют друг дру­га. Какие‑то методы пре­дус­танов­лены в reForge (это sd_forge_freeu, sd_forge_sag), осталь­ные дос­тупны в рас­ширении sd-perturbed-attention:

git clone https://github.com/pamparamm/sd-perturbed-attention.git

Ме­ханизм внут­ренне­го вни­мания ней­росетей, или механизм Self-Attention, — это набор алго­рит­мов для ана­лиза вза­имос­вязей меж­ду раз­личны­ми час­тями дан­ных. Механизм внут­ренне­го вни­мания поз­воля­ет модели учи­тывать кон­текст эле­мен­тов изоб­ражения, даже если они находят­ся далеко друг от дру­га, что помога­ет в соз­дании реалис­тичных теней и прав­доподоб­ных визу­аль­ных эффектов.

Ме­ханизм Self-Attention встро­ен в SDXL, но его работа несовер­шенна, осо­бен­но если речь идет о соз­дании изоб­ражений со мно­жес­твом мел­ких деталей. Его архи­тек­тура — ком­про­мисс меж­ду качес­твом и про­изво­дитель­ностью. Рас­ширения поз­воля­ют вме­шивать­ся в работу это­го механиз­ма на раз­ных уров­нях и обхо­дить некото­рые огра­ниче­ния, в ито­ге повысив качес­тво изоб­ражения за счет сни­жения ско­рос­ти.

В reForge дос­тупны сле­дующие рас­ширения: Self-Attention Guidance, Perturbed Attention Guidance, Smoothed Energy Guidance и Sliding Window Guidance. Крат­ко их работу мож­но опи­сать таким обра­зом.

У этих рас­ширений есть и обратная сто­рона: они пот­ребля­ют допол­нитель­ные ресур­сы, и, сле­дова­тель­но, ско­рость генера­ции пада­ет на 25–30%. Кро­ме того, боль­шинс­тво рас­ширений Self-Attention (кро­ме SWG) демонс­три­руют визу­аль­ный эффект, ана­логич­ный эффекту от повыше­ния CFG, — рост кон­трас­та и насыщен­ности изоб­ражения. Впро­чем, в нас­трой­ках пла­гинов сра­зу пред­став­лен вари­ант решения — пол­зунок Rescale, ана­логич­ный механиз­му RescaleCFG и поз­воля­ющий купиро­вать эффект выгора­ния.

Ка­кой механизм выб­рать? И не сто­ит ли вклю­чить сра­зу все? Здесь откры­вает­ся широкая область для экспе­римен­тов. Рекомен­дую начать с SEG и SWG.

Бесплатный ланч

Рас­ширение FreeU уже встро­ено в reForge. Не будем под­робно опи­сывать его парамет­ры — бла­го их все­го четыре, а наз­вания говорят сами за себя: B1, B2, S1 и S2. В теории про­ект FreeU (Free Lunch in Diffusion U-Net) отли­чает­ся тем, что не фокуси­рует­ся толь­ко на Self-Attention. Вмес­то это­го он опти­мизи­рует архи­тек­туру U-Net, исполь­зуемую в диф­фузи­онных моделях, что­бы луч­ше обра­баты­вать дан­ные на эта­пе генера­ции. FreeU устра­няет «шумы» в про­межу­точ­ных сло­ях U-Net, что улуч­шает рез­кость и качес­тво изоб­ражений без зна­читель­ных вычис­литель­ных зат­рат (потому, собс­твен­но, «ланч» и наз­вали бес­плат­ным).

Ав­торы про­екта решили исполь­зовать потен­циал архи­тек­туры U-Net для улуч­шения качес­тва кар­тинки. По мне­нию раз­работ­чиков, основная часть U-Net отве­чает за шумопо­дав­ление, а про­пус­ки (skip connections) добав­ляют мел­кие детали, но иног­да меша­ют учи­тывать общий смысл изоб­ражения. На осно­ве этой теории они раз­работа­ли метод FreeU, который дол­жен улуч­шить качес­тво генера­ции, прос­то перенас­тра­ивая баланс меж­ду вкла­дом основной час­ти и про­пус­ков U-Net. Метод лег­ко интегри­рует­ся в сущес­тву­ющие модели, тре­буя нас­трой­ки все­го двух пар парамет­ров.

Это была теория. На прак­тике же механизм FreeU не стал осо­бо популяр­ным в силу сво­ей кап­ризнос­ти. Для каж­дой модели, каж­дого набора парамет­ров генера­ции и даже для раз­ных сти­лей (реалис­тично­го или ани­ме) нуж­но под­бирать свои зна­чения парамет­ров B1, B2, S1 и S2, и зна­чения эти могут силь­но отли­чать­ся.

В reForge уста­нов­лен некий усреднен­ный набор парамет­ров, который как‑то вли­яет на генера­цию (кар­тинки, получен­ные с FreeU и без него, отли­чают­ся), но я не могу с уве­рен­ностью ска­зать, что всег­да в луч­шую сто­рону. Впро­чем, «ланч» дей­стви­тель­но «бес­плат­ный» — на ско­рость генера­ции исполь­зование FreeU не вли­яет, так почему бы не поп­робовать?

Кста­ти, даже на демонс­тра­цион­ных изоб­ражени­ях вид­но, что FreeU повыша­ет кон­траст и насыщен­ность изоб­ражения. Дефол­тные нас­трой­ки в reForge подоб­раны так, что­бы избе­жать это­го эффекта, но он все рав­но про­явля­ется в некото­рых изоб­ражени­ях.

Выводы

Я попытал­ся опи­сать здесь лишь самые полез­ные пла­гины для reForge и под­робно оста­новил­ся на их нас­трой­ке и осо­бен­ностях работы. Одна­ко мно­гооб­разие при­мочек, конеч­но, нам­ного боль­ше, и если у тебя есть вре­мя на экспе­римен­ты, то ты навер­няка най­дешь что‑то инте­рес­ное. Не забудь поделить­ся наход­ками в ком­мента­риях!

В сле­дующей статье мы с тобой поп­робу­ем поэк­спе­римен­тировать и пок­рутить такие нас­трой­ки Stable Diffusion XL, которые, по мне­нию раз­работ­чиков, кру­тить не сле­дует, и пос­мотрим, что из это­го вый­дет.