
Stable diffusionの拡張機能の、FreeUについて調査・検討してみた(A1111&SD1.5)
LMC-LoRAを検討する際に、FreeUの有無で画像にかなり変化が出た印象もあり、FreeUについて調べて、検討してみました。
調べた後に、ネットで検索したら以下の記事がとても分かりやすかったので参考にしてください。
Chat GPTさんは見つけてくれなかったので。。。。
ここの記事は上記サイトよりは詳しい内容は少ないので、ご承知おき下さい。
FreeUについてChatGPTさんに調べてもらった内容は以下の通りです。
以下のサイトと、そこから参照できる論文を参考にしています。
Stable DiffusionのFreeU拡張機能は、UNetデコーダーの各ステージで特定の調整を行い、画像生成プロセスに影響を与えるよう設計されています。具体的には、以下の操作を行います:
バックボーンの特徴に対する操作: これはUNetデコーダーのバックボーンに対して行われる操作で、特徴のウィンドウにスカラーを適用し、画像生成の基礎となる特徴を調整します。
スキップ接続の周波数制御: スキップ接続は畳み込みネットワークの中間層で発生し、異なる層間の情報を結合させます。FreeUでは、これらの接続の周波数を制御し、生成される画像の詳細度や質感に影響を与えることができます。
これらの操作により、FreeUは画像生成の過程において、特定の特徴や詳細を強調または抑制することができ、よりカスタマイズされた出力を生み出すことが可能になります。
以下がWebUIでのFreeUの画面です。いくつか設定できる項目がありますが、これをどうすれば良いのかさっぱり分からないかと思います。
ということで、これられについてもChatGPTさんに聞いてみました。

