CFG Scale

Last-modified: 2025-12-25 (木) 03:06:10

CFGスケールとは

Classifier-Free Guidance scale。ガイダンススケールとも呼ばれる。
プロンプト条件付けにどれだけ従わせるのかの強さ。
上げるとプロンプトの影響が強くなるが、上げすぎると破綻しやすくなる。
また、低すぎると色彩的にも平均化されてボケた感じの画像が生成され、高すぎると極端な彩度の画像が生成される。

 

適切な値はモデル、サンプラーやステップ数によって異なる。
SDXLモデル等のU-Net拡散モデルは初期ステップでのプロンプト追従性が極端に悪いため、特にepredモデルはCFG値8など高めの値で強引にブーストしなければ色が出せなかった。
最近のDiTFlow Matchingモデルはプロンプト追従性が高いため、CFG値4程度でも十分な色彩表現が得られるものが多い。

 

注意点として、CFG値を1.0にするとネガティブプロンプトは完全に無視される。
ネガティブプロンプトを効かせたい場合は、CFGを1.1~1.5程度に上げるか、特殊なサンプラー設定が必要になる。

 

ちなみにClassifier-Freeという名前から伺えるように、初期の拡散モデルでは
画像生成用のU-Net拡散モデルとは別に分類用のAIモデルを動かして指示を行っていた。
当時は画像生成モデル本体のみを見るとプロンプトを理解しない無条件生成に近く、
アーキテクチャ全体としてもプロンプト忠実性がとても低かった。

蒸留モデルのCFG値

LCM等の蒸留低ステップ化モデル(LoRA含む)を使う場合はCFG値1ぐらいまで下げるよう指定のあるものも多い。
実は蒸留モデルではCFGの効き具合が異なり、蒸留後モデルのCFG値1で元のモデルのCFG値4~7ぐらいの出力になるようになっている。

CFGの計算式

Classifier-Free Diffusion Guidance

ε(Λ)Θ(Xt, negative) + s( εΘ(Xt, positive) - εΘ(Xt, negative) )

最初の論文ではCFG scale=0を基準としていたため若干式が異なる。上記の式のsにw+1を代入すると論文中の式になる。
また、CFG関連の論文に出てくる「unconditional(無条件)」は、もともとは「プロンプトなし(空文字列)」で生成させた場合の結果を指す。
ただしネガティブプロンプトの実装というA1111氏の偉大な功績により、
従来型のCFGの計算については草創期のSDでは無条件スコアが入っていた項にネガティブ条件付けによるスコアを代入して計算されている。
このため、 CFGに関する論文やソースコードにunconditionalと書いてあっても、実際の実装ではネガティブ条件付けによるスコアが使われていることが多い

  • 数式の大まかな意味としては、ネガティブ条件付けの予測スコアをベースに、ポジティブ条件付けのスコアとネガティブ条件付けのスコアとの差分をCFG scaleで乗じた値を加算することでプロンプトに従わせるというもの
    • なぜネガティブ条件付けが基準になっているかというと、当初はネガティブプロンプトという概念がなく、プロンプトを考慮せずただ自然な絵になるように処理を進めた場合のスコアをベースにしていたため
    • なお、あくまで意味的に連続した潜在空間内の差分であって、ピクセル同士をブレンドするわけではない
  • ε(Λ)は各ステップでのノイズ予測値(スコア)、つまり潜在画像の差分のこと
    • V-Predモデルはノイズεではなくベロシティvを扱うが、そちらでもこの式の各項のεをvに置き換えるだけ
    • Flow Matchingモデルについては、数学的な背景はともかくとしてCFG適用に限れば実装上の処理はV-Predと同じ
  • εΘ(Xt, negative)は画像生成モデルΘに対しステップtにおける作業前の画像Xtとネガティブ条件付け(のみ)を与えたときのノイズ予測値(スコア)
    • ただし、歴史的な経緯からVuncond等と表記されることが多い。上述の通り、現在の一般的な実装では無条件生成ではなくネガティブ条件付けによる生成結果が使われている。
  • εΘ(Xt, positive)はポジティブ条件付け(のみ)によるノイズ予測値(スコア)
    • こちらもVcond等と表記されることが多い。実際にはポジティブ条件付けのみで(この項単体では)ネガティブ条件付けは考慮されていない。
  • sはCFG Scaleの値
    • s=1のときはネガティブ条件付けの影響がゼロになり、ポジティブ条件付けによる生成結果がそのまま採用される
    • s=0にすると逆にポジティブ条件付けが効かなくなり、ネガティブ条件付けのみが採用される。s<1だとネガティブ条件付けが減点スコアではなく加点スコアとして扱われるようになる
    • sの値が高いとポジティブ条件付けによる生成結果が強く作用することになるが、その分オーバーシュートしやすくなる。というのがCFG値を上げすぎると出力が破綻しやすくなる主因
  • この式はモデルの予測後、サンプラーがステップ幅等による補正を行う前に適用される


