見出し画像

SuperMerger使いたい? #6 実践編「エレメンタルマージ」

今回はSuperMergerで階層マージを越える階層マージ「エレメンタルマージ」について紹介します。

内容のレベルとしては以下の方が対象となります。
SuperMergerをある程度使える。
・エレメンタルマージを使ってみたいが、使い方がよくわからない。

※本記事はエレメンタルマージの使用方法のみを紹介する内容となります。本記事内のマージで使用している要素等は公開済みのサンプル等を基に例として使用しているのみですので、そのまま利用して頂くことを目的としていません。また、各要素の解説等もありませんので、予めご了承ください。



(※注意 再掲)
あくまで自己流でのSuperMergerの使い方を記載するものであり、間違った内容やバージョンアップによる記載事項との差異が含まれている可能性があります。
また、マージのレシピ紹介や使用モデルを推奨するものでもありません。
もし記載や内容に誤りがある場合は、優しく指摘していただけると幸いです。


記事公開時 拡張機能バージョン
SuperMerger:237df9aa (Sun Jun 4 17:11:51 2023)



1.モデルの準備

今回のマージでは以下のモデルを使用します。

モデル1:CounterfeitV30_25.safetensors
モデル2:majicmixRealistic_v5.safetensors


選定理由としては、アニメ系とリアル系のモデルをマージすることで変化を判別しやすくするためです。
もしご自身でモデルを用意される場合は、モデルが破損していないか確認しておくことをお勧めします。
モデルの破損確認や修復方法については、以下の記事でまとめています。


2.エレメンタルマージとは

まずは、エレメンタルマージとはどういうものか簡単に説明します。

既存の階層別マージでは25の階層で構成されていますが、各階層一つ一つは更に複数の要素で構成されています。
総数600以上にもなるそれらの要素について比率をマージ可能としたものがエレメンタルマージになります。

参考となりますが、使い方や要素の一覧は下記リンクに記載されています。


3.エレメンタルマージを使ってみよう

それでは、SuperMergerでエレメンタルマージをしてみましょう!
まずは基本的な使用方法です。

ここでは例としてマージ後に画像出力を行いますので、マージする前に「txt2img」でプロンプトを入力しておいてください。
※後述の内容ですが、SuperMegerのGenはGenをクリックした時点で、t2iタブに記載されている内容を利用し画像生成を行う為です。
※以下はCounterfeit-V2.5のサンプルを使用しています。



マージ例

以下、CounterfeitV30_25 へ majicmixRealistic_v5 の「OUT05」の「layers」要素のみを「1の比率」でマージする例です。

基本設定
・Model A:CounterfeitV30_25
・Model B:majicmixRealistic_v5
・Merge Mode:Weight sum
・use MBW:チェックしない
・alpha:0
・save settings:save mode, safetensors, fp16 にチェック
・Custom Name (Optional):MergeModel1

Restore faces, Tiling, Hires. fix, Batch size
・hiresfix:チェックする
・Upscaler:Latent (nearest-exact)
・Denoising strength:0.6
・Upscale by:2

Elemental Merge
・print change:チェックする
・Blocks:Element:Ratio,Blocks:Element:Ratio,…:OUT05:layers:1

※マージ後の画像出力確認の為、hires fixにチェックを入れています。
※「print change」にチェックすると、どの要素がマージされたかがログで表示されます。マージをするだけであればチェック不要ですが、今回は例としてチェックを入れています。

上記設定後...「Merge&Gen」実行!
マージモデル「MergeModel1fp16.safetensors」ができました!

print changeにチェックを入れていた為、以下のように要素のマージ情報が表示されます。
今回は「OUT05」「layers」を指定しましたので、OUT05のlayersに含まれる要素を1.0の比率でマージした結果となりました。


マージ結果検証の為、同一プロンプトでマージ前と比較してみました。
かなり微妙ですが、変化していますね…!
左:CounterfeitV30_25
右:MergeModel1



4.エレメンタルマージのサンプルを見てみる

標準でエレメンタルマージのサンプルが用意されています。サンプルは6つありますが、いくつかピックアップして実践してみたいと思います。

※サンプルは以下のテキストファイルに記載されています。

stable-diffusion-webui\extensions\sd-webui-supermerger\sample.txt


事前に「txt2img」でプロンプトを入力しておいてください。
※後述の内容ですが、SuperMegerのGenはGenをクリックした時点で、t2iタブに記載されている内容を利用し画像生成を行う為です。
※以下はCounterfeit-V2.5のサンプルを使用しています。



それではSample1から実践していきます!

Sample1

**sample1*******************************************************
OUT05::1
OUT05:layers:1
OUT05:attn1:1
OUT05:attn2:1
OUT05:ff.net:1

stable-diffusion-webui\extensions\sd-webui-supermerger\sample.txt

テキストファイルに記載されている内容は上記の通りです。
こちらを使用して、XYプロットでマージ結果の確認をしてみます。

基本設定
・Model A:CounterfeitV30_25
・Model B:majicmixRealistic_v5
・Merge Mode:Weight sum
・use MBW:チェックしない
・alpha:0

Restore faces, Tiling, Hires. fix, Batch size
・hiresfix:チェックする
・Upscaler:Latent (nearest-exact)
・Denoising strength:0.6
・Upscale by:2

XYプロット設定
・X type:pinpoint element
・Sequential Merge Parameters:
,OUT05::1,OUT05:layers:1,OUT05:attn1:1,OUT05:attn2:1,OUT05:ff.net:1
Y type:none

