Запретный SDXL
Нарушаем правила и расширяем границы возможного при генерации картинок
Борьба с выгоранием
При генерации картинок модели с архитектурой U-Net работают, постепенно удаляя шум и восстанавливая из него детали. Для этого используются два типа предсказаний: cond (conditioned) и uncond (unconditioned). Cond отражает предсказание, основанное на текстовом запросе (и других условиях — например, ControlNet). Uncond — «пустое» предсказание или предсказание, созданное на основе негативных ключевых слов, описывающих то, чего мы не хотим видеть в окончательном изображении.
Баланс между предсказаниями cond и uncond управляется параметром CFG (Classifier-Free Guidance), который служит своеобразным мультипликатором. Высокие значения CFG приводят к увеличению расстояния между предсказаниями и, соответственно, усилению вклада cond. Это повышает детализацию и точность следования запросу.
Минимальное значение параметра CFG — единица (однако его можно снизить до нуля редактированием файла настроек; дробные значения CFG могут оказаться полезными для работы некоторых типов семплеров), максимальное — 35, среднее — от 3 до 7.
С ростом CFG, помимо детализации, растут контраст и насыщенность (цветовой контраст) изображения. При низких значениях CFG на выходе будет блеклая, малоконтрастная картинка с высокой степенью креативности и слабым следованием запросу. Если же значение CFG поднять выше допустимого для модели максимума, то картинка выйдет детализированной, но «пережженной».
В статье «Фишки Flux.1. Добиваемся лучших картинок от новой генеративной модели» я немного рассказал о том, на что влияет CFG в модели Flux и как правильно выбрать его значение. Сегодня же я хочу поговорить о вариантах использования экстремальных значений CFG, как очень низких, так и чрезвычайно высоких.
Низкие значения CFG: высокая креативность, но низкий контраст
Начнем, пожалуй, с работы с низкими значениями CFG. Насколько низкими? В зависимости от модели, «низкими значениями» могут быть как CFG = 3, так и дробные CFG = 0,3...0,9. Плюсы низких значений CFG — креативность и разнообразие, а также более точное следование выбранному стилю (от карандашных набросков до фотореализма). Разработчики многих моделей, оптимизированных под реализм, рекомендуют использовать пониженные значения CFG для достижения максимальной фотореалистичности; более высокие значения в таких моделях создают более гладкие, «синтетические» изображения.
info
Значения CFG относительны, а определение «низких» и «высоких» значений CFG зависит от конкретной модели. В дистиллированных (Flux) и ускоренных (Lightning, Turbo, Hyper, DMD2) моделях нормой считаются значения CFG от 1 до 1,5, и проблем с контрастом это не вызывает. Реже встречаются модели, рекомендующие значения CFG порядка 11 — и также не имеющие проблем с контрастом.
Все хорошо, но низкие значения CFG приводят к созданию креативных и прекрасно стилизованных изображений, которые выглядят блекло. Бороться с этим помогают семплеры класса CFG++. Метод CFG++ (Manifold-Constrained Classifier-Free Guidance) помогает улучшить качество выборки и обеспечить более точное следование запросу. Не вдаваясь в технические подробности, скажу, что CFG++ помогает справиться с артефактами (смазанные границы, искажения, неестественные формы объектов). Например, метод может устранять проблемы, связанные с некорректным рендерингом (двойные хвосты у животных, руки с шестью и более пальцами, взаимопроникающие объекты и прочее).

Все эти преимущества достигаются при использовании семплеров класса CFG++ и при минимальных значениях шкалы CFG, в большинстве случаев меньших единицы (в reForge шкала CFG по умолчанию начинается с единицы). Чтобы получить возможность использовать дробные значения в диапазоне от 0 до 1, нужно отредактировать файл webui\
, найдя параметр txt2img/
и изменив его значение с единицы на ноль.
"txt2img/CFG Scale/minimum": 0,
Эти семплеры переопределяют шкалу CFG; при их использовании число шагов стоит выставить равным 50, а значение CFG выбрать дробным из промежутка от 0 до 1. Вот так, например, выглядит изображение, сгенерированное семплером DPM++ 3M SDE CFG++ при значении CFG = 0,7.

Для сравнения: обычный DPM++ 3M SDE отрабатывает с CFG = 4 следующим образом.

