Для Stable Diffusion XL есть нас­трой­ки, которые счи­тают­ся «пра­виль­ными»: опре­делен­ные сем­пле­ры, узкий диапа­зон зна­чений шка­лы CFG, фик­сирован­ные соот­ношения сто­рон и раз­меры изоб­ражения. Наруше­ние этих законов час­то при­водит к арте­фак­там, выгора­нию или блек­лым резуль­татам. Но что будет, если соз­натель­но игно­риро­вать пра­вила и исполь­зовать нес­тандар­тные парамет­ры? Спой­лер: иног­да из этих экспе­римен­тов выходит кое‑что полез­ное.
 

Борьба с выгоранием

При генера­ции кар­тинок модели с архи­тек­турой 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\ui-config.json, най­дя параметр txt2img/CFG Scale/minimum и изме­нив его зна­чение с еди­ницы на ноль.

"txt2img/CFG Scale/minimum": 0,

Эти сем­пле­ры пере­опре­деля­ют шка­лу CFG; при их исполь­зовании чис­ло шагов сто­ит выс­тавить рав­ным 50, а зна­чение CFG выб­рать дроб­ным из про­межут­ка от 0 до 1. Вот так, нап­ример, выг­лядит изоб­ражение, сге­нери­рован­ное сем­пле­ром DPM++ 3M SDE CFG++ при зна­чении CFG = 0,7.

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

Продолжение доступно только участникам

Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».

Присоединяйся к сообществу «Xakep.ru»!

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее

  • Подпишись на наc в Telegram!

    Только важные новости и лучшие статьи

    Подписаться

  • Подписаться
    Уведомить о
    0 комментариев
    Межтекстовые Отзывы
    Посмотреть все комментарии