FreeU / DPO / SPO - пошаговые оптимизаторы
Это специализированная версия модели Stable Diffusion XL (SDXL), доработанная с использованием метода SPO (Stable Policy Optimization). В рамках данного материала так же будет рассмотренны DPO Lora и FreeU расширение. Примеры которые можно получить на XL:
SPO, DPO - это обычные LORA?
По факту SPO и DPO модели это особые пошаговые рекомендации более тонкой настройки модели XL на каждом шаге генерации, но есть отличия:
- DPO (Diffusion Policy Optimization):
Оптимизирует процесс дениойзинга (постепенного "очищения" изображения от шума), делая его более предсказуемым. Акцент — на скорость генерации. По сути занимается компановкой эстетически более правильного изображения, чтобы изображение точнее соответствовало запросу. Пример:
- Без DPO: По запросу «рыжий кот в космосе» может появиться кот с зелёными глазами вместо жёлтых.
- С DPO: Кот будет именно рыжим, в скафандре, с правильными деталями.
SPO (Stable Policy Optimization):
Уделяет больше внимания стабильности и детализации, жертвуя частичной скоростью ради качества. Особенно эффективен для сложных сцен с множеством объектов. Фокус будет идти на мелких визуальных различиях между шагами. Оф ссылка для скачивания на civitai. Пример:
- Без SPO: Изображение гор может быть размытым, как старая фотография.
- С SPO: Те же горы выглядят детализированными — виден каждый камень и травинка.
Т.к. модель XL - довольно кривожопенькая при определённых обстоятельствах, то использование SPO для сложных сцен является более предпочтительным чем DPO. Кроме того, модель SPO способна образно из говна делать конфетку вытягивая детали и цвет, в то время как DPO повышает точность следования подсказке. но есть нюанс - теряются стили если они указаны в подсказке - поэтому нужно увеличивать их вес!
Сравнение на примере:
Запрос: "робот в стиле стимпанк, шестерни, дым, город будущего на заднем плане".
DPO: Быстрее генерирует изображение, но шестерни могут быть схематичными, а дым — однородным. При этом всё же дым однозначно можно определить как дым, а шестерни видно что это именно они а не какие-либо другие запчасти.
SPO: Детализирует каждую шестерёнку, добавляет объем дыму за счет градиентов прозрачности, прорабатывает архитектуру города.
- FreeU - дополню до кучи расширением, которое по факту схоже с DPO по назначению, но является расширением со своими настройками. Поэтому логично протестировать сочетание SPO и FreeU.
FreeU
FreeU
FreeU — это инструмент, который настраивает картинку на каждом шаге, чтобы изображения были чёткими, но без лишнего шума. Работает как «фильтр» для фото.
FreeU регулирует, какие части нейросети влияют на результат. Например, усиливает насыщенность цветов, но уменьшает общую детализацию при этом увеличивается послушность подсказки.
Примеры с небоскрёбами: в оригинале каша с окнами на этажах - посчитать их невозможно, а сами здания выходят ломаными.
- Включение FreeU делает здания более правильной формы, этажи чётко различимы, но слишком всё вылизано, явно отсутствует естественный хаос в окнах. Включение SPO вносит естественный хаос вместе с исправлениями зданий, этажи ровные, окна включены в хаотичном порядке, набережная детальная и разнообразная.
- Включение SPO и FreeU позволяет в определённой степени получить комбинацию обоих методов, но всё будет зависеть от композиции и стиля - больше подходит для артов, нежели для фотографий.
Внимание настройки (см. рис.):
1) выбираем настройки согласно вашей модели
2) ВАЖНО нажать на галочку! Автоматически настройки не применяются.
Важно: расширение идеализирует картинку - что в большинстве случаев для фотореалистичных изображений не подойдёт, по крайней мере с настройками по умолчанию. Возможно потребуется поиграться с началом и концом работы расширения на определённых шагах.
FreeU сравнение
Сравним изображения до и после включения расширения FreeU.
Пример 1-2: Важный пример с фотогенерацией, FreeU - ухудшает картинку на стандартных настройках, переводит картинку в арт
Пример 3: изображение отдалённого персонажа с неразборчивыми чертами становится более близким, черты отчётливо видны, но детализация уменьшилась.
Пример 4: изображение стало более чётким, ушли лишние детали а оставшиеся поддаются чёткому описанию, хотя и выглядят более схематично.
FreeU тест шагов и CFG
Протестируем зависимость шагов и CFG, и как вывод - лучший результат на рекомендуемых настройках (Steps=20 и CFG=7) это для используемой в конкретном случае модели, в Вашем случае нужно проверить аналогичным тестом.:
FreeU тест начала и окончания действия FreeU
Ввиду излишней идеализации картинки при включении FreeU, попробуем включить и отключить расширение на различных шагах (процентах от общего количества). Первые шаги - самые важные! Так первые 0,2 важнее остальных 0,8. Задача состоит включить попозже и выключить побыстрее - тем самым сохраниться исходная композиция и поправятся детали. Выводы не делаю, т.к. многое будет зависеть от конкретной композиции, здесь же приведён только пример.
SPO
SPO пример алгоритма
Разберём упрощённый принцип действия SPO:
1. Поэтапная оценка: на каждом этапе шумоподавления генерируется несколько изображений-кандидатов. Это не полноценные изображения как для человеческого зрения, а скорее всего набор параметров векторов, и то "изображение-кандидат" которое больше соответствует описанию - то и выбирается. Например если вы идёте по полю и видите камень с надписью "пойдёте прямо - то смерть, а влево или право то может быть выживите", естественно ваш вектор движения будет влево или в право.
2. Сравнение предпочтений: обученная модель предпочтений оценивает и выбирает изображения наивысшего качества из числа кандидатов. Если продолжить пример с камнем, то вы более внимательно читаете надписи на камне и оцениваете риски. Возможно вы оцените грамматические ошибки, стиль букв, косвенно оцените время нанесения надписей и предположите кем и для чего была нанесена надпись - тогда Вы сможете сделать более осознанный и правильный выбор.
3. Случайная инициализация: на каждом шаге выбирается случайный кандидат для инициализации следующего процесса оптимизации. Т.е. при относительно равных выводах о направлении и необходимости двигаться далее, выбирается одно из наиболее оптимальных направлений.
Этот метод постепенно улучшает текстуру и детализацию изображения, значительно повышая его эстетическое качество. Аналогично и с камнями, если продолжить аналогию, то на каждом шаге вы встретите по одному камню и будите сравнивать свой выбор и соотносить свою цель. В конечном итоге благодаря акценту на незначительных мелочах на каждом шаге - вы получите заметно лучший результат, нежели если бы просто читали текст и случайно выбирали направление только по описанию.
Исходя из описанного выше, логично предположить что увеличение шагов приведёт к увеличению качества и точности, при чём использование различных методов анализа (сведение к конечному результату в форме Sampler) будет по различному влиять на конечный результат.
SPO пример алгоритма
SPO параметры это его вес, но естественно этот параметр будет зависеть от CFG. Судя по тестам данная лора вытягивает информацию о цветах и деталях как бы добавляя их в модель на основе предсказания, поэтому на достаточно низком CFG результаты выйдут лучше чем на рекомендуемом для модели. Проверим эту зависимость и убедимся в этом. Ввиду того что низкое значение CFG вытягивает меньше параметров из облака векторов модели, то для согласования частей попробуем включить расширение FreeU (будем использовать рекомендуемые настройки по умолчанию). Получим следующие результаты на широком диапазоне. сравнивать следует с эталоном:
Следует отметить, что в подсказке использовалась гремучая смесь Artist - art by league of legends arcane, art by Stonetoss, art by Grimdark, art by Shinkawa Youji Style - это необходимо для расширения поля выборки параметров из модели, поэтому результат следует сравнивать держа эталон в голове. Как вывод - в районе веса SPO 0.1-1.0 при CFG=3-7 выходит наиболее интересный результат. Проведём повторный тест в уточнённом диапазоне на другой подсказке:
Как вывод - SPO как и FreeU это не улучшалки добавляющие деталей или меняющие форму чего-либо, это Lora и расширение полностью меняющие изображение в сторону визуальной привлекательности, но с меньшим соответствием стилю в подсказке. С FreeU - надо быть особо аккуратным на реалистичных изображениях, больше подходит для Art композиций (см пример из рабочих процессов).
Рабочие процессы
Настройки
Настройки варьируются от степени веса Lora и наличия стиля Artist в подсказке. Если хотите сохранить стиль - уменьшайте вес Lora. Если видите пережённость - уменьшайте CFG. Если хотите получить нечто интересное без критичной конкретики следования стилю то настройки следующие:
- Подключаем заранее скачанную Lora. В подсказке должна появиться надпись <lora:spo_sdxl_10ep_4k-data_lora_webui:1>.
- Sampling method = DPM++ 3M SDE (позволяет несколько раз в течении генерации попытаться изменить изображение, что заставляет нейросеть, при достаточном количестве шагов, сводить изображение в единый концепт увеличивая тем самым детализацию.
- Sampling steps = 40+ (из-за используемого семплера)
- CFG Scale = 2-4 (начать можно с малого для реалистичного изображения, или с большего для Art изображений. Если будет пережаренность - нужно уменьшать этот параметр.
- FreeU включаем только при необходимости! Расширение выравнивает элементы идеализируя композицию, но при этом очень сильно страдает детализация и реалистичность. Если нужен Арт, при включении выбираем рекомендуемые для модели настройки, жмём галочку рядом с дискеткой для применения настроек. Включение расширение актуально в основном для исправления явных мелких деталей.
- После получения предварительной генерации можно и проАпскейлить (увеличить) изображение, например включаем Hires. fix, выбираем
- Upscaler=4x_NMKD-Siax_200k
- Denoising strength=0,35 что бы несильно менялась картинка
- Upscale by = 1,35 достаточно что бы значительно улучшить картинку и не спалить своё железо и время.
После получения и оценки качества картинки, можно приступать к дальнейшему увеличению с проработкой и исправлением деталей в режиме img2img.
Фото
Тест стиля фотографического качества с указанием конкретной композиции с upscaler (Hires. fix)=1,35
В примере FreeU включён (слева) и выключен (справа) - рекомендую на таких реалистичных изображениях его выключить.
Prompt
{ВАША_ПОДСКАЗКА},
art by Thomas Saliot, art by Alex Webb, Canon 5d mark 4, High Shutter Speed, Canon RF, F/8,
<lora:spo_sdxl_10ep_4k-data_lora_webui:1>
Steps: 40, Sampler: DPM++ 3M SDE, Schedule type: Exponential, CFG scale: 2, Seed: 1, Size: 1024x1024, Model hash: c9e3e68f89, Model: juggernautXL_v9Rundiffusionphoto2, Denoising strength: 0.35, FreeU Stages: "[{\"backbone_factor\": 1.2, \"skip_factor\": 0.9}, {\"backbone_factor\": 1.4, \"skip_factor\": 0.2}]", FreeU Schedule: "0.0, 1.0, 0.0", FreeU Version: 2, Hires upscale: 1.35, Hires upscaler: 4x_NMKD-Siax_200k, Lora hashes: "spo_sdxl_10ep_4k-data_lora_webui: 5256ee0c312f", Version: v1.10.1
Спойлер
Фото
Тест генерации без указания композиции, только стиль Artist без upscaler.
Т.к. Арт то FreeU можно включить, хотя это не обязательно.
Prompt
art by {ВАШ_ARTIST},
<lora:spo_sdxl_10ep_4k-data_lora_webui:1>, <lora:add-detail-xl:1.5>, misc
Steps: 40, Sampler: DPM++ 3M SDE, Schedule type: Exponential, CFG scale: 3, Seed: 1, Size: 1216x832, Model hash: c9e3e68f89, Model: juggernautXL_v9Rundiffusionphoto2, FreeU Stages: "[{\"backbone_factor\": 1.2, \"skip_factor\": 0.9}, {\"backbone_factor\": 1.4, \"skip_factor\": 0.2}]", FreeU Schedule: "0.0, 1.0, 0.0", FreeU Version: 2, Lora hashes: "spo_sdxl_10ep_4k-data_lora_webui: 5256ee0c312f, add-detail-xl: 9c783c8ce46c", Version: v1.10.1
персонаж
Тест влияния персонажа / актёра на результат с upscaler (Hires. fix)=2
Prompt
{ВАШ ПЕРСОНАЖ или АКТЁР} in the World of Warcraft, cinematic look, soothing tones, insane details, intricate details, hyperdetailed, low contrast, soft cinematic light, dim colors, exposure blend, faded, slate gray atmosphere, intricate details,
<lora:spo_sdxl_10ep_4k-data_lora_webui:1>, <lora:add-detail-xl:1.5>, misc
Steps: 40, Sampler: DPM++ 3M SDE, Schedule type: Exponential, CFG scale: 3, Seed: 7, Size: 1216x832, Model hash: c9e3e68f89, Model: juggernautXL_v9Rundiffusionphoto2, Denoising strength: 0.35, FreeU Stages: "[{\"backbone_factor\": 1.1, \"skip_factor\": 0.6}, {\"backbone_factor\": 1.2, \"skip_factor\": 0.4}]", FreeU Schedule: "0.0, 1.0, 0.0", FreeU Version: 2, Hires upscale: 2, Hires upscaler: 4x_NMKD-Siax_200k, Lora hashes: "spo_sdxl_10ep_4k-data_lora_webui: 5256ee0c312f, add-detail-xl: 9c783c8ce46c", Version: v1.10.1
Спойлер
Лайфхак
Т.к. у нас по сути включены 2 согласовашки изображения, то для получения высокодетализированного изображения лучше воспользоваться не столько Upscaler (Hires. fix) сколько таким замечательным разрешением как Kohya Hires. fix - расширение до определённых шагов уменьшает изображение в указанное количество раз, после чего подсовывает его для последующей генерации на повышенном разрешении, тем самым помогает лепить изображение на определённой заготовке. Такой подход в 2-3 раза быстрее апскейла, по крайней мере у меня. В примере разрешение 2048*1080 в сравнении с отключённым и включённым расширением.
Ещё быстрее выйдет если заменить семплер на DPM++ SDE с 20 шагами и даже меньше. Кроме того изображение выйдет чище, но менее детализированным чем в примере ниже.
Prompt
{ВАШ ПЕРСОНАЖ или АКТЁР} in the World of Warcraft, cinematic look, soothing tones, insane details, intricate details, hyperdetailed, low contrast, soft cinematic light, dim colors, exposure blend, faded, slate gray atmosphere, intricate details,
<lora:spo_sdxl_10ep_4k-data_lora_webui:1>, <lora:add-detail-xl:1.5>, misc, <lora:MJ52:0.5>
Steps: 40, Sampler: DPM++ 3M SDE, Schedule type: Exponential, CFG scale: 3, Seed: 7, Size: 2048x1080, Model hash: c9e3e68f89, Model: juggernautXL_v9Rundiffusionphoto2, FreeU Stages: "[{\"backbone_factor\": 1.1, \"skip_factor\": 0.6}, {\"backbone_factor\": 1.2, \"skip_factor\": 0.4}]", FreeU Schedule: "0.0, 1.0, 0.0", FreeU Version: 2, DSHF_s1: 0.1, DSHF_d1: 2, DSHF_s2: 0.2, DSHF_d2: 3, DSHF_scaler: bicubic, DSHF_down: 0.5, DSHF_up: 1.5, DSHF_smooth: True, DSHF_early: False, DSHF_one: True, Lora hashes: "spo_sdxl_10ep_4k-data_lora_webui: 5256ee0c312f, add-detail-xl: 9c783c8ce46c, MJ52: 000c96b6bd08", Version: v1.10.1
Спойлер
Лайфхак 2
Kohya Hires. fix - оставляем включённым, подбираем параметры сходя из вашего разрешения, пример 2048 на 1024 смотрите в спойлере "prompt".
Но модель на этот раз берём Lighting, например realvisxlV50_v50LightningBakedvae. Данная модель способна выдавать шедевры на 4 шагах, требует уменьшения CFG до 1-2 и применение семплера DPM++ SDE.
В примере ниже сравнение без SPO (слева) и с SPO Lora (справа) - вывод очевиден!
Скорость генерации в разрешении 2048*1024 около 25 сек!
Prompt
Sailor Moon in the World of Warcraft, cinematic look, intricate details, low contrast, soft cinematic light, exposure blend, slate gray atmosphere, <lora:spo_sdxl_10ep_4k-data_lora_webui:1.65>
Steps: 4, Sampler: DPM++ SDE, Schedule type: Karras, CFG scale: 2, Seed: 1, Size: 2048x1024, Model hash: fabcadd933, Model: realvisxlV50_v50LightningBakedvae, DSHF_s1: 0.1, DSHF_d1: 4, DSHF_s2: 0.2, DSHF_d2: 6, DSHF_scaler: nearest-exact, DSHF_down: 0.5, DSHF_up: 2, DSHF_smooth: True, DSHF_early: False, DSHF_one: True, Lora hashes: "spo_sdxl_10ep_4k-data_lora_webui: 5256ee0c312f", Version: v1.10.1