見出し画像

Windows PCでDreamBoothを実行する手順(v1系8GB以上、v2系12GB以上、様々な機能あり)

※23年2月11日修正。常に「--num_cpu_threads_per_process 1」の設定で構わないとの情報がありました(以前はCPUコア数を設定していました)。
※23年1月11日更新。付録に「モデルのマージ」を加えました。学習元に「ACertainty」を使用して、画像を差し替えました。
※とりあえず公開しますが、本記事はボリュームがあるので細かな誤り等が含まれる可能性があります。お気づきの点がありましたら、末尾の連絡先へお知らせください。

0. 前書き

0-0 ATTENTION

 DreamBoothが実行可能な最小のVRAM容量は、v1系モデルでは8GB(12GB以上を推奨)、v2系モデルでは12GB(推奨は不明、16GB?)となっています。最小の場合は「一応動作する」という状態のようですので、予めご了承ください。

0-1 README

 本記事ではKohya氏のリポジトリを利用して、DreamBoothの学習を実行するための手順を説明します。ただし、全ての内容を網羅しておらず(augmentationについては触れません)、更新や仕様変更があった場合のフォローも保証できません。各自において、下記の記事等を参照してください。なお、リポジトリの中身はDiffUsers+αですので、DreamBooth以外の機能もあります。

リポジトリについて(インストール方法や各ドキュメントへのリンク)
https://github.com/kohya-ss/sd-scripts/blob/main/README-ja.md

DreamBoothの学習について
https://github.com/kohya-ss/sd-scripts/blob/main/train_db_README-ja.md

0-2 他のDreamBoothについて

 参考まで、AUTOMATIC1111氏のStable Diffusion web UI(以下、web UI)上でDreamBoothを利用する方法もあります。下記の記事のLoRAと同じような手順で、「Use LORA」のチェックを外しておけばDreamBoothの動作になるはずです(未確認)。こちらはv1系モデル向けで、VRAMは12GB以上が必要とみられます。

 その他、Google Colab上で動作するDreamBoothのノートブックが多数あるはずですので、興味のある方は探してみてください。Google Colabは、無料でも16GBのグラフィックボードが使えるのがメリットです。使うたびに改めて構築が必要なのと、必要なデータは外に保存するのと、連続使用時間に制約があるのがデメリットだと思います(少し面倒くさいです)。

1. 概要

1-1 目的

 DreamBoothは学習の手法の一つです。任意のモデル、学習用画像、正則化画像とプロンプトをもとに学習を実行して、新しいモデルを生成します。余談ながら、個人的には「自分のキャラを描かずに好きなだけ生成させる」という長期目標があり、DreamBoothは有効な手段であると考えています。