バックボーンの設定について
Stable DiffusionのFreeU拡張機能において、Stage1, Stage2, Stage3のバックボーンの設定は、UNetの各ステージでの特徴の処理方法を定義します。具体的には、以下の設定があります:
Backbone n Scale: これはUNetのステージnでのバックボーンの特徴ウィンドウに適用されるスカラーの大きさです。
Backbone n Offset: これはウィンドウのオフセットを指定します。1は0と同じで、ウィンドウはダウンサンプリングされた潜在特徴の周りをラップします。
Backbone n Width: これはバックボーンに適用されるウィンドウの幅を指定します。
これらの設定は、FreeUを使用する際にUNetの各ステージでのバックボーンの挙動を調整するために使用されます。
FreeU設定において「Backbone n Scale」の値を高くすると、UNetのバックボーンにおける特徴のスケーリングが増加します。これによる画像への影響は以下のようになる可能性があります:
細部の強調: バックボーンは画像の基本的な特徴を処理するため、そのスケーリングを増加させることで、画像の細部や複雑なテクスチャがより強調される可能性があります。
鮮明さの向上: 特徴のスケールアップにより、画像が全体的に鮮明になる可能性があります。これにより、画像のコントラストや明瞭さが改善されるかもしれません。
ノイズの増加: 高い「Backbone n Scale」は、場合によってはノイズの増加につながる可能性があります。特に、高いスケーリング値が適用される場合、画像に不自然なアーティファクトやノイズが現れることがあります。
これらの影響は、FreeUの他の設定や、画像生成の文脈によっても異なります。望ましい結果を得るためには、実験と調整が必要になる場合があります。
スキップ接続の設定
Stable DiffusionのFreeU拡張機能におけるStage1, Stage2, Stage3のスキップ接続の設定は、UNetの各ステージでのスキップ接続の周波数の制御を行います。具体的には、以下の設定があります:
Skip n Scale: これはUNetのステージnでのスキップ接続の低周波数(低い端)に適用されるスカラーです。
Skip n High End Scale: これはスキップ接続の高周波数(高い端)に適用されるスカラーです。
Skip n Cutoff: これは低周波数と高周波数を分離する比率を指定します。0は「Skip n Scale」で最も低い周波数のみを制御し、1は全ての周波数を「Skip n Scale」でスケーリングすることを意味します。
これらの設定を通じて、FreeUはUNetの各ステージでスキップ接続の周波数を調整し、生成される画像の特徴や質感に影響を与えます。
FreeUの設定において「Skip n Scale」の値を低くすると、UNetのスキップ接続における低周波数成分が弱まります。これによる画像への影響は以下のようになる可能性があります:
詳細の減少: 低周波数成分は画像の大まかな構造や形状に寄与します。この成分を弱めると、画像の基本的な形状や構造がより抽象的またはぼやけたものになる可能性があります。
テクスチャとノイズの変化: 低周波数成分の調整は、画像のテクスチャやノイズレベルにも影響を与える可能性があります。その結果、画像が滑らかになったり、一部の細部が失われたりすることがあります。
芸術的効果: この変更により、より芸術的または抽象的な視覚効果が生まれる場合もあります。これは、特定のスタイルやテーマの画像生成に利用できます。
これらの影響は、FreeUの他の設定や、画像生成の文脈によっても異なります。また、望ましい結果を得るためには、実験と調整が必要になる場合があります。
Stageの違いについて
Stable DiffusionのFreeU拡張機能におけるStage1, Stage2, Stage3は、UNetデコーダーの異なる層に対応しています。具体的な違いは以下の通りです:
Stage1: これはUNetの最初の層で、画像生成プロセスの初期段階において基本的な特徴や構造を形成します。ここでの調整は画像の全体的な形状や構造に大きな影響を与える可能性があります。
Stage2: 中間層であり、より詳細な特徴やパターンの処理が行われます。このステージでの調整は、画像の細かいディテールやテクスチャに影響を与える可能性があります。
Stage3: 最終層で、画像の最終的な仕上げを行います。ここでの調整は、画像の細部の鮮明さや質感、最終的な外観に影響を与えます。
それぞれのステージは画像生成プロセスの異なる段階に対応し、それぞれが画像の異なる側面に影響を与えるため、適切な調整により特定の視覚効果やスタイルを達成することができます。
ということで、ここまで、FreeUについてchatGPTさんに聞いた内容でした。
SD1.4の推奨設定を見る感じだと、バックボーンのスケールを上げて、スキップ接続のスケールを下げています。
ちなみにSD2.1とかSDXLの設定だとバックボーンのスケールの上げ幅が小さくなって、スキップ接続スケールの下げ幅が小さくなっています。
実際にSD1.4の推奨で実際に作成したものを提示します。
サンプラーはEular aで行っています。
プロンプトは検討しやすいように単純なものにしてみました。
解像度 512x512
1girl, solo, blue eyes, smile, blonde hair, medium hair, wavy hair, flapper dress, BREAK, (cowboy shot), BREAK, cityscape, detailed background
seed 1896164062
Euler a
FreeUなし


FreeUあり SD1.4 recommendation


Euler aだと
人物はくっきりと彩度が上がる
背景はすこしぼやける
ステップ12,、CFG6で検討 シード値4010983913
SD1.4

SD.21

SDXL

これまで記載していたstepとパラメーターの内容を含めて、推奨設定の3パターンについてのパラメータの数値を比較をすると、上の画像からは以下の2点が推定されます。
①SDXLのみ、step1のステップ接続スケールが小さい
⇒近くの建物が小さくなった可能性
②SDLXがstep2のステップ接続スケールが高め
⇒遠くの建物を見ると、SDXLがやや細かい
ということで、背景のぼやけを無くしたいため、step 2のステップ接続スケールの数値を変えてみることにしました。SD1.4の数値を改変してみました。
(別にSD1.4のSTEP1のステップ接続スケールを下げてみた所、手前の壁の一つがなくなりましたので①については推定通りでした)
0.2

0.4

0.6

0.8

1

1.2

ステップ接続スケールの数値が上がると、期待したほどではありませんでしたが、背景の建物が少し詳細になりました。
ただ、残念ながら指が失敗するようになってしまいました。
まとめ
FreeUの効果についてですが、モデルなどによる違いや、サンプラーによる違いもある可能性があります。
求める絵の内容によっては、前述したバックボーンスケールやスキップ接続の数値を変更することで調整できる可能性があると感じました。