MarkdownとBullet Journal

いわゆるプログラマーのつぶやき

colabでモデルをマージする

自分好みのモデルを作る

Stable Diffusionでは様々なモデルを選べるが、モデルを自分好みにカスタムすることも出来る。モデルを特定対象に特化する方法はいくつか存在する。

  • vanilla fine-tuning(一般的な追加学習)
  • Texture Inversion(数枚~のデータ)
  • Hypernetwork(数枚~のデータ)
  • Dreambooth(数枚~のデータ)
  • Aesthetic Gradients(数枚~のデータ)
  • Imagic(1枚のデータ)
  • DreamArtist(1枚のデータ)
  • Merge

今回はモデルをブレンドできる「マージ」をcolabで行う方法を説明する。マージでは各モデルの配合比率を変えることも出来るので少しだけテイストを加えたいといった味付けも可能だ。またマージしたモデルは保存できるのでいつでも自分だけのモデルとして再利用できる。

colab上のAUTOMATIC1111で実行

注意点として複数のモデルを扱うことからメモリが不足すると停止する場合があるため、ランタイムのタイプを有料会員が利用できる「ハイメモリ」の選択が望ましい

  • 本記事の最後に実行コードをまとめている
  • colabノートの利用方法などは過去記事を参照:

programmingforever.hatenablog.com

1-1 マージするモデルをGoogleDriveに保存しておく

マージで使いたいモデルをサイトからGoogleDriveに保存しておく。もちろんwgetコマンドでマージしたいモデルをサイトから直接ダウンロードする方法でもよい(但し時間がかかる)。この例ではWaifu Diffusion1.3とTrinart2.0(step60000)をマージするのでそれぞれダウンロードしてGoogleDriveに保存しておく。

1-2 colabのノートを開く

colabのAUTOMATIC1111:Akaibuのノートを開く(下記リンク)。

Google Colab

1-3 ノートにGoogleDriveマウントを追加

  • 1番目のコードセルの上にコードセルを追加する(セルのライン上にマウスを移動すると「+コード」と出るのでそれを選択)
  • 追加したコードセルに下記のコードを追記
from google.colab import drive
drive.mount('/content/drive')

これでGoogleDriveのファイルにアクセスできる様になる。

1-4 ノートのwgetコマンドを無効にする

ここではGoogleDriveからファイルをコピーするので無効にしたが、wgetコマンドを用いてそれぞれのモデルをサイトからダウンロードする方法でもよい

モデルをサイトからロードするための5-7行の頭に#を着けてコメントアウトする(GoogleDriveのモデルを使うため不要)

!git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui
%cd stable-diffusion-webui
#@title SD1.5
# get a token from https://huggingface.co/settings/tokens
#user_token = "" #@param {type:"string"}
#user_header = f"\"Authorization: Bearer {user_token}\""
#!wget --header={user_header} https://huggingface.co/runwayml/stable-diffusion-v1-5/resolve/main/v1-5-pruned.ckpt -O /content/stable-diffusion-webui/model.ckpt

1-5 ノートにGoogleDriveからのモデルをコピーするコマンドを追加する

  • 前記のコードセルの下側に新たなコードセルを追加
  • そこにコピーコマンドを追記
  • マージしたいモデルは全て/content/stable-diffusion-webui/models/フォルダにコピーする
  • VAEは/content/stable-diffusion-webui/models/VAE/フォルダにコピーする
  • ファイル名は変更しない

Waifu Diffusion1.3とTrinart2.0の例を示す。

!cp /content/drive/MyDrive/models/wd-v1-3-float16.ckpt  /content/stable-diffusion-webui/models/Stable-diffusion/
!cp /content/drive/MyDrive/models/trinart_step60000.ckpt  /content/stable-diffusion-webui/models/Stable-diffusion/
!cp /content/drive/MyDrive/models/kl-f8-anime2.ckpt /content/stable-diffusion-webui/models/VAE/

1-6 最初から実行

  • 1番上のセルから実行する
  • 一式完了したら現れるURL(ローカルではない2番目の方)をクリックすると、web UIが別画面で起動する
  • web UI起動時のユーザー名:me、パスワード:qwerty

1-7 マージを開始

画面の一番左上の囲みにあるプルダウン記号をクリックすると、入れた二つのモデル名があることを確認する。

二つのモデル名が見える

次にCheckpoint Mergerタブを選んで、Primary model, Secondery modeiにそれぞれモデルをセットする。名前はデフォルトで付くので付けなくてもよい。各モデルの比率をMultiplierのスライドバーで調整した上で「RUN」を押すとマージモデルが作成される。

モデルマージ設定

VAEはsettingタブをクリックして、真ん中の列のStable Diffusion、VAEのプルダウン記号をクリックして、コピーしたVAEの名前を見つけて選んでおく。VAEを使わない場合は設定不要。

VAEの選択画面

1-8 マージモデルを使う

画面の一番左上の囲みにあるプルダウン記号をクリックすると、新しくマージモデルが増えて合計三つになっていることがわかる。それを選択すればマージモデルが利用できる。モデルの切り替え時間も高速だ(数秒程度)。

下記はSEEDを固定した上で、WD1.3、マージ、Trinart2.0を並べたものだ。思惑通りそれぞれのモデルの中間のイメージになった。

マージモデルは中間のイメージになった

マージモデルは中間のイメージになった

1-9 マージモデルを保存する

ノートの実行画面でフォルダを確認すると、マージモデルが存在しているのがわかる。

マージモデルが存在している

そこでこのマージモデルをGoogleDriveにコピーして保存すればいつでも利用できる。すばやくコピーする方法としては、ノートの動作を一旦止めて(ぐるぐる回っているセルのアイコンをクリックすると停止する)、その下にコードセルを作ってコピーコマンドを入力して実行すればよい(10秒もかからない)。

下記の様にコピー元のフォルダ情報をいちいち打つのは面倒なので、!cp まで入力したらコピー対象のモデル名を右クリックして「パスをコピー」してペーストすると便利。

例として下記の様にモデルをコピーする。

!cp /content/stable-diffusion-webui/models/Stable-diffusion/wd-v1-3-float16_0.5-trinart_step60000_0.5-Weighted_sum-merged.ckpt /content/drive/MyDrive/models/

まとめ:ノートのコード一式

# ①GoogleDriveをマウントする
from google.colab import drive
drive.mount('/content/drive')
# ②実行コードのロード (不要な3行目以降を割愛)
!git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui
%cd stable-diffusion-webui
# ③GoogleDriveからモデルやVAEをコピー
!cp /content/drive/MyDrive/models/wd-v1-3-float16.ckpt  /content/stable-diffusion-webui/models/Stable-diffusion/
!cp /content/drive/MyDrive/models/trinart_step60000.ckpt  /content/stable-diffusion-webui/models/Stable-diffusion/
!cp /content/drive/MyDrive/models/kl-f8-anime2.ckpt /content/stable-diffusion-webui/models/VAE/
# ④実行コマンド
!COMMANDLINE_ARGS="--share --gradio-debug --gradio-auth me:qwerty" REQS_FILE="requirements.txt" python launch.py
# マージモデル保存する場合に使用するコード
!cp /content/stable-diffusion-webui/models/Stable-diffusion/wd-v1-3-float16_0.5-trinart_step60000_0.5-Weighted_sum-merged.ckpt /content/drive/MyDrive/models/