Ког­да в августе это­го года выш­ла модель FLUX.1 [dev], некото­рые поль­зовате­ли были разоча­рова­ны излишне «циф­ровым» видом изоб­ражений, отсутс­твие негатив­ных клю­чевых слов нак­ладыва­ло серь­езные огра­ниче­ния на потен­циал модели, а повышен­ные тре­бова­ния к железу огор­чили вла­дель­цев виде­окарт пре­дыду­щих поколе­ний. Эти и мно­гие дру­гие огра­ниче­ния были успешно пре­одо­лены — но появи­лись новые.

Поддержка Flux в WebUI Forge

WebUI Forge — интерфейс к Stable Diffusion, любимый мно­гими за его высокую ско­рость и удобс­тво исполь­зования. Пер­вая вер­сия Forge выш­ла в фев­рале 2024 года, пос­ле чего мно­го месяцев не получа­ла обновле­ний. Дли­тель­ное отсутс­твие раз­работ­ки при­вело к соз­данию фор­ка ReForge, который под­робно опи­сан в статье «ReForge. Улуч­шаем кар­тинки, генери­руемые Stable Diffusion». Но вот ори­гиналь­ный раз­работ­чик Forge вер­нулся — и анон­сировал круп­ное обновле­ние про­екта. В спис­ке изме­нений — переход на Gradio 4 (ста­ло нем­ного удоб­нее, но ряд рас­ширений перес­тал работать), исполь­зование пос­ледней вер­сии PyTorch (ста­ло еще быс­трее), появ­ление двух сотен встро­енных сти­лей по при­меру Fooocus того же авто­ра (под­робнее — в мо­ей статье о нем) и новый механизм рас­пре­деле­ния виде­опа­мяти, поз­воля­ющий дос­тичь мак­сималь­но воз­можной ско­рос­ти генера­ции на кон­крет­ном железе.

Нас же инте­ресу­ет добав­ление в WebUI Forge под­дер­жки модели FLUX. Теперь мож­но исполь­зовать все воз­можные вари­анты модели от пол­ноцен­ной 16-бит­ной до 4-бит­ной NF4. Более того, мож­но отдель­но выбирать VAE и модель (или сра­зу нес­коль­ко моделей) тек­сто­вого декоде­ра.

Как это работа­ет? Поч­ти точ­но так же, как любая дру­гая базовая модель, за исклю­чени­ем нового парамет­ра Flux Distilled Guidance (в comfy/SwarmUI он называ­ется Flux Guidance Scale), о котором будет чуть ниже. Дос­таточ­но перек­лючить интерфейс в режим flux, выб­рать модель из спис­ка и ука­зать тре­буемые VAE и тек­сто­вые декоде­ры.

NF4, FP16, FP8, Q8, GGUF: в чем разница?

Ес­ли ты будешь поль­зовать­ся Flux, то силь­но облегчишь себе жизнь, если запом­нишь, в чем раз­ница меж­ду раз­личны­ми пред­став­лени­ями модели.

NF4 — это самый быс­трый фор­мат в пла­не ско­рос­ти вывода резуль­татов, но и самый неп­ред­ска­зуемый в пла­не раз­нооб­разия ком­позиции по срав­нению с дру­гими фор­матами.

GGUF — сжа­тый фор­мат, в котором может быть пред­став­лена модель. В отли­чие от фор­мата safetensors, файл GGUF может содер­жать толь­ко одну сеть (диф­фузи­онную или тек­сто­вый декодер). В рам­ках фор­мата GGUF все вер­сии Q8, Q6 и так далее вплоть до Q1 — это вари­анты кван­тования моделей в поряд­ке убы­вания качес­тва и тре­бова­ний к железу. GGUF — самый мед­ленный фор­мат: при его исполь­зовании в режиме реаль­ного вре­мени пря­мо во вре­мя генера­ции про­изво­дит­ся рас­паков­ка час­тей модели. Зато качес­тво таких моделей мак­сималь­но приб­лижа­ется к резуль­татам фор­матов FP8 и FP16. GGUF сов­местим со все­ми виде­окар­тами, вклю­чая GTX, а млад­шие вари­анты мож­но запус­кать даже на виде­окар­тах с миниму­мом памяти.

