Releases: kohya-ss/sd-scripts
Version 0.5.1
Updates at 10 Mar. 2023, 2023/3/10: release v0.5.1
-
Fix to LoRA modules in the model are same to the previous (before 0.5.0) if Conv2d-3x3 is disabled (no
conv_dim
arg, default).- Conv2D with kernel size 1x1 in ResNet modules were accidentally included in v0.5.0.
- Trained models with v0.5.0 will work with Web UI's built-in LoRA and Additional Networks extension.
-
Fix an issue that dim (rank) of LoRA module is limited to the in/out dimensions of the target Linear/Conv2d (in case of the dim > 320).
-
resize_lora.py
now have a feature todynamic resizing
which means each LoRA module can have different ranks (dims). Thanks to mgz-dev for this great work!- The appropriate rank is selected based on the complexity of each module with an algorithm specified in the command line arguments. For details: #243
-
Multiple GPUs training is finally supported in
train_network.py
. Thanks to ddPn08 to solve this long running issue! -
Dataset with fine-tuning method (with metadata json) now works without images if
.npz
files exist. Thanks to rvhfxb! -
train_network.py
can work if the current directory is not the directory where the script is in. Thanks to mio2333! -
Fix
extract_lora_from_models.py
andsvd_merge_lora.py
doesn't work with higher rank (>320). -
LoRAのConv2d-3x3拡張を行わない場合(
conv_dim
を指定しない場合)、以前(v0.5.0)と同じ構成になるよう修正しました。- ResNetのカーネルサイズ1x1のConv2dが誤って対象になっていました。
- ただv0.5.0で学習したモデルは Additional Networks 拡張、およびWeb UIのLoRA機能で問題なく使えると思われます。
-
LoRAモジュールの dim (rank) が、対象モジュールの次元数以下に制限される不具合を修正しました(320より大きい dim を指定した場合)。
-
resize_lora.py
にdynamic resizing
(リサイズ後の各LoRAモジュールが異なるrank (dim) を持てる機能)を追加しました。mgz-dev 氏の貢献に感謝します。- 適切なランクがコマンドライン引数で指定したアルゴリズムにより自動的に選択されます。詳細はこちらをご覧ください: #243
-
train_network.py
でマルチGPU学習をサポートしました。長年の懸案を解決された ddPn08 氏に感謝します。 -
fine-tuning方式のデータセット(メタデータ.jsonファイルを使うデータセット)で
.npz
が存在するときには画像がなくても動作するようになりました。rvhfxb 氏に感謝します。 -
他のディレクトリから
train_network.py
を呼び出しても動作するよう変更しました。 mio2333 氏に感謝します。 -
extract_lora_from_models.py
およびsvd_merge_lora.py
が320より大きいrankを指定すると動かない不具合を修正しました。
Updates at 9 Mar. 2023, 2023/3/9: release v0.5.0
- There may be problems due to major changes. If you cannot revert back to the previous version when problems occur, please do not update for a while.
- Minimum metadata (module name, dim, alpha and network_args) is recorded even with
--no_metadata
, issue #254 train_network.py
supports LoRA for Conv2d-3x3 (extended to conv2d with a kernel size not 1x1).- Same as a current version of LoCon. Thank you very much KohakuBlueleaf for your help!
- LoCon will be enhanced in the future. Compatibility for future versions is not guaranteed.
- Specify
--network_args
option like:--network_args "conv_dim=4" "conv_alpha=1"
- Additional Networks extension version 0.5.0 or later is required to use 'LoRA for Conv2d-3x3' in Stable Diffusion web UI.
- Stable Diffusion web UI built-in LoRA does not support 'LoRA for Conv2d-3x3' now. Consider carefully whether or not to use it.
- Same as a current version of LoCon. Thank you very much KohakuBlueleaf for your help!
- Merging/extracting scripts also support LoRA for Conv2d-3x3.
- Free CUDA memory after sample generation to reduce VRAM usage, issue #260
- Empty caption doesn't cause error now, issue #258
- Fix sample generation is crashing in Textual Inversion training when using templates, or if height/width is not divisible by 8.
- Update documents (Japanese only).
Version 0.4.5
Updates at 2 Mar. 2023, 2023/3/2:
-
Dependencies are updated, Please upgrade the repo.
-
Add detail dataset config feature by extra config file. Thanks to fur0ut0 for this great contribution!
- Documentation is here (only in Japanese currently.)
- Specify
.toml
file with--dataset_config
option. - The previous options for dataset can be used as is.
- There might be a bug due to the large scale of update, please report any problems if you find.
-
Add feature to generate sample images in the middle of training for each training scripts.
--sample_every_n_steps
and--sample_every_n_epochs
options: frequency to generate.--sample_prompts
option: the file contains prompts (each line generates one image.)- The prompt is subset of
gen_img_diffusers.py
. The prompt optionsw, h, d, l, s, n
are supported.
- The prompt is subset of
--sample_sampler
option: sampler (scheduler) for generating, such as ddim or k_euler. See help for useable samplers.
-
Add
--tokenizer_cache_dir
to each training and generation scripts to cache Tokenizer locally from Diffusers.- Scripts will support offline training/generation after caching.
-
Support letents upscaling for highres. fix, and VAE batch size in
gen_img_diffusers.py
(no documentation yet.) -
ライブラリを更新しました。アップグレードに従って更新してください。
-
設定ファイルによるデータセット定義機能を追加しました。素晴らしいPRを提供していただいた fur0ut0 氏に感謝します。
- ドキュメントはこちら。
--dataset_config
オプションで.toml
ファイルを指定してください。- 今までのオプションはそのまま使えます。
- 大規模なアップデートのため、もし不具合がありましたらご報告ください。
-
学習の途中でサンプル画像を生成する機能を各学習スクリプトに追加しました。
--sample_every_n_steps
と--sample_every_n_epochs
オプション:生成頻度を指定--sample_prompts
オプション:プロンプトを記述したファイルを指定(1行ごとに1枚の画像を生成)- プロンプトには
gen_img_diffusers.py
のプロンプトオプションの一部、w, h, d, l, s, n
が使えます。
- プロンプトには
--sample_sampler
オプション:ddim や k_euler などの sampler (scheduler) を指定します。使用できる sampler についてはヘルプをご覧ください。
-
--tokenizer_cache_dir
オプションを各学習スクリプトおよび生成スクリプトに追加しました。Diffusers から Tokenizer を取得してきてろーかるに保存します。- 一度キャッシュしておくことでオフライン学習、生成ができるかもしれません。
-
gen_img_diffusers.py
で highres. fix での letents upscaling と VAE のバッチサイズ指定に対応しました。
Version 0.4.4
Updates at 23 Feb. 2023, 2023/2/23:
- Fix instability training issue in
train_network.py
.fp16
training is probably not affected by this issue.- Training with
float
for SD2.x models will work now. Also training withbf16
might be improved. - This issue seems to have occurred in PR#190.
- Add some metadata to LoRA model. Thanks to space-nuko!
- Raise an error if optimizer options conflict (e.g.
--optimizer_type
and--use_8bit_adam
.) - Support ControlNet in
gen_img_diffusers.py
(no documentation yet.) train_network.py
で学習が不安定になる不具合を修正しました。fp16
精度での学習には恐らくこの問題は影響しません。float
精度での SD2.x モデルの学習が正しく動作するようになりました。またbf16
精度の学習も改善する可能性があります。- この問題は PR#190 から起きていたようです。
- いくつかのメタデータを LoRA モデルに追加しました。 space-nuko 氏に感謝します。
- オプティマイザ関係のオプションが矛盾していた場合、エラーとするように修正しました(例:
--optimizer_type
と--use_8bit_adam
)。 gen_img_diffusers.py
で ControlNet をサポートしました(ドキュメントはのちほど追加します)。
Updates at 22 Feb. 2023, 2023/2/22:
- Refactor optmizer options. Thanks to mgz-dev!
- Add
--optimizer_type
option for each training script. Please see help. Japanese documentation is here. --use_8bit_adam
and--use_lion_optimizer
options also work, but override above option.
- Add
- Add SGDNesterov and its 8bit.
- Add D-Adaptation optimizer. Thanks to BootsofLagrangian and all!
- Please install D-Adaptation optimizer with
pip install dadaptation
(it is not in requirements.txt currently.) - Please see #181 for details.
- Please install D-Adaptation optimizer with
- Add AdaFactor optimizer. Thanks to Toshiaki!
- Extra lr scheduler settings (num_cycles etc.) are working in training scripts other than
train_network.py
. - Add
--max_grad_norm
option for each training script for gradient clipping.0.0
disables clipping. - Symbolic link can be loaded in each training script. Thanks to TkskKurumi!
- オプティマイザ関連のオプションを見直しました。mgz-dev氏に感謝します。
--optimizer_type
を各学習スクリプトに追加しました。ドキュメントはこちら。--use_8bit_adam
と--use_lion_optimizer
のオプションは依然として動作しますがoptimizer_typeを上書きしますのでご注意ください。
- SGDNesterov オプティマイザおよびその8bit版を追加しました。
- D-Adaptation オプティマイザを追加しました。BootsofLagrangian 氏および諸氏に感謝します。
pip install dadaptation
コマンドで別途インストールが必要です(現時点ではrequirements.txtに含まれておりません)。- こちらのissueもあわせてご覧ください。 #181
- AdaFactor オプティマイザを追加しました。Toshiaki氏に感謝します。
- 追加のスケジューラ設定(num_cycles等)が
train_network.py
以外の学習スクリプトでも使えるようになりました。 - 勾配クリップ時の最大normを指定する
--max_grad_norm
オプションを追加しました。0.0
を指定するとクリップしなくなります。 - 各学習スクリプトでシンボリックリンクが読み込めるようになりました。TkskKurumi氏に感謝します。
Version 0.4.3
Updates at 19 Feb. 2023, 2023/2/19:
-
Add
--use_lion_optimizer
to each training script to use Lion optimizer.- Please install Lion optimizer with
pip install lion-pytorch
(it is not inrequirements.txt
currently.)
- Please install Lion optimizer with
-
Add
--lowram
option totrain_network.py
. Load models to VRAM instead of VRAM (for machines which have bigger VRAM than RAM such as Colab and Kaggle). Thanks to Isotr0py!- Default behavior (without lowram) has reverted to the same as before 14 Feb.
-
Fixed git commit hash to be set correctly regardless of the working directory. Thanks to vladmandic!
-
--use_lion_optimizer
オプションを各学習スクリプトに追加しました。 Lion optimizer を使用できます。- あらかじめ
pip install lion-pytorch
でインストールしてください(現在はrequirements.txt
に含まれていません)。
- あらかじめ
-
--lowram
オプションをtrain_network.py
に追加しました。モデルをRAMではなくVRAMに読み込みます(ColabやKaggleなど、VRAMがRAMに比べて多い環境で有効です)。 Isotr0py 氏に感謝します。- lowram オプションなしのデフォルト動作は2/14より前と同じに戻しました。
-
git commit hash を現在のフォルダ位置に関わらず正しく取得するように修正しました。vladmandic 氏に感謝します。
Updates at 16 Feb. 2023, 2023/2/16:
- Noise offset is recorded to the metadata. Thanks to space-nuko!
- Show the moving average loss to prevent loss jumping in
train_network.py
andtrain_db.py
. Thanks to shirayu! - Noise offsetがメタデータに記録されるようになりました。space-nuko氏に感謝します。
train_network.py
とtrain_db.py
で学習中に表示されるlossの値が移動平均になりました。epochの先頭で表示されるlossが大きく変動する事象を解決します。shirayu氏に感謝します。- 14 Feb. 2023, 2023/2/14:
- Add support with multi-gpu trainining for
train_network.py
. Thanks to Isotr0py! - Add
--verbose
option forresize_lora.py
. For details, see this PR. Thanks to mgz-dev! - Git commit hash is added to the metadata for LoRA. Thanks to space-nuko!
- Add
--noise_offset
option for each training scripts.- Implementation of https://www.crosslabs.org//blog/diffusion-with-offset-noise
- This option may improve ability to generate darker/lighter images. May work with LoRA.
train_network.py
でマルチGPU学習をサポートしました。Isotr0py氏に感謝します。--verbose
オプションをresize_lora.py
に追加しました。表示される情報の詳細は こちらのPR をご参照ください。mgz-dev氏に感謝します。- LoRAのメタデータにgitのcommit hashを追加しました。space-nuko氏に感謝します。
--noise_offset
オプションを各学習スクリプトに追加しました。- こちらの記事の実装になります: https://www.crosslabs.org//blog/diffusion-with-offset-noise
- 全体的に暗い、明るい画像の生成結果が良くなる可能性があるようです。LoRA学習でも有効なようです。
- Add support with multi-gpu trainining for
Updates at 11 Feb. 2023, 2023/2/11:
-
lora_interrogator.py
is added innetworks
folder. Seepython networks\lora_interrogator.py -h
for usage.- For LoRAs where the activation word is unknown, this script compares the output of Text Encoder after applying LoRA to that of unapplied to find out which token is affected by LoRA. Hopefully you can figure out the activation word. LoRA trained with captions does not seem to be able to interrogate.
- Batch size can be large (like 64 or 128).
-
train_textual_inversion.py
now supports multiple init words. -
Following feature is reverted to be the same as before. Sorry for confusion:
Now the number of data in each batch is limited to the number of actual images (not duplicated). Because a certain bucket may contain smaller number of actual images, so the batch may contain same (duplicated) images.
-
lora_interrogator.py
をnetwork
フォルダに追加しました。使用法はpython networks\lora_interrogator.py -h
でご確認ください。- このスクリプトは、起動promptがわからないLoRAについて、LoRA適用前後のText Encoderの出力を比較することで、どのtokenの出力が変化しているかを調べます。運が良ければ起動用の単語が分かります。キャプション付きで学習されたLoRAは影響が広範囲に及ぶため、調査は難しいようです。
- バッチサイズはわりと大きくできます(64や128など)。
-
train_textual_inversion.py
で複数のinit_word指定が可能になりました。 -
次の機能を削除し元に戻しました。混乱を招き申し訳ありません。
これらのオプションによりbucketが細分化され、ひとつのバッチ内に同一画像が重複して存在することが増えたため、バッチサイズを
そのbucketの画像種類数
までに制限する機能を追加しました。
Updates at 10 Feb. 2023, 2023/2/10:
- Updated
requirements.txt
to prevent upgrading with pip taking a long time or failure to upgrade. resize_lora.py
keeps the metadata of the model.dimension is resized from ...
is added to the top ofss_training_comment
.merge_lora.py
supports models with differentalpha
s. If there is a problem, old version ismerge_lora_old.py
.svd_merge_lora.py
is added. This script merges LoRA models with any rank (dim) and alpha, and approximate a new LoRA with svd for a specified rank (dim).- Note: merging scripts erase the metadata currently.
resize_images_to_resolution.py
supports multibyte characters in filenames.- pipでの更新が長時間掛かったり、更新に失敗したりするのを防ぐため、
requirements.txt
を更新しました。 resize_lora.py
がメタデータを保持するようになりました。dimension is resized from ...
という文字列がss_training_comment
の先頭に追加されます。merge_lora.py
がalphaが異なるモデルをサポートしました。 何か問題がありましたら旧バージョンmerge_lora_old.py
をお使いください。svd_merge_lora.py
を追加しました。 複数の任意のdim (rank)、alphaのLoRAモデルをマージし、svdで任意dim(rank)のLoRAで近似します。- 注:マージ系のスクリプトは現時点ではメタデータを消去しますのでご注意ください。
resize_images_to_resolution.py
が日本語ファイル名をサポートしました。
Updates at 9 Feb. 2023, 2023/2/9:
- Caption dropout is supported in
train_db.py
,fine_tune.py
andtrain_network.py
. Thanks to forestsource!--caption_dropout_rate
option specifies the dropout rate for captions (0~1.0, 0.1 means 10% chance for dropout). If dropout occurs, the image is trained with the empty caption. Default is 0 (no dropout).--caption_dropout_every_n_epochs
option specifies how many epochs to drop captions. If3
is specified, in epoch 3, 6, 9 ..., images are trained with all captions empty. Default is None (no dropout).--caption_tag_dropout_rate
option specified the dropout rate for tags (comma separated tokens) (0~1.0, 0.1 means 10% chance for dropout). If dropout occurs, the tag is removed from the caption. If--keep_tokens
option is set, these tokens (tags) are not dropped. Default is 0 (no droupout).- The bulk image downsampling script is added. Documentation is here (in Jpanaese). Thanks to bmaltais!
- Typo check is added. Thanks to shirayu!
- キャプションのドロップアウトを
train_db.py
、fine_tune.py
、train_network.py
の各スクリプトに追加しました。forestsource氏に感謝します。--caption_dropout_rate
オプションでキャプションのドロップアウト率を指定します(0~1.0、 0.1を指定すると10%の確率でドロップアウト)。ドロップアウトされた場合、画像は空のキャプションで学習されます。デフォルトは 0 (ドロップアウトなし)です。--caption_dropout_every_n_epochs
オプションで何エポックごとにキャプションを完全にドロップアウトするか指定します。たとえば3
を指定すると、エポック3、6、9……で、すべての画像がキャプションなしで学習されます。デフォルトは None (ドロップアウトなし)です。--caption_tag_dropout_rate
オプションで各タグ(カンマ区切りの各部分)のドロップアウト率を指定します(0~1.0、 0.1を指定すると10%の確率でドロップアウト)。ドロップアウトが起きるとそのタグはそのときだけキャプションから取り除かれて学習されます。--keep_tokens
オプションを指定していると、シャッフルされない部分のタグはドロップアウトされません。デフォルトは 0 (ドロップアウトなし)です。- 画像の一括縮小スクリプトを追加しました。ドキュメントは こちら です。bmaltais氏に感謝します。
- 誤字チェッカが追加されました。shirayu氏に感謝します。
Updates at 6 Feb. 2023, 2023/2/6:
-
--bucket_reso_steps
and--bucket_no_upscale
options are added to training scripts (fine tuning, DreamBooth, LoRA and Textual Inversion) andprepare_buckets_latents.py
. -
--bucket_reso_steps
takes the steps for buckets in aspect ratio bucketing. Default is 64, same as before.- Any value greater than or equal to 1 can be specified; 64 is highly recommended and a value divisible by 8 is recommended.
- If less than 64 is specified, padding will occur within U-Net. The result is unknown.
- If you specify a value that is not divisible by 8, it will be truncated to divisible by 8 inside VAE, because the size of the latent is 1/8 of the image size.
-
If
--bucket_no_upscale
option is specified, images smaller than the bucket size will be processed without upscaling.- Internally, a bucket smaller than the image size is created (for example, if the image is 300x300 and
bucket_reso_steps=64
, the bucket is 256x256). The image will be trimmed. - Implementation of #130.
- Images with an area larger than the maximum size specified by
--resolution
are downsampled to the max bucket size.
- Internally, a bucket smaller than the image size is created (for example, if the image is 300x300 and
-
Now the number of data in each batch is limited to the number of actual images (not duplicated). Because a certain bucket may contain smaller number of actual images, so the batch may contain same (duplicated) images.
-
--random_crop
now also works with buckets enabled.- Instead of always cropping the center of the image, the image is shifted left, right, up, and down to be used as the training data. This is expected to train to the edges of the image.
- Implementation of discussion #34.
-
--bucket_reso_steps
および--bucket_no_upscale
オプションを、学習スクリプトおよびprepare_buckets_latents.py
に追加しました。 -
--bucket_reso_steps
オプションでは、bucketの解像度の単位を指定できます。デフォルトは64で、今までと同じ動作です。- 1以上の任意の値を指定できます。基本的には64を推奨します。64以外の値では、8で割り切れる値を推奨します。
- 64未満を指定するとU-Netの内部でpaddingが発生します。どのような結果になるかは未知数です。
- 8で割り切れない値を指定すると余りはVAE内部で切り捨てられます。
-
--bucket_no_upscale
オプションを指定すると、bucketサイズよりも小さい画像は拡大せずそのまま処理します。- 内部的には画像サイズ以下のサイズのbucketを作成します(たとえば画像が300x300で
bucket_reso_steps=64
の場合、256x256のbucket)。余りは都度trimmingされます。 - #130 を実装したものです。
--resolution
で指定した最大サイズよりも面積が大きい画像は、最大サイズと同じ面積になるようアスペクト比を維持したまま縮小され、そのサイズを元にbucketが作られます。
- 内部的には画像サイズ以下のサイズのbucketを作成します(たとえば画像が300x300で
-
これらのオプションによりbucketが細分化され、ひとつのバッチ内に同一画像が重複して存在することが増えたため、バッチサイズを``そのbucket...
Version 0.4.2
Updates at 4 Feb. 2023, 2023/2/4
--persistent_data_loader_workers
option is added tofine_tune.py
,train_db.py
andtrain_network.py
. This option may significantly reduce the waiting time between epochs. Thanks to hitomi!--debug_dataset
option is now working on non-Windows environment. Thanks to tsukimiya!networks/resize_lora.py
script is added. This can approximate the higher-rank (dim) LoRA model by a lower-rank LoRA model, e.g. 128 by 4. Thanks to mgz-dev!--help
option shows usage.- Currently the metadata is not copied. This will be fixed in the near future.
--persistent_data_loader_workers
オプションがfine_tune.py
、train_db.py
、train_network.py
の各スクリプトに追加されました。このオプションを指定するとエポック間の待ち時間が大幅に短縮される可能性があります。hitomi氏に感謝します。--debug_dataset
オプションがWindows環境以外でも動くようになりました。tsukimiya氏に感謝します。networks/resize_lora.py
スクリプトを追加しました。高rankのLoRAモデルを低rankのLoRAモデルで近似します(つまり128 rank (dim)のLoRAに似た、4 rank (dim)のLoRAを作ることができます)。mgz-dev氏に感謝します。- 使い方は
--help
オプションを指定して参照してください。 - 現時点ではメタデータはコピーされません。近日中に対応予定です。
- 使い方は
Updates at 3 Feb. 2023, 2023/2/3
-
Update finetune preprocessing scripts.
.bmp
and.jpeg
are supported. Thanks to breakcore2 and p1atdev!- The default weights of
tag_images_by_wd14_tagger.py
is nowSmilingWolf/wd-v1-4-convnext-tagger-v2
. You can specify another model id fromSmilingWolf
by--repo_id
option. Thanks to SmilingWolf for the great work.- To change the weight, remove
wd14_tagger_model
folder, and run the script again.
- To change the weight, remove
--max_data_loader_n_workers
option is added to each script. This option uses the DataLoader for data loading to speed up loading, 20%~30% faster.- Please specify 2 or 4, depends on the number of CPU cores.
--recursive
option is added tomerge_dd_tags_to_metadata.py
andmerge_captions_to_metadata.py
, only works with--full_path
.make_captions_by_git.py
is added. It uses GIT microsoft/git-large-textcaps for captioning.requirements.txt
is updated. If you use this script, please update the libraries.- Usage is almost the same as
make_captions.py
, but batch size should be smaller. --remove_words
option removes as much text as possible (such asthe word "XXXX" on it
).
--skip_existing
option is added toprepare_buckets_latents.py
. Images with existing npz files are ignored by this option.clean_captions_and_tags.py
is updated to remove duplicated or conflicting tags, e.g.shirt
is removed whenwhite shirt
exists. ifblack hair
is withred hair
, both are removed.
-
Tag frequency is added to the metadata in
train_network.py
. Thanks to space-nuko!- All tags and number of occurrences of the tag are recorded. If you do not want it, disable metadata storing with
--no_metadata
option.
- All tags and number of occurrences of the tag are recorded. If you do not want it, disable metadata storing with
-
fine tuning用の前処理スクリプト群を更新しました。
- 拡張子
.bmp
と.jpeg
をサポートしました。breakcore2氏およびp1atdev氏に感謝します。 tag_images_by_wd14_tagger.py
のデフォルトの重みをSmilingWolf/wd-v1-4-convnext-tagger-v2
に更新しました。他のSmilingWolf
氏の重みも--repo_id
オプションで指定可能です。SmilingWolf氏に感謝します。- 重みを変更するときには
wd14_tagger_model
フォルダを削除してからスクリプトを再実行してください。
- 重みを変更するときには
--max_data_loader_n_workers
オプションが各スクリプトに追加されました。DataLoaderを用いることで読み込み処理を並列化し、処理を20~30%程度高速化します。- CPUのコア数に応じて2~4程度の値を指定してください。
--recursive
オプションをmerge_dd_tags_to_metadata.py
とmerge_captions_to_metadata.py
に追加しました。--full_path
を指定したときのみ使用可能です。make_captions_by_git.py
を追加しました。GIT microsoft/git-large-textcaps を用いてキャプションニングを行います。requirements.txt
が更新されていますので、ライブラリをアップデートしてください。- 使用法は
make_captions.py
とほぼ同じですがバッチサイズは小さめにしてください。 --remove_words
オプションを指定するとテキスト読み取りを可能な限り削除します(the word "XXXX" on it
のようなもの)。
--skip_existing
をprepare_buckets_latents.py
に追加しました。すでにnpzファイルがある画像の処理をスキップします。clean_captions_and_tags.py
を重複タグや矛盾するタグを削除するよう機能追加しました。例:white shirt
タグがある場合、shirt
タグは削除されます。またblack hair
とred hair
の両方がある場合、両方とも削除されます。
- 拡張子
-
train_network.py
で使用されているタグと回数をメタデータに記録するようになりました。space-nuko氏に感謝します。- すべてのタグと回数がメタデータに記録されます 望まない場合には
--no_metadata option
オプションでメタデータの記録を停止してください。
- すべてのタグと回数がメタデータに記録されます 望まない場合には
Version 0.4.1
Updates at 29 Jan. 2023, 2023/1/29
- Add
--lr_scheduler_num_cycles
and--lr_scheduler_power
options fortrain_network.py
for cosine_with_restarts and polynomial learning rate schedulers. Thanks to mgz-dev! - Fixed U-Net
sample_size
parameter to64
when converting from SD to Diffusers format, inconvert_diffusers20_original_sd.py
--lr_scheduler_num_cycles
と--lr_scheduler_power
オプションをtrain_network.py
に追加しました。前者は cosine_with_restarts、後者は polynomial の学習率スケジューラに有効です。mgz-dev氏に感謝します。convert_diffusers20_original_sd.py
で SD 形式から Diffusers に変換するときの U-Net のsample_size
パラメータを64
に修正しました。
Updates at 26 Jan. 2023, 2023/1/26
- Add Textual Inversion training. Documentation is here (in Japanese.)
- Textual Inversionの学習をサポートしました。ドキュメントはこちら。
Updates at 24 Jan. 2023, 2023/1/24
- Change the default save format to
.safetensors
fortrain_network.py
. - Add
--save_n_epoch_ratio
option to specify how often to save. Thanks to forestsource!- For example, if 5 is specified, 5 (or 6) files will be saved in training.
- Add feature to pre-calculate hash to reduce loading time in the extension. Thanks to space-nuko!
- Add bucketing metadata. Thanks to space-nuko!
- Fix an error with bf16 model in
gen_img_diffusers.py
. train_network.py
のモデル保存形式のデフォルトを.safetensors
に変更しました。- モデルを保存する頻度を指定する
--save_n_epoch_ratio
オプションが追加されました。forestsource氏に感謝します。- たとえば 5 を指定すると、学習終了までに合計で5個(または6個)のファイルが保存されます。
- 拡張でモデル読み込み時間を短縮するためのハッシュ事前計算の機能を追加しました。space-nuko氏に感謝します。
- メタデータにbucket情報が追加されました。space-nuko氏に感謝します。
gen_img_diffusers.py
でbf16形式のモデルを読み込んだときのエラーを修正しました。
Version 0.4.0
-
Add
--network_alpha
option to specifyalpha
value to prevent underflows for stable training. Thanks to CCRcmcpe!- Details of the issue are described in kohya-ss/sd-webui-additional-networks#49 .
- The default value is
1
, scale1 / rank (or dimension)
. Set same value asnetwork_dim
for same behavior to old version. - LoRA with a large dimension (rank) seems to require a higher learning rate with
alpha=1
(e.g. 1e-3 for 128-dim, still investigating).
-
Add logging for the learning rate for U-Net and Text Encoder independently, and for running average epoch loss. Thanks to mgz-dev!
-
Add more metadata such as dataset/reg image dirs, session ID, output name etc... See #77 for details. Thanks to space-nuko!
- Now the metadata includes the folder name (the basename of the folder contains image files, not fullpath). If you do not want it, disable metadata storing with
--no_metadata
option.
- Now the metadata includes the folder name (the basename of the folder contains image files, not fullpath). If you do not want it, disable metadata storing with
-
Add
--training_comment
option. You can specify an arbitrary string and refer to it by the extension. -
アンダーフローを防ぎ安定して学習するための
alpha
値を指定する、--network_alpha
オプションを追加しました。CCRcmcpe 氏に感謝します。- 問題の詳細はこちらをご覧ください: kohya-ss/sd-webui-additional-networks#49
- デフォルト値は
1
で、LoRAの計算結果を1 / rank (dimension・次元数)
倍します(つまり小さくなります。これにより同じ効果を出すために必要なLoRAの重みの変化が大きくなるため、アンダーフローが避けられるようになります)。network_dim
と同じ値を指定すると旧バージョンと同じ動作になります。 alpha=1
の場合、次元数(rank)の多いLoRAモジュールでは学習率を高めにしたほうが良いようです(128次元で1e-3など)。
-
U-Net と Text Encoder のそれぞれの学習率、エポックの平均lossをログに記録するようになりました。mgz-dev 氏に感謝します。
-
画像ディレクトリ、セッションID、出力名などいくつかの項目がメタデータに追加されました(詳細は #77 を参照)。space-nuko氏に感謝します。
- メタデータにフォルダ名が含まれるようになりました(画像を含むフォルダの名前のみで、フルパスではありません)。 もし望まない場合には
--no_metadata
オプションでメタデータの記録を止めてください。
- メタデータにフォルダ名が含まれるようになりました(画像を含むフォルダの名前のみで、フルパスではありません)。 もし望まない場合には
-
--training_comment
オプションを追加しました。任意の文字列を指定でき、Web UI拡張から参照できます。
Version 0.3.2
Updates at 22 Jan. 2023, 2023/1/22
- Fix script to check LoRA weights
check_lora_weights.py
. Some layer weights were shown as0.0
even if the layer is trained, because of the overflow oftorch.mean
. Sorry for the confusion. - Noe the script shows the mean of the absolute values of the weights, and the minimum of the absolute values of the weights.
- LoRAの重みをチェックするスクリプト
check_lora_weights.py
を修正しました。一部のレイヤーで学習されているにもかかわらず重みが0.0
と表示されていました。混乱を招き申し訳ありません。 - スクリプトを「重みの絶対の平均」と「重みの絶対値の最小値」を表示するよう修正しました。
Version 0.3.1
Updates at 19 Jan. 2023, 2023/1/19
-
Fix a part of LoRA modules are not trained when
gradient_checkpointing
is enabled. -
Add
--save_last_n_epochs_state
option. You can specify how many state folders to keep, apart from how many models to keep. Thanks to shirayu! -
Fix Text Encoder training stops at
max_train_steps
even ifmax_train_epochs
is set in `train_db.py``. -
Added script to check LoRA weights. You can check weights by
python networks\check_lora_weights.py <model file>
. If some modules are not trained, the value is0.0
like following.lora_te_text_model_encoder_layers_11_*
is not trained withclip_skip=2
, so0.0
is okay for these modules.
-
一部のLoRAモジュールが
gradient_checkpointing
を有効にすると学習されない不具合を修正しました。ご不便をおかけしました。 -
--save_last_n_epochs_state
オプションを追加しました。モデルの保存数とは別に、stateフォルダの保存数を指定できます。shirayu氏に感謝します。 -
train_db.py
で、max_train_epochs
を指定していても、max_train_steps
のステップでText Encoderの学習が停止してしまう不具合を修正しました。 -
LoRAの重みをチェックするスクリプトを追加してあります。
python networks\check_lora_weights.py <model file>
のように実行してください。学習していない重みがあると、値が 下のように0.0
になります。lora_te_text_model_encoder_layers_11_
で始まる部分はclip_skip=2
の場合は学習されないため、0.0
で正常です。
-
example result of
check_lora_weights.py
, Text Encoder and a part of U-Net are not trained:
number of LoRA-up modules: 264
lora_te_text_model_encoder_layers_0_mlp_fc1.lora_up.weight,0.0
lora_te_text_model_encoder_layers_0_mlp_fc2.lora_up.weight,0.0
lora_te_text_model_encoder_layers_0_self_attn_k_proj.lora_up.weight,0.0
:
lora_unet_down_blocks_2_attentions_1_transformer_blocks_0_ff_net_0_proj.lora_up.weight,0.0
lora_unet_down_blocks_2_attentions_1_transformer_blocks_0_ff_net_2.lora_up.weight,0.0
lora_unet_mid_block_attentions_0_proj_in.lora_up.weight,0.003503334941342473
lora_unet_mid_block_attentions_0_proj_out.lora_up.weight,0.004308608360588551
:
- all modules are trained:
number of LoRA-up modules: 264
lora_te_text_model_encoder_layers_0_mlp_fc1.lora_up.weight,0.0028684409335255623
lora_te_text_model_encoder_layers_0_mlp_fc2.lora_up.weight,0.0029794853180646896
lora_te_text_model_encoder_layers_0_self_attn_k_proj.lora_up.weight,0.002507600700482726
lora_te_text_model_encoder_layers_0_self_attn_out_proj.lora_up.weight,0.002639499492943287
:
Updates at 15 Jan. 2023, 2023/1/15
- Added
--max_train_epochs
and--max_data_loader_n_workers
option for each training script. - If you specify the number of training epochs with
--max_train_epochs
, the number of steps is calculated from the number of epochs automatically. - You can set the number of workers for DataLoader with
--max_data_loader_n_workers
, default is 8. The lower number may reduce the main memory usage and the time between epochs, but may cause slower dataloading (training). --max_train_epochs
と--max_data_loader_n_workers
のオプションが学習スクリプトに追加されました。--max_train_epochs
で学習したいエポック数を指定すると、必要なステップ数が自動的に計算され設定されます。--max_data_loader_n_workers
で DataLoader の worker 数が指定できます(デフォルトは8)。値を小さくするとメインメモリの使用量が減り、エポック間の待ち時間も短くなるようです。ただしデータ読み込み(学習時間)は長くなる可能性があります。
Version 0.3.0
Updates at January 14, 2023, 2023/1/14
- Fix loading some VAE or .safetensors as VAE is failed for
--vae
option. Thanks to Fannovel16! - Add negative prompt scaling for
gen_img_diffusers.py
You can set another conditioning scale to the negative prompt with--negative_scale
option, and--nl
option for the prompt. Thanks to laksjdjf! --vae
オプションに一部のVAEや .safetensors 形式のモデルを指定するとエラーになる不具合を修正しました。Fannovel16氏に感謝します。gen_img_diffusers.py
に、ネガティブプロンプトに異なる guidance scale を設定できる--negative_scale
オプションを追加しました。プロンプトからは--nl
で指定できます。laksjdjf氏に感謝します。
Updates at January 12, 2023, 2023/1/12
- Metadata is saved on the model (.safetensors only) (model name, VAE name, training steps, learning rate etc.) The metadata will be able to inspect by sd-webui-additional-networks extension in near future. If you do not want to save it, specify
no_metadata
option. - メタデータが保存されるようになりました( .safetensors 形式の場合のみ)(モデル名、VAE 名、ステップ数、学習率など)。近日中に拡張から確認できるようになる予定です。メタデータを保存したくない場合は
no_metadata
オプションをしてしてください。
Updates at Jan 9. 2023
All training scripts are updated.
Breaking Changes
- The
fine_tuning
option intrain_db.py
is removed. Please use DreamBooth with captions orfine_tune.py
. - The Hypernet feature in
fine_tune.py
is removed, will be implemented intrain_network.py
in future.
Features, Improvements and Bug Fixes
for all script: train_db.py, fine_tune.py and train_network.py
- Added
output_name
option. The name of output file can be specified.- With
--output_name style1
, the output file is likestyle1_000001.ckpt
(or.safetensors
) for each epoch andstyle1.ckpt
for last. - If ommitted (default), same to previous.
epoch-000001.ckpt
andlast.ckpt
.
- With
- Added
save_last_n_epochs
option. Keep only latest n files for the checkpoints and the states. Older files are removed. (Thanks to shirayu!)- If the options are
--save_every_n_epochs=2 --save_last_n_epochs=3
, in the end of epoch 8,epoch-000008.ckpt
is created andepoch-000002.ckpt
is removed.
- If the options are
train_db.py
- Added
max_token_length
option. Captions can have more than 75 tokens.
fine_tune.py
- The script now works without .npz files. If .npz is not found, the scripts get the latents with VAE.
- You can omit
prepare_buckets_latents.py
in preprocessing. However, it is recommended if you train more than 1 or 2 epochs. --resolution
option is required to specify the training resolution.
- You can omit
- Added
cache_latents
andcolor_aug
options.
train_network.py
- Now
--gradient_checkpointing
is effective for U-Net and Text Encoder.- The memory usage is reduced. The larger batch size is avilable, but the training speed will be slow.
- The training might be possible with 6GB VRAM for dimension=4 with batch size=1.
Documents are not updated now, I will update one by one.
更新情報 (2023/1/9)
学習スクリプトを更新しました。
削除された機能
train_db.py
のfine_tuning
は削除されました。キャプション付きの DreamBooth またはfine_tune.py
を使ってください。fine_tune.py
の Hypernet学習の機能は削除されました。将来的にtrain_network.py
に追加される予定です。
その他の機能追加、バグ修正など
学習スクリプトに共通: train_db.py, fine_tune.py and train_network.py
output_name
オプションを追加しました。保存されるモデルファイルの名前を指定できます。--output_name style1
と指定すると、エポックごとに保存されるファイル名はstyle1_000001.ckpt
(または.safetensors
) に、最後に保存されるファイル名はstyle1.ckpt
になります。- 省略時は今までと同じです(
epoch-000001.ckpt
およびlast.ckpt
)。
save_last_n_epochs
オプションを追加しました。最新の n ファイル、stateだけ保存し、古いものは削除します。(shirayu氏に感謝します。)- たとえば
--save_every_n_epochs=2 --save_last_n_epochs=3
と指定した時、8エポック目の終了時には、epoch-000008.ckpt
が保存されepoch-000002.ckpt
が削除されます。
- たとえば
train_db.py
max_token_length
オプションを追加しました。75文字を超えるキャプションが使えるようになります。
fine_tune.py
- .npzファイルがなくても動作するようになりました。.npzファイルがない場合、VAEからlatentsを取得して動作します。
prepare_buckets_latents.py
を前処理で実行しなくても良くなります。ただし事前取得をしておいたほうが、2エポック以上学習する場合にはトータルで高速です。- この場合、解像度を指定するために
--resolution
オプションが必要です。
cache_latents
とcolor_aug
オプションを追加しました。
train_network.py
--gradient_checkpointing
がU-NetとText Encoderにも有効になりました。- メモリ消費が減ります。バッチサイズを大きくできますが、トータルでの学習時間は長くなるかもしれません。
- dimension=4のLoRAはバッチサイズ1で6GB VRAMで学習できるかもしれません。
ドキュメントは未更新ですが少しずつ更新の予定です。