見出し画像

SuperMerger使いたい? #3 実践編「単純マージ」

お待たせしました!SuperMerger実践編です!
今回はSuperMergerで「単純マージ」を行う方法について紹介します。

また、おまけでSuperMergerならではの特殊な単純マージについても軽く触れていますので、最後までお付き合いいただければと思います。



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


記事公開時 拡張機能バージョン
SuperMerger:19d7bdef (Sun Apr 16 14:54:01 2023)



1.モデルの準備

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

モデル1:Counterfeit-V2.5_fp16.safetensors
モデル2:realMaxV34_v34.safetensors

選定理由としては、アニメ系とリアル系のモデルをマージした場合に変化が判別しやすいからです。

※現在、realMaxV34_v34のページが削除されていますのて、別途リアル系のモデルをご用意ください。以下説明ではrealMaxを使用した説明・画像となっていますので、予めご了承ください。


もしご自身でモデルを用意される場合は、モデルが破損していないか確認しておくことをお勧めします。
モデルの破損確認や修復方法については、以下の記事でまとめています。


2.単純マージのおさらい

まずは既存機能の単純マージ「Checkpoint Merger」についておさらいします。既に知ってるよ!という方は飛ばしていただいて問題ありません。

以下、「Checkpoint Merger」で3パターンのマージと画像生成をしてみます。


1回目:Model Aを7割、Model Bを3割でマージします。

・Model A:Counterfeit-V2.5
・Model B:realMaxV34_v34
・Custom Name (Optional):MergeModel1
・Multiplier (M) - set to 0 to get model A:0.3
・Interpolation Method:Weighted sum
・safetensors:チェック
・Save as float16:チェック

「Merge」実行!

マージしたモデルを選択してtxt2imgで画像生成...いい感じ?
※プロンプトはCounterfeit-V2.5のサンプルを使用しています。


2回目:Model Aを5割、Model Bを5割でマージします。

・Model A:Counterfeit-V2.5
・Model B:realMaxV34_v34
・Custom Name (Optional):MergeModel2
・Multiplier (M) - set to 0 to get model A:0.5
・Interpolation Method:Weighted sum
・safetensors:チェック
・Save as float16:チェック

「Merge」実行!!

マージしたモデルを選択してtxt2imgで画像生成...
1回目より少しリアルな雰囲気になりました。


3回目:Model Aを3割、Model Bを7割でマージします。

・Model A:Counterfeit-V2.5
・Model B:realMaxV34_v34
・Custom Name (Optional):MergeModel3
・Multiplier (M) - set to 0 to get model A:0.7
・Interpolation Method:Weighted sum
・safetensors:チェック
・Save as float16:チェック

「Merge」実行!!!

マージしたモデルを選択してtxt2imgで画像生成...
かなりリアル寄りになりましたね!


3.SuperMergerで単純マージしてみる

それでは、SuperMergerで単純マージをしてみましょう!

ここでは「2.単純マージのおさらい」で実施したマージ例をSuperMergerで再現する形で実践していきます。


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


1回目:Model Aを7割、Model Bを3割でマージします。

・Model A:Counterfeit-V2.5
・Model B:realMaxV34_v34
・Merge Mode:Weight sum
・use MBW:チェックしない
・alpha:0.3
・save settings:デフォルトのまま

※ use MBW は階層別マージを行う場合にチェックします

モデルの保存は最後に行いますので、今は「save model」にチェックしません。

この状態で「Merge&Gen」を押すと、モデルのマージと画像生成が実行されます。結果は...「単純マージのおさらい」1回目の生成結果と同じ画像が生成されました!


2回目:Model Aを5割、Model Bを5割でマージします。

・Model A:Counterfeit-V2.5
・Model B:realMaxV34_v34
・Merge Mode:Weight sum
・Calculation Mode:normal
・use MBW:チェックしない
・alpha:0.5
・save settings:デフォルトのまま

「Merge&Gen」を実行...
「単純マージのおさらい」2回目の生成結果と同じ画像が生成されました!


3回目:Model Aを3割、Model Bを7割でマージします。

・Model A:Counterfeit-V2.5
・Model B:realMaxV34_v34
・Merge Mode:Weight sum
・Calculation Mode:normal
・use MBW:チェックしない
・alpha:0.7
・save settings:デフォルトのまま