1-2 ディレクトリ構成

 本記事での作業ディレクトリは「\aiwork」です("\" は半角の "¥"と同じ)。主な構成は下記のとおりです。

\aiworkディレクトリ内の構成

sd-scripts\                    スクリプト群
sd-scripts\img_train\***\      学習用画像の設置場所
sd-scripts\img_class\***\      正則化画像の設置場所
sd-scripts\venv\               仮想環境

以下はオプション
sd-scripts\activate.bat        仮想環境に入るバッチ
sd-scripts\train.bat           学習を実行するバッチ
sd-scripts\webui.bat           web UIを起動するバッチ
stable-diffusion-webui\        web UI本体
stable-diffusion-webui\models\Stable-diffusion         学習元モデル
stable-diffusion-webui\models\Stable-diffusion\db      学習済みモデル

 記事ではこれだけしか使用しませんが、他の用途でも「\aiwork」を使用するため、このような構成になっています。

1-3 PCの環境

 基本的な環境として、Windows 10以降がインストールされたPC、GeForce(10 Series以降、VRAMは最低8GB)、Python(バージョン3.10固定)、Git(22年末時点での最新バージョンは2.39.0)、GeForce のドライバー(なるべく最新版)、バージョン11.6以上のCUDA Toolkit(以下、CUDA)が必要です。11.3にて動作する可能性がありますが推奨しません(未確認)。

2. ツールの準備

 必須ではありませんが、web UIを既に利用していることを前提としています。下記のいずれかを選んでください。

2-1 web UIを先にインストールする場合

 下記の記事に従って手順を進めてください。無事に画像が出力できたら完了です(まっさらな状態から1~2時間かかると思います)。ツールの準備も同時に完了しますので、3.へ進んでください。

2-2 web UIがインストール済みまたは不要な場合

 以降の手順で必要になるPython、Git、CUDAがインストールされている場合は、読み飛ばして3.へ進んでください。一つでも足りない場合は、下記の記事にある「2. ツールの準備」を参照してインストールを行ってください。ただし、「Build Tools for Visual Studio 2022」と「ninja」はインストール不要です。 

3. DreamBoothの環境を構築

 構築は基本的に、(アップデートしない限りは)一度限りです。必要なものが全てリポジトリに登録されたおかげで、これでも従来よりはずっと簡単な手順になっています。

3-1 作業の準備

 全ての手順は、作業ディレクトリ「\aiwork」が存在していることを前提としています。場所が異なる場合は読み替えてください。

 コマンド プロンプト上で「cd \aiwork」のコマンドを実行してください。下記の3行目のような表示が出て、作業ディレクトリに移動していることを確認してください。

cd \aiwork

C:\aiwork>

 これ以降は基本的に、入力するコマンドのみを記載します。行頭に「#」があったり、あきらかにコメントとみられる行は入力しないでください。

3-2 スクリプトのダウンロード

 下記のコマンドは、「/aiwork/sd-scripts」のディレクトリが無い状態で実行してください。「git clone」コマンドで「sd-scripts」ディレクトリが作成され、その中に最新版がダウンロードされます。

git clone https://github.com/kohya-ss/sd-scripts.git

 本記事において、Gitはスクリプトのダウンロードにしか使用しませんが、アップデートが簡単になる(詳細は後述)のでおすすめです。

3-3 仮想環境へ移動

 下記のコマンドを順に実行してください。仮想環境を作成して中へ移動します。これ以降はなるべく、構築が終わるまでの作業を一度に行ってください。

cd \aiwork\sd-scripts
python -m venv --system-site-packages venv
venv\Scripts\activate

 もし構築を中断した場合は、再開時にコマンド プロンプトを開いてから下記のコマンドを実行して、仮想環境に入ってください。仮想環境に入っている間は、行頭に「(venv)」のような表示が付くので区別できます。

cd \aiwork\sd-scripts
venv\Scripts\activate

 仮想環境を抜ける場合は、「deactivate」のコマンドを実行してください。

3-4 ライブラリのインストール

 下記のコマンドを順に実行してください。CUDA 11.6用のPyTorch(torch 1.12.1とtorchvision)をインストールしてから、他の必要なライブラリをインストールします。1行目の実行時に2.4GB程度のダウンロードが行われるため、少し時間がかかります。2行目では多くのライブラリがインストールされます。

pip install torch==1.12.1+cu116 torchvision==0.13.1+cu116 --extra-index-url https://download.pytorch.org/whl/cu116
pip install --upgrade -r requirements.txt

 本記事の手順は、PCにCUDA 11.6以降がインストールされていることを前提としています。11.3の場合は、3箇所ある「cu116」を「cu113」に変更してください。ただし動作未確認ですので、正常に動かなかった場合は諦めてください。構築をやり直す場合は、「deactivate」した後に「sd-scripts」ディレクトリを削除してください。

3-5 xFormersのインストール(推奨オプション)

 Meta ResearchのxFormersを使用すると、DreamBooth実行時の省メモリ化がはかれます。後述しますが、xFormersを使用する場合はmixed precisionの設定(「fp16」または「bf16」)が必須です。使用するかどうかはDreamBooth実行時の設定で選択できるため、基本的にはインストールを推奨します。xFormersをインストールする場合は、下記のコマンドを実行してください。

pip install -U -I --no-deps https://github.com/C43H66N12O12S2/stable-diffusion-webui/releases/download/f/xformers-0.0.14.dev0-cp310-cp310-win_amd64.whl

 先の手順でtorch 1.12.1をインストールしたので、上記はそれに合わせたGeforce 10~30 series用のパッケージをインストールする手順となっています。実はこのパッケージはCUDA 11.3用ですが、動作は大丈夫のようです。

 DreamBooth実行時に「--xformers」の設定でxFormersが使用できなかった場合は、xFormersを使用しない「--mem_eff_attn」の設定に変更するか、環境に合ったxFormersのパッケージを入手または自分でビルドする必要があります。入手やビルドを行う場合は、下記の記事を参照してください。

 注意点ですが、本記事の手順にてバージョン1.12.1のtorchをインストールした場合は、xFormersも1.12.1をインストールした環境でビルドしたパッケージでなければいけません(バージョンが異なるとエラーが出るようです)。

3-6 ファイルの差し替え等(bitsandbytes)

 Windows PCで「bitsandbytes(8bit Adam optimizerを含む)」が動作するよう、下記のコマンドを順に実行してDLLのコピーとファイルの差し替えを行ってください。これを行っていない場合、「--use_8bit_adam」の設定が使用できません。

copy /y .\bitsandbytes_windows\*.dll .\venv\Lib\site-packages\bitsandbytes\
copy /y .\bitsandbytes_windows\cextension.py .\venv\Lib\site-packages\bitsandbytes\cextension.py
copy /y .\bitsandbytes_windows\main.py .\venv\Lib\site-packages\bitsandbytes\cuda_setup\main.py

 1行実行するごとに、「* 個のファイルをコピーしました。」と表示されることを確認してください。

3-7 accelerateの設定

 下記の1行目のコマンドを入力してください。その後、7つの質問が順に表示されますので、初めの6つについては「Enterキー」を押してください。

accelerate config
 
1~6番目の質問に対する入力
Enterキー
Enterキー
Enterキー
Enterキー
Enterキー
Enterキー

 最後の質問はmixed precision(混合精度)の使用に関するものです。DreamBoothの設定にも影響しますので、選択した内容を覚えておいてください。ここでは省メモリの設定として「fp16」を使うことにしますので、「1」「Enterキー」の順番に押してください。

7番目の質問に対する入力
0 を押すと no が選択される(初めに選択されている)
1 を押すと fp16 が選択される
2 を押すと bf16 が選択される
Enter を押すと 決定

 設定を変えたい場合は、再度「accelerate config」のコマンドを実行してください。なお、「ValueError: fp16 mixed precision requires a GPU」のエラーが出た場合ははじめからやり直して、GPUの選択に関する質問(6番目だったと思います)で「0」を入力すると、プライマリのGPUが選択されるとのことです。

4. モデルの準備

 DreamBoothはモデルに対して学習するので、任意のモデルが必要です。今回は例として、DreamBooth用に設計されたと言われる「ACertainty」を使用します(他のモデルでも構いません)。下記のURLから「Files and versions」へ進み、「ACertainty.ckpt」をダウンロードしてください。
https://huggingface.co/JosephusCheung/ACertainty

 設置ディレクトリは任意ですが、例としてweb UIがインストール済みの場合は「\aiwork\stable-diffusion-webui\models\Stable-diffusion」等です。

 実は、ダウンロードしなくてもDiffUsers形式のモデルとして「JosephusCheung/ACertainty」を指定することもできます。筆者はこの形式を利用しないため(キャッシュにデータが残りディスクを圧迫することも理由の一つ)、詳細は説明しませんがご容赦ください。

5. 学習内容の検討と準備

5-1 学習用画像

 東北ずん子さんが公式イラストを学習に使っても良いと明言されているので、またお言葉に甘えさせていただきます(LoRAの記事でも使用しました)。

 イラストは、公式サイトの「コンテンツ」→「イラスト/3D」にあります。今回は東北きりたんを選んでみました。きりたんぽを含めて学習できるのかどうか、興味があるからです。

 今回は全体の姿を「概念」として学習したいため、同じ服装をした15枚の画像を選びました。解像度が非常に高い上、透過設定にもなっていたので、長辺1024pxへのリサイズとアルファチャンネルの除去を行いました。本記事で使用するスクリプトは任意の解像度と縦横比に対応する設定があり、デフォルトでは短辺256px以上かつ長辺1024px以下の画像のみが使用されるようです。よって、この状態で学習が可能です。

15枚の「きりたん」を選別して加工

5-2 プロンプトの決定

 学習にはいくつかの設定が必要で、これを決めないと実行ができません。先に結論を出すと、今回は下記の内容に決定しました。

  • 学習用画像(Dataset) = きりたんの画像(準備済み)

  • 正則化画像(Classification Dataset) = 女の子の画像

  • 学習用画像を表すプロンプト(Instance Prompt)= sks girl

  • 正則化画像を表すプロンプト(Class Prompt) = girl

 学習は、何らかのクラスに属する「きりたん」が持つ「特徴」を取り込む仕組みです。安直に考えればクラスは「女の子」ですので、Class Promptは「girl」としました。Instance Promptは、Class Promptに加えてモデルが認識(理解)できないような3文字の付加が推奨されます。今回は「sks girl」としました。ちなみに、Kohya氏は「shs sts scs cpc coc cic msm nen usu ici lvl」を候補として挙げています。複数の対象を同時に学習する場合は、それぞれに別の文字を割り当てる必要があります。

5-3 正則化画像と繰返し回数

 基本的に、「正則化画像」の枚数は「学習用画像」の整数倍として(最適値は不明ですが数倍~300枚程度)、それぞれに繰り返し回数をかけた数が等しくなるようにしてください(複数の対象を学習する場合は計算が異なります)。今回は下記の内容に決定しました。どちらもかけると150になります。

  • 学習用画像 15枚(準備済み)
    繰り返し 10回

  • 正則化画像 150枚
    繰り返し 1回

 それでは正則化画像を、web UIと学習元のモデルを使用して生成します。Hires. fixにより、768x768の解像度(本来は最大で1024pxとすべきところ、かかる時間とのバランスで決定)で150枚生成しました。Promptは、ただの「girl」よりも背景がおとなしそうに見える「girl background」としました。また、意味がなさそうな画像は除外しています(頑張るとボツだらけになるのでそこそこに)。

正則化画像を150枚用意した

 画像が用意できたら設置します。この方法が少々特殊で、指定したディレクトリの中に「(繰り返し回数)_(プロンプト)」の名前のディレクトリを作る必要があります。繰り返し回数は、さきほど決めたものです。

 例として、学習用画像のディレクトリが「\aiwork\sd-scripts\img_train」である場合は、その中に「10_sks girl」のディレクトリを作って、画像を設置してください。正則化画像も同様に、指定先に「1_girl」のディレクトリを作って画像を設置してください。

学習用画像
\aiwork\img_train\10_sks girl\***.png
学習時の設定内容
--train_data_dir=\aiwork\img_train

正則化画像
\aiwork\img_class\1_girl\***.png
学習時の設定内容
--reg_data_dir=\aiwork\img_class

 参考まで、上記に画像のパスと学習時の設定内容を記載しました。

6. 学習の実行

6-1 コマンド例

 以上で準備が整いましたので、学習を行います。下記は、実際に使用したコマンドの例です(設定の詳細は後述)。実行の際は改行を削除して1行にまとめてください。省メモリの設定として「--xformers」を付けられない場合(エラー等)は、代わりに「--mem_eff_attn」を入れてください(速度は下がります)。状況にもよりますが、ステップ数6000はかなり多めの値です。学習量や実行時間にも影響しますので、初めは1500~2500程度で試してみてください。なお、最後の3行は必要性や好みに応じて加えたものです。

# 改行を削除すること
accelerate launch --num_cpu_threads_per_process 1 train_db.py
 --pretrained_model_name_or_path=\aiwork\stable-diffusion-webui\models\Stable-diffusion\ACertainty.ckpt
 --train_data_dir=\aiwork\img_train
 --reg_data_dir=\aiwork\img_class
 --output_dir=\aiwork\stable-diffusion-webui\models\Stable-diffusion\db
 --prior_loss_weight=1.0
 --resolution=512
 --train_batch_size=1
 --learning_rate=1e-6
 --max_train_steps=6000
 --use_8bit_adam
 --xformers
 --mixed_precision=fp16
 --cache_latents
 --gradient_checkpointing
 --save_every_n_epochs=2
 --enable_bucket
 --save_precision=fp16

6-2 実行時のtips

 あらかじめ、「\aiwork\train.bat」を下記のような内容で作成しておくと便利かもしれません。これで、わざわざ「sd-scripts」ディレクトリに移動せずに済みます(バッチファイル内では移動する必要があります)。

cd \aiwork\sd-scripts
accelerate launch --num_cpu_threads_per_process 1 train_db.py ~~~~ 以下略
cd ..

 また、仮想環境へ入るために、以下の内容の「\aiwork\activate.bat」も作っておくと良いでしょう。

\aiwork\sd-scripts\venv\Scripts\activate

 上記のバッチファイルがそろうと、下記のコマンドを順に実行するだけで学習等ができるようになります。

cd \aiwork
activate
train

このままweb UIも実行できる(起動用バッチファイルは事前に用意)
webui

もう作業を行わない時に実行する
deactivate

7. 学習設定の説明

 下記は必要に応じて参照してください。なお、augmentationについては触れていませんので、公式のドキュメントを確認してください。また、他のDreamBoothでは使用できない独自設定も多いので留意してください。

7-1 必須または推奨される設定

 下記は指定が必須または推奨される設定です。学習の効果を考えると、ステップ数は一定の値以上が望ましく、さらに画像の枚数で上下する必要があるかもしれません(同じ画像を学習する回数が変わるため)。各種パスは絶対指定に限らず、ごく一般的な記述ができると思います。mixed_precisionは、一部の演算のみを16ビットに下げて精度と省メモリを両立させる設定のため、基本的には入れておくことをおすすめします(accelerate configにて同じ内容で設定しておくこと)。

学習元のモデル(ckptかsafetensorsの場合)
--pretrained_model_name_or_path=\aiwork\webui\models\Stable-diffusion\****.ckpt
学習元のモデル(DiffUsersモデル名の場合の例、詳細は割愛)
--pretrained_model_name_or_path=CompVis/stable-diffusion-v1-4

学習用画像のパス(本記事を参照して下層ディレクトリを作成する必要あり)
--train_data_dir=\aiwork\img_train

正則化画像のパス(本記事を参照して下層ディレクトリを作成する必要あり)
--reg_data_dir=\aiwork\img_class

モデル出力先のパス(存在しないディレクトリの場合は生成される)
--output_dir=\aiwork\webui\models\Stable-diffusion\db

正則化画像の欠損の重み(通常はそのまま)
--prior_loss_weight=1.0

学習する画像の解像度(通常はそのまま、512,768のように正方形以外の縦横を指定可)
--resolution=512

バッチサイズ(1以上の整数、増やすと学習効果やメモリ消費量が上がる)
--train_batch_size=1

学習率(通常はそのまま、1e-6 = 1×10^-6 = 0.000001)
--learning_rate=1e-6

ステップ数(全体の学習量、少ないと効果が出ない、多いと過学習で悪化する、調整が必要)
--max_train_steps=3000

8bitのAdam optimizerを使用する(任意、メモリ消費量の削減)
--use_8bit_adam

xFormersのCrossAttentionを使用する
(任意、メモリ消費量の削減、指定時はmixed_precisionが必須、mem_eff_attnは併用不可)
--xformers

省メモリ版のCrossAttentionを使用する
(任意、xformersは併用不可、メモリ消費量の削減、低速化を伴う)
--mem_eff_attn

混合精度を使用する(任意、メモリ消費量の削減、演算の一部を16ビット化、値はfp16かbf16)
--mixed_precision=fp16

latentsのキャッシュ(任意、メモリ消費量の削減、augmentationは併用不可)
--cache_latents

特定箇所の勾配のみキープする(任意、メモリ消費量の削減、低速化を伴う)
--gradient_checkpointing

7-2 モデルの保存の設定

 下記は、モデルの保存の設定です。保存する形式を指定しなかった場合は、学習元と同じになります。容量を節約してweb UIで使用したい場合は「--use_safetensors --save_precision=fp16」等としてください。

モデルを指定した形式で保存する
(任意、未指定時は学習元と同じ、ckpt, safetensors, diffusers, diffusers_safetensors)
--save_model_as=ckpt

モデルをsafetensors形式で保存する(任意、save_model_as未指定時に有効)
--use_safetensors

ckptかsafetensorsで保存する時の精度を指定する
(任意、float, fp16, bf16、デフォルトはfloatでfp16とbf16は容量削減)
--save_precision=fp16

指定epoch毎にモデルを保存する(任意、epoch-000003のような名前が付く)
--save_every_n_epochs=3

optimizerの状態等も保存する(任意、resumeで学習を再開するためのもの)
--save_state

学習を再開する(任意、学習途中のディレクトリを指定する)
--resume=****

7-3 学習する画像の設定

 下記は、解像度や縦横比がばらばらの画像を学習させる場合の設定です。「--enable_bucket」未指定時は、学習用と正則用の画像を「--resolution」で指定した解像度に統一する必要があります。「--***_bucket_reso」を指定しなかった場合は、短辺が256ピクセル以上で長辺が1024ピクセル以下の画像のみが使用されます。

Aspect Ratio Bucketingを使用する(解像度や縦横比がばらばらの画像で学習する)
--enable_bucket

画像の最小の短辺(任意、64の倍数、デフォルトは256、指定値未満の短辺を持つ画像は除外)
--min_bucket_reso=384

画像の最大の長辺(任意、64の倍数、デフォルトは1024、指定値超の長辺を持つ画像は除外)
--max_bucket_reso=1280

7-4 v2系モデルの学習の設定

 下記は、v2系モデルを学習元にする場合の特殊な設定です。モデルの種類によって設定方法が異なります。次項の設定も確認してください。

学習元がv2系baseモデル(512x512)の場合の設定
--v2
学習元がv2系vモデルの場合(768x768)の場合の設定
--v2 --v_parameterization

7-5 メモリ消費量を削減する特殊な設定

 下記は、メモリ消費量を大きく削減する特殊な設定です。他の設定も併用することで、v1系モデルはVRAMが8GB、v2系モデルは12GBでDreamBoothが実行できます。強引な手法のため、学習設定が難しかったり、期待通りに動作しなかったりするかもしれません。必要時を除き、指定しない方が良いでしょう。

全ての勾配をfloat32からfloat16に変更する
--full_fp16

7-6 その他の設定(augmentation関係を除く)

 下記はその他の設定です。学習の質の向上や研究の目的で使用できます。

学習時に使用して出力先に組み込むVAEを指定する
(任意、モデルのckptやVAEのみのファイルやDiffUsersモデル名が指定可能)
--vae=\aiwork\stable-diffusion-webui\models\VAE\kl-f8-anime2.ckpt

Text Encoderの学習を停止するステップ数(任意、以降はU-Netの学習のみ)
--stop_text_encoder_training=3000

Tokenizerの出力をpaddingしない(任意、当初のDreamBoothの動作)
--no_token_padding

学習時のseedを指定する(任意)
--seed=12345678

学習率のschedulerの指定
(任意、デフォルトはlinear
 他にはcosine, cosine_with_restarts, polynomial, constant, constant_with_warmup)
--lr_scheduler=linear
ウォームアップステップ数の指定(任意、デフォルトは0)
--lr_warmup_steps=500

text encoderの後ろからn番目の層の出力を使用する(動作未確認、任意、数値は1以上)
--clip_skip=2

TensorBoardのログを指定のパスに保存する(任意)
--logging_dir=\aiwork\db_log
ログの日時ディレクトリ名の前に付加する文字(任意)
--log_prefix=test

8. 学習実行後の推論

8-1 生成されたモデル

 6.の手順でDreamBoothを実行し終えると、指定したディレクトリに学習済みのモデルが保存されます。形式がckptやsafetensorsの場合は、指定したステップ数まで学習したファイルの名前は「last」になります。下記例は「save_every_n_epochs」の設定を使用したので、学習途中のモデルも保存されています。

学習済みのモデル(epoch-*は途中のもの)

8-2 推論

 本記事や、前述の「web UIを先にインストールする場合」で紹介した記事の通りに構築している場合は、学習実行後に「webui」のコマンドを実行してすぐに試すことができます。

 下記は実際に「sks girl」のプロンプトのみで出力してみた結果です。きりたんの全身を学習させたので、そのような特徴が現れた画像となっています。プロンプトに別の文字を足したりして遊んでみてください(全身のみを学習させた影響か、きりたんの特徴が削れやすいです)。

「sks girl」のみできりたんを召喚(Hires. fixで1024x1024の解像度とした)

 学習にかかる時間は条件によって変わります。今回は6000ステップで1時間少々かかりました(RTX 3060使用)。10epoch(3000ステップ)のモデルでも十分な結果が出ていたので、過学習の可能性があります。このように、学習途中のモデルを保存することで、最適なステップ数の検討ができるようになります。

 付録にて、モデルをマージして出力を改善する方法を載せましたので、こちらも試してみてください。

9. まとめ

 DreamBoothは決してお手軽な方法とは言えませんが、準備さえ済めば実行はさほど難しいものではなく(ただし細かな調整は難しい)、学習効果をその場で確認できるので面白いと思います。
 本記事で使用したリポジトリは、複数のクラス(例えば「girl」と「boy」)や複数のオブジェクト(特定の男性キャラや女性キャラなど)を同時に学習することもできます。さらに、顔部分を抽出して学習する機能(augmentation)や、LoRAなど他の学習方法もサポートしていますので、興味のある方は公式のドキュメントを確認してください。

10. 付録

10-1 モデルのマージ(混合)

※下記は純粋なマージの方法ですが、差分マージの方がおすすめです(あとで書けたら書きます)。これは「A+(B-C)*M」の方法で、Aは学習内容を入れたいモデル、Bは学習済みのモデル、Cは学習前のモデルを指定します。

 個人的には、DreamBoothでなくてもおすすめのテクニックです。DreamBoothは学習元のモデルに依存する上、学習によってモデル自体に(良くも悪くも)破壊的な影響を及ぼします。マージを行って他のモデルの性質を取り込むことで性質が変化し、改善も期待できます。ただし、学習効果は薄れるかもしれません(別々のモデルに学習して、お互いをマージするアイデアもあります)。マージはweb UIを使用して行います。

 上部のタブから「Checkpoint Merger」を選び、モデルを選んで「Run」をクリックするだけです。デフォルトの「Multiplier=0.3」は、(A)のモデルが70%、(b)のモデルが30%の設定です。(A)に学習済みモデルを選択の上で、いくつかの比率で違いを試してみてください。「Save as float16」をチェックすると、容量が節約できます。また、sefetensors形式も選べます。

モデルをマージする画面

 今回は「Shirayuki Anime」のモデルを使用してみました(ファイル名 Shirayuki_Anime_V1-fp16.safetensors)。元のモデルとマージモデルの出力を載せておきます。モデル以外の設定は同一で、Hires. fixで2倍にしてあります。ぱっと見は分かりづらいですが、精細なイメージに変化しました。

左は元の学習済みモデル、左はShirayuki Animeをマージしたモデル

 最近登場したモデルは、下記の記事で紹介しています。学習元やマージ相手の参考にしてください(05-25-2025 現状に合わせてリンク先変更)。

 なお、v1系モデルとv2系モデルのマージはおそらくできませんので、注意してください。

10-2 リポジトリをアップデートする方法

 本記事の手順に従って「git clone」コマンドでダウンロードした場合は、以下のコマンドでアップデートができます。「git pull」コマンドで「Already up to date.」と表示された場合は最新の状態ですので、最後の「deactivate」のみ実行して終了してください。そうでない場合は何らかの情報が表示されアップデートされますので、続きのコマンドも入力してください。

#仮想環境に入っていない状態で始めること
cd \aiwork\sd-scripts
git pull
venv\Scripts\activate
pip install --upgrade -r <requirement file name>
deactivate

 何かエラーが出てしまった場合は、メッセージを検索すると解決方法が出てくるかもしれません(投げやり)。

11. twitterの連絡先

 noteのアカウントはメインの@Mayu_Hiraizumiに紐付けていますが、記事に関することはサブアカウントの@riddi0908までお願いします。


この記事が気に入ったらサポートをしてみませんか?