WebUI-forgeのself-attention-guidanceについて
デフォルトでついているこれは一体。。。と思った方はいらっしゃるかと思います。私はとりあえず深く考えずにチェックを入れて生成していましたが、調べて見ることにしました。
<追記>
元々の記事に記載していませんでしたが、この拡張機能を使用すると画像生成速度が低下します。そこそこ。その点が最も重要かもしれません。
一応先に言っておきますが。。。
私個人の感想になりますので、この記事は参考までにして下さい。
個人的な結論は設定に関しては大体デフォルトで良いんじゃない?というものです。しかも、人によっては必要ない可能性もあります。
(作成する画像の解像度によって少し変えるのもありかも)
おそらくこれのことと思われます。
論文はこれ
<GPT要約>
概要:
本研究では、クラスまたはテキスト条件付きの拡散ガイダンス方法に依存しない、新しい条件なし且つ訓練不要の戦略を提案しています。具体的には、拡散モデルの中間自己注意マップを活用する自己注意ガイダンス(SAG)を導入し、各イテレーションでモデルが注目する領域のみを逆方向にぼかすことで、生成品質を向上させています。実験結果は、複数の拡散モデルにおいて、我々のSAGが性能を改善することを示しており、従来のガイダンス方法と組み合わせることでさらなる改善が見られます。
背景:
従来の拡散モデルのガイダンス技術は、外部条件や追加の訓練が必要であるという限界がありました。本研究では、これらの制約を克服し、より高品質な画像を生成するための新たなアプローチを模索しています。
方法:
自己注意マップを利用し、拡散モデルが注目する領域のみを選択的にぼかし、それをガイダンスとして使用します。これにより、外部条件や追加の訓練なしに、モデルの安定性と効果を高めることができます。
結果:
複数の拡散モデル(ADM、IDDPM、Stable Diffusion、DiT)での実験を通じて、SAGが性能を向上させることが確認されました。特に、従来のガイダンス方法と組み合わせた場合の性能向上が顕著でした。
議論:
SAGは、従来の条件付きガイダンス方法を一般化し、条件なしでの使用を可能にすることで、拡散モデルの応用範囲を広げるものです。また、自己注意マップの利用により、生成プロセス中に重要な情報を効果的に捉え、品質を向上させることが可能になります。
印象としては、これを使用すると画像の品質が上がりそうみたいな感じでしょうか。そんなことは拡張機能としてある時点で分かっている気もするので、数値についての記載がありましたのでそこを記載しておきます。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
ガイダンススケールの変化による性能の変動も評価されており、ADMモデルにおいて、ガイダンススケールを-0.1、0.1、0.2、0.3、0.4でテストした結果、ガイダンススケールが0.1の場合にFID、sFID、Inception Scoreで最良の結果が得られることが明らかにされました。精度メトリックでは、ガイダンススケールが0.3の場合に最良の結果が示されました。また、ガイダンススケールを負の値(s = -0.1)や大きすぎる値(s ≥ 0.4)で適用すると、サンプル品質が損なわれることが分かりました。
ガウスブラーのσ(シグマ)の変化の影響も検討され、σ(シグマ)が1、3、9、27の場合と極端な場合でのテストが行われました。σ(シグマ)の値が大きくなるにつれてフィルターは信号の内容を徐々にぼかし、各ピクセルを平均値に近づけます。逆に、σ(シグマ)が0に近づくと、信号は変わらずに残ります。結果は、SAGがσの線形変化に対してロバストである一方で、最良のパフォーマンスを提供する最適なσが存在することを示しています。また、入力解像度によっても影響が変わる可能性があり、たとえばより高い入力解像度では一般的に大きなσが必要になります。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
ガウスブラーについての記載が良く分からなかったので追加で聞いています
<GPT>
「SAGがσの線形変化に対してロバストである一方で、最良のパフォーマンスを提供する最適なσが存在することを示しています」というのは、こんな意味です。
SAGという方法は、画像をぼかす時に使う「σ」という数字を変えても、大きく問題が起きないということです。ただし、「σ」という数字には、画像を一番きれいに見せることができる「ベストな値」があります。このベストな値を使うと、SAGは一番良い結果を出すことができます。
中学生にも分かりやすく言うと、「SAGは画像をきれいにする力があって、ちょうどいいぼかし方を見つけると、もっとすごい結果を出せるよ」ということです。
ということで、初期値を振り返ってみましょう。
スケールは「0.5」になっていますね。
シグマは「2」です。
文献の結果を参照すると、スケールに関しては「0.1」から「0.3」が推奨されているようです。
シグマの値についてははっきりしませんよね。GPTさんに聞いてみました。
<GPT>
解像度1024での最適なσの値については直接的な言及はありませんが、提供された範囲(1、3、9、27)を参考にすると、解像度が高いために中間から上の範囲、つまり9以上を試すことが妥当と考えられます。しかし、最適なσを特定するには、実験やテストが必要になるでしょう。これは、ぼかしの強さ(σの値)が大きすぎると細部が失われ、小さすぎるとぼかしが十分でなく、目的の効果が得られないためです。したがって、解像度1024で最適なσを見つけるには、異なるσの値で実験を行い、生成される画像の品質を評価する必要があります。
ということで、解像度1024で作成する際は9以上、768については追加で聞いていますが、3から9の間の値から調整するのが良いとのことでした。※設定を見ると10が上限になっていました。
おいおいと思って、試してみたところ。。。。。
ほぼ差はない気がする。。。。
同じスケールでシード値の場合は、それほど画像の変化はありませんでした。
3ぐらいから少し背景の書き込みが増える感じでした。
今回作成したものだと、人物がそこそこ変わってしまうこともあり、好みで一番良いなと思ったのが6でした。プロンプトでは人物描写について細かく記載していないので、人物の差についてどれぐらい意味があるか分かりません。
スケールに関しても変えてみました。
論文の記載と異なり、大きくしてもそれほど影響が出にくいのではと思ったりしました。
生成途中の画像を見てみると、スケールの値を上げると、完成図に近いものが早い段階で出来ている印象です。
傾向としては、スケールが上がると、上の人物の装甲が増え、彩度も上がっていきました。2ぐらいだと厳しい感じでした。
論文での数値の相違については、使用しているモデルの違いなどあるのかと思います。
とりあえず、オンにしておけば、ちょっとは良くなるんじゃ無いかと思われます。