広告
広告

Dream Booth の使い方

カテゴリ:deeplearning

Dreambooth

正則化画像の必要性

Dreambooth

Dreambooth は元のモデルが描けないオブジェクトも学習させて描けるようになる。ただし、追加して学習させられない。A というオブジェクトを学習させたモデルに B というオブジェクトを追加で学習させると A が影響を受けてあいまいになってしまう。なので Dreambooth で複数の概念を学習させるには同時に学習させなければならない。複数の概念を独立して学習させる方法は追加学習しかない。

Extension の Dreambooth は以下のように動作する。

  1. cpkt を Diffuser 形式に変換(変換されたモデルは models/dreambooth にある)
  2. ShivamShrirao の Dreambooth を実行
  3. cpkt に変換

正則化画像の必要性

sks guitar という Instance プロンプトで sks にギターの柄を学習させたいとする。このとき正則化画像がないと、sks にどのような内容が学習されるかわからない。sks と guitar と両方の語の概念が変更されるからだ。ここで guitar という Class プロンプトで正則化画像も使って学習させると、guitar という語の概念を修正できるので、sks に guitar 以外の概念を学習させられる。

prior-preservation loss

正則化画像は過学習と language-drift(語の意味の変化)を防ぐ効果がある。正則化画像がないと Instance prompt に含めた語の意味が変化してしまう。

インストール

以下の URL で Extensions としてインストールする。

https://github.com/d8ahazard/sd_dreambooth_extension

webui-user.bat の 'set COMMANDLINE_ARGS=' の下の行に以下を追加して webui を再起動する。

set TORCH_COMMAND=pip install torch==1.12.1+cu116 torchvision==0.13.1+cu116 --extra-index-url https://download.pytorch.org/whl/cu116

Settings

Training Steps

ステップ数を指定する。Training Epochs より優先される。

Training Epochs

エポック数を指定する。Basic Dreambooth Guide によると、100 epoch(Instance 画像枚数 * 100)は必要になる。

Concept List

デフォルト設定を書いた JSON ファイル。。 設定できるのは instance prompt, class prompt, instance data dir, class data dir のみ。

Instance prompt

画像生成時に呼び出すときに使う語を含んだプロンプト。呼び出すときに使う語は1トークンでモデルで使われてないものがいい。たとえば shs sts scs cpc coc cic msm nen usu ici lvl。複雑なプロンプトを入れてはいけない。複雑なプロンプトを入れてしまうと、Class prompt を設定しても語の意味が変化(language-drift)してしまう。キャラの場合 shs girl 等になる。

[filewords] を入れると、Textual Inversion や Hypernetwork でやるように、画像ファイル名の txt ファイルに書かれたプロンプトを使う。

Instance prompt は prior preservation を行う場合にのみ必要になる。

Class prompt

正則化画像を説明するプロンプト。プロンプトはモデルが認識できるものでないと意味がない。Instance prompt が shs girl の場合、Class prompt は girl になる。

[filewords] を入れると、Textual Inversion や Hypernetwork でやるように、画像ファイル名の txt ファイルに書かれたプロンプトを使う。

prior preservation を行わないなら空白でいい。

Instance prompt と class prompt の例

Training objects #19では Instance prompt に "sks guiter"、class prompt に "guiter"、を入力して学習させた例がある。この例では sks にギターの柄のみが学習されている。

DiffusersベースのDreamboothの精度をさらに上げる(Windows対応、VRAM 12GB)#学習用画像の準備で学習用画像と正則化画像との例が見れる。

Classification dataset directory

正則化画像(Class prompt で説明されている画像)を入れておくディレクトリ。Class prompt が入力されていて、このディレクトリの欄が空白の場合は /models/dreambooth/MODELNAME/classifiers/ に画像を生成して使用する。

Existing Prompt Contents

[filewords] を使う場合に使う。[filewords] に含まれるコンテンツ内容を指定する。

Instance Prompt は常に Instance Token と Class Token とがセットでなければならない。Class Prompt には Instance Token が入っていてはならない。Existing Prompt Contents は タグファイルに Instance Token と Class Token とが入っているかどうかで、タグファイルの内容を加工してプロンプトとして使う。

Description

タグファイルに Class Token がある場合は、Class Token の前に Instance Token を挿入して Instance Prompt として使う。Class Prompt はそのまま使う。

Instance Token + Description