ならばポジティブ条件付けとネガティブ条件付けそれぞれの重みを直接いじれるようにすればいいのではないか、という議論も昔からあるが、
「ツマミは一つのほうがシンプルで分かりやすい」「数式として美しく、ポジティブ条件付けとの差分をブーストするという原理を汲み取りやすい」という理由で基本機能としてそのまま使われている。

CFGスケールを上げても破綻させずに生成するには

繰り返しになるが、上げるとプロンプト忠実性が高まるものの、上げすぎると破綻しやすくなる。
これを解決するため、CFGの効き具合を調整して高CFG値でもできるだけ自然な画像を生成できるようにする手法が色々と研究されている。

 

なお、CFG++系以外のサンプラーでも、サンプラーによってCFGの扱いに得意・不得意がある
古典的なサンプラーには、数値解析の定番手法をそのまま画像生成に応用しただけだったり、
そもそもプロンプトによる指示が一般化する前に開発されたものも多い。
一方で、比較的最近のサンプラーはCFGを使った際の挙動も含めて評価されるため、
結果としてCFGに対する耐性が高い傾向がある。

 

※副作用の大小もパラメータ調整次第で変わる

種別手法調整のしやすさ副作用
ステップ経過によってCFGの効き方を調節するものCFG++系のサンプラー☆☆☆*1構図に対する条件付けが効きづらくなる
CFG-Zero*☆☆☆
色つぶれを抑制するもの
(各ステップで描き変える量を調節)
RenormCFG☆★★のっぺりする
Rescale CFG☆☆★
Dynamic Thresholding☆☆★
APG(適応的投影ガイダンス)☆★★
ポジティブ/ネガティブ条件付けの競合を抑制するものMaHiRo CFG☆☆☆ネガティブ条件付けが効きづらくなる
TCFG(接線減衰CFG)☆☆☆

CFG++系のサンプラー

https://cfgpp-diffusion.github.io/
この手のサンプラーもCFG値の効き方が他のサンプラーと異なり、通常はCFG値1~2程度が適切な設定になる。
t2iの初期ステップはほぼ全体がノイズで予測が安定せずプロンプト追従性が悪いため、CFGでブーストしても逆効果になりやすい。
早期ステップではCFG scaleを弱めて自然さを優先し、完成形が見えてきてからCFG scaleを強めてプロンプト忠実性を高める、というアプローチをとる。
これにより、構図の破綻を防ぎつつ、プロンプトに沿ったディテールを得ることができる。

RenormCFG

https://github.com/comfyanonymous/ComfyUI/issues/6741
基本形のCFGではscaleが生成工程全体を通じて一定。しかし画像生成AIでは通常生成初期の書き換え量が大きく後期の描き変え量は小さい。
なので生成初期はCFGが効きすぎて正常な範囲から逸脱しやすく、生成終盤は逆にガイダンスが効きづらく画竜点睛を欠きやすいという問題がある。
特にEuler aといったアンセストラル系のノイズを継ぎ足すサンプラーを使っているとこの影響を受けやすい。
それ以外にもモデルの予測ミスやモデルが学習した画像の分布と生成したい画像との不一致などにより終盤の工程でも一定程度の計算誤差が発生するため、
ノイズスケジューラの理論的にはノイズ量(=ノイズ予測値つまり描き込み量)が極めて小さくなる終盤のステップでは描き込みが足らなくなる傾向がある。

RenormCFGは上記の問題に対応するために、各ステップでのノイズ予測量を正規化し適切な量の描き変えが行われるように調整する。
Lumina-Image 2.0という画像生成モデルに由来する手法。

Rescale CFG

https://comfyui-wiki.com/ja/comfyui-nodes/advanced/model/rescale-cfg
高CFGの副作用による色つぶれを抑制する手法。
基本形のCFGはジェットエンジンのようなもので、ありがちな絵ではなくプロンプトにまっすぐ従った個性的な絵を描かせたいだけなのに勢いよく描き換え続けないといけないようになっている。
ならば、各ステップにおいて高CFG値によって過剰にブーストされた画像の更新量について、CFGを適用せずポジティブプロンプトだけを与えた場合の更新量を基準に抑制することで暴走を防ごうというのがRescale CFGのまっすぐなアイデア。
パラメータは係数一つで、1に近いほど各ステップでの描き換え方が穏やかになる。0.7程度から調整すると良いとのこと。

Dynamic Thresholding

https://github.com/mcmonkeyprojects/sd-dynamic-thresholding
高CFGの副作用による色つぶれを抑制する手法。
SD初期からあるCFG補正拡張機能の一つ。しかしComfyUI本体には取り込まれていない。

音響機材におけるコンプレッサー(より精確にはリミッター)と似たような処理を行う。
ブロック(ピクセル範囲に相当)ごとの処理の図解が見たい人は、DTM用のコンプやリミッターの原理について調べればだいたい近いものが出てくる。
(ただし、リミッターについては古典的なハードクリッパーを基準とした図ばかりが出てくるが、今どきしきい値を超えた波形を真っ平にするようなリミッターを使っているのはギターの音作りでなければプロの音響さんぐらいだと思う。今はピークが真っ平にならないように先読みしてコンプ的に均すもののほうが一般的。)