「Merge&Gen」を実行...
こちらも「単純マージのおさらい」3回目の生成結果と同じ画像が生成されました!


最後に、マージモデルを保存しましょう!
とりあえず、3回目の設定で保存してみます。

・Model A:Counterfeit-V2.5
・Model B:realMaxV34_v34
・Merge Mode:Weight sum
・Calculation Mode:normal
・use MBW:チェックしない
・alpha:0.7
・save settings:save model、safetensors、fp16にチェック
・Custom Name (Optional):SuperMergeModel1
 
(Custom Nameは入力しなくてもOKです)

そして、「Merge!」を実行!

マージモデル「SuperMergeModel1fp16.safetensors」が保存されました!
※fp16にチェックを入れた場合、モデル名の最後にfp16が自動で付与されます。


...え?1回目の方がいい?
じゃあもう一度モデルを保存してみましょう!

今度は、先ほど作成したモデルに上書きしてみます。

・alpha:0.3
・save settings:save model、overwrite、safetensors、fp16にチェック
・Custom Name (Optional):SuperMergeModel1

そして、「Merge!」を実行!これで上書きされます。

本当に上書きされたのか確認してみます。
そのまま「Gen」を押して確認もできますが、あえて「txt2img」で生成してみます。

「SuperMergeModel1fp16.safetensors」を選択し「txt2img」で画像を生成してみます。

結果は...1回目と同じ画像が生成されました!


これ、毎回「Merge&Gen」を実行しないといけないの?
...と思った方。ご安心ください!もっといい方法があります。

以下のようにX type、Y typeを指定してみましょう!
せっかくなので、seedに2と3を追加し3種類の画像を同時に生成してみます。

・X type:alpha
・Sequential Merge Parameters:0.3,0.5,0.7
・Y type:seed
・Y grid (Disabled if blank):1,2,3

また、「write merged model ID to」の「image」にチェックしておきます。
そして画面下の「Sequential XY Merge and Generation」を実行!!

実行後、以下のような結果が表示されます。
seed=1は先ほどの生成結果と同じものが表示されました!


では、この結果から気に入ったマージの設定でモデルを保存してみます!

先ほど「write merged model ID to」の「image」にチェックをしていました。この設定により、各画像の左上にIDが付与されます。

このIDは、モデルのマージ設定に紐付いた番号になっています。
IDを使用することで、マージの設定を再現することができます。
では、このマージ結果をもとにモデルを保存してみましょう!

今回は、生成結果の画像のうちID 13のマージ設定を再現してみます。
「merge from ID」に「13」と入力し「Set from ID(-1 for last)」を押します。

すると...ID 13で設定されていた値が呼び出されます!
後は任意で名前を入力し、「Merge!」でモデルが保存されます。

以上が、SuperMergerにおける「単純マージ」の使用方法です。



4.おまけ「alpha値限界突破!?」

ここまで操作されていた方、お気付きでしょうか...
そう...alpha値が「-1~2」まで設定できる、ということに!

既存機能の「Checkpoint Merger」では「0~1」までしか指定できません...
これはどういうことでしょうか?

とりあえず、Weight sum の計算式に当てはめてみます。

A*(1-alpha)+B*alpha
→ alpha:-1 の場合:A*2+B*(-1)
→ alpha: 2 の場合:A*(-1)+B*2


実際に出力してみましょう!

・X type:alpha
・Sequential Merge Parameters:-1,-0.5,0,0.5,1,1.5,2
・Y type:seed
・Y grid (Disabled if blank):1

seedを1に固定し、alpha値を-1から2まで0.5刻みで出力してみます。

Sequential XY Merge and Generation」実行!
...結果は以下の通りです。

...これ、使い道ありますかね?

ちなみに、ここでは「Weight sum」を実行しましたが、Add difference、Triple sum、sum Twiceなど、他のMerge Modeでも同様に使用することができます。

気になる方は、ぜひご自身で試してみてください!


5.おわりに

今回は単純マージのうち、「Weight sum」のみの使用方法を紹介しました。
ここまでの内容を理解すれば、他のMerge Mode(Add difference、Triple sum、sum Twice)も問題なく操作できるようになると思います。
そのため、この記事ではそれ以上の紹介は省きます。もし気になる方が多いようでしたら、別の記事で紹介したいと思います。

そして次回、実践編「階層別マージ」に入ります!


...今回は水龍さんでお別れです。それでは。