LyCORISとは 
https://github.com/KohakuBlueleaf/LyCORIS
1111用の拡張機能…ではない。
kohya-ss氏のsd-scriptで利用可能な、学習用のアルゴリズムの集まり。そのプロジェクト名。
具体的にはLoConやLoHaを含んでいる。
LoRAと共通する部分についてはLoRAのページも参考にしてください。
使い分け
409 無念 Name としあき 23/03/26(日)15:31:59 ID:pBMSpCYM No.1080413981 del そうだねx1
>それぞれの用途がわからなくて…
LoRAで作って満足する出来だった→LoRAでいい
1ファイルdim128で144mb リサイズ可
LoRAで作ったのじゃ満足出来ない→conv2d、旧LoCon、lycoris_lora
linerとconv両方dim128だと1ファイル297mb リサイズ可
LoCon重くね?→lycoris_loha
dim値を2乗した数値がLoConの時のdimに当たるらしい リサイズ不可
経緯
- ('23/2/28) LoConちゃん誕生。sd-scriptを用いてのLoRA学習に利用可能な新しいアルゴリズム。1111用の拡張機能ではない。
- 同時に、1111用の拡張機能a1111-sd-webui-locon
も公開。1111上でLoCon学習データを用いた画像生成を可能にするための拡張機能。この時点では1111本体の🎴やQuicksettingsからの利用にのみ対応。
- ('23/3/2) 拡張機能a1111-sd-webui-loconがアプデされた。これによりAdditional Networks
拡張機能からLoCon学習データによる画像生成を行うことも可能になった。
- ('23/3/8) Additional Networks拡張機能がアプデされ、ANのみでLoCon学習データによる画像生成が可能になった。
- ('23/3/9) LoRA学習に利用可能な新しいアルゴリズムとしてLoHaが公開。作者はLoConと同じ。
これに伴ってLoConとLoHaはLyCORISというプロジェクト(≒GitHubリポジトリ)の中に内包される形となった。
LoHa 
LoRA with Hadamard Product representation、略してLoHa
115 無念 Name としあき 23/03/09(木)17:08:17 ID:sKm9Ipgc No.1074467413 del そうだねx4
LyCORISのloha一発目のやつ完成した
network_dim=16,conv_dim=0
かなり覚えがいいように感じるしクオリティも高い
ちなみにWebUIの内臓機能には対応してるけどcomposable-loraの拡張とぶつかるから使う時はこれオフにしないと止まるね
125 無念 Name としあき 23/03/09(木)17:14:48 ID:sKm9Ipgc No.1074469129 del そうだねx3
同じdim16で比較するとLoConよりLyCORISの方が4MB多いな
ただ再現度は段違いだよこれ
ブルアカの学習したことがあればわかると思うけどヘイロー学習させるの難しいじゃん
かなりしっかり学習しててかなり驚いた
232 無念 Name としあき 23/03/09(木)17:59:30 ID:lg/ZS1k6 No.1074480979 del そうだねx4
LyCORISは複数のアルゴリズムを追加していくプロジェクトで今は
LoRA 今までのLoRA(LoConを含む)
LoHa ハダマード積表現によるLoRA(新作)
って感じかな
412 無念 Name としあき 23/03/09(木)19:20:54 ID:cFfpfOSc No.1074507811 del そうだねx1
>network_dimとconv_dimを両方128にしたら容量が594MBとかになりました・・・
>どう見ても過剰なのでrankをもっと低くしないとだめらしい
>サンプル見るかぎり(8,4)とかでいいのかな
LoConでdim8,alpha4だと38,169kbとかになるよ
それで完成度というか再現度はこのくらい
まぁ今まさにその上位?のLycorisとやらが出てるけど…
544 無念 Name としあき 23/03/09(木)20:14:51 ID:sKm9Ipgc No.1074531000 del そうだねx2
数パターンのLycoris作ってみたけど服のデザインとかちゃんと学習させたいならnetwork_dim16, conv_dim16は必要な感じ
服はどうでもいいならdim8でも平気っていう実験結果に落ち着いた
学習環境に導入する方法 
- まずLoRAを導入する必要があります。LoRAでの学習がまだできてない人はまずそっちからやろう。
- ここに書いてある通り。
https://github.com/KohakuBlueleaf/LyCORIS#for-kohya-script
ざっと言うと、まずsd-scriptのvenvに入る(activateする)
そんで指定のURLからコピってくる - 単純に「LoCon同様にlycorisフォルダをsd-scriptの中に置くだけでOKだった」という報告もある
他に--network_module指定部分の書き換えやら
dimやalphaの設定などもあるのでREADME.mdをよく読んでほしい
rem ----LoRA学習起動バッチ(LoHa対応暫定版)------------------------------------------------------
rem 学習対象のフォルダ内に置いて使用する
rem 10_AAA, 5_BBBフォルダがある場所の一つ上
rem 動作確認環境はメモリ48GB、VRAM12GBのPCを使用しているため
rem パフォーマンスモニターでメモリの使用状況をみながら
rem 各設定を少なめの数値から初めて動作確認してください
rem 以下のデフォルト設定は使用メモリ22GB、VRAM7.8GBで動作しました
rem SD-Scripts 2023/3/21版対応
rem 2023/03/29更新
rem --min_snr_gammaオプションを追加
rem 2023/03/24更新
rem Loha学習 暫定対応版(問題があったら修正してください)
rem --network_argsオプションを追加
rem --persistent_data_loader_workersオプションをついでに追加
rem 2023/02/23更新
rem オプティマイザー変更について追記
rem 2023/02/01更新
rem ファインチューン対応
rem 2023/01/31更新
rem --lr_scheduler_num_cyclesオプション対応
rem --lr_warmup_stepオプション対応
rem 2023/01/25更新
rem --network_alphaオプション対応
rem 2023/01/18更新
rem 個別学習レート対応
rem 2023/01/17更新
rem sd-scripts23/01/15版の新オプション使用(必要ならgit pullしてください)
rem 正則化対応
setlocal enabledelayedexpansion
rem ----ここから自分の環境に合わせて書き換える----------------------------------
rem sd-scriptsの場所
set sd_path="X:\stable-diffusion\sd-scripts"
rem 学習のベースモデルファイル
rem fp32よりもfp16の方が消費VRAMを抑えられるので推奨
set ckpt_file="X:\stable-diffusion\stable-diffusion-webui\models\Stable-diffusion\xxxx.ckpt"
rem 学習のベースVAE(必須ではないので使用しない場合は--vae=...の行を削除)
set vae_file="X:\stable-diffusion\stable-diffusion-webui\models\VAE\xxxx.vae.pt"
rem 学習画像フォルダ このフォルダ内に10_AAAなどのフォルダが入っていること
set image_path="X:\data\traning"
rem 正則化画像フォルダ(必須ではないので使用しない場合は reg_path="" とすること)
set reg_path=""
rem set reg_path="X:\data\reg"
rem メタデータjsonファイル(このファイルを指定するとファインチューン動作になり、json_file="" で従来のDBになる)
set json_file=""
rem set json_file="X:\data\marge_clean.json"
rem ファインチューンでのリピート数を指定 DBでのフォルダ名の数字は無視される
set ft_repeats=1
rem 学習結果の出力先
set output_path="X:\stable-diffusion\stable-diffusion-webui\extensions\sd-webui-additional-networks\models\lora"
rem 学習結果のファイル名
set file_prefix="last"
rem 学習パラメータ
set learning_rate=1e-3
rem 学習開始時にlearning_rateが指定値に到達するまでのステップ数 デフォルトは0
set lr_warmup=0
rem 個別の学習パラメータ デフォルトにしたい場合は全て上のlearning_rateと同じ値にする
set text_encoder_lr=1.5e-4
set unet_lr=1.5e-3
rem epoch数と何epochごとに保存するかの設定 1epoch=全フォルダの(画像数xループ数)の合計
set num_epochs=2
set save_every_n_epochs=1
rem スケジューラー 以下の文字列から選択: linear, cosine, cosine_with_restarts, polynomial, constant, constant_with_warmup
rem どれがベストかは要検証
set scheduler="cosine_with_restarts"
rem cosine_with_restartsのリスタート回数 デフォルトは1
set scheduler_option=1
rem 次元数 デフォルトは1 大きくすると学習能力が上がるが出力ファイルサイズが大きくなる
set network_dim=32
rem アンダーフローを防ぐための値 デフォルトは1
rem これによって計算結果がnetwork_alpha/network_dimとなって学習量が小さくなるため
rem learning_rateの方を大きくすることでバランスを取るといい
set network_alpha=1
set clip_skip=2
set seed=23
rem LyCORIS(LoCon,LoHa)用追加オプション
rem 上記の network_dim, network_alpha と合わせて設定するよう注意
rem 公式推奨値
rem LoConはdim=64以下、alpha=1~0.3
rem LoHaはdim=32以下、alpha=1以下
rem dropoutに関しては "LoHa doesn't support dropout yet." とのこと
set dim_for_conv=32
set alpha_for_conv=1
set dropout_rate=0.2
rem =========================================================================
rem VRAMなど環境に影響されるパラメーター 余裕があれば増やすと速度や精度が改善
rem CPUスレッド数 CPUのコア数がいいらしい
rem 増やすと生成速度が上がる代わりにメインメモリの消費が増えるので
rem メモリ32GBの人はCPUのコア数よりも減らした方が安定するかも
set cpu_thread=4
rem データローダーのワーカー数
rem デフォルトは8、減らすとメインメモリの使用量が減り、学習時間が増加
set workers=4
rem バッチサイズ: 増やすと計算が早く終わるがVRAM消費が増える
set train_batch_size=1
rem 学習素材の解像度: 大きくすると細部まで学習するが消費VRAMが増える
rem VRAM12GBなら768くらいまで増やせる
set resolution=512,512
rem 最小、最大バケットサイズ: 画像が正方形でなくてもresolutionの面積を超えない範囲で
rem 縦長、横長の画像も扱えるのでresolutionを増やしたらmax_bucketも合わせて増やすといい
set min_bucket=320
set max_bucket=960
rem 学習の改善に有効?
rem 詳細はsd-scriptsのgithubを参照
rem 推奨値は5
set min_snr_gamma=5
rem =========================================================================
rem ----書き換えここまで--------------------------------------------------------
set train_mode=""
if %json_file%=="" (
rem DBモード
if %reg_path%=="" (
set train_mode=--train_data_dir=%image_path%
) else (
set train_mode=--train_data_dir=%image_path% --reg_data_dir=%reg_path%
)
) else (
rem ファインチューンモード
set train_mode=--train_data_dir=%image_path% --in_json=%json_file% --dataset_repeats=%ft_repeats%
)
rem 学習実行
cd /d %sd_path%
call venv\Scripts\activate.bat & call :main & pause & exit
:main
accelerate launch --num_cpu_threads_per_process %cpu_thread% train_network.py ^
--network_module=lycoris.kohya ^
--pretrained_model_name_or_path=%ckpt_file% ^
%train_mode% ^
--output_dir=%output_path% ^
--caption_extension=".txt" ^
--shuffle_caption ^
--prior_loss_weight=1 ^
--resolution=%resolution% ^
--enable_bucket ^
--bucket_no_upscale ^
--min_bucket_reso=%min_bucket% ^
--max_bucket_reso=%max_bucket% ^
--train_batch_size=%train_batch_size% ^
--learning_rate=%learning_rate% ^
--lr_warmup_steps=%lr_warmup% ^
--text_encoder_lr=%text_encoder_lr% ^
--unet_lr=%unet_lr% ^
--max_train_epochs=%num_epochs% ^
--mixed_precision="fp16" ^
--save_precision="fp16" ^
--xformers ^
--persistent_data_loader_workers ^
--max_data_loader_n_workers=%workers% ^
--save_every_n_epochs=%save_every_n_epochs% ^
--save_model_as=safetensors ^
--output_name=%file_prefix% ^
--clip_skip=%clip_skip% ^
--seed=%seed% ^
--network_dim=%network_dim% ^
--network_alpha=%network_alpha% ^
--network_args "conv_dim=%dim_for_conv%" "conv_alpha=%alpha_for_conv%" "dropout=%dropout_rate%" "algo=loha" ^
--max_token_length=150 ^
--cache_latents ^
--lr_scheduler=%scheduler% ^
--lr_scheduler_num_cycles=%scheduler_option% ^
--vae=%vae_file% ^
--use_8bit_adam ^
--min_snr_gamma=%min_snr_gamma%
exit /b
rem ※オプションの追加、削除時は^記号に注意
rem 最後の行には^は付けずにそれ以外は ^(半角スペースと^)を付ける
rem オプティマイザーを変更する方法
rem --use_8bit_adamの行を--optimizer_type="AdaFactor"に置き換える
rem ただし、消費VRAMが増えるためギリギリの環境では動かなくなる可能性があります
rem オプティマイザーに対する設定の--optimizer_argsは必須ではないので興味のある人は公式のReadme参照
rem LoConを出力する場合 --network_module=locon.locon_kohya ^
rem Lohaを出力する場合 --network_module=lycoris.kohya ^
rem network_argsのalgo=も loha と lora で切り替えられるらしい?(それぞれLoHaとLoConになる)
rem その他よく使いそうな追加オプション
rem --keep_tokens=数値
rem トークンのシャッフルを有効にした際にシャッフルから除外するトークン
rem 公式によればトークン数はカンマで区切られた1ワード単位(usada,hikaruなら2トークン)
rem webuiのトークンの概念とは異なるようなので注意(webuiではusadaはusa daと分けられて2トークン)
rem --no_metadata
rem メタデータを記録しない
rem --training_comment=""
rem コメントを埋め込む
学習データを画像生成に利用する方法 
- 拡張機能a1111-sd-webui-locon
を導入し、🎴またはQuicksettingsからLoRAと同様に指定する。
現時点ではAdditional Networks拡張機能はLoHaには未対応。
→解決済み。今からDyLoRA含む全種の学習データを使用するには、拡張機能a1111-sd-webui-lycorisを導入すると良さそう。- フォルダ階層例や使い方は、
誘導→ 学習ファイルの使用方法
LoCon 
LoRA for Convolution Network、略してLoCon
この部分を読むと分かる
「従来のLoRAでは学習できなかった層を学習させられるよ」ということ
290 無念 Name としあき 23/02/28(火)18:36:46 ID:nwLNMBGc No.1071572918 del +
LoConはこれだよ
LoRAだと学習させてない部分あるからsd-scriptsでそこも学習させちゃおうっていうアプローチ
かなりdim下げても学習するからLoRAよりファイルサイズ減らせると思う
https://github.com/KohakuBlueleaf/LyCORIS/tree/locon-archive
35 無念 Name としあき 23/02/28(火)01:16:17 ID:A9L5bLj. No.1071420022 del そうだねx10
LoConで学習させてきた
学習箇所が倍になるからLoRAと同じdimだと容量は2倍になるよ
しょんぼりルドルフで試した感じdim128のAdafactorでやったらいい感じ
もっとdim低くて平気だと思うわ
あとLoRAだと出力が汚くなったのがLoConだとダウンスケールとアップスケール部分も学習させてるからか線がくっきりになった
スゴく出力がきれい!すごい
255 無念 Name としあき 23/02/28(火)18:18:16 ID:nwLNMBGc No.1071567131 del そうだねx5
LoConがどんな性能なのかチェックするためにジャックオーチャレンジで実験したよ
dimを128から2まで7パターン作成して生成してみた
結果はdim2でも崩れることなく学習できた
LoRAで前に学習させたときは崩れたり過学習になったり苦戦したけどLoConだと打率がとんでもなく高い結果になった
実験でつくったジャックオーチャレンジLoCon全部と比較画像とかパラメータ詰め合わせ貼っておくね
これからの研究実験の参考にどうぞ
https://mega.nz/folder/JjJkEJaS#b7aTysH37HMqHOZG1K9lDg
299 無念 Name としあき 23/02/28(火)18:42:02 ID:rsACSD4k No.1071574679 del +
loconちゃんsd-scriptsにフォルダ突っ込んで--network_module書き換えるだけで動いてくれる
357無念Nameとしあき23/03/27(月)00:52:54 ID:GMGFHLIo[11]No.1080638411No.1080638411 ng+
現状loconの構造をするものは3つ存在している
・1つ目は旧locon kohakuBlueleaf氏作でlycorisに合併された奴
ネットワークモジュールはlocon.locon_kohya --network_args 'conv_dim=XXX' 'conv_alpha=XXX'
・2つ目はkohakuBlueleaf氏作のlycorisでアルゴリズムLoRAにした時のやつ
ネットワークモジュールはlycoris.kohya --network_args 'conv_dim=XXX' 'conv_alpha=XXX' 'algo=lora'
・3つ目はKohya氏がloconの有用性を確認したので取り入れたやつ
ネットワークモジュールはnetworks.lora --network_args 'conv_dim=XXX' 'conv_alpha=XXX'
1つ目と3つ目は構造はほぼ同じだけどマージするときは専用のマージスクリプトが必要
リサイズもかけられる
2つ目のが少し厄介で、判明したオプション 'disable_conv_cp=True' を指定しないと容量が少し減る恩恵があるけどリサイズが不可能になる
LoRA学習環境にLoConを導入する方法 
1つ目: 旧locon kohakuBlueleaf氏作でlycorisに合併された奴
https://github.com/KohakuBlueleaf/LyCORIS/tree/locon-archive
の中のloconフォルダだけsd-scriptsに突っ込む
次にこの部分↓を--network_module=networks.lora
こう↓ 書き換える--network_module=locon.locon_kohya
LoConで学習したLoRAデータを1111で画像生成に利用する方法 
- 🎴派、もしくはQuicksettings派の人
まずこの拡張機能を導入する。
https://github.com/KohakuBlueleaf/a1111-sd-webui-locon
そんで1111の🎴、もしくはQuicksettingsからLoRAのように呼び出す。 - Additional Networks
拡張機能派の人
2023/3/8のsd-webui-additional-networksアプデにより、LoConに対応した。
なのでsd-webui-additional-networksを更新して2023/3/8以降のバージョンにするだけで、LoRAのように画像生成に利用可能になる。 - フォルダ階層例や使い方は、
誘導→ 学習ファイルの使用方法
(IA)^3 
LyCORIS 0.1.5.dev1 より使えるようになったアルゴリズム。
- このアルゴリズムは、より高い lr を必要とします (約 5e-3~1e-2)。
- このアルゴリズムは素晴らしい学習様式ですが転用するのは困難です
- (学習に使用したモデルでしか妥当な結果を得られません。)
- このアルゴリズムは非常に小さなファイル (約 200 ~ 300 KB) を生成します。
- 実験的
https://mobile.twitter.com/t_zunko/status/1641779055413579776
にて公式アセットを配布している東北ずん子のデータを無加工で使いLoRAを制作してみた。
画像枚数61枚 リピート1回 エポック数36回 バッチ数1 (総ステップ数:2196) 学習レート:1e-2
dim=8 cov_dim=8 alpha=1 conv_alpha=1 min_snr_gamma=5 optimizer:AdamW8bit
今回の目的は IA3 LoRA 生成テストのため高画質を目指した設定の詰めを一切行っていない。
サンプル用プロンプト:
zunko, 1girl, solo, school uniform, hairband, black thighhighs, serafuku, green skirt, full body, zettai ryouiki , shoes, very long hair, green hair, long sleeves, outdoor,<lora:zunko_ia3_7th_anime_v3_A:1>
7th_anime_v3_Aをベースモデルにしたもの
anything-v4.5をベースモデルにしたもの
両方とも同じ方法で制作し、ベースモデルのみを変えた。ファイルサイズも同じく208KB。
LoKR 
LyCORIS 0.1.5.dev2 より使えるようになったアルゴリズム。
基礎となる部分はLoHaと同じで、下記が違う。
- このアルゴリズムはかなり敏感なので、lrをチューニングする必要があるかもしれません。
- このアルゴリズムは、キャラクターとスタイルの両方を学ぶことができます。サイズは小さいですが、転用するのは困難です。
- 比較的小さなファイル(900~2500KB)を生成します。
- 小さなファクターを使用すると、より大きなファイルが作成されます。2.5Mで十分でないと思われる場合は、調整することができます。
https://mobile.twitter.com/t_zunko/status/1641779055413579776
にて公式アセットを配布している東北ずん子のデータを無加工で使いLoRAを制作してみた。
画像枚数61枚 リピート1回 エポック数36回 バッチ数1 (総ステップ数:2196)
学習レート=1e-3 text_encoder_lr=1.5e-4 unet_lr=1.5e-3
dim=8 cov_dim=8 alpha=1 conv_alpha=1 min_snr_gamma=5 optimizer:AdamW8bit
今回の目的も LoKR の LoRA 生成テストのため高画質を目指した設定の詰めを一切行っていない。
生成に使用したプロンプト:
zunko, 1girl, solo, japanese clothes, muneate, tabi, hairband, very long hair, short kimono, full body, standing, green hair, tasuki, obi, outdoor,<lora:zunko_lokr:1>
私感:
顔はそれなりに学習出来ているものの、枝豆のヘアバンドの再現度が低く10枚出したうちの2、3枚程度しか形を再現できなかった。
胸当てもほとんど覚えることが出来ていない。など服装のフォルムが全体的に甘いようである。
この辺りはLoKR独自の学習率の調整が必要ということなのだろう。
ファイルサイズは 1.27MB。一般的なLora(144MB)の113分の1という小ささは凄い。
比較のためLoKRと同設定、同ステップ数で出力したLoHAの画像を添付します。
シード値とプロンプトも同一にしましたがLoRAが変わったことにより若干の変化が絵に生じてしまいました。
(↓のバッチは初期設定がLoHaになっていますので任意で生成するLoRAの形式に変更するようご注意下さい)
rem ----LoRA学習起動バッチ(6タイプ+dataset対応テスト版)------------------------------------------------------
rem 学習対象のフォルダ内に置いて使用する
rem 10_AAA, 5_BBBフォルダがある場所の一つ上
rem 動作確認環境はメモリ48GB、VRAM12GBのPCを使用しているため
rem パフォーマンスモニターでメモリの使用状況をみながら
rem 各設定を少なめの数値から初めて動作確認してください
rem 以下のデフォルト設定は使用メモリ22GB、VRAM7.8GBで動作しました
rem SD-Scripts 2023/4/19版対応
rem 2023/05/11更新
rem データセットファイルに対応
rem 2023/04/20更新
rem DyLoRA用パラメータ block_size に対応
rem LyCORISのドキュメント更新に合わせLoCon生成のパラメータを以下のように修正した
rem --network_args の algo を algo=lora から algo=locon に変更
rem 2023/04/12更新
rem DyLoRAアルゴリズムに仮対応
rem 2023/04/09更新
rem LoKRアルゴリズムに仮対応
rem 2023/04/05更新
rem IA3アルゴリズムに仮対応
rem 2023/04/04更新
rem ネットワークモジュールをオプションで切り替えられるように変更
rem optimaizerのtypeとargsをオプションで切り替えられるように変更
rem 今までのコマンドラインを直接書き換える方式よりは手軽なはず
rem 2023/03/29更新
rem --min_snr_gammaオプションを追加
rem 2023/03/24更新
rem Loha学習 暫定対応版(問題があったら修正してください)
rem --network_argsオプションを追加
rem --persistent_data_loader_workersオプションをついでに追加
rem 2023/02/23更新
rem オプティマイザー変更について追記
rem 2023/02/01更新
rem ファインチューン対応
rem 2023/01/31更新
rem --lr_scheduler_num_cyclesオプション対応
rem --lr_warmup_stepオプション対応
rem 2023/01/25更新
rem --network_alphaオプション対応
rem 2023/01/18更新
rem 個別学習レート対応
rem 2023/01/17更新
rem sd-scripts23/01/15版の新オプション使用(必要ならgit pullしてください)
rem 正則化対応
setlocal enabledelayedexpansion
rem ----ここから自分の環境に合わせて書き換える----------------------------------
rem sd-scriptsの場所
set sd_path="X:\stable-diffusion\sd-scripts"
rem 学習のベースモデルファイル
rem fp32よりもfp16の方が消費VRAMを抑えられるので推奨
set ckpt_file="X:\stable-diffusion\stable-diffusion-webui\models\Stable-diffusion\xxxx.ckpt"
rem 学習のベースVAE(必須ではないので使用しない場合は--vae=...の行を削除)
set vae_file="X:\stable-diffusion\stable-diffusion-webui\models\VAE\xxxx.vae.pt"
rem 学習画像フォルダ このフォルダ内に10_AAAなどのフォルダが入っていること
set image_path="X:\data\traning"
rem 正則化画像フォルダ(必須ではないので使用しない場合は reg_path="" とすること)
set reg_path=""
rem set reg_path="X:\data\reg"
rem メタデータjsonファイル(このファイルを指定するとファインチューン動作になり、json_file="" で従来のDBになる)
set json_file=""
rem set json_file="X:\data\marge_clean.json"
rem ファインチューンでのリピート数を指定 DBでのフォルダ名の数字は無視される
set ft_repeats=1
rem データセットファイル(json,toml形式)
rem(このファイルを指定するとデータセットモード動作になる。使用しない場合は""とすること)
set dataset_file=""
rem 学習結果の出力先
set output_path="X:\stable-diffusion\stable-diffusion-webui\extensions\sd-webui-additional-networks\models\lora"
rem 学習結果のファイル名
set file_prefix="last"
rem 学習パラメータ
set learning_rate=1e-3
rem 学習開始時にlearning_rateが指定値に到達するまでのステップ数 デフォルトは0
set lr_warmup=0
rem 個別の学習パラメータ デフォルトにしたい場合は全て上のlearning_rateと同じ値にする
set text_encoder_lr=1.5e-4
set unet_lr=1.5e-3
rem epoch数と何epochごとに保存するかの設定 1epoch=全フォルダの(画像数xループ数)の合計
set num_epochs=2
set save_every_n_epochs=1
rem スケジューラー 以下の文字列から選択: linear, cosine, cosine_with_restarts, polynomial, constant, constant_with_warmup
rem どれがベストかは要検証
set scheduler="cosine_with_restarts"
rem cosine_with_restartsのリスタート回数 デフォルトは1
set scheduler_option=1
rem 次元数 デフォルトは1 大きくすると学習能力が上がるが出力ファイルサイズが大きくなる
rem 推奨設定 LoRA:128程度 LoCon:64以下 LoHa:32以下
set network_dim=8
rem アンダーフローを防ぐための値 デフォルトは1
rem これによって計算結果がnetwork_alpha/network_dimとなって学習量が小さくなるため
rem learning_rateの方を大きくすることでバランスを取るといい
rem 推奨設定 LoRA:network_dimの半分 LoCon:1かそれ以下0.3がお薦め LoHa:1かそれ以下
set network_alpha=1
set clip_skip=2
set seed=23
rem LoRA学習アルゴリズム指定
rem いずれかをコメントアウトして使用
rem 通常のLoRAなら networks.lora を有効化
rem LoCon、LoHa、IA3なら lycoris.kohya を有効化
rem set net_module=networks.lora
set net_module=lycoris.kohya
rem LyCORIS(LoCon,LoHa)用追加オプション
rem 上記の network_dim, network_alpha と合わせて設定するよう注意
rem 公式推奨値
rem LoConはdim=64以下、alpha=1~0.3
rem LoHaはdim=32以下、alpha=1以下
rem dropoutに関しては "LoHa doesn't support dropout yet." とのこと
set dim_for_conv=8
set alpha_for_conv=1
set dropout_rate=0.2
rem DyLoRA用で追加されたオプション
rem 下位ランクの複数同時学習の重みを1ステップごとに変える仕様のため低ステップ学習を行う場合は
rem 設定値を大きくして変化量を増やす必要がある…とのこと(よくわかってない)
rem デフォルト設定値は0
rem …のはずなのにそう設定するとエラーになるし、ソースを見ると1が初期値になっている
rem とりあえず今は block_size=8 ということにしておいて後々修正します
set block_size_dylora=8
rem 出力するLoRAについてのパラメータ指定
rem LoRAアルゴリズムで lycoris.kohya を指定した場合
rem LoHaを出力する場合は最上段のオプション(algo=loha)を有効化
rem LoConを出力する場合は上から2段目のオプション(algo=locon)を有効化
rem IA3を出力する場合は上から3段目のオプション(algo=ia3)を有効化
rem LoKRを出力する場合は上から4段目のオプションを(algo=lokr)を有効化
rem DyLoRAを出力する場合は上から5段目のオプション(algo=dylora)を有効化
rem network.lora で旧来のLoRAを出力する場合は最下段のオプションを有効化する
rem --以下1つのみコメントアウト--
set net_args= "algo=loha" "conv_dim=%dim_for_conv%" "conv_alpha=%alpha_for_conv%" "dropout=%dropout_rate%"
rem set net_args= "algo=locon" "conv_dim=%dim_for_conv%" "conv_alpha=%alpha_for_conv%" "dropout=%dropout_rate%"
rem set net_args= "algo=ia3" "conv_dim=%dim_for_conv%" "conv_alpha=%alpha_for_conv%" "dropout=%dropout_rate%"
rem set net_args= "algo=lokr" "conv_dim=%dim_for_conv%" "conv_alpha=%alpha_for_conv%" "dropout=%dropout_rate%"
rem set net_args= "algo=dylora" "conv_dim=%dim_for_conv%" "conv_alpha=%alpha_for_conv%" "dropout=%dropout_rate%" "block_size=%block_size_dylora%"
rem set net_args=
rem *** IA3 アルゴリズムの注意 ***
rem *** ある程度の時期が経ったらこの文章は削除して下さい ***
rem (IA)^3
rem This algo need much higher lr (about 5e-3~1e-2)
rem This algo is good at learning style, but hard to transfer(You can only get reasonable result on the model you trained on).
rem This algo produce very tiny file(about 200~300KB)
rem Experimental
rem (日本語訳)
rem このアルゴリズムは、より高い lr を必要とします (約 5e-3~1e-2)。
rem このアルゴリズムは素晴らしい学習スタイルですが転用するのは困難です
rem (学習に使用したモデルでしか妥当な結果を得られません。)
rem このアルゴリズムは非常に小さなファイル (約 200 ~ 300 KB) を生成します。
rem 実験的
rem オプティマイザーのタイプ変更
rem Adam,AdamW8bit,Lion,SGDNesterov,SGDNesterov8bit,DAdaptation,AdaFactor
rem の中から指定できる
set opti_type="AdamW8bit"
rem 以下の設定は optimizer_args のオプション指定
rem いずれかのひとつだけremを外して有効化するよう注意
rem オプション無指定
rem Adam,AdamW8bitのように追加オプション指定が不要の場合に有効化
rem 不安になる表記だがこれであっている
set opti_args=
rem DAdaptation用のオプション
rem テキストエンコーダとU-Netの学習比率を0.0から1.0の範囲で変えられる
rem 下の記述はテキストエンコーダの学習レートをU-Netの半分の値にして学習するという意味
rem set opti_args= --text_encoder_lr=0.5 --unet_lr=1.0
rem AdaFactor用オプション
rem 上側は学習レートの自動調整を有効にしたオプション。下側は無効にしたオプション
rem set opti_args= "relative_step=True" "scale_parameter=True" "warmup_init=False"
rem set opti_args= "relative_step=False" --lr_scheduler="constant_with_warmup" --max_grad_norm=0.0
rem =========================================================================
rem VRAMなど環境に影響されるパラメーター 余裕があれば増やすと速度や精度が改善
rem CPUスレッド数 CPUのコア数がいいらしい
rem 増やすと生成速度が上がる代わりにメインメモリの消費が増えるので
rem メモリ32GBの人はCPUのコア数よりも減らした方が安定するかも
set cpu_thread=4
rem データローダーのワーカー数
rem デフォルトは8、減らすとメインメモリの使用量が減り、学習時間が増加
set workers=4
rem バッチサイズ: 増やすと計算が早く終わるがVRAM消費が増える
set train_batch_size=1
rem 学習素材の解像度: 大きくすると細部まで学習するが消費VRAMが増える
rem VRAM12GBなら768くらいまで増やせる
set resolution=512,512
rem 最小、最大バケットサイズ: 画像が正方形でなくてもresolutionの面積を超えない範囲で
rem 縦長、横長の画像も扱えるのでresolutionを増やしたらmax_bucketも合わせて増やすといい
set min_bucket=320
set max_bucket=1024
rem 学習の改善に有効?
rem 詳細はsd-scriptsのgithubを参照
rem 推奨値は5
set min_snr_gamma=5
rem =========================================================================
rem ----書き換えここまで--------------------------------------------------------
set train_mode=""
if %dataset_file%=="" (
rem データセットファイルの有無を確認。なければjsonファイルの存在チェック
if %json_file%=="" (
rem DBモード
if %reg_path%=="" (
set train_mode=--train_data_dir=%image_path%
) else (
set train_mode=--train_data_dir=%image_path% --reg_data_dir=%reg_path%
)
) else (
rem ファインチューンモード
set train_mode=--train_data_dir=%image_path% --in_json=%json_file% --dataset_repeats=%ft_repeats%
)
) else (
rem データセットモード
set train_mode=--dataset_config=%dataset_file%
)
rem 学習実行
cd /d %sd_path%
call venv\Scripts\activate.bat & call :main & pause & exit
:main
accelerate launch --num_cpu_threads_per_process %cpu_thread% train_network.py ^
--network_module=%net_module% ^
--pretrained_model_name_or_path=%ckpt_file% ^
%train_mode% ^
--output_dir=%output_path% ^
--caption_extension=".txt" ^
--shuffle_caption ^
--prior_loss_weight=1 ^
--resolution=%resolution% ^
--enable_bucket ^
--bucket_no_upscale ^
--min_bucket_reso=%min_bucket% ^
--max_bucket_reso=%max_bucket% ^
--train_batch_size=%train_batch_size% ^
--learning_rate=%learning_rate% ^
--lr_warmup_steps=%lr_warmup% ^
--text_encoder_lr=%text_encoder_lr% ^
--unet_lr=%unet_lr% ^
--max_train_epochs=%num_epochs% ^
--mixed_precision="fp16" ^
--save_precision="fp16" ^
--xformers ^
--persistent_data_loader_workers ^
--max_data_loader_n_workers=%workers% ^
--save_every_n_epochs=%save_every_n_epochs% ^
--save_model_as=safetensors ^
--output_name=%file_prefix% ^
--clip_skip=%clip_skip% ^
--seed=%seed% ^
--network_dim=%network_dim% ^
--network_alpha=%network_alpha% ^
--network_args %net_args% ^
--max_token_length=150 ^
--cache_latents ^
--lr_scheduler=%scheduler% ^
--lr_scheduler_num_cycles=%scheduler_option% ^
--vae=%vae_file% ^
--optimizer_type=%opti_type% ^
--optimizer_args %opti_args% ^
--min_snr_gamma=%min_snr_gamma%
exit /b
rem ※オプションの追加、削除時は^記号に注意
rem 最後の行には^は付けずにそれ以外は ^(半角スペースと^)を付ける
rem その他よく使いそうな追加オプション
rem --keep_tokens=数値
rem トークンのシャッフルを有効にした際にシャッフルから除外するトークン
rem 公式によればトークン数はカンマで区切られた1ワード単位(usada,hikaruなら2トークン)
rem webuiのトークンの概念とは異なるようなので注意(webuiではusadaはusa daと分けられて2トークン)
rem --no_metadata
rem メタデータを記録しない
rem --training_comment=""
rem コメントを埋め込む
rem --network_weights="X:\stable-diffusion\stable-diffusion-webui\models\lora\xxxx.safetensors"
rem 追加学習させる学習データをフルパスで指定する
rem --weighted_captions
rem (abc)や[abc]や(abc:1.3)など重み付けしたキャプションによる学習に対応させる
rem 使用するベースモデルによっては警告文が表示されるので注意
DyLORA 
2023年4月に導入した新しいアルゴリズム。
Unitを指定できて、同時に複数のパターンを学習しあとから抜粋することが可能。
さらに学習後複数のDimに分割したLoRAを作成できる。
例 Dim32 Unit 4 の場合 分割は(4,8,12,16,20,24,28,32)になる。
よってUnit数は低ければ低いほどその分の効果向上が期待できると予測。
が、同時に1stepの所要時間もそれに応じて倍増してしまう。
TIPS 
体験談等随時募集中
学習、検証結果 
学習や検証を行った際の結果やTIPSを記載します。
- LoConとLoHaの推奨設定
CORISのREADMEにある推奨設定でLoConとLoHaを比較した際の結果。- マシンスペック
CPU:i7-12800HX
RAM:DDR5-4800 64GB
GPU:RTX3070ti 8GB - 共通設定
総step数2100
教師画像30枚、正則化なし、繰り返し=1、バッチ=1、epoch=70、clip_skip=2
resolution=768,768、min_bucket=320、max_bucket=1472
thread=1、workers=8
オプティマイザー adafactor、relative_step=True、scale_parameter=True、warmup_init=False
lrは未指定
タグはtaggerで付けて、キャラ名や作品名、重複しているものを排除 - LoCon
network_dim=64、network_alpha=0.3
conv_dim=64、conv_alpha=0.3 - LoHa
network_dim=32、network_alpha=1
conv_dim=32、conv_alpha=1
LoHaはキャラの顔学習だけなら600stepくらいでも良さそう。
学習時間はVRAMが8Gと少ないのでどちらも3~4時間くらい。
VRAM LoHaは学習中残り300Mくらい、LoConは600Mくらいで推移。 - マシンスペック
- LoHaの使用感
LoHaはdim=8の学習で服装やキャラを充分再現できる筆者が学習に使用している設定
- 教師画像50~200枚、正則化なし、バッチ=1、clip_skip=2
- r-esolution=768,768、min_bucket=320、max_bucket=1472
※小さい画像は拡大した - オプティマイザー adafactor、relative_step=True、scale_parameter=True、warmup_init=False
- lrは未指定
- タグはtaggerで付けてキャラ名や作品名、重複しているものを排除
- network_dim=8、network_alpha=1
- conv_dim=8、conv_alpha=1
- epochは20固定で繰り返しで1epochが200~300stepになるように調整
- 1枚のイラストからコピー機学習
1枚のイラストからコピー機学習でLoRA(LoHa)を作成した際の記録。- 顔の学習
最初はベースとなるイラストから顔部分を切り取ってi2iで表情差分を数枚作成する。
作成した顔イラストで学習を行う。
dimは32で過学習になるかならないかくらいのステップ数とする。 - 胸から上の学習
顔を学習させたLoRAを使用して胸から上くらいのイラストを数枚生成する。
これも表情、服装、ポーズ、構図の差分を数枚作成する。
いきなり全身を出力させようとすると顔の書き込みが著しく下がったため、
まずは胸から上を学習させた。
生成したイラストを追加して再度学習を行う。 - 全身の学習
胸から上LoRAを使用して全身のイラストを数枚生成する。
生成したイラストを追加して学習を行って完成。
LoHaの場合、ここでdimは8や16に下げたほうが良い。
- 顔の学習
- Lycorisのアルゴリズムにおけるマージ可否の比較表(2023/4/9)
395 無念 Name としあき 23/04/09(日)05:21:09 ID:d4xtadB6 No.1084932402 del そうだねx2
Lycorisのマージの話が上であったから現状のLycorisのアルゴリズムまとめlora/locon マージ可 lora/locon use_conv_cp=True指定 マージ可 loha マージ可 loha use_conv_cp=True指定 不可 ia3 不可 lokr 不可 lokr use_conv_cp=True指定 不可 補足
use_conv_cp=True時に作られるものはlora用の層が一つ追加された構造変更が入ってる
現在のデフォはuse_conv_cp=False
コメント 
(Tips)
神としか言いようがない -- sabu? 2023-03-27 (月) 22:33:56
DyLoRAは複数のDimを同時に学習できる仕組み、これにより学習後複数のDimに分割したLoRAを作成できる 例 Dim32 Unit 4 の場合 分割は(4,8,12,16,20,24,28,32)になる。使い方としては適正Dimを探るときの時間短縮か? -- 2023-04-21 (金) 04:29:35
なのでUnitはDimを割り切れる数字で指定しないといけない、1stepで1層しか学習できないので通常のLoRAよりは学習に時間がかかる。 -- 2023-04-21 (金) 05:06:25