Stable Diffusion Web UIには、モデルをマージできる「Checkpoint Merger」というタブがあります。
Checkpoint Mergerでは、複数のモデルをマージして、自分の好きなモデルを作ることが可能です。
今回はこの「Checkpoint Merger」の使い方について、詳しく解説します。
「Checkpoint Merger」とは?
Checkpoint Mergerは、モデルをマージできるStable Diffusion Web UIのデフォルト機能です。
「モデルをマージする」とは、異なるモデルを組み合わせて新しいモデルを作ること。
自分だけのオリジナリティがある画像生成ができるようになり、ライセンスを守ればCivitaiなどで配布も可能です。
Checkpoint Mergerの基本的な使い方
基本はモデルを選択して、ファイル名、割合、マージ方法などを決めていくだけです。
今回例として三次元モデル(dreamshaper_8)と二次元モデル(counterfeitV30)をマージしてみます。
モデルを選択
まずCheckpoint Mergerタブを開いて、モデルを選択します。
Primary model (A)とSecondary model (B)があるので、それぞれマージしたいモデルを選択してください。
マージする割合は後から変えられるので、A・Bどちらのモデルでも問題ありません。
マージモデルの名前を入力:Custom Name (Optional)
Custom Name (Optional)には、マージ後のモデル名を入力します。任意のもので構いません。
なお、未入力の場合はそれぞれモデル名と割合がファイル名になります。個人で使うならこちらの方がわかりやすいかもしれません。
マージ方法を指定:Interpolation Method
Interpolation Methodは3種類あり、意味はそれぞれ以下の通りです。
No interpolation | ファイル名や拡張子変更、VAEを追加するときなどに使用 |
Weighted sum | 2つのモデルをマージ |
Add difference | 3つのモデルをマージ |
今回は2つモデルをマージするので「Weighted sum」を使用します。
モデルの比率を指定:Multiplier(M)
Multiplier(M)は、マージするモデルの比率を指定できます。
計算式はInterpolation Methodによって異なり、それぞれ以下の通りです。
Weighted sum:A * (1 - M) + B * M
Add difference:A + (B - C) * M
Weighted sumの方は実際に計算してみるとわかりやすいと思います。
デフォルトのMが0.3なので、モデルを1として計算するとAが70%、Bが30%です。
【1×(1-0.3)=0.7】+【1×0.3=0.3】
「Bの割合=M」と考えるとわかりやすいかもしれません。
Add differenceは、BからCを引いた差分をAに追加できます。
Redditの投稿を見るとM=0.2の場合、Bが20%追加され、Cが20減算されるとのこと。
正直あまりわかっていませんが、BモデルからCモデルの特徴を取り除いて、それをAに追加できるようです。
check point merge, difference math problem : StableDiffusion
拡張子の指定:Checkpoint format
Checkpoint formatは、マージモデルの拡張子を指定できます。
現在はsafetensorsが主流で、安全性や読み込み速度がckptより良いそうです。
基本はsafetensorsで問題ありません。
保存形式の指定:Save as float16
こちらはfloat16(半精度浮動小数点数)の形式でモデルを保存するか選べます。
float16形式で保存するとデータが小さくなり、読み込みも速くなります。
その反面、生成結果に影響がでると言われていますが、個人的にそこまで大きな違いはわかりませんでした。
特にこだわりがなければfloat16で問題ないと思います。
Copy config from
これはマージに使用したモデルからconfigファイルをコピーするかどうかを決められます。
選択項目は「どのモデルからコピーするか」です。
なお、githubだとSDv1.xモデルの場合は必要なく、SD2.x系のモデルは必要と回答している方がいます。
ですので、SD1.xモデルか個人で使用する場合は「don't」、SD2.x系のモデルをマージした場合はそのモデルをチェックしておけば大丈夫かと思います。
VAEの有無:Baked in VAE
マージモデルにVAEを入れるか入れないかを選択できます。
VAEあり・なしでどちらも作って生成してみましたが、こちらも服のロゴが異なるくらいで大きな違いはわかりませんでした。
人によっては両方作ってる方もいるので、個人使用ならお好み、配布予定があるならどちらも作ると良いかもしれません。
Discard weights with matching name
これは特定の名前に一致する重みを削除することで、モデルをスリム化できる機能のようです。
機械学習におけるプルーニング(Pruning)と呼ばれるもので、余分な部分を取り除き、計算回数やメモリ使用量を削減してモデルの性能を向上させるとのこと。
ただgithubではこれをやってもあまり変化しないという回答もあるので、基本は無記入で問題ないと思われます。
マージの実行:Merge
一通り設定が終わったら一番下の「Merge」をクリックします。
「Checkpoint saved to~」と表示されたらマージ完了です。
自動的にモデルフォルダに保存されるため、更新すればマージモデルが一覧に表示されます。
マージモデルで生成した画像
左からdreamshaper_8、counterfeitV30、マージモデルです。
割合をちょうど50%ずつにしたので、わかりやすく2.5次元ぽくなっていると思います。
このようにCheckpoint Mergerでモデルをマージできると、自分だけのオリジナルモデルが作れるようになります。
マージモデルを作るときはライセンスに注意
使用するモデルによっては、マージモデルの配布・販売を禁止しているものがあります。
Civitaiだとモデルページのリンクやアイコンから確認可能です。
「CreativeML Open RAIL-M」のリンクだけの場合は、基本問題ありません。
アイコンがある場合は以下3つが対象となります。
- Share merges using this model(このモデルを使ったマージ画像を共有する)
- ×の場合、このモデルを使ったマージモデルは共有できない
- Sell this model or merges using this model(このモデルまたはこのモデルを使ったマージファイルを販売する)
- ×の場合、このモデルを使ったマージモデルは販売できない
- Have different permissions when sharing merges(マージ画像を共有する際に、異なる権限を持つ)
- ×の場合、マージモデルにもこのモデルと同じ権限が与えられる
自分で使用する分には問題ありませんが、共有を考えている方はライセンスもしっかり確認しておきましょう。
Checkpoint Mergerの使い方まとめ
今回はCheckpoint Mergerでモデルをマージする方法をご紹介しました。
自分でモデルをマージできるようになると、理想の結果が得やすくなります。
また同じモデルだと似たような画像が生成されやすいですが、マージすることでオリジナリティを持たせることが可能です。
プロンプトで再現できない質感や生成範囲を広げることができるので、興味がある方はぜひマージを試してみてください。