文脈理解力の比較:T5xxl エンコーダー
Flux.1[shnell] による生成を繰返していたら、Flux.1[dev] のプロンプトに対する理解力の足りなさに気付き始め、Flux.1[dev] の方が高品質と言われているのに何故そうなるのか不思議に思っていた。それが最近、その仕組みに関わる情報を知ることができて今回の投稿に結び付いた。そのきっかけは下記の「きままさん」の記事で、色々と参考にさせてもらった(感謝)。
そんな訳で、数種類ある T5xxl エンコーダーを使って、同じプロンプトでFlux.1[shnell] と Flux.1[dev] の生成結果を比較して自分なりに結論を導いた。分かりやすい結果になったので参考になると思う。
仕込み
まず、使用するプロンプトは下記。
#画像
Cinematic photography.
#状況
A peaceful moment,Greetings with a smile.A wide variety of creatures from space and earth gather together to have a fun party.
##配置
${cha_SAKURA}
SAKURA is foreground of {left|right} side.
#カメラ
medium close-up of {body|face} {|from {low|heigh|side}-angle}.
#背景
Background:
A mysterious spaceship hangar,control tower,and large radar site in tokyo
#近景
Additional scenes:
{220.1:: ←確率上げて順番に生成していく
stairs to basement.
(The word "stairs" displayed on bottom left of screen)
|0.1::
hamburger shop, hamburger and coke.
(The word "hamburger" displayed on bottom left of screen)
|0.1::
underground parking lot.
(The word"parking" displayed on bottom left of screen)
|0.1::
have a drink in a office bar.
(The word "drink" displayed on bottom left of screen)
|0.1::
disembarking from a huge spaceship.
(The word "spaceship" displayed on bottom left of screen)
|0.1::
convenience store.
(The word "convenience" displayed on bottom left of screen)
}
#変数
${cha_SAKURA=Her name is SAKURA, a 26yo slender Japanese aesthetics woman with deep brown eyes and hair, smilinge.}このプロンプトでは、#状況 #背景 #近景の文章構成の部分で理解力を測る。具体的には背景(遠景)を維持しながら状況+近景をどう構成しているかのチェックになる。ちなみに「宇宙や地球からさまざまな生き物たちが集まり..」の文章は結構な差が出る部分だった。
※以下は機械翻訳
#状況
やすらぎのひととき、笑顔でご挨拶。宇宙や地球からさまざまな生き物たちが集まり、楽しいパーティーを繰り広げます。
#背景
東京にある謎の宇宙船格納庫、管制塔、大型レーダーサイト
#近景(6種)
・地下への階段
・ハンバーガーショップ、ハンバーガーとコーラ
・地下駐車場
・オフィスバーで一杯飲む
・巨大な宇宙船から降り立つ
・コンビニエンスストア
生成結果はそれぞれ最初の1枚を使用、テキスト表示も指示しているので、それが表示されない場合のみ再生成してる。ちなみに Flux.1[dev] はテキスト表示してくれなかったので、再生成はなし。
・Flux.1[shnell] は全てEuler/Simple Steps:4 Guidance:0
・Flux.1[dev] は全てEuler/Simple Steps:20 Guidance:3.5
比較に使用するエンコーダー
t5xxl_fp8_e4m3fn.safetensors (約480MB)
t5xxl_fp8_e4m3fn_scaled.safetensors (約500MB)
t5xxl_fp16 (約9.6GB)
flan_t5_xxl_fp16.safetensors (約21GB)
flan_t5_xxl_fp32.safetensors (約42GB)
比較に使用するモデル
flux1-schnell-Q8_0.gguf (約12GB)
flux1-dev-Q8_0.gguf (約12GB)
その他の環境
ComfyUI (デスクトップ版) VRAM:12GB、RAM:64GB
カスタムノード:Dynamic Prompts 使い方
Flux.1[shnell] 生成結果
エンコーダー: t5xxl_fp8_e4m3fn
・宇宙人?
・楽しい?
・ハンバーガー?
・地下駐車場?
・巨大なピンク?
エンコーダー: t5xxl_fp8_e4m3fn_scaled
・宇宙人?
・楽しい?
・ハンバーガー?
エンコーダー: t5xxl_fp16
・宇宙人?
・楽しい?
・階段?
エンコーダー: flan_t5_xxl_fp16
・コンビニ?
エンコーダー: flan_t5_xxl_fp32
・ハンバーガー?
Flux.1[dev] 生成結果
エンコーダー: t5xxl_fp8_e4m3fn
・楽しい?
・宇宙人?
・階段?
・ハンバーガー?
・地下駐車場?
・コンビニ?
エンコーダー: t5xxl_fp8_e4m3fn_scaled
・楽しい?
・宇宙人?
・階段?
・地下駐車場?
・ドリンク?
・大型宇宙船?
エンコーダー: t5xxl_fp16
・楽しい?
・宇宙人?
・階段?
・地下駐車場?
・コンビニ?
エンコーダー: flan_t5_xxl_fp16
・楽しい?
・宇宙人?
エンコーダー: flan_t5_xxl_fp32
・楽しい?
・宇宙人?
・地下駐車場?
自分なりの結論
現状、モデルはGGUF形式、エンコーダーはflan_t5_xxl_fp32の一択。この選択の為にメモリを64GBに増設、VRAMは12GBで諦めてる。自分はアートよりストーリーテリングの要素に重きを求めるので、文脈に対しての反応が鈍い Flux.1[dev] に物足りなさを感じたのだと思う。
※Flux.1[schnell] + Flux.1[dev] マージ系もあるので、またテストしたい。


コメント
4こんばんは、記事をご紹介いただきありがとうございます。
私は Flan-T5xxl と T5xxl_v1.1 の直接比較はしなかったので、とても参考になりました。
また、Flux.1[shnell] の方が Flux.1[dev] よりプロンプトの追従性が良いというのも意外でした。
Long-CLIP-L については、昨年の10月にComfyUI がネイティブデサポートしたので、Zer0int 氏がデフォルトの DualCLIPLoader ノードを使えば良いとアナウンスしています。
https://github.com/zer0int/Long-CLIP
https://huggingface.co/zer0int/LongCLIP-GmP-ViT-L-14/discussions/6
ただ、デフォルトの DualCLIPLoader ノードだと 77トークン以上は処理できないとエラーログが表示されますが・・・
私はエラーログが表示されるだけだろうと考えて無視して使用しています。
こちらこそ、紹介していただきありがとうございます。
技術的な理解不足のままいじっているので、きままさんの記事は大変勉強になります。
Long-CLIP-L はやってみたらうまくいった(エラー出ない)的な対応なのでいい加減ですが、下記条件でノードを構成しています。
LongCLIPTextEncodeFlux には、longclip-L.pt、又は Long-ViT-L-14-BEST-GmP-smooth-ft を入れてます。
DualCLIPLoader には、Long-ViT-L-14-GmP-SAE-full-model を入れてます。
↓続く
↓続き
下記条件でエラーの発生を確認しています。
・LongCLIPTextEncodeFlux に clip_l を入れる
・LongCLIPTextEncodeFlux に Long-ViT-L-14-GmP-SAE-full-model を入れる
※上記構成以外なら、双方に同じものを入れてもエラーは出ない。
※ネイティブを期待した構成ではエラーが出る。
※あくまでエラー無しで画像もそれなりという基準です。
こんな感じです、ご参考になれば幸いです。
DualCLIPLoader ノードにLongClip用のエンコーダー入れて生成したら、エラー出力なしでちゃんと生成されました。無駄な事してました、、