MarkdownとBullet Journal

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

DreamArtistをcolabで使う

1枚の絵だけで学習するDreamArtist

複数枚の絵で学習させるDreamBoothに対して1枚の絵だけで学習できるDreamArtistが登場した。AUTOMATIC1111で使えるとのことなので早速Google colabで試してみた。

DreamArtistとは

必要なファイルをDL出来るサイトは以下の通り。

github.com

DreamArtistは、1つのトレーニング画像でコンテンツとスタイルを学習し、制御性の高い多様な高品質の画像を生成します。 DreamArtist の埋め込みは、追加の説明や 2 つの学習した埋め込みと簡単に組み合わせることができます。

イメージ図。元画像のキャラが再現できている。

DreamArtistの例

Texture Inversion, DreamBooth,との比較(いずれも学習は1枚のみ)

3方式の比較

Imagicとの違い

同様に1枚の絵だけで学習するツールとしてImagicがある。下に実証記事を示す。

programmingforever.hatenablog.com

Imagicは絵とプロンプトをセットで学習させる方式で、絵のレイアウトもほぼ固定となる(プロンプトで指定した部位は異なる)。またプロンプトとのセットで都度モデルを作る方式なのでバリエーションの作業効率は悪く、DreamArtistの方が総合的に優れていると判断する。

実証手順

※記事の最後に学習用と実行用のノートをまとめている。

①colabでAUTOMATIC1111を使う準備

まずcolabでAUTOMATIC1111を動かす準備をする。モデルは何でも良いが今回はAnything-V3.0を使った。利用方法の解説記事はこちら。

programmingforever.hatenablog.com

Anything-V3.0は下記のサイトなどからckptとVAEをダウンロードする。

StableRes.info

ckptとVAE.ptのモデルの利用方法は下記参照(ファイル名を合わせる)。

programmingforever.hatenablog.com

②ノートブックを修正して実行

colabでAUTOMATIC1111を起動すると、エクステンションタブで色々と選べる様になっており、DreamArtistも存在している。しかしここで選択してもcolabの場合はエラーになってしまうので使えない。

エクステンション選択画面(しかしエラーになる)

そこでノートブックを編集する。先ほども例に挙げたノートブックに、エクステンションのダウンロードを追加する。例に示したノートブックを利用する場合、下記の様にコードセルを修正する。

追記は、DreamArtistのGitHubから、colabのエクステンションフォルダにロードするコマンドのみ。

# %cd stable-diffusion-webui
!git pull

# %cd stable-diffusion-webui
!git pull
!git clone https://github.com/7eu7d7/DreamArtist-sd-webui-extension.git /content/stable-diffusion-webui/extensions/DreamArtist

これで順番にコードセルを最後まで実行すると、DreamArtistのタブが出ているのが確認できる。

DreamArtinstのタブ

③トレーニング(1)

まずモデルとなる絵を1枚用意する。今回は下記を使用する。

DreamArtistで訓練させる絵(1枚のみ)

次にプロンプトとネガティブプロンプトの埋め込みを inTab で作成する。名前を適当に付けて(この例ではtest1)、修飾対象を記載し(この例ではgirl)、後は図の通りにセットして「create embedding」を押す。

④トレーニング(2)

引き続き下記を順に設定して訓練を開始する。

  • まず「DreamArtist train」のタブを選ぶ
  • Embeddingに先ほど付けた名前を入力(test1など)
  • Embedding learning rate:0.003
  • Hypernetwork leaning rate:0.00001
  • Train with DreamArtistにチェック
  • Train with Reconstructionのチェックを外す(注意!)
  • Dataset directoryを指定する:例:/content/drive/MyDrive/work/Dream/
  • その指定したフォルダに先ほどの画像を1枚入れる
  • Max stepsに学習させたいステップ数を入れる。500ステップで10分程度。例えば1000など。ステップ数が増えればより精度が高まる(と思われる)。長すぎた場合は中断も可能(途中まで行った学習は残る)。
  • 「Train Embedding」ボタンクリックで訓練開始

これでDreamArtistの学習は完了。

④実行

実行は普段通りのtxt2imgなどを行うと自動的に反映される。なおプロンプトに指定した「girl」と「by test1」が必要。すると図の様に同じキャラが描かれる。生成メッセージを見るとDreamArtistで訓練したEmbeddingを使っているメッセージが出ている(一番最後の行)。

一番下に used embedding test1 が表示

生成された絵を掲載する。

学習データの保存

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

※例:name(ファイル名)がtest2の場合、test2.ptとtest2-neg.ptの2つが作られる。

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

学習データの保存:

保存は、/content/stable-diffusion-webui/embeddings/フォルダに入っている、「ファイル名.pt」と「ファイル名-neg.pt」を保存する。

学習データの利用:

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

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

(例:initialization text:girl、name(ファイル名):test2で学習した場合:「girl」と「test2」が必要)

 

まとめ:ノート①DreamAction学習用:

# ①GoogleDriveをマウント
from google.colab import drive
drive.mount('/content/drive')
# ②AUTOMATIC1111をclone、DreamActionをclone
!git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui
%cd stable-diffusion-webui
!git clone https://github.com/7eu7d7/DreamArtist-sd-webui-extension.git /content/stable-diffusion-webui/extensions/DreamArtist
# ③GoogleDriveからモデルと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/
# ④推論実行
!COMMANDLINE_ARGS="--share --gradio-debug --gradio-auth me:qwerty" REQS_FILE="requirements.txt" python launch.py

 

まとめ:ノート②DreamActionのTI利用:

# ①GoogleDriveをマウント
from google.colab import drive
drive.mount('/content/drive')
# ②AUTOMATIC1111をclone
!git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui
%cd stable-diffusion-webui
# ③GoogleDriveからモデル、VAE、学習データを所定の場所にコピー(Anything3.0)
# 学習データは/content/drive/MyDrive/work/embeddings/にあるものとする
!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/
!cp -r /content/drive/MyDrive/work/embeddings/ /content/stable-diffusion-webui/
# ④推論実行
!COMMANDLINE_ARGS="--share --gradio-debug --gradio-auth me:qwerty" REQS_FILE="requirements.txt" python launch.py