Впрочем, разные семплеры требуют разных подходов. Так, модификация семплера Euler SMEA Dy CFG++ требует установить шкалу CFG в значение 1,5 или даже 3.


Для сравнения — тот же семплер в стандартном исполнении (без CFG++), со значением шкалы 7.

Обрати внимание: семплеры CFG++ несовместимы со многими расширениями. Например, на данный момент не работает SWG (Smoothed Windows Guidance), режим Warp Drive из AutomaticCFG.
Высокие значения CFG: точное следование запросу и детализация, сопровождаемые «выгоранием»
Способов борьбы с выгоранием при использовании высоких значений шкалы CFG придумано гораздо больше. Эти способы очень разные, и результат работы одного расширения разительно отличается от результатов других. Какие‑то способы совместимы, какие‑то конфликтуют между собой, а какие‑то не поддерживают некоторые семплеры (в первую очередь — семплеры класса CFG++, которые решают схожую задачу). В результате однозначно ткнуть пальцем и сказать «используй это» невозможно; для разных ситуаций подходят разные способы.
DynamicThresholding (CFG-Fix)
Встроенное расширение DynamicThresholding (CFG-Fix) Integrated стало одним из первых решений, ограничивающих негативный эффект высоких значений CFG. Использование этого расширения требует предварительной настройки; рекомендую начать с тех значений, которые показаны на скриншоте (за исключением параметра Mimic Scale, который нужно менять в зависимости от модели и значения шкалы CFG).

Идея довольно проста и не требует сложных математических вычислений. На начальных шагах генерации алгоритм использует пониженное значение CFG, постепенно поднимая его в зависимости от этапа генерации. Это помогает минимизировать выгорание в начале генерации и повысить детализацию в ее конце.
Использование этого расширения, в частности, позволяет создавать изображения с широким динамическим диапазоном (псевдо-HDR); если ты хочешь добиться именно такого эффекта — смело начинай экспериментировать с DynamicThresholding. Несмотря на возраст и относительную простоту алгоритма, не стоит пренебрегать этим расширением, но использовать его постоянно и со всеми моделями, вероятно, не надо.

RescaleCFG
Следующее расширение — RescaleCFG for reForge — выглядит максимально просто: единственная настройка мультипликатора CFG, и ничего более. Алгоритм сжимает динамический диапазон изображения, основываясь на значении мультипликатора. Если начальное значение шкалы CFG слишком высокое, то в результате на выходе ты получишь типичный псевдо-HDR, что и демонстрирует изображение с CFG = 15 и мультипликатором RescaleCFG = 0,8.

Если же подойти к делу более аккуратно и использовать CFG = 7 с тем же мультипликатором, результат получится намного более естественным.

На основе аналогичных методов реализованы функции rescale в расширениях, реализующих внутреннее внимание; имей это в виду и не используй отдельное расширение RescaleCFG, если источник «выгорания» — функция внутреннего внимания.
AutomaticCFG
В расширение AutomaticCFG for reForge встроено сразу несколько методов ограничения CFG: Simple CFG, Dynamic CFG, Warp Drive, Preset Loader (больше половины пресетов не работает) и Post CFG Rescale. Автор расширения — разработчик reForge, который портировал метод из соответствующей ноды для Comfy.
git clone https://github.com/Panchovix/reForge-AutomaticCFG.git
В простейшем случае (режим Simple) число настроек минимально.

В этом режиме расширение заменяет шкалу CFG таким образом, чтобы при прочих равных выдавать картинку, похожую на ту, которую усредненная модель выдаст при CFG = 8 (это личное предпочтение разработчика, о чем он и пишет в документации). Соответственно, те значения, которые ты укажешь в поле CFG, будут учитываться как твои пожелания к уровню насыщенности и контраста по отношению к «среднему» значению 8. Начинать эксперименты нужно с указания CFG = 8 — и дальше смотреть, стоит ли менять этот параметр в сторону увеличения или уменьшения контраста и насыщенности картинки. Ниже — пример с CFG = 8:

А теперь — вишенка на торте, официальная рекомендация разработчика AutomaticCFG, выведенная на самом верху репозитория: «Бросайте вот это всё и айда сюда!» Куда именно «айда»? В плагин Skimmed CFG!
Warp Drive: ускорение генерации
В том же самом AutomaticCFG спрятана еще одна вкладка — Warp Drive. Если ты включишь Warp Drive (все прочие функции расширения, в том числе Simple, должны быть отключены), то генерация ускорится на 160% при использовании шедулера Align Your Steps (по крайней мере, так утверждает разработчик). Фактическое ускорение зависит от множества параметров, но сократить время генерации (включая hires.fix) с 40 до 30 секунд мне удалось. А чем приходится платить за скорость? Механизм пропускает расчет предсказания uncond в большей (в конфигурации 1/1/1) или меньшей (в остальных конфигурациях) степени, что однозначно меняет картинку — и далеко не всегда в худшую сторону (точнее, в качестве uncond берется некое усредненное значение предыдущего и текущего значений cond). Так что эту функцию можно попробовать; результат может порадовать или разочаровать, но он определенно будет отличаться.

Результат как минимум оригинальный. Стоит попробовать его и в других условиях.

info
Другие функции ограничения CFG совместно с Warp Drive не работают. Придется выбирать: или одно, или другое.
APG’s now your CFG
Для постоянного использования рекомендую встроенное в reForge расширение с длинным названием “APG’s now your CFG” and Guidance Limiter for reForge. Оно использует механизм, описанный в исследовании Eliminating Oversaturation and Artifacts of High Guidance Scales in Diffusion Models. Авторы предлагают новый механизм работы CFG (Classifier-Free Guidance), который должен устранить проблему выгорания изображений при высоких значениях шкалы. Идея в том, чтобы разделить CFG на параллельный и ортогональный компоненты, уменьшить влияние первого (вызывающего выгорание) и усилить — второго. Новый метод APG (Adaptive Projected Guidance) в теории сохраняет преимущества CFG, позволяя использовать повышенные значения шкалы и улучшая качество генерации без замедления.

Сильное влияние на генерацию оказывает параметр APG Momentum. С настройками по умолчанию (APG Momentum = 0,5), как на скриншоте, APG мало влияет на «выгорание» картинки, но качество и детализация картинки улучшаются при использовании средних значений CFG. В обсуждении на Reddit пришли к выводу, что настройки по умолчанию отлично работают с нормальными для модели значениями шкалы CFG (обычно от 5 до 7). Я пришел к такому же выводу независимо от автора дискуссии, и расширение APG с настройками по умолчанию (APG Momentum = 0,5) у меня теперь постоянно включено.


Значения по умолчанию не помогают справиться с высоким CFG.

В то же время отрицательные значения APG Momentum (в промежутке от –0,25 до –0,75) отлично помогают справиться с выгоранием на высоких значениях CFG.
Снижение Momentum до –0,25 уже дает заметный эффект.

В качестве эксперимента можно попробовать установить APG Momentum в значение –1, а CFG в промежутке от 8 до 12.

Наконец, можно попробовать экстремальное значение: APG Momentum в значение –1, а CFG = 15.

Skimmed CFG
Также рекомендую расширение Skimmed CFG. Оно тоже призвано сдерживать «выгорание» картинки при высоких значениях CFG.
Устанавливаем:
git clone https://github.com/Panchovix/reForge-SkimmedCFG.git

Из всех протестированных расширений контроля выгорания это показалось мне самым интересным. Во‑первых, оно действительно способно сдержать негативные эффекты от высоких значений шкалы CFG. Ниже — картинка с CFG = 30 и линейной интерполяцией Skimmed CFG = 3.

Во‑вторых, использование этого расширения способно улучшить картинку в плане отрисовки мелких деталей. Качество повысится благодаря сглаживанию избыточных деталей, которые так и норовят вылезти на высоких значениях шкалы CFG.
Высокое разрешение в один проход
Время от времени хочется создать картинку быстро, сразу в высоком разрешении, не применяя медленный hires.fix. У моделей SDXL, в отличие от SD 3.5 Large, нет архитектурных ограничений, запрещающих генерировать картинки практически в любом разрешении; единственное условие — размерности сторон должны быть кратны 64. В то же время большинство моделей обучались на изображениях в одном из предопределенных стандартных разрешений, и попытка немного «растянуть» картинку — хотя бы в полтора раза, до 1024 ✕ 1536, — может привести к видимым искажениям. Вот так модель albedobaseXL_v31Large обработает наш тестовый запрос.

