広告
広告

Textual Inversion の使い方

カテゴリ:deeplearning

目次

Textual Inversion

Embedding (.pt や .bin ファイル)を使う

Embedding の作成

パラメータの説明

Training an embedding(embedding のトレーニング)

Do not resize image

Gradient Accumulation

Shuffle tags by ',' when creating prompts.

Drop out tags when creating prompts.

latent sampling method

例1

DreamArtist

VRAM8GB で実行する

Embedding-inspector

Embedding を使う

Embedding は .pt や .bin ファイルで提供される。それらを embedding フォルダにいれて、プロンプトに embedding のファイル名を入れると使える。たとえば embedding のファイル名がtest だったとすると、プロンプトに "portrait of test" とすると使える。再起動不要。

Embedding の作成

  • 新しい embedding を作成し、学習させたい画像の入ったディレクトリを選択、学習させる
  • 学習には時間がかかる
  • 学習画像枚数は 5~100 枚、ステップ数は1万~10 万がよく使われる。デフォルトの状態でよく似たものが出せるなら学習画像枚数は少なくてもいい
  • 半精度(FP16)でも機能するが検証が必要
  • VRAM が豊富なら起動時に --no-half --precision full を付けることで単精度(FP32)で学習できる
  • 512x512 より大きいサイズの画像も入力できるが、大きすぎるとメモリ使用量が増え、学習にも時間がかかる
  • 学習を中断・再開してもデータを失わない(ただし AdamW 最適化パラメータは除く。これは重要ではないので、ほかのツールでも保存してない)
  • --lowvram(VRAM4G サポート)引数をつけて起動してはならない。--medvram での Textual Inversion や Hypernetwork の学習は可能。

パラメータの説明

Creating an Embedding(Embedding の作成)

  • Name:作成する embedding のファイル名。学習データを呼び出す際にプロンプトに入力するワードになる
  • Initialization text:画像の特徴を指定する初期テキスト。たとえば "zzzz1234" という名前の1ベクトル(1トークン)の embedding で初期テキスト "tree" を指定したとする。トレーニングなしでそれを "a zzzz1234 by monet" というプロンプトで使うと、その出力結果は "a tree by monet" と同じになる。
    つまり Initialization text には学習してほしいタグを書く。白髪赤目センター分けショートヘアーを学習させたいなら、Initialization text には red eyes, white hair, parted bangs, short hair を入れる。
    Initialization text は学習画像に含まれる属性かつモデル(ckpt)で認識できる語が望ましい。
  • Number of vectors per token:embedding のトークンひとつあたりのサイズ。この値を大きくすればより多くの情報を詰め込めるが、より多くのトークン数を消費する。たとえば 16 ベクトル embedding はたとえ1語であっても 16 トークン消費する。プロンプトは 75 トークンしか入力できない。大ベクトルで良い結果を得るには、より多くの画像が必要になる。また大ベクトルは余計な情報を学習してしまう事にも注意が必要。

Training an embedding(embedding のトレーニング)

デフォルトの 0.005(5e-3) は大きすぎるので、0.0005(5e-5) ぐらいから始めるとよい。

  • Embedding:学習させたい embedding を選択
  • Learning rate:学習速度。高すぎる値を設定すると embedding が壊れる。training info textbox に「Loss: nan」が表示された場合、学習に失敗し embedding は死んだ事を意味する。これはデフォルト値では絶対に起こらない。複数の学習率を指定することもできる。たとえば 0.005:100, 1e-3:1000, 1e-5 の場合、100 ステップまでは 0.005、1,000 ステップまでは 1e-3、1,001 ステップ以降は 1e-5 になる。
  • Batch size:1回の学習に使う画像枚数。これを上げると、VRAM を余計に使い計算速度も落ちるが、精度が上がる。
  • Dataset directory:学習に使う画像が入ったディレクトリ。画像のアスペクト比は1:1である必要がある。
  • Log directory:サンプル画像と学習の途中の embedding のコピーが出力される。
  • Prompt template file:1行にひとつプロンプトが書かれたファイル。これはモデルをトレーニングするときに使われる。textual_inversion_templates ディレクトリにあるファイルを見れば何ができるのかわかる。スタイル(画風)をトレーニングするときは style.txt を使い、人や物を学習させたいときは subject.txt を使う。ファイル内では以下のタグが使える。
    • [name]:embedding の名前
    • [filewords]:データセットの画像のファイル名の単語をスペースで区切ったもの。タグファイルがあるならそちらが読み込まれる
  • Max steps:トレーニングが終了するステップ数。画像1枚をモデルに学習させたときに1ステップと数える。トレーニング画像を1周すると 1 epoch。1ステップで複数の画像を学習させるにはバッチを使うが、未サポート。学習を中断・再開した場合でもステップ数は保存される。

Use Deepbooru for caption を有効にすると、ファイル名にタグを自動生成してくれる。

Do not resize image

異なる画像解像度の画像を同時に学習させられる。ただしバッチサイズは1にする必要がある。

Gradient clipping

勾配の最大値を指定できるようになる。0.001:1000, 0.0001:2000 のように学習率と同様に、ステップごとに最大値を指定できる。

Gradient Accumulation

