dskjal
広告
広告

AUTOMATIC1111 の Dreambooth の使い方

カテゴリ:deeplearning

LoRA はLoRA の学習方法に移動した。

目次

概要

2023 年4月現在、Dreambooth よりも LoRA(LoHa・LoCon)が使われている。性能が Dreambooth とほとんど変わらず、ファイルサイズは 1/10 以下のできるのがその理由だ。

正則化画像の必要性

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

prior-preservation loss

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

AUTOMATIC1111 の Dreambooth Extension

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

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

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

インストール

Extensions としてインストールする。

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

Create Model

ckpt を Diffuser 形式に変換する。

Parameters

Training Steps

ステップ数を指定する。Training Epochs より優先されるので、エポック数を使う場合は空欄にする。

Training Epochs

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

Scale learning rate

GPU 数、gradient accumulation steps、バッチサイズで学習率をスケールするかどうか。

Warmup Steps

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

Center Crop

ターゲット解像度にリサイズする前にセンタークロップするかどうか。

Apply Horizontal Flip

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

Concepts List

設定を書いた JSON ファイル。複数の概念を同時に学習させるときに使う。。 設定できるのは instance prompt, class prompt, instance data dir, class data dir のみ。

Concepts タブの方がより詳細な設定ができる。

Advanced

Batch size

学習の並列実行数。

Class batch size

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

Use CPU Only (SLOW)

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

Use 8bit Adam

チェックを入れると、精度は悪化するが 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 を使用する理由がない。

Don't cache latents

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

Train Text Encoder

Text Encoder も同時に学習させると顔の品質が上がる。チェックを外すと VRAM が節約できる。

Train EMA

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

Prior Loss Weight

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

Pad Tokens

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

gradient checkpointing

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

Concepts

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 と Class Prompt とは制約がある。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を指定する。

学習の再開

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

A Few Dreambooth Observations and Tips, Leafier Closer Shots With the New Vae File (higher CFG)

用意する画像

注意すること

避けたほうがいいこと

そのほか

512x512 より大きいサイズでの出力を予定している場合、大きい解像度の画像(たとえば 640x640)の画像で学習させると品質が上がる。

60 枚の画像と、2,000 枚の "person" 正則化画像とで 6,000 ステップで学習させた場合、高い CFG を設定しても画像が破綻しづらくなった。

Dehydrate and Rehydrate ckpt model

Dreambooth で作成したモデルを1GB 未満に圧縮する。


広告
広告

カテゴリ