Skip to content

Releases: kohya-ss/sd-scripts

Version 0.5.1

10 Mar 22:58
b80431d
Compare
Choose a tag to compare

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 to dynamic 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 and svd_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.pydynamic 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.
  • 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

07 Mar 10:30
Compare
Choose a tag to compare

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 options w, h, d, l, s, n are supported.
    • --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

02 Mar 12:35
f0ae7ee
Compare
Choose a tag to compare

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 with bf16 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 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.
  • 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

22 Feb 12:11
08ae46b
Compare
Choose a tag to compare

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 in requirements.txt currently.)
  • Add --lowram option to train_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 and train_db.py. Thanks to shirayu!
  • Noise offsetがメタデータに記録されるようになりました。space-nuko氏に感謝します。
  • train_network.pytrain_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 for resize_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.
    • train_network.pyでマルチGPU学習をサポートしました。Isotr0py氏に感謝します。
    • --verboseオプションを resize_lora.py に追加しました。表示される情報の詳細は こちらのPR をご参照ください。mgz-dev氏に感謝します。
    • LoRAのメタデータにgitのcommit hashを追加しました。space-nuko氏に感謝します。
    • --noise_offset オプションを各学習スクリプトに追加しました。

Updates at 11 Feb. 2023, 2023/2/11:

  • lora_interrogator.py is added in networks folder. See python 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.pynetworkフォルダに追加しました。使用法は 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 of ss_training_comment.
  • merge_lora.py supports models with different alphas. If there is a problem, old version is merge_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 and train_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. If 3 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.pyfine_tune.pytrain_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) and prepare_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.
  • 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が細分化され、ひとつのバッチ内に同一画像が重複して存在することが増えたため、バッチサイズを``そのbucket...

Read more

Version 0.4.2

06 Feb 11:54
ae33d72
Compare
Choose a tag to compare

Updates at 4 Feb. 2023, 2023/2/4

  • --persistent_data_loader_workers option is added to fine_tune.py, train_db.py and train_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.pytrain_db.pytrain_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 now SmilingWolf/wd-v1-4-convnext-tagger-v2. You can specify another model id from SmilingWolf 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.
    • --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 to merge_dd_tags_to_metadata.py and merge_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 as the word "XXXX" on it).
    • --skip_existing option is added to prepare_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 when white shirt exists. if black hair is with red 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.
  • 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.pymerge_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_existingprepare_buckets_latents.py に追加しました。すでにnpzファイルがある画像の処理をスキップします。
    • clean_captions_and_tags.pyを重複タグや矛盾するタグを削除するよう機能追加しました。例:white shirt タグがある場合、 shirt タグは削除されます。またblack hairred hairの両方がある場合、両方とも削除されます。
  • train_network.pyで使用されているタグと回数をメタデータに記録するようになりました。space-nuko氏に感謝します。

    • すべてのタグと回数がメタデータに記録されます 望まない場合には--no_metadata optionオプションでメタデータの記録を停止してください。

Version 0.4.1

03 Feb 13:05
4cabb37
Compare
Choose a tag to compare

Updates at 29 Jan. 2023, 2023/1/29

  • Add --lr_scheduler_num_cycles and --lr_scheduler_power options for train_network.py for cosine_with_restarts and polynomial learning rate schedulers. Thanks to mgz-dev!
  • Fixed U-Net sample_size parameter to 64 when converting from SD to Diffusers format, in convert_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 for train_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

22 Jan 13:05
0ca0642
Compare
Choose a tag to compare
  • Add --network_alpha option to specify alpha 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, scale 1 / rank (or dimension). Set same value as network_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.
  • 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

22 Jan 11:49
d3bc5a1
Compare
Choose a tag to compare

Updates at 22 Jan. 2023, 2023/1/22

  • Fix script to check LoRA weights check_lora_weights.py. Some layer weights were shown as 0.0 even if the layer is trained, because of the overflow of torch.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

21 Jan 03:17
cae4272
Compare
Choose a tag to compare

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 if max_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 is 0.0 like following.

    • lora_te_text_model_encoder_layers_11_* is not trained with clip_skip=2, so 0.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

15 Jan 03:49
c2c1261
Compare
Choose a tag to compare

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 in train_db.py is removed. Please use DreamBooth with captions or fine_tune.py.
  • The Hypernet feature in fine_tune.py is removed, will be implemented in train_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 like style1_000001.ckpt (or .safetensors) for each epoch and style1.ckpt for last.
    • If ommitted (default), same to previous. epoch-000001.ckpt and last.ckpt.
  • 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 and epoch-000002.ckpt is removed.

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.
  • Added cache_latents and color_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.pyfine_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_latentscolor_augオプションを追加しました。

train_network.py

  • --gradient_checkpointingがU-NetとText Encoderにも有効になりました。
    • メモリ消費が減ります。バッチサイズを大きくできますが、トータルでの学習時間は長くなるかもしれません。
    • dimension=4のLoRAはバッチサイズ1で6GB VRAMで学習できるかもしれません。

ドキュメントは未更新ですが少しずつ更新の予定です。