FP8 — вари­ант с нес­жатым 8-бит­ным пред­став­лени­ем. При этом аппа­рат­ное уско­рение вычис­лений в фор­мате FP8 под­держи­вает­ся толь­ко на кар­тах Nvidia, начиная с 40-й серии, из‑за чего модель в FP8 будет генери­ровать кар­тинку доль­ше, чем пол­ная модель FP16 (разуме­ется, при усло­вии, что обе модели пол­ностью умес­тились в виде­опа­мять — что в слу­чае с FP16 воз­можно лишь на топовых виде­окар­тах). Если же объ­ема виде­опа­мяти недос­таточ­но, что­бы в него пол­ностью помес­тилась модель FP16, то FP8 соз­даст кар­тинку быс­трее.

Па­радок­саль­ным обра­зом для виде­окарт семей­ства RTX самым быс­трым с вычис­литель­ной точ­ки зре­ния фор­матом явля­ется FP16, а для ста­рых моделей GTX — и вов­се FP32, который, разуме­ется, нико­им обра­зом не помеща­ется в память этих моделей (раз­мер модели Flux в пред­став­лении FP32 — око­ло 46 Гбайт).

По ско­рос­ти и точ­ности работы модели соот­носят­ся сле­дующим обра­зом:

Кри­терий Ран­жирова­ние
Точ­ность FP16 >> Q8 > Q4
Точ­ность для Q8 Q8_K (модель отсутс­тву­ет) > Q8_1 (модель отсутс­тву­ет) > Q8_0 >> FP8
Точ­ность для Q4 Q4K_S >> Q4_1 > Q4_0
Точ­ность для NF4 NF4 меж­ду Q4_1 и Q4_0 (плюс/минус из‑за раз­личия мет­рик)
Ско­рость (без выг­рузки, для виде­окарт от 24 Гбайт VRAM) FP16 ≈ NF4 > FP8 >> Q8 > Q4_0 >> Q4_1 > Q4K_S > про­чие
Ско­рость (с выг­рузкой, для виде­окарт с 8–16 Гбайт VRAM) NF4 > Q4_0 > Q4_1 ≈ FP8 > Q4K_S > Q8_0 > Q8_1 > про­чие ≈ FP16

Шпаргалка: какие файлы качать

По­жалуй, луч­шим соот­ношени­ем качес­тва, ско­рос­ти и сов­мести­мос­ти обла­дают модели в пред­став­лении FP8 и фор­мате safetensors. Модели Q8_0 в пред­став­лении GGUF под­держи­вают­ся пока не вез­де. Если оста­новить свой выбор на пред­став­лении fp8/safetensors, нам понадо­бят­ся:

  1. Диф­фузи­онная модель. Файл нуж­но положить в пап­ку, в которой лежат все осталь­ные базовые модели (нап­ример, models/Stable-Diffusion). В этой вер­сии модели тек­сто­вые декоде­ры и VAE уже встро­ены, поэто­му ничего допол­нитель­ного качать не тре­бует­ся. Для исполь­зования модели дос­таточ­но будет выб­рать ее из спис­ка. Если же ты хочешь заполу­чить одну из моделей с аль­тер­натив­ным кван­товани­ем (нап­ример, Q8_0, качес­тво которой прак­тичес­ки неот­личимо от пол­ной вер­сии FP16), то тебе при­дет­ся ска­чать целых четыре фай­ла, раз­ложив их по трем раз­ным пап­кам.
  2. Мо­дель в фор­мате GGUF (рекомен­дую вари­ант Q8_0) с сай­та Huggingface. Нуж­но перемес­тить в пап­ку, в которой лежат все осталь­ные базовые модели (нап­ример, models/Stable-Diffusion).
  3. Пара тек­сто­вых декоде­ров T5XXL (рекомен­дую вер­сию FP8) и CLIP_L. Нуж­но положить в пап­ку models/text_encoder.
  4. VAE: файл ae.safetensors с сай­та раз­работ­чиков. Положить в пап­ку models/VAE.

Пос­ле запус­ка WebUI Forge нуж­но перек­лючить веб‑интерфейс в режим Flux и выб­рать из спис­ка модель. Если выб­ранная тобой модель — файл flux1-dev-fp8.safetensors, то пос­ле это­го мож­но сра­зу запус­кать генера­цию. Если же выб­ран файл в фор­мате GGUF, то в допол­нитель­ном поле при­дет­ся ука­зать пару тек­сто­вых декоде­ров и VAE. В резуль­тате вер­хняя часть интерфей­са обре­тет при­мер­но такой вид, как на скрин­шоте ниже.