Instance Token の後ろに Class Token を挿入したものを Instance Prompt として使う。Class Prompt は Instance Token を Class Token に置き換えたものを使う。

Class Token + Description

Class Token の前に Instance Token を挿入して Instance Prompt として使う。Class Prompt はそのまま使う。

Instance Token + Class Token + Description

そのまま Instance Prompt に使う。Class Prompt は Instance Token を削除して使う。

コード

finetune_utils.py#L40-L61

Instance Token

画像生成時に呼び出すときに使う語のみを指定する。画像生成時に呼び出すときに使う語が sls なら sls のみを指定する。a photo of sls や sls dog 等は間違い。Instance prompt に [filewords] が含まれている時のみ機能する。

Class Token

Instance token と同じだが、こちらは複数のタグを指定できる。class prompt に [filewords] が含まれている時のみ機能する。

Instance Token と Class Token の使い方

Instance token に sks、Class token に a woman, woman が指定されているとする。このとき [filewords] が a photo of a woman や a photo of a man and a woman だったとすると、学習時とサンプル画像作成時にそれぞれ a photo of sks woman と a photo of a man and sks woman に置換されて実行される。正則化画像生成時にはこの機能は働かない。

Total Number of Class/Reg Images

用意した正則化画像の 10 倍程度を指定する。prior preservation を行わないなら0を指定する。

Batch size

学習の並列実行数。

Class batch size

正則化画像の並列生成数。

Advanced

Use CPU Only (SLOW)

CPU で計算する。必要メモリは 48 GB 以上。32 GB だとアプリをすべて終了させないとスワッピングが起こる。8bit Adam と同時に使えない。

gradient checkpointing

速度は遅くなるが VRAM を節約するオプション。

Mixed Precision bf16

bf16 は fp16 より指数のビットを多く割り当てたもの。fp16 よりディープニューラルネットワークをトレーニングするのに向いているらしい。しかし実行できるハードウェアは限られている。

Memory Attention

Comparison of speed and VRAM of different attention optimizations #230 によると xformers と flash_attention はメモリ使用量に大差がない(150MB 差)ので、flash_attention を使用する理由がない。

  • default:最も早いが、VRAM 使用量が多い
  • xformers:速度、VRAM 使用量ともに普通
  • flash_attention:最も遅いが、VRAM 使用量が最も少ない

Don't cache latents

VAE の出力をキャッシュしない設定。チェックすると VRAM が節約できる。

Train Text Encoder

sks dog や sks guitar のようなシンプルなインスタンスプロンプトなら不要。複数のタグを指定するプロンプトなら必要。Text Encoder も同時に学習させると顔の品質が上がる。チェックを外すと VRAM が節約できる。

Train EMA

最終イテレーションで過学習になるのを防ぐために、指数移動平均(exponential moving average weight)を使う。品質が上がるが学習時に VRAM を余計に使用する。

Use 8bit Adam

チェックを入れると、精度は悪化するが VRAM を節約できる。

Center Crop

Whether to center crop images before resizing to resolution. ターゲット解像度にリサイズする前にセンタークロップするかどうか。

Scale learning rate

Scale the learning rate by the number of GPUs, gradient accumulation steps, and batch size. GPU 数、gradient accumulation steps、バッチサイズで学習率をスケールするかどうか。

Prior Loss Weight

正則化画像の loss の重み。通常は1を指定する。

Pad Tokens

75 トークンになるようにプロンプト埋める。

Apply Horizontal Flip

画像をランダムに左右反転する。左右非対称のオブジェクトを学習させる場合はチェックを外す。

Warmup Steps

適応学習率を導入した最適化アルゴリズムは学習の初期段階では適応学習率自体の分散が極端に大きくなってしまいとんでもなく大きい値を取りかねない。Warmupとは学習の初期段階を通常よりも小さな学習率で始め、学習が進むにつれて徐々に通常の学習率まで上げていくヒューリスティックな手法

学習の再開

Load Params をクリックすると、入力パラメーターを復元してくれる。

外部リンク

DiffusersベースのDreamBoothの精度をさらに上げる(Windows対応、VRAM 12GB)

Dreambooth-Stable-Diffusion

ShivamShrirao/diffusers

Stable Diffusion Tutorial Part 1: Run Dreambooth in Gradient Notebooks

DreamBooth fine-tuning example


広告
広告