PR

【Stable Diffusion】モデルをマージ(融合)する方法を解説

【Stable Diffusion】モデルをマージ(融合)する方法を解説
この記事は約7分で読めます。
らん
らん

「このモデル」と「あのモデル」の中間くらいのがあると嬉しいのに

るん
るん

モデルをマージしてみましょう!

Stable Diffusionにはさまざまなモデルがありますが、自分の好みにぴったりのモデルを見つけるのは難しいものです。

  • このモデルをもっとやわらかいタッチにしないな
  • このモデルをもっとデフォルメしたいな

などなど、既存のモデルに満足できないケースもあると思います。

そんなときに役立つのが、モデルのマージ(融合)です。

モデルを融合させるなんて難しそうに思うかもしれませんが、Stable Diffusion WebUIを使えばとても簡単にできます。

この記事では、Stable Diffusionのモデルのマージ方法について解説していきます。

この記事はこんな人におすすめ
  • 既存のモデルに不満がある
  • モデルとモデルを合体させたい

モデルのマージとは

モデル同士を合体させて新たなモデルを作り出すことを「マージ(Merge)」といいます。

Stable Diffusionには、◯◯ Mixという名前のモデルがたくさんありますが、それらの多くは「何か」と「何か」のモデルをMixつまりマージしたモデルのことなのです。

モデルAとモデルBの特徴をうまく混ぜ合わせて、新たなモデルを作り出すことができます。

[Stable Diffusion] モデルのマージ
モデルのマージ

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」のタブを開きます。

[Stable Diffusion WebUI] Checkpoint merger
「Checkpoint Merger」のタブ

設定項目がいくつかありますが、上から順番に設定していけばOKです。

マージするモデルを選ぶ

[Stable Diffusion WebUI] Checkpoint mergerのモデル選択

まず、マージするモデルをプルダウンから選択します。
2つ、または3つのモデルをマージすることができます。

今回は2つなので、
・[Primary model (A)] → Cetus-Mix
・[Secondary model (B)] → kidsMIX
のように選択しました。

Custom Name :新モデルの名前

[Stable Diffusion WebUI] Checkpoint mergerのCustom Name

マージモデルの名前を設定します。
モデルを使うときには、他のモデルと同じようにStable Diffusion checkpointから選ぶことになるので、わかりやすい名前にしておきましょう。

ここでは「cetusKidsMix」としておきます。

Multiplier:混合割合

[Stable Diffusion WebUI] Checkpoint mergerのMultiplier

モデルの混合割合の設定です。
AとBの2つをマージする場合、Bの割合を指定します。

Multiplierの意味は「モデルBの割合」

今回は半々の割合にしたいので「0.5」にしておきます。
これをたとえば、kidsMixの特徴を強めに出したいのであれば、「0.6」とか「0.7」とか割合を高めにしてみるとよいでしょう。

Interpolation Method:混合方式

[Stable Diffusion WebUI] Checkpoint mergerのInterpolation Method

2つのマージの場合は「Weighted sum」を選べばOKです。
以下のような計算式で混合されます。

3つのときは「Add difference」になります。

Checkpoint format

[Stable Diffusion WebUI] Checkpoint mergerのCheckpoint format

マージモデルの形式は、「safetensors」を選択しましょう。
(「ckpt」は古い形式なので、現在は推奨されていません)

Save as float16」と「Save medata」にもチェックを入れておきましょう。

Copy config from

[Stable Diffusion WebUI] Checkpoint mergerのCopy config from

Stable Diffusion V2系の場合は必要になるようなのですが、それ以外では「Don’t」で問題ありません。

Bake in VAE

VAEをモデルに入れ込むかどうかを選択します。
civitaiなどで公開されているモデルにはVAEが入れ込まれているものも多いですが、個人で楽しむ分には「None」でいいと思います。

[Stable Diffusion WebUI] Checkpoint mergerのBake in VAE

VAEってなんだっけ?という人はこちらの記事も参照ください。

Discard weights with matching name

[Stable Diffusion WebUI] Checkpoint mergerのDiscard weights

この項目は何に使うのか情報を見つけることができませんでした。すみません。
ひとまず「空白」で問題ないと思います。

モデルをマージする

ここまで設定できたら、いよいよモデルのマージを実行します。
「Merge」を押して、モデルをマージしましょう。

使用しているGPUの性能にもよりますが、私の環境(GeForce RTX3060)では2分ほどでマージは完了しました。

らん
らん

思ったよりも早い!

マージされたモデルは「stable-diffusion-webui > models > Stable-diffusion」の下に保存されます。他のモデル(checkpoint)が格納されているフォルダと同じですね。

モデルを削除したいときは、このファイルを普通に削除すればOKです。

マージモデルを使う

では、マージしたモデルを使ってみましょう。

他のモデルと同じように、Stable Diffusion checkpointから選択して使えばOKです。

マージしたモデルも選択できる

絵を生成してみたら、こんな感じになりました。

Cetus-MixとkidsMixのマージモデルで生成した画像
「Cetus-Mix」と「kidsMIX」のマージモデル

Cetus-Mixの精細感も残しつつ、kidsMixの親しみやすさも表現できてます。

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段階でマージする方がいいと思います。

  1. AとBをマージして、マージモデル1をつくる
  2. マージモデル1とCをマージする
3つのモデルのマージは2段階に分ける
3つのモデルは2段階に分ける方がわかりやすい

もっと細かくマージするなら「階層マージ」

ここまで解説してきたマージは「単純マージ」と呼ばれています。

らん
らん

ってことはもっと複雑なマージもあるの?

るん
るん

はい!「階層マージ」と呼ばれる方法です

これはモデルの持つ特徴を階層としてとらえ、その階層ごとにマージする混合比率を設定するという方法です。

これを実現するために、たとえば、Super Mergerという拡張機能があります。

ただ、どの階層がモデルのどこに影響するかというのは明確にわかっているわけではないので、かなりの試行錯誤が必要になるはずです。(私もやったことはありません。)

るん
るん

奥が深すぎるので…😓

ガチのモデル開発を考えていない人は、普通の「単純マージ」で十分だと思います。

まとめ

モデル同士をマージすることで、それぞれのモデルの特徴を備えた新たなモデルを作ることができます。

既存のモデルに満足できず、もっと自分好みのモデルを生み出したい人はモデルのマージにチャレンジしてみるとよいでしょう。

Stable Diffusion WebUIの「Checkpoint merger」を使えば、簡単にマージすることができます。

らん
らん

よしっ!私好みの最強モデルを作るぞー!!

るん
るん

沼にはまらないように気をつけてくださいね…😂

プロフィール
この記事を書いた人
千鳥 るん | Chidori Run

画像生成AIで思い通りのイラストを描くためのノウハウを試行錯誤で模索しています。IT企業でAI戦略に関わっていたこともあるAIエンジニアです。大学生の頃から趣味でイラストを描いていましたが、仕事が忙しくなり一旦筆を置きました。最近、NovelAIと出会ってまたお絵描きへの情熱を取り戻しています。

千鳥るんをフォローする
Stable Diffusion
スポンサーリンク
シェアする
千鳥るんをフォローする

コメント