Поскольку использовалось нестандартное для SDXL разрешение 1024 ✕ 1536, а у модели отсутствует база, появляются искажения. На картинке выше торс и шея летчицы вытянуты; изображение смотрится неестественно.
Чтобы обойти эту проблему, была разработана технология Kohya Deep Shrink. Метод прост: первые X шагов изображение генерируется в пониженном разрешении (во сколько раз понижать разрешение, задается параметром), создавая основу; последующие шаги модель отрабатывает в полном разрешении, детализируя эту основу. В теории такой подход позволяет избежать дублирования крупных деталей (например, числа хвостов и лап у кошек), в то же время на последних шагах создавая детальное изображение.

После включения встроенного в reForge расширения Kohya HRFix Integrated с настройками по умолчанию получается уже такая картинка.

Обрати внимание: желаемое разрешение указывается сразу в основных настройках высоты и ширины картинки, а hires.fix можно отключить (если ты его включишь, то разрешение будет повышено еще раз).
В то же время возможности этого подхода ограниченны; реалистичный предел Kohya HRFix при генерации объектов с узнаваемыми пропорциями (люди, животные) — полуторакратное повышение разрешения.
Попробуй установить размеры изображения 1536 на 1152 (неважно, в портретной или альбомной ориентации), включить Kohya HRFix и установить параметры Downscale Factor = 1,5, Start Percent = 0, End Percent = 0,65. В качестве семплера можно установить Euler DY CFG++ с соответствующим невысоким значением CFG, а в качестве шедулера — Beta или Align Your Steps. Обычный hires.fix можно отключить вовсе или установить в консервативное значение 1,5; для второго прохода имеет смысл установить альтернативный семплер DPM++ 3M DY (для более высокой детализации). Многие модели с такими настройками выдадут результат, превосходящий по качеству генерации в стандартном разрешении.
Почему именно такое разрешение? Потому что как сами цифры, так и результат их деления на 1,5 должен быть кратным 64. Можешь попробовать и другие подобные варианты.
Появился также новый интересный вариант, основанный на похожей технологии, но реализующий ее на качественно другом уровне. HiDiffusion позволяет одновременно увеличить разрешение картинки и скорость генерации (забегая вперед: да, это действительно работает, пусть и с определенными ограничениями и не на всех моделях).
Расширение устанавливается обычным способом:
git clone https://github.com/Panchovix/reforge_jankhidiffusion.git
После перезапуска reForge в интерфейсе появится вкладка RAUNet/MSW-MSA for reForge. Активируй основное расширение, после чего включи настройки RAUNet Simple Enabled (вкладка RAUNet Simple) и MSW-MSA Simple Enabled (вкладка MSW-MSA Simple). Второе — не обязательно; MSA может помочь увеличить скорость генерации, но может и не помочь. Настройки RAUNet показаны на скриншоте.


Композиция и детализация заметно отличаются и от генерации, не использующей Deep Shrink вообще, и от результата Kohya HRFix. Стоит сгенерировать несколько изображений с разными сюжетами, чтобы понять, какая технология лучше. Мой выбор — в пользу RAUNet.
У RAUNet есть и ряд дополнительных настроек, доступных на вкладке Advanced. Прежде чем включать расширенную версию метода, отключи RAUNet Simple. На вкладке расширенных настроек можно менять слои, к которым применяется механизм, а также настраивать начало и конец действия настроек пониженного разрешения.

Можно экспериментировать с настройками механизма Cross-Attention; интересный результат иногда можно получить, изменив CA Start Time на 0,45 и CA End Time на 0,65. Следующая картинка сгенерирована именно с такими настройками.