Те­перь мож­но нас­тро­ить раз­решение кар­тинки, уста­новить чис­ло шагов, Distilled Guidance Scale (рекомен­дую начать со зна­чения 2) — и мож­но генери­ровать кар­тинки.

Да­же если ты пред­почтешь прос­той путь (интегри­рован­ный файл модели flux1-dev-fp8.safetensors), в будущем, веро­ятно, тебе все же при­дет­ся научить­ся поль­зовать­ся отдель­ными тек­сто­выми декоде­рами и VAE: из‑за сущес­твен­но воз­росше­го по срав­нению с SDXL объ­ема декоде­ров авто­ры новых моделей ста­ли пуб­ликовать как интегри­рован­ные вари­анты, так и диф­фузи­онные модели отдель­но. Под­клю­чать диф­фузи­онные модели и декоде­ры по отдель­нос­ти не толь­ко удоб­но с точ­ки зре­ния опти­миза­ции исполь­зования виде­опа­мяти, но и сущес­твен­но эко­номит мес­то на дис­ке.

Запускаем Flux на старых видеокартах

В статье «FLUX.1 и SwarmUI. Генери­руем кар­тинки новой откры­той моделью» под­робно опи­сан штат­ный сце­нарий исполь­зования модели, для которо­го нуж­но заг­рузить исходные 16-бит­ные веса, отдель­ный VAE и фай­лы тек­сто­вых декоде­ров (которые, впро­чем, заг­ружа­ются авто­мати­чес­ки). Пол­ная модель тяжело­вата для обыч­ных виде­окарт; огра­ниче­нием выс­тупа­ет объ­ем виде­опа­мяти. Луч­ше все­го себя чувс­тву­ют вла­дель­цы виде­окарт с 16 и более гигабай­тами виде­опа­мяти; с некото­рым тру­дом пол­ная модель была втис­нута и в рам­ки 12-гигабай­тных моделей. Одна­ко на руках у поль­зовате­лей огромное чис­ло виде­окарт с 6 и 8 Гбайт виде­опа­мяти, и здесь опти­миза­ции бес­силь­ны.

Пер­вый вари­ант решения — кон­верта­ция модели в фор­мат FP8. Чек­пой­нты dev или schnell в вось­мибит­ном пред­став­лении на выбор мож­но ска­чать с сай­та раз­работ­чика comfy: Dev, Schnell.

Вось­мибит­ные вер­сии модели под­ходят для виде­окарт с 12 Гбайт виде­опа­мяти и менее; ско­рость работы на кар­тах с 8 Гбайт виде­опа­мяти доволь­но низ­кая, но по край­ней мере модель запус­кает­ся. Качес­тво по срав­нению с 16-бит­ными моделя­ми стра­дает нез­начитель­но, так как 8-бит­ная кван­тизация отно­сит­ся не к качес­тву финаль­ного изоб­ражения в фор­мате PNG или JPEG, а к точ­ности пред­ска­заний (то есть 8-бит­ная модель может демонс­три­ровать огре­хи при генера­ции мел­ких деталей, но харак­терных для 8-бит­ных рас­тро­вых кар­тинок арте­фак­тов ты, разуме­ется, не уви­дишь).

Эти модели нуж­но помес­тить в основную пап­ку, в которой лежат все базовые модели. В слу­чае SwarmUI это пап­ка Models/StableDiffusion, WebUI Forge — models/Stable-diffusion. Отдель­ный VAE для этих вер­сий ска­чивать не нуж­но.

Раз­работ­чик WebUI Forge пошел еще даль­ше, сде­лав модель при­год­ной для исполь­зования даже на очень ста­рых виде­окар­тах бла­года­ря новой тех­нологии кван­тизации NF4. По утвер­жде­ниям раз­работ­чика, этот метод поз­воля­ет зна­читель­но повысить про­изво­дитель­ность на устрой­ствах с огра­ничен­ным объ­емом виде­опа­мяти (6, 8, 12 Гбайт VRAM), обес­печивая уско­рение от 1,3 до 4 раз по срав­нению с исполь­зовани­ем фор­мата FP8.

