🦊CFG
参考
条件の最たるものがテキストプロンプトです。CFGを高くするほど自由度を失う代わりにプロンプトに従った画像を生成するようになります
ただし、CFG 5で "13時を示す時計" が描けなかったからといって、CFGを12にしたところで描けるようになるとは限りません
CFGはconditioningで"縛る"ものであり、そのconditioningが"13時を示す時計 "をよく理解していなかったり、そもそも使っているモデルの性能が悪ければどれだけCFGを高くしても意味がありません
プロンプトに従わないからといってCFGの調整に必死になっても、時間の無駄になる可能性があります
一方で、モデル × サンプラー × step数 × CFG これらのパラメータには、アーティファクトの発生や"burning"といった過飽和・過露出異常な画像が生成されてしまう組み合わせがあります
その点には注意しましょう
うまく行かない組み合わせ
DPM++ 2M Karrasでstep数20だとcfg25を超えてくると赤信号です
https://gyazo.com/2726d797e03185230ce53475d48d707b
$ DPM++ 2M Karras / Step数 20 / CFG 8
https://gyazo.com/262e228b7207b827b105bfad833d3ac5
$ DPM++ 2M Karras / Step数 20 / CFG 30
https://gyazo.com/375e367784f6446fcc1e4a0a93fbc0cb
LCMは特殊でstep数3 ~ 8、CFGが1 ~ 1.5でうまく生成できます
CFGを1丁度にすると、ネガティブプロンプトが無視されるらしいので、注意
蒸留モデル
Flux.1-devやHiDream-I1-Devがそうですが(上のLCMもそう)、ベースモデルに蒸留ということをして高速・軽量に動作するようにしたモデルがあります
蒸留前のモデルは条件付き(positive)+非条件付き(negative)を別々に計算しますが、蒸留によって一回の計算で済むようになります
蒸留モデルではCFGを1にして生成するのですが、CFGを1にしたとき上手く生成できる、というよりは従来のCFGをオフ(つまりCFG=1)にして、代わりに蒸留時に組み込まれたDistilled CFG Scale(ComfyUIでは例えばFluxGuidanceノード)を使うという感じです
ComfyUIにおけるCFGの計算方法
CFGには二つの計算方法があり、ComfyUIでは後者が選ばれています
$ output = positive + guidance_scale * (positive - negative)
$ output = negative + guidance_scale * (positive - negative)
直感的にはguidance_scale(CFG)を0にすればnegativeが無効になりそうですが、ComfyUIでは output = negative + 0 * (positive - negative) = negative になりnegativeのみの生成になります
CFGを1にすると、output = negative + 1 * (positive - negative) = positiveとなりnegativeが無効になります
あまりこだわるパラメータではないので例外はありますが基本的に以下の値を使っていきます
Stable DIffusion 1.5 / SDXL
$ steps: 20 / cfg: 6 ~ 8 / sampler: euler / scheduler: normal
or
$ steps: 20 / cfg: 6 ~ 8 / sampler: dpmpp_2m / scheduler: karras
蒸留モデル
$ steps: 20 / cfg: 1 / sampler: euler / scheduler: normal
数ステップ蒸留モデル
$ steps: 4 ~ 6 / cfg: 1 / sampler: euler / scheduler: normal