見出し画像

SuperMergerのプリセット徹底検証

こんにちは。最近AI(Stable Diffusion)による画像生成にはまっています。素晴らしいモデルを公開してくださっている方々のおかげで、簡単に驚くようなクオリティの画像が生成できるのは本当にありがたい限りです。

画像のクオリティを上げる手法としては、プロンプトの工夫やLoRA、VAE、hires.fix、ControlNetなど、さまざまな手法が生み出されており、日々楽しみながら追いかけさせてもらってます。ただやはりその中でも、どのモデルを使うかというのが画像の品質を最も左右するのではないでしょうか。

公開されているモデルを使うのも良いのですが、自分のオリジナルモデルを作りたい時に行うのがマージです。この記事ではStable Diffusion Web UIの拡張機能であるSuperMergerを使う際のプリセットについて、詳しく掘り下げて見ていきます。

前提知識

階層マージについてや、その前提知識となるU-Net、SuperMergerの使い方などについてはこの記事では触れません。既に素晴らしい記事がいくつも公開されているので、そちらを読んでいただくと良いかと思います。

今回の検証について

それでは本題に入っていきます。今回の検証は、SuperMergerで階層マージを行う際にどのプリセットを使うとどんな風になるのかを理解するために行いました。

今回使用させていただいたモデルは以下の2モデルです。違いがわかりやすいようにイラスト系(Counterfeit-V2.5)に実写系(chilled_remix)を混ぜる、という想定で行っています。モデルの作者様、ありがとうございます!

あと、ちょっとした注意点を。

  • 重み付けの影響はモデルによって変わるとされています。従ってモデルが違えば結果は違う可能性が高いです。ただそれでもなんとなくの傾向はあるみたいなので、参考にしていただければと思います。

  • この検証を行っている僕自身、マージを学び始めた初学者なので、もしかしたら理解や解釈に誤りがあるかもしれません。その場合はご指摘いただけると嬉しいです。

では、早速いってみましょう!

検証結果

これ以降、SuperMergerにデフォルトで登録されているプリセットのうち、ALL_AとALL_Bを除いた36個について、順に出力結果を掲載していきます。

なおModel AとModel Bという表現を使っていますが、Model Aがベースとなるモデル(今回はCounterfeit-V2.5)、Model B(今回はchilled_remix)は足す側のモデルと思ってください。

1. GRAD_V

U-Netの最初と最後はModel Bを強めに、中間はModel Aを強めにしているプリセットです。変化は直線的です。

似てる:R_SMOOTHSTEP*2、R_SMOOTHSTEP/2
:GRAD_A

最初なので上記の図の見方を説明しておきますね。X軸が層、Y軸がModel AとBの比率を表しています。0がModel A 100%、1がModel B 100%です。上の図ではIN01が約0.9となっていますが、この場合IN01という層に対してはModel Aを10%、Model Bを90%で混ぜてね、ということになります。

では出力結果です。比較しやすいように、ALL_A(Model Aのみ)、ALL_B(Model Bのみ)も合わせて出力しています。

続いて、特定の層のみを変化させた場合の出力結果も掲載しておきます。意図としては、これを見ることで各層が出力結果にどのような影響を与えているのかがわかるかなと思ったのですが、正直わかりにくいです(笑)。おそらく各層の重みが相互に影響しているためだと思いますが、ちゃんと見ていくと面白かったりするので興味がある方は見てみてください。

では、次からはさくさくいきます!

2. GRAD_A

GRAD_Vを上下逆にした感じですね。最初と最後はModel Aを強めに、中間はModel Bを強めにしているプリセットです。変化は直線的です。

似てる:SMOOTHSTEP*2、SMOOTHSTEP/2
:GRAD_V

3. FLAT_25

全ての層に対してModel Aを75%、Model Bを25%で混ぜた感じです。

4. FLAT_75

全ての層に対してModel Aを25%、Model Bを75%で混ぜた感じです。

5. WRAP08

最初と最後の4層のみModel B、あとはModel Aというプリセットです。

似てる:WRAP_12、WRAP_14、WRAP_16

6. WRAP12

最初と最後の6層のみModel B、あとはModel Aというプリセットです。

似てる:WRAP_08、WRAP_14、WRAP_16

7. WRAP14

最初と最後の7層のみModel B、あとはModel Aというプリセットです。

似てる:WRAP_08、WRAP_12、WRAP_16

8. WRAP16

最初と最後の8層のみModel B、あとはModel Aというプリセットです。

似てる:WRAP_08、WRAP_12、WRAP_14

9. MID12_50

最初の5層と最後の6層がModel A、中間の14層はModel AとBを50%ずつというプリセットです。なんでMID12なんだろう。。。

10. OUT07

最後の7層のみModel Bというプリセットです。

11. OUT12

最後の12層のみModel Bというプリセットです。

似てる:OUT12_5

12. OUT12_5

最後の12層のみModel BなのはOUT12と同様ですが、中間層(M00)の比率が50:50になっています。

似てる:OUT12

13. RING08_SOFT