Силь­ная сто­рона NF4 — ско­рость: модели в этом фор­мате работа­ют зна­читель­но быс­трее, чем FP8, осо­бен­но на виде­окар­тах с мень­шим объ­емом памяти и кар­тах, не под­держи­вающих уско­рение для фор­мата FP8. Кро­ме того, раз­мер модели в фор­мате NF4 при­мер­но вдвое мень­ше по срав­нению с FP8.

По сло­вам раз­работ­чика, NF4 пре­вос­ходит FP8 в точ­ности вычис­лений и обла­дает луч­шим динами­чес­ким диапа­зоном: в отли­чие от FP8, к которой все коэф­фици­енты пред­став­лены с вось­мибит­ной дис­кре­тиза­цией, NF4 поз­воля­ет пре­обра­зовы­вать тен­зоры в ком­бинацию фор­матов float32, float16, uint8 и int4, что обес­печива­ет повышен­ную точ­ность вычис­лений. Поль­зовате­ли Reddit выложи­ли дос­таточ­ное количес­тво срав­нений, что­бы сде­лать вывод, что в реаль­нос­ти ситу­ация с NF4/FP8 далека от однознач­ной; в каких‑то слу­чаях луч­ше показы­вает себя один вари­ант, в каких‑то — дру­гой. Одно несом­ненно: 4-бит­ная модель дей­стви­тель­но работа­ет нам­ного быс­трее, если запус­кать ее на кар­те с 6 или 8 Гбайт виде­опа­мяти.

Мо­дели NF4 под­держи­вают­ся как в новой вер­сии WebUI Forge, так и в SwarmUI (ком­мит cdbe239).

На этом прог­ресс не оста­новил­ся, и появи­лись модели — как диф­фузи­онная, так и тек­сто­вого декоде­ра, пред­став­ленные в сжа­том виде с умень­шен­ной раз­рядностью.

Терминология: текстовые декодеры и квантизация моделей

Тек­сто­вый декодер — суб­модель, которая час­то (в слу­чае SD 1.5 и SDXL — всег­да) вклю­чает­ся в файл основной модели. Исполь­зует­ся для пре­обра­зова­ния тек­сто­вого зап­роса в токены (мно­гомер­ные чис­ловые век­торы, ука­зыва­ющие нап­равле­ние в латен­тном прос­транс­тве), необ­ходимые для генера­ции изоб­ражений. Модели ИИ не рас­позна­ют вво­димые зап­росы нап­рямую, они понима­ют толь­ко токены.

Модели и текстовые декодеры

  • SD 1.5: толь­ко CLIP-L. В сос­тав моделей вхо­дят так­же U-Net и VAE.
  • SDXL: CLIP-L и CLIP-bigG. Эти декоде­ры вхо­дят в сос­тав фай­ла модели.
  • SD 3: может работать с CLIP-L, CLIP-bigG и T5XXL, но T5XXL мож­но и не исполь­зовать, что сни­жает точ­ность сле­дова­ния зап­росу.
  • Flux: CLIP-L и T5XXL. Изна­чаль­но модель была дос­тупна в виде отдель­ных фай­лов диф­фузи­онной модели, тек­сто­вого декоде­ра и VAE, которые, в свою оче­редь, могут кван­товать­ся раз­ными спо­соба­ми (об этом ниже). В даль­нейшем появи­лись интегри­рован­ные модели, а еще чуть поз­же раз­работ­чики ста­ли воз­вра­щать­ся к прак­тике пуб­ликации отдель­ных суб­моделей: раз­мер декоде­ров Flux очень боль­шой, вари­антов кван­тования боль­ше одно­го, фор­матов сжа­тия — тоже, и поль­зовате­лям пред­лага­ется самос­тоятель­но соб­рать себе пол­ную модель из ком­понен­тов, которые под­держи­вают­ся на кон­крет­ном железе.

Квантование текстовых декодеров T5XXL

Из­началь­но были дос­тупны два вари­анта это­го декоде­ра: FP16 и FP8.

  • T5XXL-fp16 точ­нее, но тре­бует боль­ше виде­опа­мяти.
  • T5XXL-fp8 менее точен, но менее тре­бова­телен к обо­рудо­ванию.