学習は Loss を計算してそれを元にネットワークを更新、という工程を画像1枚ごとに行う。gradient accumulation はネットワークを毎回更新せずに Loss をためておく。そしてためておいた Loss の合計を使ってネットワークを更新する。

Gradient accumulation steps はためておく Loss の数を指定する。

Gradient Accumulation がオフの場合、Max Steps 回 Loss の計算とネットワークの更新とを行う。Gradient Accumulation が2の場合、ネットワークの更新を Max Steps 回行い、Loss の計算は Max Steps * 2回行われる。

Shuffle tags by ',' when creating prompts.

タグをシャッフルすることで、タグの並び順を覚えないようにする。

Drop out tags when creating prompts.

タグをランダムに削除することで過学習を防ぐ。

latent sampling method

LDM と Textual Inversion とのオリジナルコードでは、学習データ画像をエンコードするときに、学習のループごとにランダムサンプルが作成されていた。しかし従来の AUTOMATIC1111 の実装では VAE からのサンプルは1つだけだった。これは VAE の想定されている使い方ではない。

  • once:従来の方法
  • deterministic:潜在空間の平均からサンプリングする。実装者は once や random よりよい結果が出ると主張している
  • random:オリジナルの Textual Inversion のリポジトリで使われていた方法。VRAM 消費量は増える

例1

環境

  • ハードウェア:RTX 3050 8GB
  • 学習に使ったモデル:Waifu Diffusion v1.3 float16
  • 学習画像:Novel AI で出力したアスナ(ブルーアーカイブ)の画像 20 枚
    50 枚作成したうちの 20 枚を採用

    作成に使用したプロンプト:masterpiece, best quality, 1girl, {{{{asuna_(blue_archive)}}}}, hair over one eye, green eyes, blue eyes, white background, cowboy shot

    ネガティブプロンプト:realistic, lowres, bad anatomy, bad hands, text, error, missing fingers, extra digit, fewer digits, cropped, worst quality, low quality, normal quality, jpeg artifacts, signature, watermark, username, blurry
  • 学習画像サイズ:512x512
  • タグ:Deepdanbooru の出力から以下のタグを削除したものを使用
    hair over one eye, green eyes, blue eyes, brown hair, hair ornament, hair ribbon, asymmetrical bangs, long hair, very long hair
  • embedding 名:asuna
  • Initialization Text:hair over one eye, green eyes, blue eyes, brown hair, hair ornament, hair ribbon, asymmetrical bangs, long hair, very long hair
  • Prompt template file:[name], [filewords] だけ書かれたファイルを使用
  • Number of vectors per token:8
  • 学習率:5e-3:5000, 5e-4
  • ステップ数:10,000
  • 学習速度:1.32 it/s
  • 学習にかかった時間:2時間 30 分程度

出力例

  • モデル:Waifu Diffusion v1.3 float16
  • プロンプト:masterpiece, best quality, extremely detailed beautiful portrait of asuna-10000, in elaborately embroidered print_kimono, looking_away, golden hour, from_side, white marble glowing skin, subsurface scattering, cobblestone road, soft ambient lighting, light_rays
  • ネガティブプロンプト:lowres, bad anatomy, bad hands, text, error, missing fingers, extra digit, fewer digits, cropped, worst quality, low quality, normal quality, jpeg artifacts, signature, watermark, username, blurry
  • ステップ数:20
  • サンプラー:Euler
  • CFG scale:7
  • Clip skip:2
学習できなかったもの

hair over one eye と右目隠れ。でこ出しになったり左目隠れになったりする。

ti example01
seed:729737763
ti example02
seed:448772941

DreamArtist

ネガティブプロンプトもチューニングする Textual Inversion。Textual Inversion は潜在空間の Loss を使って学習するが、Dream Artist では、潜在空間の Loss だけでなく、デノイズ結果をピクセル空間に戻した場合の Loss も計算に入れている。

インストール

git clone https://github.com/7eu7d7/DreamArtist-sd-webui-extension.git extensions/DreamArtist

DreamArtist Create embedding

基本的に Textual Inversion と同じ。Number of negative vectors per token を6~10 程度確保しておく。

DreamArtist Train

Train with reconstruction

ピクセル空間に戻した場合の Loss も計算に入れる。VRAM や時間を節約したいときはチェックを外す。

プレビュー・実際の使用

embedding 名が test だとすると、ネガティブ embedding は test-neg になる。

実際に使用する場合には ネガティブ embedding にいつものネガティブプロンプトを重ねて使っても効果がある(たとえば test-neg, lowres, bad ...)。

VRAM8GB で実行する

以下の設定で RTX3050 8GB で実行できた。

  • Train with reconstruction:オフ
  • 解像度:448 x 448
  • 学習画像枚数:5枚
  • Save an image to log directory every N steps, 0 to disable:0
  • Save images with embedding in PNG chunks:オフ
  • Read parameters (prompt, etc...) from txt2img tab when making previews:オフ

Embedding-inspector extension

embedding のマージができる。

リンク

DreamArtist: Towards Controllable One-Shot Text-to-Image Generation via Contrastive Prompt-Tuning

Advance prompt tuning

Stable Diffusion web UI (Advance Prompt Tuning)

Advance Prompt Tuning(APT)


広告
広告