画像生成AI

【StableDiffusion】FreeU技術により画像生成は高品質化するのか?

この記事の結論
  • 手指の破綻などは多少の改善傾向はある
  • 色味やディテールなどに悪影響を及ぼす部分もある
  • 結局は誤差レベルで使用するかは好みの問題

こんにちは、「学びが人生を豊かにする」をテーマに本日は「FreeUの効果検証」についてです。

新しい技術が続々と発表されている画像生成AIの分野ですが、最近特に話題になった技術に「FreeU」というものがあります。
2023年9月に論文「FreeU: Free Lunch in Diffusion U-Net」で発表された技術ですが、数行のコード追加でAI生成画像を高品質化できると言われています。
StableDiffusionWebUIでは論文が発表された後すぐに、拡張機能としてFreeUが実装されて簡単に試せるようになっています。

YoutubeやXのポストでも実際に試してみた結果が報告されています。
ただしパラメタやモデルの依存性などもあるため、必ずしも高品質化しているとは言えないと感じています。
そのため、本記事でも実際にいくつかパラメタなどを変えながら本当にFreeUで高品質化が可能なのか検証していきたいと思います。

FreeUとはどんな技術なのか

簡単な説明

正確な内容はオリジナルの論文を参照いただきたいですが、簡単に説明すると以下のような感じかと思います。

まず、FreeUの特徴としては新たなトレーニングなどはせずに、わずかなパラメータ調整だけで画像生成品質の改善が可能になります。
原理としてはU-Netアーキテクチャのバックボーン特徴とスキップ接続特徴を再調整することでその影響を最適化し生成品質を向上させます。

引用:https://arxiv.org/pdf/2309.11497.pdf

パラメタの一つはバックボーン特徴量で、これは画像の全体的な形や色など低周波成分に影響を与えます。
二つ目はスキップ接続特徴量で、これは画像の細かい部分、例えば線やテクスチャなど画像の高周波成分に影響を与えるパラメタです。
これら二つを調整することで、画像全体の品質を最適化するというのがFreeU技術になります。

StableDiffusionWebUIへの実装

FreeUは二つのパラメタを調整することで画像品質を改善させることができるため、容易にStableDiffusionに組み込むことが可能です。
既にStableDiffusionWebUIへの組み込みは拡張機能が公開されており、インストールするだけで簡単に使用することが可能です。
また数行のコード変更だけであるため、画像の生成速度に対する影響もほとんどありません。
インストールは下記URLから可能です。

インストールURL:

https://github.com/ChenyangSi/FreeU

StableDiffusionWebUIの拡張機能のインストール方法については、下記記事も参考にしてください。

FreeUパラメタ

StableDiffusionWebUIにFreeUの拡張機能をインストールすると先に述べたバックボーン特徴とスキップ接続特徴の2種類のパラメタが調整できるようになります。
FreeUの研究では各パラメタがそれぞれ低周波成分と高周波成分に対して影響を与えることが分かっています。
しかし各パラメタは単純に特定の周波数成分に影響を与えるという単純なものではありません。

まずバックボーン特徴量は、関連するスケーリング係数を増幅した場合に画像のノイズ除去プロセスが強化され画像の忠実度や整合性に優れた出力をもたらします。
言い換えると大局的に画像が破綻しずらくなる効果をもたらすと考えられます。
下記は全てのステージにおいてバックボーンスケールのみ「0.5,1.0,1.5」の3種類を指定して出力した結果です。(b:バックボーン,n:ステージ数)
※ステージはU-Netを3層(1280ch,640ch,320ch)に分割したものに相当

バックボーンスケール(bn)が0.5の場合、ノイズ除去プロセスが減衰し画像の十分な復元が出来ていません。
一方でbn=1.5の場合は大局的な破綻はほとんど見られませんが、過剰にノイズ除去され高周波成分を損ない全体的に平滑化された画像になってしまっています。
さらに色味についても各RGBチャネルが過剰に平滑化された結果、視覚的に異常な画像になっています。

これに対してスキップ接続特徴量は高周波成分に影響を与えるパラメタであり、バックボーン特徴の悪影響を低減させる効果があります。
基本的にはスキップ特徴を減衰させることにより、高周波成分のノイズ除去効果を弱めるためエッジやコントラストが残りやすくなります。
下記はスキップ特徴量を0.2から2.0までいくつか変化させた場合の出力画像です。

バックボーン特徴とは異なり大きな変化はないものの、スキップ特徴の増幅または減衰により描画量やディテール、コントラストに違いが表れています。

それぞれの特徴量は単体で変化させた場合には、変化量によっては悪影響が強く出てしまいますが、二つを組み合わせることでバランスをとることが可能です。
StableDiffusionWebUIの拡張機能ではこれら二つのパラメタを3種のステージ(Unetを3分割した階層)で調整することで画像品質の改善を実現します。

その他にもoffsetやwidth、High EndScale、Cutoffなどのパラメタもあり、これはFreeUの効果をさらに調整可能にするパラメタです。
ですが、StableDiffusionWebUI拡張機能での推奨値でもデフォルト値であり、本記事では特に変更せずデフォルト値を採用したいと思います。
また、StableDiffusionWebUIでは各パラメタの推奨値が設定されているため、それらと各パラメタをいくつか調整して比較検証します。

比較検証

プリセット比較

まずは、StableDiffusionWebUIへの拡張機能で準備されているプリセットパラメタでFreeUの使用有無を検証していきたいと思います。
今回使用するモデルはリアル系とイラスト系で以下二種類を使用します。

  • BracingEvoMix
  • AbyssOrangeMix2

