# (おまけ) DreamBooth学習

<figure><img src="https://545851591-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fiswjacuq2Mr78P6Zx7ku%2Fuploads%2FKi28kxPQyNb62uZeY1l9%2F06987-64877423-3%20gigantic%20angel%20girls%2Cteen%2Cwhite%20hair%2Cshort%20hair%2Cblue%20eyes%2Cgrey%20wings%20on%20the%20back%2Chalo%2C%20large%20deep%20eyes%2C%20hands%2C%20cold%20breath%2C%20ta.png?alt=media&#x26;token=dd8057c1-36b3-4613-a8ac-c22aac08f8ad" alt=""><figcaption><p>今回作成するミチコ・マランドロモデルの生成例</p></figcaption></figure>

Paperspace GradientにてDreamBooth学習を試したので方法を解説する。

本記事の手順は[Aitrepreneurの動画](https://youtu.be/HahKXY7AQ8c)等を参考にしている。

なお先の章の方法でのstable diffusion webui導入が終わっていることを前提とする。RTX5000、A4000以上で動作することを確認している。

先の導入のコードの後の空欄に次のコードを書き足していくか、前回作成したstable-diffusion.ipynbの隣に別途新しいipynbファイルを作成しそちらに記述してほしい。

本記事のコードのnotebook版は↓

{% file src="https://545851591-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fiswjacuq2Mr78P6Zx7ku%2Fuploads%2F0mNH7yAbEnDzPOrbAFCC%2FDB_paperspace.ipynb?alt=media&token=1ccbccd3-d869-4789-8783-88b2e60a2e04" %}

### 1. xformersの導入

通常の起動時と同様にxformersの導入を行う。DBではVRAM節約のため多くの場合xformersが必要になる。（毎回起動時に必要。）

下のコードをコピペし実行する。

```bash
%%bash
# https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
MINICONDA_INSTALLER_SCRIPT=Miniconda3-py39_4.12.0-Linux-x86_64.sh
MINICONDA_PREFIX=/usr/local
wget https://repo.continuum.io/miniconda/$MINICONDA_INSTALLER_SCRIPT
chmod +x $MINICONDA_INSTALLER_SCRIPT
./$MINICONDA_INSTALLER_SCRIPT -b -f -p $MINICONDA_PREFIX
rm $MINICONDA_INSTALLER_SCRIPT
# conda update conda -y
conda install pytorch==1.12.1 torchvision==0.13.1 torchaudio==0.12.1 cudatoolkit=11.3 -c pytorch -y
conda install xformers -c xformers/label/dev -y
```



### 2. DreamBoothのインストール

Stable diffusionを起動しDreamBoothをインストールする。既にインストールが終わっている場合は不要「3. 学習画像を準備する」に飛べば良い。

下記のコードを実行しstable diffusion webuiを起動する。下記のコードの通り--enable-insecure-extension-accessオプションを付けて起動していないと拡張のインストールができないことに注意。

```
# 起動のおまじない（DBインストール用）
%cd /storage/atelier/stable-diffusion-webui
# webuiを自動更新するおまじない
# !git pull
%mkdir -p /storage/atelier/dataset/instance
%mkdir -p /storage/atelier/dataset/class
!python launch.py --share  --gradio-auth sd:test \
--enable-insecure-extension-access
```

出力されるURLをクリックしてwebuiを開く。

下記の画像の手順でExtensions タブからDreamBooth extensionをインストールする。

<figure><img src="https://545851591-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fiswjacuq2Mr78P6Zx7ku%2Fuploads%2FlLsKu5Y74BTuRQKF3SBE%2Fdb2.png?alt=media&#x26;token=31a9aad3-1317-44c0-be4a-d07a94948932" alt=""><figcaption><p>Extensions, AvailableタブあらLoad fromを押してインストール可能な拡張機能のリストを取得する</p></figcaption></figure>

<figure><img src="https://545851591-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fiswjacuq2Mr78P6Zx7ku%2Fuploads%2F1K9pL17NHTuUmGOb3x3o%2Fdb3.png?alt=media&#x26;token=3d17e3a4-dbf7-44bb-bdd8-5709594ccd10" alt=""><figcaption><p>installボタンでDreambooth script,tabのExtensionのインストール実行。</p></figcaption></figure>



<figure><img src="https://545851591-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fiswjacuq2Mr78P6Zx7ku%2Fuploads%2FKoHztvdgzLSlPkzpBaCs%2Fdb5.png?alt=media&#x26;token=6ea52b08-e8bb-45ac-abd1-6698d12a6042" alt=""><figcaption><p>installが終了するとinstalledの表示になる。</p></figcaption></figure>

インストールの終了が確認できたらコードの実行を停止しwebuiを終了する。

<figure><img src="https://545851591-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fiswjacuq2Mr78P6Zx7ku%2Fuploads%2FV6ITVLVba5LzF5hdoBZQ%2Fdb13.png?alt=media&#x26;token=3c172985-ff6f-40b2-a65c-44f61bbdb5cf" alt=""><figcaption></figcaption></figure>

### 3. 学習画像を準備する

学習させたいキャラや属性の画像ファイルを用意する。今回はテストとしてミチコ・マランドロの画像15枚を用意した。

<figure><img src="https://545851591-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fiswjacuq2Mr78P6Zx7ku%2Fuploads%2F5N6kY3FiCloTCSS7J2jz%2F%E9%A1%94%E5%86%99%E7%9C%9F%E7%BE%A4.png?alt=media&#x26;token=4dadfeb5-54a9-46d3-9717-a2b83cb86575" alt=""><figcaption></figcaption></figure>

学習画像群を/storage/atelier/dataset/instanceにアップロードする。画面左のファイルビューアを使って所定のフォルダまで移動し所定のフォルダにてドラッグ&ドロップすればアップロードされる。

<figure><img src="https://545851591-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fiswjacuq2Mr78P6Zx7ku%2Fuploads%2F92E1ZQpec2RZMHggAxLr%2Fdb9.png?alt=media&#x26;token=774f1898-abbc-4b00-b088-b527410bb306" alt=""><figcaption><p>storage→atelier→datasetでclassとinstanceのフォルダが作成されている</p></figcaption></figure>

<figure><img src="https://545851591-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fiswjacuq2Mr78P6Zx7ku%2Fuploads%2FPuQ3sWuA1Xh6HJIX5kIQ%2Fdb10.png?alt=media&#x26;token=5231d4a1-c934-498f-854d-34d4b7956ec1" alt=""><figcaption><p>instanceフォルダーに画像をドラッグ&#x26;ドロップ</p></figcaption></figure>

正則化のための画像を用意する場合は/storage/atelier/dataset/classに同様にアップロードする。

今回は正則化画像は使用せず学習を行う。



### 4. DreamBoothの学習を行う

次のコードを実行して再度stable diffusion webuiを開く。使用するVRAMを抑えるため--xformersオプションは必須。

<pre><code># 起動のおまじない（DB学習用）
<strong>%cd /storage/atelier/stable-diffusion-webui
</strong># webuiを自動更新するおまじない
# !git pull
!python launch.py --share  --gradio-auth sd:test --xformers
</code></pre>

webuiを開いたらDreambooth タブが現れているはず。これをクリックし、CreateModelタブからモデル名（ここではmichiko）、元となるモデルのファイル（ここではnovelaiのmodel.ckptを選択）、を選択し、Createボタンを押す。

<figure><img src="https://545851591-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fiswjacuq2Mr78P6Zx7ku%2Fuploads%2FlPWY2Vwg4EXJj90wBNqr%2Fdb6.png?alt=media&#x26;token=319451f6-3580-4f05-abbc-bddb3e2be235" alt=""><figcaption></figcaption></figure>

作成が成功したら、Modelの欄で先に設定した名前を選択。Parameters タブでTraining Steps やSave Checkpoint Frequency、Save Previews Frequency等を設定する。

* Training Steps：学習の量を設定
* Save Checkpoint Frenquency：指定Stepごとに学習途中のモデルデータを生成する。Training Stepsより大きければ学習終了後のみモデルデータを生成する。
* Save Preview(s) Frenquency：指定のStepごとにプレビュー画像を生成する。Training stepsより大きく設定すればプレビュー画像は生成されない。
* Learning rate：大きいほどstep当たりのモデルパラメータの変動量が大きなる。

その他各設定項目の説明はextensionの公式gitページにある。

{% embed url="https://github.com/d8ahazard/sd_dreambooth_extension" %}



<figure><img src="https://545851591-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fiswjacuq2Mr78P6Zx7ku%2Fuploads%2F5yDuGzGG8BpK25Ypd0aV%2FDB11.png?alt=media&#x26;token=3b94e81f-c066-4c87-9c9c-7a9afd41c094" alt=""><figcaption></figcaption></figure>

学習時のGPUメモリ使用量の節約のため、Parametersタブの下部にあるAdvancedを開き、下記の画像の通り設定をする。これらの設定はA4000、RTX5000で動かす場合必須。

* Use 8bit Adamにチェックを入れる
* Mixed Precisionをfp16に設定
* Memory Attentionをxformersに設定

<figure><img src="https://545851591-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fiswjacuq2Mr78P6Zx7ku%2Fuploads%2FxQVgaktB1UACfFX9vyP8%2Fdb16.png?alt=media&#x26;token=422e2e9f-cc83-441a-b4e0-7b9fe771c4b6" alt=""><figcaption><p>GPUメモリ節約のための必須設定</p></figcaption></figure>

Concepts タブを開き下記の通り設定する。

* Dataset Directory：学習画像データの場所を指定。今回は/storage/atelier/dataset/instance
* Classification Dataset Directory：正則化画像データの場所を指定（正則化を行う場合）。今回正則化画像は使用しないが/storage/atelier/dataset/classを指定する。
* Instance prompt：学習画像の希望するプロンプトを入力。今回はillusutration of lady,michiko malandroとした。
* Class Prompt：正則化画像に対応するプロンプトを入力。今回正則化は行わないが例えばillustration of lady等と入力。



<figure><img src="https://545851591-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fiswjacuq2Mr78P6Zx7ku%2Fuploads%2F7gboUBIYjuMGh1E4CxpA%2Fdb17.png?alt=media&#x26;token=d23ce9c1-364b-4e53-b61a-1e3bde1c7413" alt=""><figcaption></figcaption></figure>

全ての設定が完了したら右上のTrainを押し、学習を開始する。今回の設定（Steps1000程度、画像数15枚程度）ならA4000で11分程度かかる。

学習が完了すると/storage/atelier/stable-diffusion-webui/models/Stable-diffusion/にモデルが作成される。学習途中のモデルは「モデル名\_学習ステップ数.ckpt」という名称になり、最終モデルは「モデル名\_0.ckpt」という名称になる。

モデルを使って実際に画像生成を行ってみる。モデル一覧を更新し生成したモデルを選択。`illustration of lady, michiko malandro, playing cards in hotel,`というプロンプトで画像を生成する。



<figure><img src="https://545851591-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fiswjacuq2Mr78P6Zx7ku%2Fuploads%2FKPk5YKi7vUp8giw138WS%2Fdb20.png?alt=media&#x26;token=f130f22d-29d7-4ff6-bb87-6e79a7cd7bac" alt=""><figcaption></figcaption></figure>

ミチコマランドロの特徴を捉えた画像の生成が確認できた。



<figure><img src="https://545851591-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fiswjacuq2Mr78P6Zx7ku%2Fuploads%2F5gAXIth0PPQQZ3wsHyNj%2Ftmptr_kppam.png?alt=media&#x26;token=4d387f17-965e-4542-b892-6039e18a829f" alt=""><figcaption><p>DB学習済みモデルの生成例</p></figcaption></figure>



<figure><img src="https://545851591-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fiswjacuq2Mr78P6Zx7ku%2Fuploads%2Fr8v6gasavREyzpeHjgAF%2Ftmpgkqdyp7v.png?alt=media&#x26;token=72509826-16d0-4e57-8a7c-fc86786ed8c6" alt=""><figcaption><p>(参考：NovelAIでの生成例)</p></figcaption></figure>

