SuperMerger使いたい? #5 実践編「LoRAマージ」
今回はSuperMergerでモデルとLoRAをマージする「LoRAマージ」の機能について紹介します。
内容のレベルとしては以下の方が対象となりますので、予めご了承ください。
・txt2imgでLoRAをある程度使ったことがある。
・SuperMergerを使ったことがない、または少し触ったことがある。
(※注意 再掲)
あくまで自己流でのSuperMergerの使い方を記載するものであり、間違った内容やバージョンアップによる記載事項との差異が含まれている可能性があります。
また、マージのレシピ紹介や使用モデルを推奨するものでもありません。
もし記載や内容に誤りがある場合は、優しく指摘していただけると幸いです。
記事公開時 拡張機能バージョン
SuperMerger:19d7bdef (Sun Apr 16 14:54:01 2023)
1.モデル・LoRA・拡張機能の準備
今回のマージでは以下のモデル・LoRA・拡張機能を使用します。
モデル・LoRA
・モデル:Counterfeit-V2.5_fp16.safetensors
・LoRA:hipoly3DModelLora_v10.safetensors
※LoRAは「stable-diffusion-webui\models\Lora」に入れてください。
拡張機能
・SuperMerger
準備が出来ましたら、さっそく画面を見てみましょう!
2.SuperMergerの「LoRA」画面を見てみよう
SuperMergerの「LoRA」画面には主に3つの機能があります。
Merge to Checkpoint:モデルとLoRAのマージ
Make LoRA (alpha*A - beta*B):モデルとモデルの差分からLoRAを作成
Merge LoRAs:LoRA同士のマージ
今回はモデルとLoRAのマージの紹介になりますので、②・③については省略します。
3.モデルとLoRAを単純マージしてみる
モデルとLoRAをマージする方法はいたって簡単です。
以下、Counterfeit-V2.5にhipoly3DModelLoraを「0.5」の比重でマージする例です。 ・Checkpoint A:Counterfeit-V2.5_fp16
・filename(option):LoRAMergeModel1
・LoRAname1:ratio1~:hipoly3DModelLora_v10:0.5
・save precision:fp16(デフォルトのまま)
※「save precision」の選択により、画像の絵柄が若干変わります。
これで「Merge to Checkpoint」を実行すると...
マージモデルができました!
実際に出力してみましょう!
マージ結果検証の為、同一プロンプトでLoRAを適用した場合と比較してみました。若干差異はありますが、おおむね同じ結果となりました。
左:Counterfeit-V2.5+LoRA(<lora:hipoly3DModelLora_v10:0.5>)
右:LoRAMergeModel1
ここで、LoRAの指定箇所について補足します。
「stable-diffusion-webui\models\Lora」に入れたLoRAが画面下部に表示されます。
(表示されていない場合は、「update list」をクリックすると表示が更新されます)
LoRAを選択すると、「LoRAname1:ratio1~」の欄に追加されます。
この時、比重が1.0で入力されますので、適宜変更してください。
選択せずに直接入力することも可能です。
また、以下のように複数のLoRAを同時にマージすることも可能です。
LoRAname1:ratio1~:hipoly3DModelLora_v10:1.0,Loraeyes_V1:1.0
4.モデルとLoRAを階層別マージしてみる
モデルとLoRAの階層別マージは、txt2imgで「LoRA Block Weight」を使用する方法とほぼ同じ設定で行うことができます。
「LoRA Block Weight」の使用方法については、以下の記事で詳しく紹介されていますので、参考にしていただければ幸いです。
今回はやもぺろさんの記事にあるレシピをお借りして、Counterfeit-V2.5とhipoly3DModelLoraの階層別マージをやってみます! ・Checkpoint A:Counterfeit-V2.5_fp16
・filename(option):LoRAMergeModel2
・LoRAname1:ratio1~:hipoly3DModelLora_v10:0.3:NF
・save precision:fp16(デフォルトのまま)
・画面下部のプリセット欄に追加:NF:1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1
LoRAの指定箇所について補足します。
「hipoly3DModelLora_v10:0.3:NF」は以下のような意味になります。
→「hipoly3DModelLora_v10」を「0.3」の比重で「NF」のプリセットを適用する
NFは「1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1」という値を設定していますので、
これに比重「0.3」を掛けた値「0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.0, 0.0, 0.0, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3」がマージで適用されます。
それでは「Merge to Checkpoint」を実行...
マージモデルができました!
ログを見てみると...「0.3」の比重を掛けた値が適用されていそうですね。
実際に出力してみましょう!
単純マージと同様に同一のプロンプトでLoRAを適用した場合と比較してみました。こちらも若干差異はありますが、おおむね同じ結果となりました。
左:Counterfeit-V2.5+LoRA(<lora:hipoly3DModelLora_v10:0.3:NF>)
右:LoRAMergeModel2
5.LoRAマージリンク集
以下、LoRAのマージに関連する記事を紹介します。
今後も記事を見つけ次第、追記していこうと思います。(予定)
LoRAの階層別適用に関するチュートリアルです。
LoRA Block Weightを使用した検証方法等が記載されています。
今回紹介しなかったLoRA同士のマージについても紹介されています。
目に関するLoRAの階層別マージについてクラフさんが紹介してくださっています。
遠景のイラストで目のコントラストがなくなってしまう問題に対し、目のLoRAをマージして修正する方法と、各階層別の影響について検証されています。
7.おわりに
以上、SuperMergerにおける「LoRAマージ」の基本的な使用方法を紹介しました。
これまで紹介したモデル同士の単純マージ・階層別マージよりも設定箇所は少ないので、難しい内容ではなかったと思います。
あとは数値をいじって調整を...アァ_(꒪ཀ꒪」∠)_
次回、実践編「エレメンタルマージ」に入ります!