Stable Diffusion WebUI (on Colab) : Checkpoint Merger (ブログ)
作成 : Masashi Okumura (@ClassCat)
作成日時 : 04/28/2023
* サンプルコードの動作確認はしておりますが、動作環境の違いやアップグレード等によりコードの修正が必要となるケースはあるかもしれません。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。
- 人工知能研究開発支援
- 人工知能研修サービス(経営者層向けオンサイト研修)
- テクニカルコンサルティングサービス
- 実証実験(プロトタイプ構築)
- アプリケーションへの実装
- 人工知能研修サービス
- PoC(概念実証)を失敗させないための支援
- お住まいの地域に関係なく Web ブラウザからご参加頂けます。事前登録 が必要ですのでご注意ください。
◆ お問合せ : 本件に関するお問い合わせ先は下記までお願いいたします。
- 株式会社クラスキャット セールス・マーケティング本部 セールス・インフォメーション
- sales-info@classcat.com ; Website: www.classcat.com ; ClassCatJP
Stable Diffusion WebUI (on Colab) : Checkpoint Merger
Stable Diffusion の各モデル・チェックポイントにはそれぞれ長所短所があり、既存のモデル・チェックポイントを利用している際に改良したい点を見い出すケースは多々あると思います。キャラクターやオブジェクトなどを追加したい場合には LoRA が最適ですが、チェックポイント全体を改良してパーソナライズされた画像を手軽に生成したい場合には、チェックポイントのマージが有効な手段となります。マージすることによって不足しているコンセプトを補完したり、スタイルを望ましい方向に改良することができます。
Stable Diffusion WebUI ではこのような目的のために Checkpoint Merger 機能がデフォルトで用意されていて、モデル・チェックポイントを 3 つまでマージすることができます。この記事では 2 つのモデルをマージする方法について簡単に說明します。
使用方法
Stable Diffusion WebUI の Checkpoint Merger 機能について具体例をあげて基本的な說明をします。ここでは Openjourney と Anything をマージしてみましょう。Openjourney は Midjourney 画像で調整されたオープンソースの Stable Diffusion モデルで、Anything は高品質なアニメスタイルの画像が生成できるように意図されたモデルです。詳細はそれぞれのモデルカードを参照してください。
※ 使用したいモデル・チェックポイントは事前にインストールしておく必要がありますので注意してください。
◇ まず Openjourney で「公園にいる女性」画像を安直に生成してみます。プロンプトは “1girl, short brown hair, in the park” みたいな感じです。以下が生成画像ですが、(主観では) photorealistic (写実的) 過ぎる印象の画像なので Anything をマージして柔らかい画像にすることを考えてみます :
◇ Stable Diffusion WebUI で 2 つのモデル・チェックポイントをマージするのは非常に簡単です。Checkpoint Merger タブを選択すると、以下のようなユーザーインターフェースに移行します :
最初に、マージしたい 2 つのモデル・チェックポイントを “Primary model (A)” と “Secondary model (B)” として選択します。上の画像では “Primary model” として Openjourney を、”Secondary model” として Anything を選択しています。
“Custom Name (Optional)” は取り敢えずは空白で構いません。この場合命名規則に従ったファイル名でチェックポイントが生成されます。
※ デフォルトでは “0.7(mdjrny-v4) + 0.3(anything-v4.5-pruned).safetensors” のような、マージ対象となるモデル名と混合比率を含む非常に長いファイル名になりますので、最終的には適切な名前を設定したほうが扱いやすいです。
次に、”multiplier (M)” の値を調整します。multiplier は乗数の意味で、2 つのモデルをマージする際の重み付けの比率を設定します。0 に設定すればモデル A になり、0.5 であれば等しい重み付けでモデルをマージします。
その他、注意すべき設定項目は :
- Interpolation Method (補間方法) : 2 つのモデルのマージでは、デフォルトの “Weighted sum” (加重合計) で良いです。
- Checkpoint format : 特に理由がなければ、safetensors を選択しましょう。
- Save as float16 : 通常はチェックして float16 でセーブして問題ありません。
◇ 以上の設定ができたら、”Merge” ボタンをクリックします。すると 1 分もかからずにマージされたチェックポイントが作成されて利用可能になります。Colab のセルには以下のようなメッセージが出力されます :
Saving to /content/stable-diffusion-webui/models/Stable-diffusion/0.7(mdjrny-v4) + 0.3(anything-v4.5-pruned).safetensors... Checkpoint saved to /content/stable-diffusion-webui/models/Stable-diffusion/0.7(mdjrny-v4) + 0.3(anything-v4.5-pruned).safetensors.
“0.7(mdjrny-v4) + 0.3(anything-v4.5-pruned).safetensors” という名前で新しいチェックポイントが作成されました!
動作検証
実際にマージされたチェックポイントを利用してみましょう。通常のように “txt2img” タブに戻り、新たなチェックポイントを選択してから画像生成するだけです。
以下の画像は Openjourney (0.7) : Anything (0.3) の比率でマージしたチェックポイントを使用して、前述と同じプロンプトで画像生成したものです。思惑通り、photorealistic な感じが多少薄れて柔らかい印象になっています :
そして以下の画像は Openjourney (0.3) : Anything (0.7) の比率でマージしたチェックポイントを使用して画像生成したものです。この比率だとアニメスタイルに偏ります :
以上