Со вре­менем появи­лись ва­риан­ты, кван­тован­ные дру­гими спо­соба­ми. Раз­ницу меж­ду вари­анта­ми кван­тования декоде­ра мож­но пос­мотреть в фо­тоаль­боме или в об­сужде­нии на Reddit.

Ин­форма­ция к раз­мышле­нию: тек­сто­вый декодер T5 в вер­сии XXL исполь­зует­ся как в Stable Diffusion 3 (опци­ональ­но), так и в моделях Flux. А раз­работан этот декодер ком­пани­ей Google.

Квантование диффузионных моделей

Ва­риан­тов кван­тования диф­фузи­онных моделей Flux тоже мно­жес­тво. Самые точ­ные 32-бит­ные модели (FP32) полез­ны толь­ко для обу­чения; исполь­зовать их для генера­ции изоб­ражений — избы­точ­но. Мак­сималь­но дос­тупная для локаль­ного исполь­зования модель Flux — 16-бит­ная; резуль­тат работы сжа­той модели с кван­товани­ем Q8_0 прак­тичес­ки невоз­можно отли­чить от ори­гина­ла, а виде­опа­мяти она тре­бует мень­ше. Еще мень­ше виде­опа­мяти пот­ребля­ет модель FP8; даль­нейшее умень­шение раз­ряднос­ти моделей все силь­нее вли­яет на качес­тво.

Мо­дели GGUF: фор­мат, отличный от при­выч­ного safetensors. В нем сох­раня­ют кван­тован­ные диф­фузные модели; тек­сто­вые декоде­ры и VAE нуж­но под­клю­чать отдель­но. Сей­час для Flux дос­тупны все вари­анты от 16-бит­ной до 2-бит­ной Q2_K вклю­читель­но.

Та­ким обра­зом, в нашем рас­поряже­нии уже поч­ти пол­тора десят­ка вари­антов кван­тования диф­фузи­онной модели и столь­ко же — декоде­ра T5XXL.

В сухом остатке: если железо поз­воля­ет, исполь­зуй ори­гиналь­ную 16-бит­ную модель Flux с сай­та раз­работ­чиков. Для более сла­бого железа отлично под­ходит модель Q8_0; раз­ницы с пол­ной моделью ты, ско­рее все­го, не заметишь. Для еще более сла­бого железа подой­дет вари­ант FP8, у которо­го еще ниже тре­бова­ния к виде­опа­мяти. Модели с более силь­ным сжа­тием замет­но вли­яют на резуль­тат, не осо­бен­но сни­жая тре­бова­ния к железу (не забыва­ем, что тек­сто­вый декодер все рав­но будет занимать замет­ную часть виде­опа­мяти).

Поль­зователь Huggingface с ником city96 скон­верти­ровал модель Flux в пред­став­ление GGUF во всех воз­можных вари­антах.

Ска­чать сжа­тую диф­фузи­онную модель мож­но с Huggingface; рекомен­дую вер­сию Q8_0. Срав­нение качес­тва — на Reddit.

Кро­ме того, мож­но ска­чать и сжа­тую вер­сию тек­сто­вого декоде­ра (при исполь­зовании WebUI Forge класть в пап­ку models/text-encovers).

warning

На момент написа­ния статьи WebUI Forge под­держи­вает диф­фузи­онные модели в пред­став­лении GGUF, но тек­сто­вые декоде­ры в GGUF не рас­позна­ет. Веро­ятно, их под­дер­жка появит­ся в бли­жай­шие дни; до тех пор мож­но исполь­зовать декодер T5 в пред­став­лении FP8. Под­дер­жка GGUF появи­лась в CombyUI и SwarmUI сов­сем недав­но; декоде­ры в этом фор­мате нуж­но класть в пап­ку SwarmUI/Models/clip, пос­ле чего декодер появит­ся в виде дос­тупной опции на вклад­ке Advanced Model Addons.

Что ж, с тре­бова­ниями к виде­опа­мяти и запус­ком модели в WebUI Forge разоб­рались; перей­дем к решению дру­гих проб­лем модели Flux.

Решетка на плавных градиентах

