MarkdownとBullet Journal

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

colabで出来るモデル学習のやり方

色々なモデル学習方法

モデルの追加学習方法は数百枚~数万枚の画像データで行う純粋なDiffusion Modelの追加学習から、1枚、あるいは数枚程度の軽微な学習まで色々あり、Google colabで行える方法をまとめた。

なお学習したモデルやFine-tuningはAUTOMATIC1111の正しい場所に配置する必要があり、その配置情報は下の記事にまとめた。

programmingforever.hatenablog.com

 

メジャーなモデルの学習方法

  1. vanilla fine-tuning(一般的な追加学習)
  2. Texture Inversion(数枚~のデータ)
  3. Hypernetwork(数枚~のデータ)
  4. Dreambooth(数枚~のデータ)
  5. Aesthetic Gradients(数枚~のデータ)
  6. Imagic(1枚のデータ)
  7. DreamArtist(1枚のデータ)
  8. LoRA
  9. Merge(学習ではなくモデルのブレンド
  10. 層別Merge

※マージは学習ではないが、好みのスタイルをブレンドしたオリジナルのモデルが作れるなどFine-tuningに近い調整が行えるので加えた。

 

1. vanilla fine-tuning(一般的な追加学習)

colabノートの詳細な説明がある記事を紹介。

note.com

2. Texture Inversion(数枚~のデータ)

colabノートの詳細な説明がある記事を紹介。

note.com

3. Hypernetwork(数枚~のデータ)

colabノートの詳細な説明がある記事を紹介。

onlinegamernikki.com

4. Dreambooth(数枚~のデータ)

解説記事:

programmingforever.hatenablog.com

5. Aesthetic Gradients(数枚~のデータ)

詳細な説明がある記事を紹介。

gigazine.net

6. Imagic(1枚のデータ)

解説記事:

programmingforever.hatenablog.com

7. DreamArtist(1枚のデータ)

解説記事:

programmingforever.hatenablog.com

8. LoRA

解説記事:

self-development.info

9. Merge(学習ではなくモデルのブレンド

解説記事:

programmingforever.hatenablog.com

10. 層別Merge

解説記事:

note.com

中止:クリスタのAIの試験サービス搭載を取り止め

CLIP STUDIO PAINTへのAI描画機能を中止

クレームが殺到?したのか発表したAI描画機能搭載中止のアナウンスがあった。

mimicの時といい、大変残念である。奇しくも同じ日にAppleがStable Diffusionへの正式対応(チップに合わせたカスタム対応で高速化)を発表した。Adobeなど世界中のクリエイティブツールがAIを標準機能の一つとして取り込む中で、極めて残念な対応だ。

colab:model,VAE,Textual Inversion,Dreambooth,Hypernetworkの配置

AUTOMATIC1111へのモデル等の配置

colab上で利用できるAUTOMATIC1111は、各モデルやFine-tuningしたデータを正しく格納すると動的に切り替えられる。以下順に説明する。

①modelの配置:

複数のモデルを動的に切り替える利用や、モデルをマージしたい場合も含め、モデルは全て、/content/stable-diffusion-webui/models/Stable-diffusion/フォルダに格納する。起動後、AUTOMATIC1111の一番左上欄の下矢印をクリックするとモデルを数秒程度で変更できる。

②VAEの配置:

VAEは全て、/content/stable-diffusion-webui/models/VAE/フォルダに格納する。Settingsタブの中央列、Stable DiffusionのVAEで使用したいものを選択した後に「Apply settings」を押すことで複数のVAEを切り替えて使用できる。一つしか入れていない場合は自動で登録されているので作業は不要。

③Textual Inversionの配置:

Textual Inversionファイルは全て、/content/stable-diffusion-webui/embeddings/フォルダに格納する。Textual Inverisonデータは「.pt」や「.bin」の拡張子で、ファイル名をpromptに入力することで使用する。

よってファイル名さえ異なれば、数十個以上の.ptファイルを格納して、プロンプトの呼び出し名(ファイル名)を都度変更することで各TIを利用できる(複数のTIの同時利用も可能)。

正しく使用された場合はログに「Used embeddings: ファイル名 [****]の表記が出る。

④Hypernetworkの配置:

Hypernetworkファイルは全て、/content/stable-diffusion-webui/models/hypernetworks/フォルダに格納する。Settingsタブの中央列、Stable DiffusionのHypernetworkの中から選択後に「Apply settings」を押すと使用できる。「Hypernetwork strength」で強度を変更可能。「Stop At last layers of CLIP mode」も変更可能。

⑤Dreambooth、⑥Imagicの配置:

Dreambooth、Imagicではモデルの様にckptが作られるので同様に、/content/stable-diffusion-webui/models/Stable-diffusion/フォルダに格納する。

Dreambooth利用時はプロンプトに学習時に指定した固有名詞と汎用名称を入れる(例:汎用名称:dog、固有名詞:hanakoで学習した場合:photo of hanako dog

Imagicは学習時にプロンプトを入力しているので不要(なので変更困難で使いづらい)。

⑦DreamArtistの配置:

DreamArtinstは、指定したname(ファイル名)とinitialization text(girlなどの汎用名称)を入れて学習すると、/content/stable-diffusion-webui/embeddings/に、「ファイル名.pt」と「ファイル名-neg.pt」の2つのTextual Inversionファイルが作られる。

学習データは/dream_artistフォルダにあり、利用する「ファイル名.pt」と「ファイル名-neg.pt」は/embeddingsフォルダに入っている

利用時はTextual Inversion同様に、/content/stable-diffusion-webui/embeddings/フォルダに「ファイル名.pt」と「ファイル名-neg.pt」を格納する。

プロンプトにファイル名を入力すると作動する。正しく使用された場合はログに「Used embeddings: ファイル名 [****]の表記が出る。

(例:initialization text:girl、name(ファイル名):test1で学習した場合はプロンプトに「girl」と「test1」が必要)

⑧Aesthetic Gradientsの配置:

Aesthetic Gradientsはstable-diffusion-webui/extensions/aesthetic-gradient/aesthetic_embeddings/フォルダに格納する。

利用可能なAesthetic Gradientsに利用するembedding用データ:

github.com

利用方法はGigazineの記事が詳しい。

gigazine.net

 

GoogleDrive上にAUTOMATIC1111のcloneを実装した場合

下記の別記事では高速起動のためにAITOMATIC1111のcloneをGoogleDrive上に実装する方法を説明した。

programmingforever.hatenablog.com

この様にGoogleDrive上にAUTOMATIC1111のcloneを実装をした場合は、今まで説明した各ファイルのコピー先である/content/stable-diffusion-webui/の部分を、/content/drive/MyDrive/stable-diffusion-webui/に変更することで各Fine-tuningデータを正しい場所に格納できる。

 

colab:GoogleDriveにAUTOMATIC1111をcloneして高速実行

GoogleDriveにAUTOMATIC1111をclone

この記事は過去記事の続きで、ローカルPCに近い感覚で高速起動させる方法を説明する。colab利用の場合、通常はcolab側のドライブにAUTOMATIC1111をcloneするが、それをGoogleDrive側にcloneすることで一式インストールされた状態で利用できる。

実測では4分30秒程度でAUTOMATIC1111が起動した(2モデル、1VAEの場合)。

過去記事はこちら:

programmingforever.hatenablog.com

①環境構築:AUTOMATIC1111やモデルをGoogleDriveに一式セットする

ノートは環境構築用と、推論実行用の2つを作る。環境構築用は最初に1回だけ実行すればよい。いずれも記事の最後にコードだけをまとめている。

1-1 あらかじめモデルをGoogleDriveに保存する

使いたいモデルをサイトからGoogleDriveに保存する。詳細な説明は過去記事参照のこと。

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

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

Google Colab

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

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

次のセルを下記のように修正する。

  • MyDriveに移動
  • そこにAUTOMATIC1111をclone
  • cloneのフォルダに移動
  • モデルをサイトからロードするため不要な5-7行の頭に#を着けてコメントアウト
%cd /content/drive/MyDrive
!git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui
cd /content/drive/MyDrive/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-4 GoogleDriveからのモデルをコピーするコマンドを追加する

複数のモデルやVAEの切り替え、モデルのマージが出来る様に指定されたフォルダにモデルとVAEをコピーする。

  • 前記のコードセルの下側に新たなコードセルを追加
  • そこにコピーコマンドを追記
  • 利用やマージしたいモデルは全て/content/drive/MyDrive/stable-diffusion-webui/models/Stable-diffusion/フォルダにコピーする
  • VAEは全て/content/drive/MyDrive/stable-diffusion-webui/models/VAE/フォルダにコピーする
  • ファイル名は変更しない(ファイル名を見てモデルを切り替えるため)

例>Eliysium_Anime_V2モデル、デリダモデル、WaifuのVAE、を使う場合

#!cp /content/drive/MyDrive/models/Elysium_Anime_V2.ckpt  /content/drive/MyDrive/stable-diffusion-webui/models/Stable-diffusion/
#!cp /content/drive/MyDrive/models/derrida_final.ckpt  /content/drive/MyDrive/stable-diffusion-webui/models/Stable-diffusion/
#!cp /content/drive/MyDrive/models/kl-f8-anime2.ckpt /content/drive/MyDrive/stable-diffusion-webui/models/VAE/

同様によく利用されているモデルの例を示す。

# Waifu Diffusion1.3のモデルを使う場合
!cp /content/drive/MyDrive/models/wifu-v1-3-float16.ckpt  /content/drive/MyDrive/stable-diffusion-webui/models/Stable-diffusion/
#!cp /content/drive/MyDrive/models/kl-f8-anime2.ckpt /content/drive/MyDrive/stable-diffusion-webui/models/VAE/

# Trinart Diffusion2.0のモデルを使う場合
!cp /content/drive/MyDrive/models/trinart_step60000.ckpt  /content/drive/MyDrive/stable-diffusion-webui/models/Stable-diffusion/
#!cp /content/drive/MyDrive/models/kl-f8-anime2.ckpt /content/drive/MyDrive/stable-diffusion-webui/models/VAE/

# Stable Diffusion1.5のモデルを使う場合
!cp /content/drive/MyDrive/models/v1-5-pruned-emaonly.ckpt   /content/drive/MyDrive/stable-diffusion-webui/models/Stable-diffusion/
#!cp /content/drive/MyDrive/models/vae-ft-mse-840000-ema-pruned /content/drive/MyDrive/stable-diffusion-webui/models/VAE/

# DreamBoostで作った新モデルを使う場合(タグ名がhanakoの場合)
!cp  /content/drive/MyDrive/stable_diffusion_weights/hanako/model.ckpt /content/drive/MyDrive/stable-diffusion-webui/models/Stable-diffusion/
#!cp /content/drive/MyDrive/models/vae-ft-mse-840000-ema-pruned /content/drive/MyDrive/stable-diffusion-webui/models/VAE/

# NovelAIDIffusionのモデルを使う場合
!cp /content/drive/MyDrive/models/animefull-final-pruned.ckpt /content/drive/MyDrive/stable-diffusion-webui/models/Stable-diffusion/
!cp /content/drive/MyDrive/models/animevae.pt /content/drive/MyDrive/stable-diffusion-webui/models/VAE/

# Anything3.0のモデルを使う場合
!cp /content/drive/MyDrive/models/Anything-V3.0.ckpt /content/drive/MyDrive/stable-diffusion-webui/models/Stable-diffusion/
!cp /content/drive/MyDrive/models/Anything-V3.0-pruned.ckpt /content/drive/MyDrive/stable-diffusion-webui/models/VAE/

# EimisAnimeDiffusionのモデルを使う場合
!cp /content/drive/MyDrive/models/EimisAnimeDiffusion_1-0v.ckpt /content/drive/MyDrive/stable-diffusion-webui/models/Stable-diffusion/
!cp /content/drive/MyDrive/models/Anything-V3.0-pruned.ckpt /content/drive/MyDrive/stable-diffusion-webui/models/VAE/

# Evt_V2のモデルを使う場合
!cp /content/drive/MyDrive/models/evt_v2-ema-pruned.ckpt /content/drive/MyDrive/stable-diffusion-webui/models/Stable-diffusion/
!cp /content/drive/MyDrive/models/Anything-V3.0-pruned.ckpt /content/drive/MyDrive/stable-diffusion-webui/models/VAE/

# HENTAI Diffusion 17のモデルを使う場合
!cp /content/drive/MyDrive/models/HD-17.ckpt /content/drive/MyDrive/stable-diffusion-webui/models/Stable-diffusion/
#!cp /content/drive/MyDrive/models/kl-f8-anime2.ckpt /content/drive/MyDrive/stable-diffusion-webui/models/VAE/

1-5 最初から実行

このノートは環境構築用なので一度だけ実行する(2回目以降は不要)。

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

完成したノートブックは環境構築用としていつでも使える様に保存することをお勧めする。次に、推論実行専用ノートを説明する。

 

②推論実行:画像生成専用ノート

前記の①でGoogleDrive上にcloneしたAUTOMATIC1111を実行するためのノートを説明する。web UIを起動するまでの時間は4分少々と速い。

但しAUTOMATIC1111は時間単位で新機能の追加やファイルのアップデートがされているので、このままではGoogleDriveのcloneが古くなってしまう。そのため差分を自動で取り込むgit pullコマンドを1行追加して、常に最新版のAUTOMATIC1111を使用できる様にする(コピーしたモデルなどはそのまま維持される)。

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

  • 最初にcolabのAUTOMATIC1111:Akaibuのノートを開く(下記リンク)。前記①のノートをコピーしてもよい。

Google Colab

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

1-2 2番目のセルはフォルダ移動とAUTOMATC1111更新の差分取込

2番目のセルにcloneフォルダへの移動と、AUTOMATIC1111の差分を得るgit pullコマンドを記載する。これでGoogleDrive上のAUOTMATIC1111は最新状態を維持できる。

cd /content/drive/MyDrive/stable-diffusion-webui
!git pull https://github.com/AUTOMATIC1111/stable-diffusion-webui

1-3 最初から実行

絵を生成する推論用のノートとして使用する。1番上のセルから実行して一式完了したら現れるURL(ローカルではない2番目の方)をクリックすると、web UIが別画面で起動する。web UI起動時ユーザー名:me、パスワード:qwerty (いずれも変更可能、不要にも出来る)

生成例 Elysium + VAE

完成したノートブックは推論実行用としていつでも使える様に保存することをお勧めする。最後にそれぞれのコードをまとめた。

 

まとめ:①環境構築用ノート一式

# ①GoogleDriveマウント
from google.colab import drive
drive.mount('/content/drive')
# ②GoogleDriveにAUTOMATICをclone(不要な4行目以降を割愛)
%cd /content/drive/MyDrive
!git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui
%cd /content/drive/MyDrive/stable-diffusion-webui
# ③必要なモデルやVAEをコピー
!cp /content/drive/MyDrive/models/Elysium_Anime_V2.ckpt  /content/drive/MyDrive/stable-diffusion-webui/models/Stable-diffusion/
!cp /content/drive/MyDrive/models/derrida_final.ckpt  /content/drive/MyDrive/stable-diffusion-webui/models/Stable-diffusion/
!cp /content/drive/MyDrive/models/kl-f8-anime2.ckpt /content/drive/MyDrive/stable-diffusion-webui/models/VAE/
④実行
!COMMANDLINE_ARGS="--share --gradio-debug --gradio-auth me:qwerty" REQS_FILE="requirements.txt" python launch.py

 

まとめ:②推論実行用ノート一式

わずか5行で動作する。

# ①GoogleDriveマウント
from google.colab import drive
drive.mount('/content/drive')
# ②GoogleDrive上のAUTOMATIC cloneに移動、更新の差分取込
%cd /content/drive/MyDrive/stable-diffusion-webui
!git pull https://github.com/AUTOMATIC1111/stable-diffusion-webui
③実行
!COMMANDLINE_ARGS="--share --gradio-debug --gradio-auth me:qwerty" REQS_FILE="requirements.txt" python launch.py

 

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/

Google colabのAUTOMATIC1111でStable Diffusion2.0を使う

Stable Diffusion2.0をcolabで使う

数日前に登場したStable Diffusion2.0は、1.5までとは異なる構成のため、モデルの変更だけでは使えない。現時点ではStableDiffusion2.0の5つあるモデルの内、768x768モデルのみ利用方法が開示されたのでそれを説明する。

また今まで必要だったHugging Faceの認証も2.0から不要になった。

導入方法

AUTOMATIC1111でStable Diffusion2.0を使用する方法を説明しているサイトは以下。慣れた方はこのサイトを見れば分かると思う。

github.com

サイトの解説

  • 現時点では768x768のStable Diffusion2.0-vモデルのみサポート
  • 768-v-ema.ckptチェックポイントをダウンロード(下記URL)

https://huggingface.co/stabilityai/stable-diffusion-2

  • そのモデルをmodels/Stable-Diffusionディレクトリに入れる
  • SD2.0リポジトリからconfigを取得し(下記URL)、チェックポイントと同じ場所に配置して、同じファイル名になるように名前を変更する

https://raw.githubusercontent.com/Stability-AI/stablediffusion/main/configs/stable-diffusion/v2-inference-v.yaml

  • 上のURLに移動後、画面を右クリックで「名前を付けて保存」を選び、768-v-ema.yamlで保存(自分が分かる名前で良い)
  • このyamlファイルもmodels/Stable-Diffusionディレクトリに入れる(前記した様に拡張子以外はモデルと同じ名前にすること)
  • [トレーニング] タブは、2.0 モデルでは壊れている可能性がある

より具体的な解説

ここからはcolabノートを例に挙げて説明する。まずベースとなる記事を示すので不明点があればこちらの記事を参照して欲しい。

programmingforever.hatenablog.com

1-1 colabのノートを開く

下記のAkaibu1.3のノートを開く。このノートを編集して使用する。

Google Colab

1-2 768x768モデルをGoogleDriveに保存する

  • 768-v-ema.ckptチェックポイントをダウンロード(下記URL)

https://huggingface.co/stabilityai/stable-diffusion-2

1-3 config用のyamlを同じく保存する

  • 下のURLをクリックするとコード画面が出るので、右クリックで「名前を付けて保存」を選び、768-v-ema.yamlで保存

https://raw.githubusercontent.com/Stability-AI/stablediffusion/main/configs/stable-diffusion/v2-inference-v.yaml

以上2つのファイルを自分のGoogle Drive(MyDrive/models/のディレクトリ)にアップロードできたら次に進む。

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

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

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

1-5 ノートの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-6 ノートにGoogleDriveからのモデルをコピーするコマンドを追加する

モデルとyamlファイルは/content/stable-diffusion-webui/models/Stable-diffusion/の中に入れる。

  • 前記のコードセルの下側に新たなコードセルを追加
  • そこに下記のコピーコマンドを追記する
  • GoogleDriveのモデル保存先が異なるフォルダの場合はそれに合わせて修正のこと
# Stable Diffusion2.0  768-v-ema.ckpt1.3モデル
!cp /content/drive/MyDrive/models/768-v-ema.ckpt /content/stable-diffusion-webui/models/Stable-diffusion/
!cp /content/drive/MyDrive/models/768-v-ema.yaml /content/stable-diffusion-webui/models/Stable-diffusion/

3-5 最初から実行

1番上のセルから実行する。一式完了したら現れるURL(ローカルではない2番目の方)をクリックすると、web UIが別画面で起動する。

web UI起動時にユーザー名とパスワードを入力するようになったので(コードでカットも可能)、起動時にユーザー名:me、パスワード:qwerty を入力すると使える。このユーザー名とパスワードは自由に編集できる。

完成したノートブックはいつでも使える様に保存することをお勧めする。

Stable Diffusion2.0:768x768モデルの生成例

SD2.0-vモデル
SD2.0-vモデル
SD2.0-vモデル

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

# ①GoogleDriveをマウント
from google.colab import drive
drive.mount('/content/drive')
# ②実行コードをロード、不要な3行目以降を割愛
!git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui
%cd stable-diffusion-webui
# ③モデルとyamlをGoogleDriveから所定の場所にロード
!cp /content/drive/MyDrive/models/768-v-ema.ckpt /content/stable-diffusion-webui/models/Stable-diffusion/
!cp /content/drive/MyDrive/models/768-v-ema.yaml /content/stable-diffusion-webui/models/Stable-diffusion/
# ④実行
!COMMANDLINE_ARGS="--share --gradio-debug --gradio-auth me:qwerty" REQS_FILE="requirements.txt" python launch.py

【改訂Akaibu1.3】 colabでAUTOMATIC1111を便利に使う

colab ノートAkaibu1.3対応

簡単かつエラーが出なくなった新しいcolabノートが利用出来るので、そちらをベースに記事を書き直した。またモデルやVAEファイルなどを動的に切り替え可能とすべく、正規の場所に配置する内容に改訂した。

想定する読者

  • Google colabでAUTOMATIC1111を使いたい
  • 起動時間を速くしたい
  • モデルのダウンロード量や時間を削減したい
  • Waifu DiffusionやTrinart Diffusionなど色々なモデルを使いたい
  • 複数のモデルやVAEなどを動的に切り替えたい

注意点

  • Google colab proまたはpro+の利用を推奨。5GBを超えるモデルの場合、colab無料版ではメモリ不足によるエラーが発生する場合がある
  • Google Driveの容量確保。それぞれモデルの容量は3~7GB程度あるため保存領域が必要
  • NSFWフィルターが最初から外れている。リスクのある画像作成を避けたい方はセッティングでNSFWフィルターをONにできる

利用別に4つの方法を記載

  1. モデルをサイトからDLして実行する(最も時間がかかる、GoogleDriveの保存量は最も少ない)
  2. 実行一式を保存して再開する様に実行する(最も高速、GoogleDriveの保存量を一番使う)
  3. モデルをGoogleDriveからコピーして実行する(次に高速、GoogleDriveの保存量をモデル分だけ使う)
  4. モデルをサイトから直接GoogleDriveにコピー(モデル格納専用)

1はcolabノートのAkaibu1.3での使用方法を記載する。

2はcolab上に展開したファイルをGoogleDriveに保存することで、あたかも自分のPCで使う感覚でAUTOMATIC1111を高速起動出来る様になる(RAMへのロード時間は必要)。ただしこの方法はStable DiffusionやAUTOMATIC1111に必要な各モジュールを保存するため、かなりの容量が必要となる。使用するモデルが少しならこれでも良いが、数十のモデルを使い分けする様な場合はGoogleDriveの容量を圧迫しかねない。

そこで3は、利用したいモデルをあらかじめ自分のGoogleDriveに保存しておくことで、サイトからDLする通信量や時間を短くすることができる。

またサイトにあるモデルを一旦ローカルPCにダウンロードしてからGoogleDriveにアップロードするモデルの格納手順に対して、4はサイトから直接GoogleDriveにモデルをダウンロードする方法を解説する。この方法であればPCとクラウド間の通信がほとんど無くなり、作業時間も半分以下になる。

それでは以下、順に説明する。なお修正コードは記事の最後にまとめている。

①モデルをサイトからDLして実行する

1-1 colabのノートを開く

下記のAkaibu1.3のノートを開く

Google Colab

以前とは異なり、2つのコードセルの実行だけで動く様になった。エラーも出ない。

1-2 使いたいモデルに変更する

このノートはStable Diffusion1.5 モデルが使える記載になっている。2番目のセルのwget部を変更することでWaifu Diffusionなど他のモデルも使える。

!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

※Stable Diffusion1.5までのモデルを利用する際は5行目のuser_token, 6行目のuser_headerが必要 ※Waifu Diffusionなどは5-6行目は不要(残していても問題ない) ※7行目のhttps://****.ckptを利用したいモデルがある箇所のURLに書き換える

1-3 順に実行

2つのコードセルを順に実行すればAUTOMATIC1111が起動する。この利用方法で特に問題なければこのまま1を利用してもよい。

 

②colabの実行一式を保存して次回再開して実行

通常はcolab上にAUTOMATIC1111をcloneするが、そのclone先をGoogleDriveに変更して保存し、その保存した状態から起動する方法は最速となる。但しAUTOMATIC1111一式+そこにセットしたモデル分だけドライブのディスク容量を食う点に注意。記事が長くなるためこの方法は別記事でまとめた。

programmingforever.hatenablog.com    

③モデルをGoogleDriveからコピーして実行する

あらかじめGoogleDriveに保存していたモデルをコピーすることで高速起動する方法。多数のモデルを使いたい場合はおそらく一番リーズナブルな方法ではないかと思われる。

3-1 あらかじめモデルをGoogleDriveに保存する

使いたいモデルをサイトからGoogleDriveに保存する方法を記載する。なお無駄なくサイトから直接GoogleDriveにコピーできる方法を最後に記載した(4番目)。

ここではGitHubからのモデルデータを一旦PCに保存してからGoogle Driveにコピーする方法を説明する。とりあえず有名な3モデルのダウンロード方法を全て記載したが、1つだけでも良いし他のモデルを追加してもよい。

なお慣れた方には別のノートブックを作成してGitHubからGoogle Driveに直接ダウンロードする方法の方が高速かつ無駄な通信を避けられるのでおすすめ。方法はこの記事の最後に追記した。

3-1-1:Waifu 1.3 のモデルをGoogle Driveに保存する
  • Waifu Diffusion1.3 モデルを提供するサイト(下のURL)をクリック

hakurei/waifu-diffusion-v1-3 · Hugging Face

  • 画面にある下記のいずれかを選択

    • Float 16 EMA Pruned
    • Float 32 EMA Pruned
    • Float 32 Full Weights
  • お薦めはFloat 16 EMA Pruned。容量が少なくGoogle colabの無料版でも動作すると思う

  • 選んだ先にある「This file is stored with Git LFS . It is too big to display, but you can still download it.」のdownloadをクリックするとダウンロードを開始する
  • (Fullを選ぶと7GBもあるのでかなり時間がかかる)
  • ダウンロードフォルダにwd-v1-3-float16.ckptがあることを確認
  • Google Driveに「model」フォルダを追加、その中にダウンロードしたwd-v1-3-float16.ckptをコピー
3-1-2:Trinart V2 のモデルをGoogle Driveに保存する
  • Trinart Diffusion V2モデルを提供するサイト(下のURL)をクリック

naclbit/trinart_stable_diffusion_v2 at main

  • 画面の中の trinart_step60000.ckpt をクリック(他のステップ数のものでもよい)
  • するとダウンロードを開始するのでしばらく待つ(2.4GB)
  • ダウンロードフォルダにtrinart_step60000.ckptがあることを確認
  • Google Driveの「model」フォルダに移動(または追加)し、そこにダウンロードしたtrinart_step60000.ckptをコピー
3-1-3:Stable 1.4/1.5のモデルをGoogle Driveに保存する
Stable Diffusion1.5 モデルを提供するサイト(下のURL)をクリック

runwayml/stable-diffusion-v1-5 at main

  • 初訪問の場合、認証を最初に行う(認証ボタンをクリック、無い場合は承認済み)
  • 画面の中の Download the weightsの中のv1-5-pruned-emaonly.ckpt をクリック
  • するとダウンロードを開始するのでしばらく待つ(3.7GB)
  • ダウンロードフォルダに選んだ`v1-5-pruned-emaonly.ckptがあることを確認
  • Google Driveの「model」フォルダに移動(または追加)し、そこにダウンロードした`v1-5-pruned-emaonly.ckptをコピー
Stable Diffusion1.4 モデルを提供するサイト(下のURL)をクリック

CompVis/stable-diffusion-v-1-4-original · Hugging Face

  • 初訪問の場合、認証を最初に行う(認証ボタンをクリック、無い場合は承認済み)
  • 画面の中の Download the weightsの中のsd-v1-4.ckptsd-v1-4-full-ema.ckpt をクリック
  • するとダウンロードを開始するのでしばらく待つ(3.7GB)
  • ダウンロードフォルダに選んだSD-v***.ckptがあることを確認
  • Google Driveの「model」フォルダに移動(または追加)し、そこにダウンロードしたSD-v***.ckptをコピー
3-1-4:DreamBoostで作った新モデル
  • DreamBoostで作った新モデルを格納しているフォルダ名を確認する。
  • 通常は下記のはず(タグ名をhanakoにした場合)
/content/drive/MyDrive/stable_diffusion_weights/hanako/model.ckpt

ここまでの作業で、自分のGoogle Driveにいつでも取り出せるモデルが配置できたので次に進む。

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

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

Google Colab

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

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

3-3 ノートの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

3-4 GoogleDriveからモデルをコピーするコマンドを追加

AUTOMATIC1111のフォルダにモデルとVAEをコピーする。複数のモデルの切替やVAEの切替、モデルのマージも可能になっている。

  • 前記のコードセルの下側に新たなコードセルを追加
  • そこにコピーコマンドを追記
  • 利用やマージしたいモデルは全て/content/stable-diffusion-webui/models/Stable-diffusion/フォルダにコピーする
  • VAEは全て/content/stable-diffusion-webui/models/VAE/フォルダにコピーする
  • ファイル名は変更しない(ファイル名を見てモデルを切り替えるため)
  • (下記にサンプルとしてよく利用されるモデルの例を記載、いずれかを選択)

例として、Elysium_Anime_V2モデルとデリダモデルの2つとWaifuのVAEをコピーする場合を示す。

#!cp /content/drive/MyDrive/models/Elysium_Anime_V2.ckpt  /content/stable-diffusion-webui/models/Stable-diffusion/
#!cp /content/drive/MyDrive/models/derrida_final.ckpt  /content/stable-diffusion-webui/models/Stable-diffusion/
#!cp /content/drive/MyDrive/models/kl-f8-anime2.ckpt /content/stable-diffusion-webui/models/VAE/

同様によく利用されているモデルの例を示す。

# Waifu Diffusion1.3のモデルを使う場合
!cp /content/drive/MyDrive/models/wifu-v1-3-float16.ckpt  /content/stable-diffusion-webui/models/Stable-diffusion/
#!cp /content/drive/MyDrive/models/kl-f8-anime2.ckpt /content/stable-diffusion-webui/models/VAE/

# Trinart Diffusion2.0のモデルを使う場合
!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/

# Stable Diffusion1.5のモデルを使う場合
!cp /content/drive/MyDrive/models/v1-5-pruned-emaonly.ckpt   /content/stable-diffusion-webui/models/Stable-diffusion/
#!cp /content/drive/MyDrive/models/vae-ft-mse-840000-ema-pruned /content/stable-diffusion-webui/models/VAE/

# DreamBoostで作った新モデルを使う場合(タグ名がhanakoの場合)
!cp  /content/drive/MyDrive/stable_diffusion_weights/hanako/model.ckpt /content/stable-diffusion-webui/models/Stable-diffusion/
#!cp /content/drive/MyDrive/models/vae-ft-mse-840000-ema-pruned /content/stable-diffusion-webui/models/VAE/

# NovelAIDIffusionのモデルを使う場合
!cp /content/drive/MyDrive/models/animefull-final-pruned.ckpt /content/stable-diffusion-webui/models/Stable-diffusion/
!cp /content/drive/MyDrive/models/animevae.pt /content/stable-diffusion-webui/models/VAE/

# Anything3.0のモデルを使う場合
!cp /content/drive/MyDrive/models/Anything-V3.0.ckpt /content/stable-diffusion-webui/models/Stable-diffusion/
!cp /content/drive/MyDrive/models/Anything-V3.0-pruned.ckpt /content/stable-diffusion-webui/models/VAE/

# EimisAnimeDiffusionのモデルを使う場合
!cp /content/drive/MyDrive/models/EimisAnimeDiffusion_1-0v.ckpt /content/table-diffusion-webui/models/Stable-diffusion/
!cp /content/drive/MyDrive/models/Anything-V3.0-pruned.ckpt /content/stable-diffusion-webui/models/VAE/

# Evt_V2のモデルを使う場合
!cp /content/drive/MyDrive/models/evt_v2-ema-pruned.ckpt /content/stable-diffusion-webui/models/Stable-diffusion/
!cp /content/drive/MyDrive/models/Anything-V3.0-pruned.ckpt /content/stable-diffusion-webui/models/VAE/

# HENTAI Diffusion 17のモデルを使う場合
!cp /content/drive/MyDrive/models/HD-17.ckpt /content/stable-diffusion-webui/models/Stable-diffusion/
#!cp /content/drive/MyDrive/models/kl-f8-anime2.ckpt /content/stable-diffusion-webui/models/VAE/
※上記のAnything3.0以降のモデルの入手方法:

programmingforever.hatenablog.com

※モデルをマージする方法:

programmingforever.hatenablog.com

※その他Textual Inversionなどのファイルの配置方法:

programmingforever.hatenablog.com

3-5 最初から実行

1番上のセルから実行する。エラーも発生しなくなり一式完了したら現れるURL(ローカルではない2番目の方)をクリックすると、web UIが別画面で起動する。

web UI起動時にユーザー名とパスワードを入力するようになったので(コードでカットも可能)、起動時にユーザー名:me、パスワード:qwerty を入力すると使える。このユーザー名とパスワードは自由に編集できる。

画面はプロンプトにcute cat ear maidを入れて生成した例。

プロンプト:cute cat ear maid

完成したノートブックはいつでも使える様に保存することをお勧めする。

今回の方法であれば、web UIを起動するまでの時間も5分を切る。Google colabでAUTOMATIC1111を運用したい方には是非お勧めしたい。

 

④モデルをサイトから直接GoogleDriveにコピー

サイトにあるモデルをPCを経由せず直接GoogleDriveにダウンロードする方法。この方法であれば、PCにダウンロード&Google Driveにアップロードする通信が不要となり、通信時間の大幅な短縮と通信量の削減が期待できる。またこのノートブックを保存すれば、類似のモデルを保存する際にも役立つ。

4-1:モデル格納用のフォルダを用意する

  • Google Driveにログイン
  • MyDriveの下に「models」フォルダを追加しておく

フォルダ名は適当に付けたものなので各自で好きな名前を付けて良い(コードの修正は必要)

4-2:colabで新規ノートブックを作成

  • Google colabにログイン
  • 新規ノートブックを作成

4-3:1番目のセルを作成:colabがGoogleDriveを使える様にする

  • 1番目のセルに、colabがGoogle Driveにアクセスできる様にマウントする以下のコードを記載
from google.colab import drive
drive.mount('/content/drive')

4-4:2番目のセル:バグ回避

次にすぐにwgetコマンドを実行すると何故かGoogleDriveを認識しない様なので?、単に上記で用意したモデルを格納する先のフォルダの内容を表示するlsコマンドだけを書く。

!ls /content/drive/MyDrive/models/

中にファイルがあれば表示、何も無ければ表示されない(ここでエラーが出なければOK)

4-5:3番目のセル:モデルをダウンロードするコード

  • 3番目のセルに入力:Stable Diffusion 1.4をダウンロードする場合の例:
  • 3番目のセルに、GitHubからstable-diffusion-v-1-4-originalをGoogle Driveの中にダウンロードするコードを作成
  • 注意:あらかじめstable-diffusion-v-1-4-originalのサイトのログインして認証を済ませておく(以下サイト)

CompVis/stable-diffusion-v-1-4-original · Hugging Face

  • Stable Diffusionの1.5までのモデルは認証が必要なのでトークンを送るコードが必要(下記)
# Stable Diffusion1.5までuser_token, user_headerが必要
user_token = "<自分のアクセストークンを入れる>" #@param {type:"string"}
user_header = f"\"Authorization: Bearer {user_token}\""
!wget --header={user_header}  https://huggingface.co/CompVis/stable-diffusion-v-1-4-original/resolve/main/sd-v1-4.ckpt -O /content/drive/MyDrive/models/
  • Waifu Diffusionなどそれ以外のモデルはwgetコードのみで良い
# それ以外のモデルはwgetコードのみでOK(例:Waifu Diffusion1.3 float16)
!wget https://huggingface.co/hakurei/waifu-diffusion-v1-3/blob/main/wd-v1-3-float16.ckpt -O /content/drive/MyDrive/models/

4-6:ノートブックを保存

このノートブックをモデル保存用としてstore_modelなどの名前で保存すると、次回以降も簡単に保存できる

 

まとめ:③のコード一式

# ①GoogleDriveをマウントする
from google.colab import drive
drive.mount('/content/drive')
# ②実行コードのロード (wgetなど不要な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

 

まとめ:④のコード一式

# ①GoogleDriveをマウントする
from google.colab import drive
drive.mount('/content/drive')
# ②バグ回避でlsコマンド
!ls /content/drive/MyDrive/models/
# サイトにあるモデルを直接GoogleDriveにダウンロード
# Stable Diffusion1.5まではuser_token, user_headerが必要、それ以外は1-2行目不要
user_token = "<自分のアクセストークンを入れる>" #@param {type:"string"}
user_header = f"\"Authorization: Bearer {user_token}\""
!wget --header={user_header}  https://huggingface.co/CompVis/stable-diffusion-v-1-4-original/resolve/main/sd-v1-4.ckpt -O /content/drive/MyDrive/models/