山が2つあるような形ですね。IN06-08、OUT03-05がModel Bとなっています。山の前後のIN05、IN09、OUT02、OUT06は50:50ですね。

似てる:RING08_5、RING10_5、RING10_3

14. RING08_5

IN06-09、OUT02-05がModel Bとなっています。

似てる:RING08_SOFT、RING10_5、RING10_3

15. RING10_5

IN05-09、OUT02-06がModel Bとなっています。

似てる:RING08_SOFT、RING08_5、RING10_3

16. RING10_3

IN06-10、OUT01-05がModel Bとなっています。RING10_5が真ん中の谷が5層なのに対して、こちらは3層です。山が近づいた形になっています。

似てる:RING08_SOFT、RING08_5、RING10_5

17. SMOOTHSTEP

徐々にModel Bの比率が上がっていくプリセットです。直線的に上がっていくのではなく、最初と最後はゆるやかに、中間層付近では急激に上がっていきます。

似てる:REVERSE_COSINE
:REVERSE_SMOOTHSTEP

18. REVERSE-SMOOTHSTEP

徐々にModel Bの比率が下がっていくプリセットです。直線的に下がっていくのではなく、最初と最後はゆるやかに、中間層付近では急激に下がっていきます。

似てる:COSINE
:SMOOTHSTEP

19. SMOOTHSTEP*2

徐々にModel Bの比率が上がっていき、中間層を境に下がっていくプリセットです。GRAD_Aと似ていますが直線的ではなく、最初と最後が緩やかになっています。

似てる:GRAD_A、SMOOTHSTEP/2
:R_SMOOTHSTEP*2

20. R_SMOOTHSTEP*2

徐々にModel Bの比率が下がっていき、中間層を境に上がっていくプリセットです。GRAD_Vと似ていますが直線的ではなく、最初と最後が緩やかになっています。

似てる:GRAD_V、R_SMOOTHSTEP/2
:SMOOTHSTEP*2

21. SMOOTHSTEP*3

徐々にModel Bの比率が上がっていき、IN09を境に下がり、さらにOUT02を境にまた上がっていくプリセットです。N字のような形です。

似てる:SMOOTHSTEP/3
:R_SMOOTHSTEP*3

22. R_SMOOTHSTEP*3

徐々にModel Bの比率が下がっていき、IN09を境に上がり、さらにOUT02を境にまた下がっていくプリセットです。

似てる:R_SMOOTHSTEP/3
:SMOOTHSTEP*3

23. SMOOTHSTEP*4

徐々にModel Bの比率が上がっていき、IN08を境に下がり、中間層を境に上がり、さらにOUT03を境にまた下がっていくプリセットです。M字のような形です。

似てる:SMOOTHSTEP/4
:R_SMOOTHSTEP*4

24. R_SMOOTHSTEP*4

徐々にModel Bの比率が下がっていき、IN08を境に上がり、中間層を境に下がり、さらにOUT03を境にまた上がっていくプリセットです。W字のような形です。

似てる:R_SMOOTHSTEP/4
:SMOOTHSTEP*4

25. SMOOTHSTEP/2

徐々にModel Bの比率が上がっていき、中間層を境に下がっていくプリセットです。

似てる:GRAD_A、SMOOTHSTEP*2
:R_SMOOTHSTEP/2

26. R_SMOOTHSTEP/2

徐々にModel Bの比率が下がっていき、中間層を境に上がっていくプリセットです。

似てる:GRAD_V、R_SMOOTHSTEP*2
:SMOOTHSTEP/2

27. SMOOTHSTEP/3

徐々にModel Bの比率が上がっていき、IN08を境に下がり、さらにOUT03を境にまた上がっていくプリセットです。

似てる:SMOOTHSTEP*3
:R_SMOOTHSTEP/3

28. R_SMOOTHSTEP/3

徐々にModel Bの比率が下がっていき、IN08を境に上がり、さらにOUT03を境にまた下がっていくプリセットです。

似てる:R_SMOOTHSTEP*3
:SMOOTHSTEP/3

29. SMOOTHSTEP/4

徐々にModel Bの比率が上がっていき、IN06を境に下がり、中間層を境に上がり、さらにOUT05を境にまた下がっていくプリセットです。

似てる:SMOOTHSTEP*4
:R_SMOOTHSTEP/4

30. R_SMOOTHSTEP/4

徐々にModel Bの比率が下がっていき、IN06を境に上がり、中間層を境に下がり、さらにOUT05を境にまた上がっていくプリセットです。

似てる:R_SMOOTHSTEP*4
:SMOOTHSTEP/4

31. COSINE

徐々にModel Bの比率が下がっていくプリセットです。直線的に下がっていくのではなく、最初と最後はゆるやかに、中間層付近では急激に下がっていきます。REVERSE-SMOOTHSTEPと似た形をしています。

似てる:REVERSE_SMOOTHSTEP
:REVERSE_COSINE

32. REVERSE_COSINE