В некото­рых (далеко не во всех) генери­руемых изоб­ражени­ях, осо­бен­но в мак­сималь­ном раз­решении модели, в области плав­ных перехо­дов и гра­диен­тов Flux может соз­давать сво­еоб­разную «решет­ку», которая выг­лядит, как блоч­ные арте­фак­ты ком­прес­сии наподо­бие JPEG. Одна­ко это не они — хотя как знать; воз­можно, подоб­ные арте­фак­ты при­сутс­тво­вали на изоб­ражени­ях, на которых обу­чали модель.

Бо­лее веро­ятна вер­сия, что мы наб­люда­ем так называ­емые patch embed artifacts. Генера­тив­ные модели ИИ типа DiT в силу сво­ей архи­тек­туры могут демонс­три­ровать иска­жения (арте­фак­ты), воз­ника­ющие при обра­бот­ке пат­чей изоб­ражения. Это озна­чает, что даже при пра­виль­ной нас­трой­ке и обу­чении модели такие арте­фак­ты могут быть неиз­бежны­ми и тре­буют спе­циаль­ных методов для их миними­зации или исправ­ления.

Патчи

В кон­тек­сте генера­тив­ных моделей ИИ изоб­ражения делят­ся на неболь­шие учас­тки (пат­чи), которые затем про­ходят через про­цесс встра­ива­ния (embedding). Арте­фак­ты могут быть визу­аль­ными или чис­ловыми иска­жени­ями или осо­бен­ностя­ми, воз­ника­ющи­ми из‑за это­го про­цес­са. Нап­ример, арте­фак­ты могут про­являть­ся как гра­ницы меж­ду пат­чами, что и при­водит к наб­люда­емо­му визу­аль­ному эффекту.

В рам­ках самой модели без­болез­ненно­го спо­соба испра­вить арте­фак­ты пока не най­дено; вклю­чение опции Refiner Do Tiling в нас­трой­ках вто­рого про­хода или апскей­ла хоть и помога­ет изба­вить­ся от этих арте­фак­тов, но, как и ука­зано в опи­сании‑под­сказ­ке к этой опции, прив­носит дру­гие.

Проб­лему мож­но попытать­ся обой­ти, сни­зив выход­ное раз­решение кар­тинки до 1К, а потом вос­поль­зовать­ся апскей­лом. Если же хочет­ся при­менять модель в ее мак­сималь­ном раз­решении, то единс­твен­ный най­ден­ный на сегод­ня спо­соб — исполь­зовать для апскей­ла какую‑нибудь хорошую модель SDXL. Помимо избавле­ния от блоч­ных арте­фак­тов, исполь­зование такой модели для апскей­ла спо­соб­но повысить качес­тво и детали­зацию мел­ких тек­стур; сам про­цесс апскей­ла работа­ет при этом быс­трее, чем если повышать раз­решение самой моделью Flux.

Не­дос­татки у это­го спо­соба тоже есть. Нем­ного (или силь­но, в зависи­мос­ти от зна­чения парамет­ра Refiner Control Percentage) меня­ются детали ком­позиции (нап­ример, могут пос­тра­дать паль­цы рук). Еще раз напом­ню, что при исполь­зовании для апскей­ла модели SDXL необ­ходимо вклю­чить опцию Refiner CFG Scale, уста­новив зна­чение от 5 до 7 (стан­дарт для моделей SDXL). И не забудь вклю­чить основной перек­лючатель спра­ва от над­писи Refine/Upscale.

Генерируем картинки в разрешении 2К

У модели FLUX.1 [dev] «род­ное» раз­решение — 2К. То есть «квад­ратом по умол­чанию» явля­ется не 1024 ✕ 1024, а 1440 ✕ 1440 (со все­ми про­изводны­ми — при исполь­зовании соот­ношения сто­рон, отлично­го от 1:1). SwarmUI об этом не зна­ет, но метадан­ные модели лег­ко отре­дак­тировать вруч­ную на вклад­ке Models, пос­ле чего все соот­ношения сто­рон авто­мати­чес­ки будут перес­читывать­ся исхо­дя из ука­зан­ного раз­решения.

info

Ес­ли ты отре­дак­тиру­ешь метадан­ные модели вруч­ную, то в нас­трой­ках апскей­ла сто­ит ука­зывать повыше­ние раз­решения в 1,4 или 1,5 раза, а не вдвое.

Делаем кадры из фильмов: 16:9