また推奨値としてはモデルに応じて以下3種類が提供されています。

リアル系モデル

まずはリアル系モデルとして「BracingEvoMix」でのFreeU効果を確認していきたいと思います。
下記は左から1.FreeU未使用、2.SD1.4推奨値FreeU使用、3.SD2.1推奨値FreeU使用、4.SDXL推奨値FreeU使用の比較画像です。

FreeU未使用時には指が完全に破綻していますが、3,4のFreeU使用した画像では改善されていることが分かります。
一方2番目の画像は多少の改善は見られますが、相変わらず破綻気味でありまた低周波成分のデノイジングが強いため背景のスムージングが強すぎる感じになりました。
また、書き込み量に関してはどれも大きな違いはあるようには見えません。
上記プリセットの結果だけから見れば、3番目または4番目のパラメタがFreeUで改善効果が見られる結果で、2は逆に悪影響の方が強そうです。
バックボーン特徴については少しの値で画像が大きく変わりやすいため、1.1や1.2などあまり大きくない値を使う方が良いでしょう。

2Dモデル

次に2D系のモデルでのFreeU効果を確認していきたいと思います。
使用するモデルは「AbyssOrangeMix2」です。
下記は先ほどと同様に左から1.FreeU未使用、2.SD1.4推奨値FreeU使用、3.SD2.1推奨値FreeU使用、4.SDXL推奨値FreeU使用の比較画像です。

FreeU未使用時には指の本数が多かったのですが、FreeU使用時には人体的な破綻については改善していることが分かります。
ただし、先ほどのリアル系と同様に2番目のSD1.4推奨値の画像では低周波成分のデノイジングの影響でうっすらと青みがかかってしまいました。
3番目と4番目についてはどちらも大きな違いはありませんが、全体的に画像品質が改善されているといっても良いでしょう。

まとめ
  • プリセットはSD2.1またはSDXL推奨値がよさそう
  • バックボーン特徴は1.4までいくと少し過剰に効きすぎる
  • SD2.1とSDXL推奨値のどちらが良いかは個人の好みかもしれない

パラメタ調整比較

プリセットでおおよその各パラメタの値感が分かってきたので、もう少し各種パラメタの違いについて違いがないか検討してみたいと思います。
特にステージの違いとそれぞれのバックボーンとスキップ接続のパラメタについて比較してきます。

まずStableDiffusionWebUIのFreeU拡張機能ではステージを3つに分割してそれぞれパラメタ調整が可能です。
先に述べたよう3種のステージはU-Netを3分割した階層(IN00、IN01など)に相当しており、これに応じて画像のどこに影響を与えるのかが変わってきます。
ただし、U-Netの階層は単純にIN00が顔、IN01が服装などといった単純な対応はしておらず、各階層が各画像の各部分に複雑に関連します。
下記は各ステージでバックボーン特徴やスキップ接続のパラメタをいくつか変えて比較したものです。

左半分はスキップ接続は0で固定して、バックボーン特徴のみ1.1,1.2,1.3の3種類で生成してみたものです。
右半分はバックボーン特徴の増幅に応じてスキップせず特徴量を減衰させたパラメタで生成した結果です。
各ステージでの結果についてぱっと見だとあまり違いはありませんが、以下の傾向がありそうです。

  • stage1は書き込みが増える(特に背景が強調され人物の構図が変わっている)
  • stage2は全体的に大きな変化はなく、悪影響も少なめ
  • stage3は色味に大きな影響がある

上記の結果から以下のパラメタ調整がよさそうです。

  • stage1は控えめにバックボーン特徴を増加させる
  • stage2はstage1よりも大きな値でバックボーン特徴を増加させる
  • stage3は好みに応じてバックボーン特徴を増加させる

結果としてプリセットのパラメタ傾向と同様の結果(stage3以外)になりました。
スキップ接続に関しては目立った違いがないため、好みで調整するのがよさそうです。

最後に結論ですが、上記以外にもいくつか各種パラメタを色々と変えて検証した結果、正直最適値というのは求めることが出来ませんでした。
しかし手指や人体の破綻はFreeUを使用することで改善傾向にあるためFreeUを使用するメリットはありそうです。
その際にはプリセットのSD1.4やSDXLの推奨値を使用し、色味については好みに応じてstage3を調整するのがよさそうです。
ただし、FreeUを使用すれば必ずしも破綻がなくなるというわけでもないので、結局のところ好みで使用するかどうか決めるのがよさそうという感じでした。

まとめ

本記事ではStableDiffusionWebUIのFreeU拡張機能を導入する効果について解説しました。
FreeU技術の導入有無で画像品質がどのように変わるかリアル系と2D系のモデルで比較し、各種パラメタの違いについて検証をしています。
結論としては以下3つのことが言えそうです。

  • 手指の破綻などは多少の改善傾向はある
  • 色味やディテールなどに悪影響を及ぼす部分もある
  • 結局は誤差レベルで使用するかは好みの問題

所感としては導入必須レベルの技術というわけでもなさそうです。
またAUTOMATIC1111のStableDiffusionWebUI標準機能として実装される可能性もあるため、今すぐ導入をおススメするような機能ではないかなと思います。
ただし、特に処理が重くなるわけでもなく導入自体は簡単なので、興味があればちょっと試してみるのは面白いかもしれません。

ABOUT ME
ミスタ
ミスタと申します! このブログは主に日々学んでいる知識についてアウトプットしていくことを目的としたブログです。 その他、趣味や戯言なども時々書いたりもします。 最近は専らAI関連が興味の対象です。 このブログが少しでも誰かの役に立てればと思っています!