SDXLモデルのDreambooth


# 記事の概要
これまで、SD 1.5のdreamboothは実施してきたが、SDXLモデルのdreamboothを試したことがなかったので、試した手順を記載しておく。

dreamboothで人物を学習すれば、細かいプロンプトの指定無しで、同じ人物の出力が容易になる。
また、SDXLであれば絵柄が崩れることなく、FHD（1920×1080）の画像の出力が可能になっている。
![00449-3540953704.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3619695/5aa94fa6-2a5b-7ec0-0bb1-d88d65be19ec.png)

![00456-2010622406.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3619695/7bc37456-0c8c-70db-b0b1-38ea6661e2ad.png)

動画でも解説してます。

https://youtu.be/-t9MuWXyB3I

# 環境
OS:Windows 11
GPU:GeForce RTX 4090
CPU:i9-13900KF
memory:64G
python:3.10.10
pytorch:2.0.1
CUDA:11.8
cuDNN:8.8

sd-webui: v1.7.0
dreambooth: v1.13.0



# 環境構築
Stable Diffusion WebUIの環境が準備できている前提とします。

「Extensions」＞「Available」＞「Load From:」を押下し、検索窓に「dreambooth」と記載すると、「Dreambooth」が表示されるので、「install」を押下する。（キャプチャでは「installed」になっていますが、インストールが完了していない場合は、「install」となっているはずです。）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3619695/6e0fb64f-a7e0-d6cd-64e8-37e9fa56c104.png)

「Extensions」＞「Installed」を押下し、「sd_dreambooth_extension」が存在していることを確認する。
「sd_dreambooth_extension」があれば、「Apply and restart UI」を押下する。（webuiが再起動されます。）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3619695/dadc3e47-c7fd-8458-5930-ee99a0af4b9e.png)

https://github.com/d8ahazard/sd_dreambooth_extension/wiki/ELI5-Training

# 学習（train）手順
dreamboothのインストールが完了していれば、「Dreambooth」タブが表示されているはずです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3619695/3b4dcdc0-95d5-8b48-2290-1d4c216e8203.png)

### 「Model」＞「Create」

Settingsの「Model」＞「Create」を押下する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3619695/afc43a08-4445-e378-79bb-914593443ab8.png)

以下の項目を入力し、「Create Model」を押下する。
　・Name：任意の文字列（今回は「sample1」）
　・Model Type：SDXL
　・Source Checkpoint：学習元のモデル
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3619695/6374177a-c26c-6b13-749d-f633311bd68f.png)

「stable-diffusion-webui\models\dreambooth」フォルダに、「Name」に記載した名前でフォルダが作成されている。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3619695/52846aee-ec0a-8701-3718-eb31fe0c0fd4.png)


### 「Model」＞「Select」

Settingsの「Model」＞「Select」を押下すると、先程作成したフォルダ名が表示される。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3619695/343005fd-421c-fed0-f301-46474e346d76.png)

### 「Concepts」

Settingsの「Concepts」を押下する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3619695/751775d2-185b-67f2-55fc-10cef43dee4a.png)

「Concept 1」＞「Instance Images」を押下し、必要事項を入力する。
　・Directory：学習データのフォルダを指定
　・Prompt：学習後のモデルのイメージを指定（指定する理由が分からない）
　・Instance Token：意味のない文字列を指定
　・Class Token：学習後のモデルから離れすぎていない単語を指定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3619695/4a124c97-aec4-6a4b-f3c4-7a38797e729b.png)
※ここの記載の詳細は、以下のページを参考にしてください。

https://github.com/d8ahazard/sd_dreambooth_extension/wiki/Class-Explained

ちなみに学習データは６件の画像ファイルを格納している。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3619695/8aa180b8-cbbf-42f1-e482-dea109cf8932.png)

「Concept 1」＞「Class Images」を押下し、必要事項を入力する。
　・Directory：学習データのフォルダを指定（「Instance Images」との違いは分からない）
　・Prompt：学習後のモデルのイメージを指定（指定する理由が分からない）
　・Negative Prompt：必要であればネガティブプロンプトを指定
　・Class Images Per Instance Image：基本的には「1」を指定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3619695/1850e520-cc00-1c9c-ff8e-b9d01379983d.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3619695/fdc96256-2b72-7fdc-110e-b69cb3b60a6e.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3619695/0dc86fb2-04df-bc48-e17b-1a6e7673ac93.png)


### 「Parameters」＞「Intervals」

Settingsの「Parameters」＞「Intervals」を押下する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3619695/b6ada951-9cc0-676a-3e1c-7106ef9bb565.png)

以下の項目のパラメータを変更する。
・Training Steps Per Image (Epochs)：1000Epochs
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3619695/6cc96897-c344-0ddf-6c21-896e30754769.png)

### 「Parameters」＞「Learning Rate」

Settingsの「Parameters」＞「Learning Rate」を押下する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3619695/095d68ec-75a3-7c21-9401-03883ad3edb8.png)

以下の項目のパラメータを変更する。
・Learning Rate：0.000005
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3619695/ee7c7bc9-a1d8-8d78-77d3-25261fcdce84.png)


### 「Save Settings」

「Save Settings」を押下し、これまでの設定を保存する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3619695/dfbf374f-185f-470e-c3c7-35142712a462.png)

このポップアップが表示されたら、「OK」を押下する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3619695/b6509bcb-7034-1ce7-cc3e-60994771388b.png)


### 「Train」

「Train」を押下し、学習を開始する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3619695/1838740c-5da3-737c-d18f-93f5c80935dc.png)

このポップアップが表示されたら、「OK」を押下する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3619695/0c849dec-70ed-30a9-0ee5-08fb22f5cc08.png)


学習が開始すると、以下のような画面が表示される。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3619695/ab762234-aa74-8a95-e5c0-495761be81ea.png)




# 学習結果
今回の設定であれば、7時間程度で学習が完了する。
サンプル生成画像も、学習データにかなり近づいている。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3619695/f47bbaf9-31ef-1e4d-ee17-371ae274d225.png)

「stable-diffusion-webui\models\Stable-diffusion」フォルダに、「Name」で指定したフォルダが新規で作成され、その中に学習済みモデルが保存される。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3619695/f823f253-f053-3d7e-417e-5f11ff2b4cfe.png)

学習済みモデルを使って、画像生成が可能なことが確認できる。
![00000-4193010333.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3619695/c95e68ee-bac0-ffc1-7e8f-99b87e40a55a.png)