Flux под­держи­вает генера­цию кад­ров с соот­ношени­ем сто­рон 16:9 и раз­решени­ем 1920 ✕ 1080 непос­редс­твен­но, без апскей­ла. При выборе это­го раз­решения ком­позиция кад­ра может менять­ся в сто­рону некото­рой кинош­ности; воз­можно, в таком соот­ношении сто­рон в обу­чающей базе модели при­сутс­тво­вали скрин­шоты из филь­мов.

Негативные ключевые слова

Од­ним из серь­езных огра­ниче­ний Flux ста­ло отсутс­твие под­дер­жки негатив­ных клю­чевых слов. Это свя­зано с рекомен­даци­ей раз­работ­чиков исполь­зовать параметр CFG в зна­чении 1. С этим зна­чени­ем негатив­ные клю­чевые сло­ва не работа­ют ни в одной модели, вклю­чая Flux.

Как работают негативные ключевые слова

При исполь­зовании парамет­ра CFG, отлично­го от еди­ницы, модель генери­рует пред­ска­зания дваж­ды — один раз на осно­ве cond prompt (основной зап­рос) и один раз на осно­ве uncond prompt (может содер­жать как негатив­ные клю­чевые сло­ва, так и прос­то шум или пус­той зап­рос). Параметр CFG управля­ет тем, нас­коль­ко силь­но учи­тывать cond prompt по срав­нению с uncond prompt; раз­ница меж­ду эти­ми дву­мя пред­ска­зани­ями уве­личи­вает­ся в зависи­мос­ти от величи­ны CFG scale. Если CFG = 1, то uncond прос­то не генери­рует­ся, что вдвое сок­раща­ет вре­мя генера­ции.

Итак, раз­работ­чики FLUX.1 [dev] рекомен­дуют всег­да исполь­зовать CFG рав­ный еди­нице, что, с одной сто­роны, явля­ется «род­ной» кон­фигура­цией модели и сок­раща­ет вре­мя генера­ции (напом­ним, модель — тяжелая, генера­ция доволь­но мед­ленная), а с дру­гой — не поз­воля­ет исполь­зовать негатив­ные клю­чевые сло­ва.

Спус­тя корот­кое вре­мя поль­зовате­ли наш­ли сра­зу нес­коль­ко спо­собов обой­ти это огра­ниче­ние, но работать они будут толь­ко в вер­сии [dev]; «дис­тилли­рован­ная» вер­сия schnell под­дер­жки негатив­ных клю­чевых слов не получи­ла.

Способ 1: Flux Guidance Scale

Ус­танав­лива­ем CFG = 1,8, Flux Guidance Scale = 2,3, и негатив­ные клю­чевые сло­ва начина­ют работать. Обратная сто­рона медали: генера­ция про­исхо­дит вдвое мед­леннее, зато в качес­тве допол­нитель­ного бонуса модель ста­новит­ся гораз­до более отзывчи­вой к токенам, опи­сыва­ющим сти­лиза­цию кар­тинки.

Способ 2: Dynamic Thresholding

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

Пример «выгоревшей» картинки с CFG = 2 и дефолтным Flux Distilled Guidance = 3.5
При­мер «выгорев­шей» кар­тинки с CFG = 2 и дефол­тным Flux Distilled Guidance = 3.5

Так что мож­но прос­то уве­личить параметр CFG, ука­зав, нап­ример, зна­чение 4, и исполь­зовать встро­енный инс­тру­мент Dynamic Thresholding (DynamicCFG), для которо­го нуж­но точ­но подоб­рать парамет­ры. Недос­татки те же; допол­нитель­но стра­дает реалис­тичность (лечит­ся умень­шени­ем Flux Guidance Scale из пер­вого вари­анта решения), а в некото­рых изоб­ражени­ях замече­но падение качес­тва кар­тинки (которое ком­пенси­рует­ся вто­рым про­ходом или апскей­лом). Рекомен­дую начать с нас­тро­ек, как на скрин­шоте ниже.

Поль­зовате­ли comfy могут ска­чать готовый ворк­флоу с сай­та Сivitai.

Способ 3: Perp-Neg

