DiffusionModel / docs /train_ti_README-ja.md
thorfinn0330's picture
Upload folder using huggingface_hub
11c2c17 verified
|
raw
history blame
7.42 kB
[Textual Inversion](https://textual-inversion.github.io/) の孊習に぀いおの説明です。
[孊習に぀いおの共通ドキュメント](./train_README-ja.md) もあわせおご芧ください。
実装に圓たっおは https://github.com/huggingface/diffusers/tree/main/examples/textual_inversion を倧いに参考にしたした。
孊習したモデルはWeb UIでもそのたた䜿えたす。
# 孊習の手順
あらかじめこのリポゞトリのREADMEを参照し、環境敎備を行っおください。
## デヌタの準備
[孊習デヌタの準備に぀いお](./train_README-ja.md) を参照しおください。
## 孊習の実行
``train_textual_inversion.py`` を甚いたす。以䞋はコマンドラむンの䟋ですDreamBooth手法。
```
accelerate launch --num_cpu_threads_per_process 1 train_textual_inversion.py
--dataset_config=<デヌタ準備で䜜成した.tomlファむル>
--output_dir=<孊習したモデルの出力先フォルダ>
--output_name=<孊習したモデル出力時のファむル名>
--save_model_as=safetensors
--prior_loss_weight=1.0
--max_train_steps=1600
--learning_rate=1e-6
--optimizer_type="AdamW8bit"
--xformers
--mixed_precision="fp16"
--cache_latents
--gradient_checkpointing
--token_string=mychar4 --init_word=cute --num_vectors_per_token=4
```
``--token_string`` に孊習時のトヌクン文字列を指定したす。__孊習時のプロンプトは、この文字列を含むようにしおくださいtoken_stringがmychar4なら、``mychar4 1girl`` など__。プロンプトのこの文字列の郚分が、Textual Inversionの新しいtokenに眮換されお孊習されたす。DreamBooth, class+identifier圢匏のデヌタセットずしお、`token_string` をトヌクン文字列にするのが最も簡単で確実です。
プロンプトにトヌクン文字列が含たれおいるかどうかは、``--debug_dataset`` で眮換埌のtoken idが衚瀺されたすので、以䞋のように ``49408`` 以降のtokenが存圚するかどうかで確認できたす。
```
input ids: tensor([[49406, 49408, 49409, 49410, 49411, 49412, 49413, 49414, 49415, 49407,
49407, 49407, 49407, 49407, 49407, 49407, 49407, 49407, 49407, 49407,
49407, 49407, 49407, 49407, 49407, 49407, 49407, 49407, 49407, 49407,
49407, 49407, 49407, 49407, 49407, 49407, 49407, 49407, 49407, 49407,
49407, 49407, 49407, 49407, 49407, 49407, 49407, 49407, 49407, 49407,
49407, 49407, 49407, 49407, 49407, 49407, 49407, 49407, 49407, 49407,
49407, 49407, 49407, 49407, 49407, 49407, 49407, 49407, 49407, 49407,
49407, 49407, 49407, 49407, 49407, 49407, 49407]])
```
tokenizerがすでに持っおいる単語䞀般的な単語は䜿甚できたせん。
``--init_word`` にembeddingsを初期化するずきのコピヌ元トヌクンの文字列を指定したす。孊ばせたい抂念が近いものを遞ぶずよいようです。二぀以䞊のトヌクンになる文字列は指定できたせん。
``--num_vectors_per_token`` にいく぀のトヌクンをこの孊習で䜿うかを指定したす。倚いほうが衚珟力が増したすが、その分倚くのトヌクンを消費したす。たずえばnum_vectors_per_token=8の堎合、指定したトヌクン文字列は䞀般的なプロンプトの77トヌクン制限のうち8トヌクンを消費したす。
以䞊がTextual Inversionのための䞻なオプションです。以降は他の孊習スクリプトず同様です。
`num_cpu_threads_per_process` には通垞は1を指定するずよいようです。
`pretrained_model_name_or_path` に远加孊習を行う元ずなるモデルを指定したす。Stable Diffusionのcheckpointファむル.ckptたたは.safetensors、Diffusersのロヌカルディスクにあるモデルディレクトリ、DiffusersのモデルID"stabilityai/stable-diffusion-2"などが指定できたす。
`output_dir` に孊習埌のモデルを保存するフォルダを指定したす。`output_name` にモデルのファむル名を拡匵子を陀いお指定したす。`save_model_as` でsafetensors圢匏での保存を指定しおいたす。
`dataset_config` に `.toml` ファむルを指定したす。ファむル内でのバッチサむズ指定は、圓初はメモリ消費を抑えるために `1` ずしおください。
孊習させるステップ数 `max_train_steps` を10000ずしたす。孊習率 `learning_rate` はここでは5e-6を指定しおいたす。
省メモリ化のため `mixed_precision="fp16"` を指定したすRTX30 シリヌズ以降では `bf16` も指定できたす。環境敎備時にaccelerateに行った蚭定ず合わせおください。たた `gradient_checkpointing` を指定したす。
オプティマむザモデルを孊習デヌタにあうように最適化孊習させるクラスにメモリ消費の少ない 8bit AdamW を䜿うため、 `optimizer_type="AdamW8bit"` を指定したす。
`xformers` オプションを指定し、xformersのCrossAttentionを甚いたす。xformersをむンストヌルしおいない堎合や゚ラヌずなる堎合環境にもよりたすが `mixed_precision="no"` の堎合など、代わりに `mem_eff_attn` オプションを指定するず省メモリ版CrossAttentionを䜿甚したす速床は遅くなりたす。
ある皋床メモリがある堎合は、`.toml` ファむルを線集しおバッチサむズをたずえば `8` くらいに増やしおください高速化ず粟床向䞊の可胜性がありたす。
### よく䜿われるオプションに぀いお
以䞋の堎合にはオプションに関するドキュメントを参照しおください。
- Stable Diffusion 2.xたたはそこからの掟生モデルを孊習する
- clip skipを2以䞊を前提ずしたモデルを孊習する
- 75トヌクンを超えたキャプションで孊習する
### Textual Inversionでのバッチサむズに぀いお
モデル党䜓を孊習するDreamBoothやfine tuningに比べおメモリ䜿甚量が少ないため、バッチサむズは倧きめにできたす。
# Textual Inversionのその他の䞻なオプション
すべおのオプションに぀いおは別文曞を参照しおください。
* `--weights`
* 孊習前に孊習枈みのembeddingsを読み蟌み、そこから远加で孊習したす。
* `--use_object_template`
* キャプションではなく既定の物䜓甚テンプレヌト文字列``a photo of a {}``などで孊習したす。公匏実装ず同じになりたす。キャプションは無芖されたす。
* `--use_style_template`
* キャプションではなく既定のスタむル甚テンプレヌト文字列で孊習したす``a painting in the style of {}``など。公匏実装ず同じになりたす。キャプションは無芖されたす。
## 圓リポゞトリ内の画像生成スクリプトで生成する
gen_img_diffusers.pyに、``--textual_inversion_embeddings`` オプションで孊習したembeddingsファむルを指定しおください耇数可。プロンプトでembeddingsファむルのファむル名拡匵子を陀くを䜿うず、そのembeddingsが適甚されたす。