Технология RAUNet может использоваться и для генерации изображений сверхвысокого разрешения — например, размером 1536 на 2048 точек, что уже в три раза превышает штатные возможности моделей SDXL. Не все модели способны работать в этом разрешении, и далеко не всегда результат получается ожидаемым. Лучше всего в этом разрешении работают аниме‑модели (например, на базе Illustrious) и относительно свежие обученные модели и их ремиксы, созданные во второй половине 2024-го.
Наконец, с использованием RAUNet почти любые модели способны создавать гипердетальные изображения объектов и природы, в которых человеческому глазу незаметны нарушения пропорций. А вот для консервативных настроек, возможно, стоит использовать Kohya, в которой можно указать меньший делитель для пониженного разрешения.
info
Технология RAUNet несовместима с моделями CosXL и не всегда хорошо работает с моделями v-pred (V-predition).
А теперь — все в одном
Наконец, воспользуемся полученными знаниями, чтобы создать несколько картинок в стиле аниме в максимально возможном качестве и разрешении за минимальное время. Генерировать будем сразу в разрешении 1536 ✕ 2048, установив в WebUI соответствующие настройки.
Модель: можно выбрать любую свежую модель на основе Illustrious с типом предсказания EPS (но не v-pred), например harmoniqmixEpred_v11.
В качестве семплера воспользуемся одним из вариантов CFG++; я выбрал Euler DY CFG++, альтернативы — другие семплеры, в названии которых присутствуют обе части — Dy и CFG++. Шедулер — Beta. Шкалу CFG Scale подобрал экспериментально, для выбранной модели и настроек CFG = 2,5. Hires.fix отключен, так как мы сразу создаем картинку в нужном разрешении. Число шагов установил в 50 (можно и меньше, но экономятся считаные секунды).
Итого: Euler DY CFG++, Beta, 50 steps, CFG = 2,5.
Далее — расширения:
- FreeU Integrated — включено, настройки по умолчанию;
- RAUNet/MSW-MSA for reForge — включено, настройки по умолчанию RAUNet Simple Enabled и MSW-MSA Simple Enabled;
- APG’s now your CFG and Guidance Limiter for reForge — включено, настройки по умолчанию (Momentum = 0,5);
- Enable Guidance Limiter — включено, настройки по умолчанию (5,42/0,28).
Для начала — почему так важен выбор семплера. Один и тот же запрос, разные семплеры.
Euler DY CFG++ и Euler SMEA DY CFG++ похожи; можно пользоваться любым.


А вот DPM++ 2M DY CFG++ дает совершенно другую картинку, с большей четкостью и избыточной детализацией. Мне пришлось снизить значение CFG до 1,5, чтобы избежать появления шума.

А в следующей паре примеров запрос был целиком идентичный; сравни результат (Euler DY CFG++ и DPM++ 2M DY CFG++ соответственно).


И еще пара примеров с теми же настройками.


Наконец, в качестве демонстрации возможностей модели — два изображения, «нарисованных» разными авторами.


Все расширения в одном файле
Ниже приводится bat-файл, который можно запустить в папке webui\
, чтобы установить все расширения, перечисленные в этой статье и в предыдущей.
REM Расширения пользовательского интерфейса
REM SD Webui Tabs Extension
git clone https://github.com/Haoming02/sd-webui-tabs-extension
REM Aspect Ratio Selection: выбрать одно из них
git clone https://github.com/altoiddealer/--sd-webui-ar-plusplus
REM git clone https://github.com/alemelis/sd-webui-ar
REM WebUI Agent Scheduler
git clone https://github.com/ArtVentureX/sd-webui-agent-scheduler
REM Config Presets
git clone https://github.com/Zyin055/Config-Presets
REM Civitai Helper
git clone https://github.com/zixaphir/Stable-Diffusion-Webui-Civitai-Helper
git clone https://github.com/DominikDoom/a1111-sd-webui-tagcomplete.git
git clone https://github.com/adieyal/sd-dynamic-prompts.git
REM Расширения для сегментации и детализации сегментов изображения
git clone https://github.com/Bing-su/adetailer.git
git clone https://github.com/wkpark/uddetailer
git clone https://github.com/pamparamm/sd-perturbed-attention.git
REM Расширения от разработчика reForge. Можно устанавливать пакетом или по отдельности
REM Forge Latent modifier:
git clone https://github.com/Panchovix/sd_forge_latent_modifier.git
REM Automatic CFG:
git clone https://github.com/Panchovix/reForge-AutomaticCFG.git
REM Skimmed CFG:
git clone https://github.com/Panchovix/reForge-SkimmedCFG.git
REM Differential Diffusion:
git clone https://github.com/Panchovix/reForge-DifferentialDiffusion.git
REM reForge HiDiffusion (Raunet, MSW-MSWA):
git clone https://github.com/Panchovix/reforge_jankhidiffusion.git
REM Расширения настроек изображений
REM Forge Couple
git clone https://github.com/Haoming02/sd-forge-couple
git clone https://github.com/hako-mikan/sd-webui-cd-tuner
git clone https://github.com/hnmr293/sd-webui-cutoff
git clone https://github.com/hako-mikan/sd-webui-prevent-artifact
git clone https://github.com/Haoming02/sd-webui-vectorscope-cc