Поль­зователь Reddit пред­лага­ет такое ре­шение, исполь­зующее ноду Perp-Neg (perpendicular component of the negative prompt) в ComfyUI. К сожале­нию, прос­того спо­соба вклю­чить эту ноду в SwarmUI я не нашел, но поль­зовате­лям Comfy она дос­тупна.

Раскрываем креативность модели

Поль­зовате­ли сра­зу обра­тили вни­мание, что из модели убра­ли под­дер­жку мно­жес­тва сти­лей и имен худож­ников. Одна­ко недав­но в SwarmUI был добав­лен параметр Flux Guidance Scale (он же Flux Distilled Guidance) из вклад­ки Sampling. Манипу­ляции им помога­ют добить­ся боль­шей кре­атив­ности модели. Этот параметр работа­ет не так же, как CFG, который оста­ется в зна­чении 1.

Ве­роят­но, раз­работ­чики модели обу­чили ее, как дол­жны выг­лядеть изоб­ражения при тех или иных зна­чени­ях CFG, что и регули­рует­ся дан­ным парамет­ром. Зна­чение Flux Guidance Scale по умол­чанию — 3,5. Умень­шение это­го зна­чения поможет добить­ся боль­шей кре­атив­ности и не при­ведет к блек­лости соз­дава­емых изоб­ражений, как это было бы в слу­чае силь­ного пониже­ния парамет­ра CFG.

Зна­чение парамет­ра Flux Distilled Guidance труд­но пере­оце­нить; оно име­ет силь­ное вли­яние на стиль и «артистич­ность» изоб­ражения. Этот параметр может при­нимать зна­чения как мень­шие еди­ницы, так и замет­но боль­шие, одна­ко с прак­тичес­кой точ­ки зре­ния инте­рес пред­став­ляют, веро­ятно, зна­чения из диапа­зона 0,5–4 (зна­чение по умол­чанию – 3,5). С рос­том Flux Distilled Guidance рисован­ная кар­тинка пос­тепен­но упро­щает­ся, про­пада­ют каран­дашные штри­хи, маз­ки крас­ки, исче­зает тек­сту­ра бумаги. Ког­да зна­чение Flux Distilled Guidance добира­ется до дефол­тных 3,5, рисунок при­обре­тает прак­тичес­ки пол­ностью «циф­ровой» вид.

Flux Guidance мож­но ком­биниро­вать со зна­чени­ями основно­го CFG, отличны­ми от еди­ницы, одна­ко здесь нуж­но быть осто­рож­ным: если CFG боль­ше еди­ницы, то шка­ла воз­можных зна­чений Flux Guidance будет еще уже, и в дефол­тном зна­чении 3,5 кар­тинка «выгора­ет».

Про­иллюс­три­рую вышес­казан­ное дву­мя галере­ями, в которых неиз­менны все парамет­ры генера­ции, за исклю­чени­ем Flux Guidance. В пер­вой галерее зна­чение CFG = 1, во вто­рой CFG = 2.

Я сге­нери­ровал два набора изоб­ражений, попытав­шись добить­ся сти­лиза­ции под аква­рель­ный рисунок. Цель — при­мер­но такая кар­тинка.

С парамет­рами по умол­чанию (CFG = 1, Flux Distilled Guidance = 3,5) рисунок, как и ожи­далось, име­ет «циф­ровой» вид; уста­нов­ка Flux Distilled Guidance = 1 дает доволь­но нев­нятный резуль­тат, зато дру­гие зна­чения, вклю­чая зна­чения мень­ше еди­ницы, выдали впол­не убе­дитель­ную сти­лиза­цию.

CFG=1
CFG=1
CFG=2
CFG=2

Выводы

Flux на момент пуб­ликации статьи все еще обласкан вни­мани­ем сооб­щес­тва. Некото­рые заложен­ные в модель огра­ниче­ния уже научи­лись обхо­дить; ока­залось, что модель впол­не под­дает­ся обу­чению. Уже появи­лись пер­вые лоры и ремик­сы (пока более инте­рес­ные, чем полез­ные, как это обыч­но и быва­ет с новыми архи­тек­турами). Под­дер­жка Flux в интерфей­се WebUI Forge и воз­можность запус­ка модели на ста­рых виде­окар­тах бла­года­ря появ­лению менее тре­бова­тель­ных к железу сжа­тых вер­сий, несом­ненно, добавят ей популяр­ности.