「このモデル」と「あのモデル」の中間くらいのがあると嬉しいのに
モデルをマージしてみましょう!
Stable Diffusionにはさまざまなモデルがありますが、自分の好みにぴったりのモデルを見つけるのは難しいものです。
- このモデルをもっとやわらかいタッチにしないな
- このモデルをもっとデフォルメしたいな
などなど、既存のモデルに満足できないケースもあると思います。
そんなときに役立つのが、モデルのマージ(融合)です。
モデルを融合させるなんて難しそうに思うかもしれませんが、Stable Diffusion WebUIを使えばとても簡単にできます。
この記事では、Stable Diffusionのモデルのマージ方法について解説していきます。
モデルのマージとは
モデル同士を合体させて新たなモデルを作り出すことを「マージ(Merge)」といいます。
Stable Diffusionには、◯◯ Mixという名前のモデルがたくさんありますが、それらの多くは「何か」と「何か」のモデルをMixつまりマージしたモデルのことなのです。
モデルAとモデルBの特徴をうまく混ぜ合わせて、新たなモデルを作り出すことができます。
AIの知識がないとモデルをマージすることなんてできないのでは?と思うかもしれませんが、実際のところ、Stable Diffusion WebUIを使うと簡単にできます。
拡張機能ではなく、標準機能として「Checkpoint Merger」という機能があるので、これを使ってマージを行います。
マージの方法
Stable Diffusion WebUI (AUTOMATIC1111) の「Checkpoint Merger」でモデルをマージする方法を解説していきます。
例として、ここでは私の好きな「Cetus-Mix」と「kidsMIX」という2つのモデルをマージしてみましょう。
- Cetus-Mix:精細系のモデル。瞳が特徴的。
- kidsMIX:デフォルメ系のモデル。ポップで親しみやすいタッチが特徴。
2つとも結構特徴の違うモデルだよね
これらを合体(マージ)するとどんなモデルになるでしょう?楽しみですね😊
Checkpoint Mergerを開く
まず、Stable Diffusion WebUI(AUTOMATIC1111)で、「Checkpoint Merger」のタブを開きます。
設定項目がいくつかありますが、上から順番に設定していけばOKです。
マージするモデルを選ぶ
まず、マージするモデルをプルダウンから選択します。
2つ、または3つのモデルをマージすることができます。
今回は2つなので、
・[Primary model (A)] → Cetus-Mix
・[Secondary model (B)] → kidsMIX
のように選択しました。
Custom Name :新モデルの名前
マージモデルの名前を設定します。
モデルを使うときには、他のモデルと同じようにStable Diffusion checkpointから選ぶことになるので、わかりやすい名前にしておきましょう。
ここでは「cetusKidsMix」としておきます。
Multiplier:混合割合
モデルの混合割合の設定です。
AとBの2つをマージする場合、Bの割合を指定します。
今回は半々の割合にしたいので「0.5」にしておきます。
これをたとえば、kidsMixの特徴を強めに出したいのであれば、「0.6」とか「0.7」とか割合を高めにしてみるとよいでしょう。
Interpolation Method:混合方式
2つのマージの場合は「Weighted sum」を選べばOKです。
以下のような計算式で混合されます。
3つのときは「Add difference」になります。
Checkpoint format
マージモデルの形式は、「safetensors」を選択しましょう。
(「ckpt」は古い形式なので、現在は推奨されていません)
「Save as float16」と「Save medata」にもチェックを入れておきましょう。
Copy config from
Stable Diffusion V2系の場合は必要になるようなのですが、それ以外では「Don’t」で問題ありません。
Bake in VAE
VAEをモデルに入れ込むかどうかを選択します。
civitaiなどで公開されているモデルにはVAEが入れ込まれているものも多いですが、個人で楽しむ分には「None」でいいと思います。
VAEってなんだっけ?という人はこちらの記事も参照ください。
Discard weights with matching name
この項目は何に使うのか情報を見つけることができませんでした。すみません。
ひとまず「空白」で問題ないと思います。
モデルをマージする
ここまで設定できたら、いよいよモデルのマージを実行します。
「Merge」を押して、モデルをマージしましょう。
使用しているGPUの性能にもよりますが、私の環境(GeForce RTX3060)では2分ほどでマージは完了しました。
思ったよりも早い!
マージされたモデルは「stable-diffusion-webui > models > Stable-diffusion」の下に保存されます。他のモデル(checkpoint)が格納されているフォルダと同じですね。
モデルを削除したいときは、このファイルを普通に削除すればOKです。
マージモデルを使う
では、マージしたモデルを使ってみましょう。
他のモデルと同じように、Stable Diffusion checkpointから選択して使えばOKです。
絵を生成してみたら、こんな感じになりました。
Cetus-Mixの精細感も残しつつ、kidsMixの親しみやすさも表現できてます。
個人的にはかなり好きな感じです♪
3つのモデルのマージ
Checkpoint mergerでは、3つのモデルもマージすることができます。
3つのモデルのマージでも、流れとしては2つのときと同じです。
違うのは、
- モデル選択で、Teriary model (C)を選択する
- Multipilierの計算方法
くらいです。
ただ、問題なのは、この計算式がわかりにくいのです。
2つのモデルのマージでは、「Multipilier=モデルBの割合」なのでシンプルだったのですが、3つのモデルの場合、「Multiplier=(モデルB-モデルC)の割合」の意味になります。
BとCの差分の割合??なんかピンと来ないなぁ…
確かに…
正直、この計算方法だと3つのモデルの割合が結局どうなるのかよくわからないので、A、B、Cをマージしたい場合は、次のように2つずつ2段階でマージする方がいいと思います。
- AとBをマージして、マージモデル1をつくる
- マージモデル1とCをマージする
もっと細かくマージするなら「階層マージ」
ここまで解説してきたマージは「単純マージ」と呼ばれています。
ってことはもっと複雑なマージもあるの?
はい!「階層マージ」と呼ばれる方法です
これはモデルの持つ特徴を階層としてとらえ、その階層ごとにマージする混合比率を設定するという方法です。
これを実現するために、たとえば、Super Mergerという拡張機能があります。
ただ、どの階層がモデルのどこに影響するかというのは明確にわかっているわけではないので、かなりの試行錯誤が必要になるはずです。(私もやったことはありません。)
奥が深すぎるので…😓
ガチのモデル開発を考えていない人は、普通の「単純マージ」で十分だと思います。
まとめ
モデル同士をマージすることで、それぞれのモデルの特徴を備えた新たなモデルを作ることができます。
既存のモデルに満足できず、もっと自分好みのモデルを生み出したい人はモデルのマージにチャレンジしてみるとよいでしょう。
Stable Diffusion WebUIの「Checkpoint merger」を使えば、簡単にマージすることができます。
よしっ!私好みの最強モデルを作るぞー!!
沼にはまらないように気をつけてくださいね…😂
コメント