具体的には、各ステップでの仕掛かり画像について各ブロックの潜在表現の分布を計算し、threshold_percentileを超える極端な外れ値になっているブロックを好ましい範囲に収まるよう丸める。
サンプラーが処理している潜在画像の要素はRGB値ではないが、潜在表現として極端な値はVAEデコード後も極端な描写になるようになっている。)
潜在表現の「好ましい範囲」については、パラメータ「mimic_scale」をCFG値として採用した場合の仕掛かり画像が基準になる。
なので、mimic_scaleについては使っているモデルで一般に望ましいとされる範囲の穏当な値を設定する。

APG(適応的投影ガイダンス)

Eliminating Oversaturation and Artifacts of High Guidance Scales in Diffusion Models
これも高CFGの副作用による色つぶれを抑制する手法。
CFGはポジティブ/ネガティブ条件付けスコア双方を折衷して自然でプロンプトに沿った出力を得るための仕組みだが、実は双方の方向性が近すぎる場合に彩度の過飽和(色がギトギトになる現象)が起きやすいという。
APGではCFG適用後のスコアベクトルをポジティブ条件付けスコアベクトルからの直行成分と並行成分に分解し、並行成分=両条件付けスコアが重なりすぎている部分を弱めるように補正する。

MaHiRoやTCFGと相性が悪そうに見えるが、MaHiRo/TCFGはポジティブ/ネガティブの矛盾が大きい場合の構図破綻を抑止、APGは両者が重なりすぎている場合の過飽和抑止で相互補完的に動作するらしい。


ComfyUIではこれだけパラメータがいくつかあるので説明

イータポジティブ条件付けスコアとの並行成分に対する補正倍率。1.0で補正なし。
下げると過飽和が減るが、その分プロンプト忠実性も下がる。
ちなみに1.0より高い数値にすると逆に彩度が上がりやすくなる。
正規化閾値各ステップでの更新量の上限。ただし、0のときは補正オフ。
低いほど過飽和を抑える効果があるが、その分コントラストが下がって中間色に寄った眠たい絵面が生成されやすくなる。
モーメンタム過去のステップでの更新量の加重平均(古いステップにおける更新量の重みを下げる)に対し、マイナスの補正を加えることで原色側に偏ることを抑制する。
0で補正なし。補正する場合は基本的にマイナスの値を設定する。
プラスの値を設定すると逆にサチュレーションを上げることになる。

MaHiRo CFG

https://github.com/comfyanonymous/ComfyUI/discussions/6066
とても可愛い。ComfyUIのほかForge系で利用できる。
ポジティブ条件付けとネガティブ条件付けとで矛盾する出力に誘導されているとき、ポジティブ条件付けを優先するよう補正を加えるもの。
(おそらくはポジティブプロンプトの効きが強くなるため)開発者によると通常のCFG値マイナス2が目安とのこと。
ComfyUIではデフォルトのノード名がやたら長くて幅を取るが、(他のノードと同様)ノード名は任意のものに変更できる。

具体的には、各ステップで「ポジティブ条件付けのみに基づく出力スコア」と「ネガティブ条件付けのみに基づく出力スコア」との類似度を計算。
両者の方向性が食い違っている(類似度が低い)場合ほど強く「ポジティブ条件付けのみに基づく出力スコア」が加重されるようになる。

TCFG(接線減衰CFG)

TCFG: Tangential Damping Classifier-free Guidance
こちらもポジティブ条件付けとネガティブ条件付けとで矛盾する出力に誘導されているとき、ポジティブ条件付けを優先するよう補正を加えるもの。
TCFGではネガティブ条件付けスコアのうちポジティブ条件付けと整合しない成分を計算し予め減衰させてからCFGにより調整を行う。
具体的には、双方の条件付けスコアベクトルを行列に連結し特異値分解を行うことで、整合しない成分を接線成分として計算できる。

CFG-Zero*

CFG-Zero*: Improved Classifier-Free Guidance for Flow Matching Models
「*」はスターと読む。FLUX、Qwen、WANやHunyuanなどのFlow Matching系画像生成モデル(SDXL等のU-Net拡散モデルより新しい形式のモデル)向けの手法。
Flow Matchingモデルは直線的な描画過程を前提としている為、一度勢いがつくと修正が効きづらい。
予測の不安定な初期ステップでCFGによる強引ともいえる補正がかかると、かえって品質が低下すると指摘されている。
このためCFG-Zero*では、生成初期のステップでは条件付け「なし」で自然な構図になるようにし、絵面が整うほどCFGによる条件付けが効くようにする。
初期ステップについては、CFG-Zero*は(「unconditional」スコアをネガティブプロンプトから計算するのではなく)本当に条件付けなしで構図を整える。
その後の「どれだけ絵面が整っているか」については、ポジティブ/ネガティブ条件付けスコアベクトルの内積を取り、角度Θが小さい(方向性が近い)ほど整っているものとする。


*1 CFG値を規定外の値にしようとするユーザーはCFGそのものについてはだいたい理解しているだろう、という前提を置けばお手軽な部類に入る