上記設定後、「Sequential XY Merge and Generation」実行!
結果は…このようになりました!

マージ結果は左から順に以下のようになります。

  • 一番左はマージ無し(パラメータの先頭を空欄で「,」から始めた為)

  • OUT05の要素全てに1の比率でマージ(通常の階層別マージと同様)

  • OUT05のlayersの要素のみ1の比率でマージ

  • OUT05のattn1の要素のみ1の比率でマージ

  • OUT05のattn2の要素のみ1の比率でマージ

  • OUT05のff.netの要素のみ1の比率でマージ



Sample3

**sample3*******************************************************
IN07:,IN07:layers,IN07:attn1,IN07:attn2,IN07:ff.net

stable-diffusion-webui\extensions\sd-webui-supermerger\sample.txt

テキストファイルに記載されている内容は上記の通りです。
ここでは、XYプロットで各要素の比率を変化させてみます。

XYプロット設定
・X type:pinpoint element
・Sequential Merge Parameters:
IN07:,IN07:layers,IN07:attn1,IN07:attn2,IN07:ff.net

Y type:alpha
・Sequential Merge Parameters:0,0.5,1

上記設定後、「Sequential XY Merge and Generation」実行!
結果は以下の通りです!このようにして、比率を変化させながらマージの結果を確認することもできます。



Sample6

**sample6*************************************************************
OUT05:emb_layers.1.bias,OUT05:emb_layers.1.weight,OUT05:in_layers.0.bias,OUT05:in_layers.0

※長いので一部抜粋

stable-diffusion-webui\extensions\sd-webui-supermerger\sample.txt

テキストファイルに記載されている内容より一部抜粋しています。
ここでは、XYプロットで「effective elenemtal checker」を使用し、各要素の影響度の差分を出力してみます。

基本設定
・Model A:CounterfeitV30_25
・Model B:majicmixRealistic_v5
・Merge Mode:Weight sum
・use MBW:チェックする

Restore faces, Tiling, Hires. fix, Batch size
・hiresfix:チェックする
・Upscaler:Latent (nearest-exact)
・Denoising strength:0.6
・Upscale by:2

XYプロット設定

・X type:effective elenemtal checker
・Sequential Merge Parameters:
OUT05:emb_layers.1.bias,OUT05:emb_layers.1.weight,OUT05:in_layers.0.bias,OUT05:in_layers.0

Y type:alpha
・Sequential Merge Parameters:

Weights Setting
weights for alpha, base alpha,IN00,IN02,...IN11,M00,OUT00,...,OUT11:
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0

上記設定後、「Sequential XY Merge and Generation」実行!
結果は以下の通りです!各要素のマージ結果の差分が出力され、どの程度の影響があるのか確認することができます!



5.補足

1.注意事項

エレメンタルマージは単純マージや階層別マージと同時に使用することができますが、要素のマージは最後に計算されます。
その為、単純マージ・階層別マージ後にエレメンタルマージの値で上書きされますので注意してください。


2.書式について

以下のように、複数の要素を指定してマージすることも可能です。

  • OUT04」の「attn1」を「0.5の比率」でマージ

  • OUT05」の「layers」を「1の比率」でマージ

複数の要素を指定する場合は、カンマで区切る、もしくは改行して下さい。

カンマで区切る場合

Blocks:Element:Ratio,Blocks:Element:Ratio,...:
OUT04:attn1:0.5,OUT05:layers:1

改行する場合

Blocks:Element:Ratio,Blocks:Element:Ratio,...:
OUT04:attn1:0.5
OUT05:layers:1

マージ実行結果



3.要素の指定方法について

例1.OUT05:attn:1」
上記のように指定した場合、要素は部分一致で判定されますので、「attn1」と「attn2」の両方の要素がマージされます。

例2.OUT03 OUT04 OUT05:attn2 attn1.to_out:0.5
このようにスペースで複数の階層・要素を指定した場合、
「OUT03」「attn2 」「attn1.to_out」「0.5の比率」
・「OUT04」
「attn2 」「attn1.to_out」「0.5の比率」
・「OUT05」
「attn2 」「attn1.to_out」「0.5の比率」
でマージします。

例3.OUT06:attn:0.5,OUT06:attn2.to_k:0.2
このように同じ階層の要素を複数指定した場合、「OUT06」「attn2.to_k」以外の「attn2」の要素「0.5の比率」でマージし、「attn2.to_k」を「0.2の比率」でマージします。
※指定が重複する場合、後に入力された方が優先されます。

例4.NOT OUT04:attn:1
このように階層の前にNOTを指定した場合、「OUT4」以外の階層「attn」「1の比率」でマージします。

例5.OUT05:NOT attn1.to_k.weight:0.5」
このように要素の前にNOTを指定した場合、「OUT05」「attn1.to_k.weight」以外の要素「0.5の比率」でマージします。


6.おわりに

以上、エレメンタルマージの基本的な使用方法について紹介しました。
使用すること自体はそこまで難しくはないですが、指定できる要素の数や組み合わせを考えると気が遠くなりますね…

今回でSuperMergerの紹介記事は一旦終了します!
今後機能の変更や拡張等があった場合に何かしら記事にするかもしれませんが、今のところ予定はありません。
既にエレメンタルマージを超えるテンソルマージなるものも存在しますが、もはや闇すぎて紹介は控えさせていただきます…_(꒪ཀ꒪」∠)_

それでは。