徐々にModel Bの比率が上がっていくプリセットです。直線的に上がっていくのではなく、最初と最後はゆるやかに、中間層付近では急激に上がっていきます。SMOOTHSTEPと似た形をしています。

似てる:SMOOTHSTEP
:COSINE

33. TRUE_CUBIC_HERMITE

徐々にModel Bの比率が上がっていき、IN05辺りから緩やかに推移し、OUT06辺りからまた上がっていくプリセットです。SMOOTHSTEP/3の山と谷部分をぎゅっと縮めたような形です。

似てる:FAKE_CUBIC_HERMITE
:TRUE_REVERSE_CUBIC_HERMITE

34. TRUE_REVERSE_CUBIC_HERMITE

徐々にModel Bの比率が下がっていき、IN05辺りから緩やかに推移し、OUT06辺りからまた下がっていくプリセットです。R_SMOOTHSTEP/3の山と谷部分をぎゅっと縮めたような形です。

似てる:FAKE_REVERSE_CUBIC_HERMITE
:TRUE_CUBIC_HERMITE

35. FAKE_CUBIC_HERMITE

徐々にModel Bの比率が上がっていき、IN05辺りから緩やかに推移し、OUT06辺りからまた上がっていくプリセットです。TRUE_CUBIC_HERMITEに似ていますが中間部分をさらにフラットにしたような形です。

似てる:TRUE_CUBIC_HERMITE
:FAKE_REVERSE_CUBIC_HERMITE

36. FAKE_REVERSE_CUBIC_HERMITE

徐々にModel Bの比率が下がっていき、IN05辺りから緩やかに推移し、OUT06辺りからまた下がっていくプリセットです。TRUE_REVERSE_CUBIC_HERMITEに似ていますが中間部分をさらにフラットにしたような形です。

似てる:TRUE_REVERSE_CUBIC_HERMITE
:FAKE_CUBIC_HERMITE

分類してみよう

正直、数が多いのと似たようなのも沢山あるのでよくわからん!という方も多いのではないでしょうか。私もこの記事を作っていて気が狂いそうになっています。なので、整理するためになんとなく似た系統のものをグルーピングしてみました。便宜上それぞれのグループに名前をつけていますが、名前が適当なのは許して下さい。

V字型

GRAD_V、R_SMOOTHSTEP*2、R_SMOOTHSTEP/2

逆V字型

GRAD_A、SMOOTHSTEP*2、SMOOTHSTEP/2

フラット型

FLAT_25、FLAT_75

FLAT_25とFLAT_75は、出力結果はあまり似ていないのですが全ての層に同じ比率の重み付けをするという性質が同じため、同じグループにしました。当然ながら25の方がModel Aの性質を多く持ち、75の方がModel Bの性質を多く持つ結果になります。

WRAP系

WRAP08、WRAP_12、WRAP_14、WRAP_16

OUT系

OUT07、OUT12、OUT12_5

RING系

RING08_SOFT、RING08_5、RING10_5、RING10_3

右肩上がり型

SMOOTHSTEP、REVERSE_COSINE

右肩下がり型

REVERSE-SMOOTHSTEP、COSINE

N字型

SMOOTHSTEP*3、SMOOTHSTEP/3

逆N字型

R_SMOOTHSTEP*3、R_SMOOTHSTEP/3

M字型

SMOOTHSTEP*4、SMOOTHSTEP/4

W字型

R_SMOOTHSTEP*4、R_SMOOTHSTEP/4

CUBIC HERMITE型

TRUE_CUBIC_HERMITE、FAKE_CUBIC_HERMITE

REVERSE CUBIC HERMITE型

TRUE_REVERSE_CUBIC_HERMITE、FAKE_REVERSE_CUBIC_HERMITE

なお、MID12_50だけはちょっと特殊な形をしているので特にグルーピングはしませんでした。

いかがでしたでしょうか。グループ内でちょっとずつ差はあれど、似たような重み付けのグループは似た傾向の出力結果になっていることがわかると思います。

まとめ

さて、とりあえず今回の検証は一旦ここまでとさせていただきます。当初は各層の影響を明らかにしてやろうと息巻いていましたが、おそらく組み合わせが大きく影響してしまうのでなかなか難しかったです。

ただそれでも、階層マージを行う際にどのプリセットを選択するかの最初の足がかりくらいにはなったかなと思います。モデルが違えばまた結果は違ってくるのだと思いますが、プリセットカタログ的にご活用いただけると嬉しく思います。

マージと画像生成を1,000回以上繰り返し、何の成果も得られなかったら泣きたくなるところですが、個人的にはなんとなく理解が進んだ気がするので満足しています。

この後余裕があれば、検証結果を見返しながらもうちょっと深い考察をしたり、用途別のプリセット作成を試してみたり、色々遊んでみたいと思っています。また何かわかりましたらnoteで共有させてもらいますね!肝心のモデル作成が全く進んでいませんが(笑)

最後までお読み頂きありがとうございました!それではよいAI画像生成ライフを!


この記事が参加している募集

この記事が気に入ったらサポートをしてみませんか?