いろいろLoRA作成記録
概要
LoRAの作成記録とか検証とか
原神LoRA検証に書き足すのは限界があるので、原神キャラ再現以外を記録する。というかあっちはもう更新するつもりはない。
参考程度に。
注意
NSFW画像があるので閲覧注意。
このメモはあくまでも一例です。このメモだけで結論を出すべきではありません。ほかの情報も参考にしてください。
学習について
特に記載がない限り、AdamW,512x512,animefull,キャプションシャッフル,トークン保持1、正則化無しで学習している。
キャプションについて
WD14Tagger(convnext-v2)を用いてDanbooruタグ方式で作成。
プロンプトの応答性を改善するために意味が重複・矛盾するタグは削除する。
また、重複する単語を含むタグは別の文字に変更する。
キャラクター
アロナ
いつもの設定で学習。
画像は64枚、繰り返し数は8。
Image | Prompt | Description |
---|---|---|
![]() |
<lora:arona:1>1girl, arona (blue archive), school uniform, serafuku, upper body | やや不安定。 |
![]() |
<lora:arona_v2:1>1girl, arona (blue archive), school uniform, serafuku, upper body | 4epoch(4000steps)回した。やっぱり不安定。 |
![]() |
<lora:arona_v3:1>1girl, arona (blue archive), school uniform, serafuku, upper body | 原因はタグだった。誤検出と集約忘れのタグを消したら改善した。 |
教師画像が足りないのも原因だった。
アズサ(AdamW vs DAdaptLion)
4096Steps、Dim64Alpha16,Conv2d拡張有効(C3Lier)、AdamWのLRは0.0001。教師画像64枚でWD14Taggerでキャプション作成。
DAdaptLionの設定: --optimizer_args "betas=0.9,0.999" "weight_decay=0" "d0=1e-06"
dwがAdamWでdlがDAdaptLion。
袖の再現度が上がった。
ハルカ(AdamW vs DAdaptLion)
4096Steps、Dim64Alpha16,Conv2d拡張有効(C3Lier)、AdamWのLRは0.0001。教師画像64枚でWD14Taggerでキャプション作成。
DAdaptLionの設定: --optimizer_args "betas=0.9,0.999" "weight_decay=0" "d0=1e-06"
衣装の再現度が良くなった。
アル(AdamW vs DAdaptLion)
4508Steps、Dim64Alpha16,Conv2d拡張有効(C3Lier)、AdamWのLRは0.0001、解像度は768。教師画像161枚でWD14Taggerでキャプション作成。
DAdaptLionの設定: --optimizer_args "betas=0.9,0.999" "weight_decay=0" "d0=1e-06"
v7がAdamWでv7_dlがDAdaptLion。
衣装の再現度が良くなった気がする。
AdamWとDAdaptLionのstepごとの変化
3000stepsで突然背景が変化した。
AdamWは3000から、DAdaptLionは2000から再現できている。
DAdaptLionにしたら少し再現度が上がる。ただしCPUボトルネックがかなり出やすいのか、CPUの1スレッド使い切ってGPU消費電力がフラフラする。
DAdaptLion vs Prodigy
DAdaptLionとProdigyの設定: learning_rate 1 --optimizer_args "betas=0.9,0.999" "weight_decay=0" "d0=1e-06"
v12がDAdaptLionでv12pがProdigy
大体4000steps回した。
ん?
dlがDAdaptLionでpdがProdigy
大体5000steps回した。
えーっと、何が変わったのか、分かりません
steps数ごとの変化
prodigyは学習が速いっていう人いるけどむしろ遅いような・・・設定の問題なのかな?
ProdigyはDyLoRAを使わないならあまり意味はなさそう。
キャラは層別でOUT03-06だけでいいかも
見ての通り、再現度が一切変わらない。
ほとんどのキャラは問題ないが、目の再現度が低下する場合がある(アロナで確認)。その場合はIN04-07を有効にするといい。
学習速度上昇、VRAM消費削減、ファイルサイズ削減できるのでおすすめ!
DAdaptation系の注意
- LRは1を強く推奨。
- 一部のDAdaptation系OptimizerはUNetとTEのLRを個別に設定できない。
- 一部のDAdaptation系Optimizerは層別学習率で0と1以外は設定できない。
その他
ノノミを画像23枚、Dim64Alpha32で学習したらHighres時に崩れやすかったり衣装が不自然だったりしたのでAlpha16で学習したら改善した。
画像の枚数が少ないときはAlpha下げたほうがよさそう。
LBWでNIN(IN無効化)使っても再現度はほとんど変わらないので、学習時にINとMIDを切ってもいい。多くのキャラが再現度そのまま画風などの悪影響を減らせる。
ただしすべてのキャラで再現度が維持できるわけではない。ハナコで試したら目の周りが不安定になった。
小物類
M4 Carbine
Conv2dオンのLoRA,Dim64/Alpha1で学習。stepsは大体9000。教師画像は94枚、繰り返し数は8。
aimingとaiming at viewerで単語が被って生成時に両者の特徴が混ざってしまうのでaiming at viewerをaavに変更。
Image | Prompt | Description |
---|---|---|
![]() |
<lora:m4_carbine:1>1girl, m4 carbine, holding gun | 相変わらず武器はへたくそ。 画風が変わった。 |
![]() |
<lora:m4_carbine:0.8:NCNF>1girl, m4 carbine, holding gun | 強度を下げてLBW有効化。ちょっと良くなった。 |
![]() |
<lora:m4_carbine:1><lora:aru:1>1girl, aru (blue archive), m4 carbine, holding gun | キャラLoRAと併用する。汚くなった。 |
![]() |
<lora:m4_carbine:0.8><lora:aru:1>1girl, aru (blue archive), m4 carbine, holding gun | 強度を下げるが効果なし。 |
![]() |
<lora:m4_carbine:0.8:NCNF><lora:aru:1>1girl, aru (blue archive), m4 carbine, holding gun | 顔とキャラ周りの層を切ったら改善した。 |
9000step回してようやく反応するようになったが、aiming周りが怪しいのでもっと回す必要あり?
追記:16000steps回してもダメだった。多分SD1.Xの限界。XLに期待。
まとめ
手に持つ小物類もかなり回さないと反応しないようだ。
複数のLoRAを使用した時に汚くなる場合は、LoRA Block Weightを使うと良い。
構図・シチュエーション
驚いた時の「^^^」
networks.lora, Dim32/Alpha2(Conv2d拡張オン、convも同じ値)で学習。教師画像は64枚、繰り返し数は8。
Image | Prompt | Description |
---|---|---|
![]() |
<lora:SurprisedEffect6K:1>1girl, ^^^, surprised | 6000程度では効果が薄い |
![]() |
<lora:SurprisedEffect12K:1>1girl, ^^^, surprised | 12000steps回したら効き目が出た。画風への影響は小さい。 |
![]() |
<lora:SurprisedEffect12K:1><lora:aru:1>1girl, aru (blue archive), ^^^, surprised | キャラLoRAと併用。相性はキャラLoRAによって異なる。 |
パイズリ
NAI含めてほとんどのモデルがパイズリをせずに挿入してしまうので作成した。
networks.lora, Dim64/Alpha16(Conv2d拡張オン、convも同じ値)で学習。教師画像は64枚、繰り返し数は8。
9000stepsでも結果が出るが、キャラLoRAと組み合わせたとたんに何もしなくなるので12288steps回した。
Image | Prompt | Description |
---|---|---|
![]() |
<lora:BetterPaizuri:1>1girl, paizuri, penis, nude | 画風の影響は控え目 |
![]() |
<lora:BetterPaizuri:1><lora:mika_n:1>1girl, paizuri, penis, nude, mika (blue archive), ejaculation, cum on breasts | キャラLoRAと併用。少し相性が悪い。 |
![]() |
<lora:BetterPaizuri:1:NCNF><lora:mika_n:1>1girl, paizuri, penis, nude, mika (blue archive), ejaculation, cum on breasts | LBWでNCNF(塗りと顔の層を無効化)を適用で改善。 |
フェラ打率アップ
lycoris_kohya, algo=lora, Dim64/Alpha16(convも同じ値)で学習。教師画像は116枚、繰り返し数は4。
8000ステップ程度ではプロンプトの応答性が悪いので、14000ステップ回した。
- Promptについて
shallowthroatで先舐め、middlethroatで真ん中まで、deepthroatで根本までしゃぶる。licking penisで竿舐め。
nutslickingで玉舐めするはずだが、画像が少な過ぎて反応しない。
Image | Prompt | Description |
---|---|---|
![]() |
<lora:fellatio3:1>1girl, fellatio, penis, shallowthroat | 若干画風が変化してる。 |
![]() |
<lora:fellatio3:1>1girl, fellatio, penis, middlethroat | Good |
![]() |
<lora:fellatio3:1>1girl, fellatio, penis, deepthroat | いうほどDeepか? |
![]() |
<lora:fellatio3:1>1girl, fellatio, penis, licking penis | 問題なし |
![]() |
<lora:fellatio3:1><lora:yuuka:1>1girl, yuuka (blue archive), fellatio, penis, deepthroat, pov | キャラLoRAと併用。問題なし。 |
14Kステップでも反応が悪い気がする。もっと回すべき?
ラーメン
なぜかAIはラーメンをてづかみで食べるものと思っているので、指導してやった。
lycoris_kohya, algo=lora, Dim32/Alpha8(convも同じ値)で学習。教師画像は139枚、繰り返し数は4。6400steps回した。
正則化画像は透明240枚。
Image | Prompt | Description |
---|---|---|
![]() |
1girl, ramen, chopsticks, eating | LoRA無し。右手に持ってる箸は何のためにあるのか |
![]() |
<lora:ramen_v1.1:1>1girl, ramen, chopsticks, eating | 問題解決。画風の影響も小さい。 |
![]() |
<lora:ramen_v1.1:1><lora:aru:1>1girl, aru (blue archive), ramen, chopsticks, eating | キャラLoRAと併用。問題なし。 |
驚いた時の白目
networks.lora, Dim32/Alpha1(Conv2d拡張オン、convも同じ値)で学習。教師画像は45枚、繰り返し数は10。
warmup_stepsは未指定。
Image | Prompt | Description |
---|---|---|
![]() |
<lora:SurprisedBlankEyes:1>1girl, blank eyes, surprised | Good |
![]() |
<lora:SurprisedBlankEyes:1>1girl, blank eyes, blonde hair, surprised, school uniform, 4koma | 謎の4コマ |
![]() |
<lora:SurprisedBlankEyes:1><lora:aru:1>1girl, aru (blue archive), blank eyes, surprised | キャラLoRAと併用。問題なし。 |
![]() |
<lora:SurprisedBlankEyes4:1><lora:aru:1>1girl, aru (blue archive), blank eyes, surprised, explosion, standing | Dim16にして8100steps回した。白目にならない確率が下がって、プロンプトの応答性とHighres時の安定性が改善した。ファイルサイズ的にもこっちでいいかな |
まとめ
シチュエーションはかなり回さないとプロンプトに反応しない。
目安として9000steps以上。
Dimは32-16でよさそう。
背景
桜(写真)
networks.lora, Dim32/Alpha8(convも同じ値)で学習。教師画像は48枚、繰り返し数は10。3840steps回した。
正則化画像は透明16枚。
Image | Prompt | Description |
---|---|---|
![]() |
<lora:SakuraScenery_v1.25:1>1girl, cherry blossoms | ド派手なピンク色の桜が上品な色になった。キャラの画風が若干変化した。 |
![]() |
<lora:SakuraScenery_v1.25:1>1girl, cherry blossoms | Dim16Alpha8 |
![]() |
<lora:SakuraScenery_v1.3:1:NCNF>1girl, cherry blossoms | LBWでキャラ周りをオフにした。キャラへの影響が減ったが、桜の色が濃くなった。 |
![]() |
<lora:SakuraScenery_v1.25:1><lora:arona_v4:1>1girl, arona (blue archive), cherry blossoms | キャラLoRAと併用。アロナとの相性が悪いのか、髪色が安定しない。 |
![]() |
<lora:SakuraScenery_v1.3:1><lora:arona_v4:1>1girl, arona (blue archive), cherry blossoms | Dim16Alpha8。アロナとの相性が悪いのか、髪色が安定しない。 |
竹富島
networks.lora, Dim32/Alpha8(convも同じ値)で学習。教師画像は52枚、繰り返し数は8。5824steps回した。
正則化画像よる変化
透明正則化画像16枚使用。
ngとついてるのが正則化画像なし。数字はステップ数。
正則化無しのほうが人物の出現率が高く、汚くなりにくい。
正則化画像よる変化
教師画像に犬が写った写真が1枚あるが、これにdogのタグはつけてない。
5824_ngは水牛車にanimalとcow、犬にanimalとdogをつけた。
5824_ngだけ動物が出現してない。やはりタグ付けは重要。
また、画像内の人物関連のタグは消してはいけない。キャラLoRAとの相性が大幅に悪化する。
Conv2d拡張(LoCon)は過学習に似た結果になることがあるようで、通常のLoRAのほうがいいときもある。
まとめ
背景は低dimで5000steps以下でできるので簡単。dim32以下でよいと思われる。
キャラの出現率が低下するが、強度を下げるかLoRA Block Weightを使用することで改善できる。
画風
ねんどろいど
networks.lora, Dim64/Alpha32(convも同じ値)で学習。教師画像は108枚、繰り返し数は5。4088steps回した。
正則化画像は透明240枚。
Image | Prompt | Description |
---|---|---|
![]() |
<lora:nendoroid_v1.1:1>1girl, nendoroid | いけるやん |
![]() |
<lora:nendoroid_v1.1:1>1girl, nendoroid, red hair, bangs, kimono, forest | いけるやん(背景は変化しないが) |
![]() |
<lora:nendoroid_v1.1:1><lora:hifumi:1>1girl, nendoroid, hifumi (blue archive), serafuku | キャラLoRAと併用。問題なし。 |
まとめ?
塗りだけを変化させるLoRAならunetだけの学習でいいかもしれない。TextEncoderを切ると構図の影響がなくなる。
UNet=塗りなどの言語化できない概念への影響大。TextEncoder=単語と画像の特徴を紐づけるもの。構図への影響大。
検証
512,768,1024の違い
原神LoRAメモでは効果が無かったので、別のキャラで再度学習時の解像度による再現性の変化を検証。
コマンドは自作のGUIで生成。解像度と省メモリ設定(gradient_checkpointing, mem_eff_atten)以外は共通。
教師画像は64枚、正則化は透明240枚
Step数は4096
accelerate launch --num_cpu_threads_per_process 16 train_network.py --pretrained_model_name_or_path="G:\sd_train\Train\nai_full.ckpt" --train_data_dir="G:\sd_train\Train\shiroko\train" --output_dir="G:\sd_train\Train\shiroko\out" --reg_data_dir="G:\sd_train\Train\Lora_RegImageA240" --network_module=lycoris.kohya --network_args "algo=lora" "conv_dim=64" "conv_alpha=32" --mem_eff_attn --gradient_checkpointing --persistent_data_loader_workers --color_aug --enable_bucket --save_model_as="safetensors" --lr_scheduler_num_cycles=4 --mixed_precision=fp16 --learning_rate=0.0001 --resolution=1024,1024 --train_batch_size=1 --max_train_epochs=4 --network_dim=64 --network_alpha=32 --shuffle_caption --keep_tokens=1 --optimizer_type="AdamW8bit" --lr_warmup_steps=100 --output_name="shiroko_1024" --clip_skip=2 --seed=42 --save_precision="fp16" --lr_scheduler=cosine_with_restarts --min_bucket_reso=320 --max_bucket_reso=2048 --caption_extension=".txt"
画像を右クリックで別ウィンドウで開くと見やすい。
生成解像度 | Prompt | Image | Description |
---|---|---|---|
512x512 | <lora:shiroko_512:1>1girl, shiroko (blue archive), school uniform, id card, gloves, blue necktie | ![]() |
よくなったよね? |
768x768 | 〃 | ![]() |
|
1024x1024 | 〃 | ![]() |
|
512x768 | <lora:shiroko_512:1>1girl, shiroko (blue archive), school uniform, id card, gloves, blue necktie, cityscape, looking at viewer | ![]() |
512でもたまに出る |
↑のHighes.fix(2倍) | 〃 | ![]() |
1024が最も再現度が高い |
512x768 | <lora:shiroko_512:1>1girl, shiroko (blue archive), school uniform, (id card:1.1), gloves, blue necktie, city | ![]() |
1024は安定して三角形が出る。ABYDOSの文字と太陽までは出ない |
1024はid cardのアビドスの模様が最も正確に出ている。
768でもある程度再現できた。512はほとんど溶けてしまった。
まとめ
1024pxで精細な模様の再現性が向上する可能性がある。ただし、かえって品質が低下する場合があるので注意。
前回の検証では効果が出なかったのは文字などの複雑な模様がなかったのが原因かもしれない。
つまり、対象の特徴が単純だと効果が低いかも。
タグについて
キャラ
Additional Tagsで先頭にキャラ名を追加する。Keep tokenは1。
タグを消す理由
キャラを召喚するのにblonde hair, bangs, blue eyes....
みたいにいちいち特徴の単語を入力するのは面倒くさい。
そこで、特徴の単語を1つにまとめることで1単語で召喚できるようにする。
なお、残したタグは個別に覚えるので脱がせたり部分的にアレンジしたりするといったことができるはず。
1girlは消さないほうがいいかも?消すと生成時に1girlと指定しても2girlsになったりする場合あり。
消すべきタグ
- 身体的特徴のタグ
キャラを1プロンプトで召喚したいのでその類のタグは消す。消すことでそれらの特徴を先頭の1タグで覚える。 - 抽象的なタグ(例:virtual youtuber,highres)
どの画像につくかわからないタグはどうせ覚えないから不要。 - 誤検出タグ
モデルの記憶と混ざって意図しないものが出てくるかもしれない。
例
上の画像には次のタグがつけられた。
kayoko (blue archive), 1girl, solo, multicolored hair, black hair, horns, hood, white hair, halo, sitting, skirt, bag, hoodie, two-tone hair, red eyes, blush, long sleeves, black hoodie, red skirt, ponytail, bangs, looking at viewer, closed mouth, miniskirt, collarbone, hair between eyes, feet out of frame, plaid skirt, pleated skirt, sidelocks, hood down, hand up, mole on neck, medium hair, backpack, clothes writing, plaid
この画像から、次のタグを削除する。するとそれらのタグがkayoko (blue archive)
に集約される。
white_hair,horns,black_hair,halo,red_eyes,ponytail,two-tone_hair,bangs,long_hair,hair_between_eyes,wings,sidelocks,blush,multicolored_hair,halo
構図・シチュエーション
Additional Tagsで先頭に構図・シチュエーション名を追加する。Keep tokenは1。
消すべきタグ
- 抽象的なタグ(例:virtual youtuber,highres)
どの画像につくかわからないタグはどうせ覚えないから不要。 - キャラ名
生成時に特定のキャラ名を入れると特定の教師画像の影響が強く出る。 - 誤検出タグ
モデルの記憶と混ざって意図しないものが出てくるかもしれない。
例
上の画像には次のタグがつけられた。
paizuri, 1girl, breasts, nonomi (blue archive), 1boy, nipples, hetero, penis, censored, nude, green eyes, blush, long hair, bar censor, completely nude, large breasts, open mouth, looking at viewer, smile, dark-skinned male, halo, solo focus, ass, bangs, male pubic hair, indoors, collarbone, pubic hair, grey hair, dark skin, window, :d, hair bun, huge breasts
この画像から、次のタグを削除する。
nonomi_(blue_archive)
画風
キャラなどを覚えるわけではないのでkeep tokenは0。なおShuffle captionは有効。
消すべきタグ
無し。すべてそのままでいい。
オブジェクト(持ち物)
消すべきタグ
- 意味が矛盾、重複するタグ(例:gun,weapon,assault rifle)
そのままにしておくと複数の概念が混ざり、持ち方を変えるといったことができなくなる。 - 抽象的なタグ(例:virtual youtuber,highres)
どの画像につくかわからないタグはどうせ覚えないから不要。 - キャラ名
生成時に特定のキャラ名を入れると特定の教師画像の影響が強く出る。 - 誤検出タグ
モデルの記憶と混ざって意図しないものが出てくるかもしれない。あるいは既存タグが学習対象で汚染されるともいえる。
正則化画像の検証
正則化画像の種類でどう変化するか検証。4つのパターンで検証。
- 正則化無し
- Booruサイトの画像64枚
適当に64枚集めた画像 - NAIの画像64枚
1girlだけで64枚生成したもの - 透明64枚
教師画像は128枚。繰り返しは4(1ep=512steps)。総step数は4096(Batch1相当)。学習に用いたモデルはNAI。正則化画像のkeep tokenは0に設定。
コマンド:
accelerate launch --num_cpu_threads_per_process 16 train_network.py --pretrained_model_name_or_path="D:\sd_train\Train\nai_full.ckpt" --train_data_dir="D:\sd_train\Train\mika\train" --output_dir="D:\sd_train\Train\mika\out" --network_module="networks.lora" --network_args "conv_dim=64" "conv_alpha=28" --xformers --color_aug --persistent_data_loader_workers --max_data_loader_n_workers=1 --enable_bucket --save_model_as="safetensors" --lr_scheduler_num_cycles=4 --mixed_precision="fp16" --learning_rate=0.0001 --resolution=512,512 --train_batch_size=2 --max_train_epochs=8 --network_dim=64 --network_alpha=28 --shuffle_caption --keep_tokens=1 --optimizer_type="AdamW" --lr_warmup_steps=500 --output_name="mika_noreg" --clip_skip=2 --seed=42 --save_precision="fp16" --lr_scheduler="cosine_with_restarts" --min_bucket_reso=320 --max_bucket_reso=1536 --caption_extension=".txt"
比較
noregが正則化無し、booru64がbooruサイトの画像64枚、nai64がNAI64枚、trans64が透明64枚。
Prompt: <lora:mika_noreg:1>1girl, mika \(blue archive\), white capelet
Negative Prompt(共通): lowres, bad anatomy, signature
使用モデル: NAI(fp16,pruned)
使用モデル: 自家製闇鍋マージモデル(NAI+Any4.5 MBW=BaseA, BaseA+Counterfeit2.5 MBW=BaseB, BaseB+NostalgiaClear MBW=完成品)
booru64は衣装の再現度が低下した。nai64は全体的に粗くなった。透明64はよくわからない。
Prompt: <lora:mika_noreg:1>1girl, mika \(blue archive\), town
使用モデル: 自家製闇鍋マージモデル
booru64は衣装の再現度が低下した。nai64は全体的に粗くなった。透明64はよくわからない。
Prompt:<lora:mika_noreg:1>1girl, mika \(blue archive\), in the school classroom
使用モデル: 自家製闇鍋マージモデル
nai64以外で大きな違いはない。
Prompt:<lora:mika_noreg:1>1girl, mika \(blue archive\), snowy forest, coat
使用モデル: 自家製闇鍋マージモデル
nai64とbooru64はタグを集約しなかった部分(衣装)がいい感じに変化する。
Prompt:<lora:mika_noreg:1>1girl, mika \(blue archive\), white capelet, night view
Negative Prompt: lowres, bad anatomy, signature, cape
white capeletと衣装を指定したらすべていい感じに再現した。
ネガのcapeは岬のcapeが出ないようにするためのもの。
まとめ
- 透明画像は無意味。 あとStable Diffusionはアルファ値は使用しない。そりゃ情報の無い画像を渡しても意味ないよな
- 正則化ありでは衣装のタグがない場合の衣装の再現度が低下した。
- AI製の画像は品質低下の原因となるため、使用してはならない。
- 衣装固定(再現性優先)でいいなら正則化無しでいい。
- 着せ替えしたいならBooruサイトの画像を使うのがよさそう。ただしごくわずかに品質が低下する?
本来正則化は、あるものを覚えた代わりに別のものを忘れてしまうという問題を回避するためのもの。
例:鳥獣戯画カエルをshs frogで学習すると、frogで普通のカエルが出なくなる。そこで、学習中に正則化画像として普通のカエルの画像を渡すことで問題を改善できる。
つまり、学習対象だけ出てくればいいなら正則化は不要。
その他
LyCORISはやめとけ
LyCORISのメリット:
- 専用のアルゴリズム(loha,lokr,ia3)が使用できる。実質的なdim数がdim^2になる。その分dimを下げてファイルサイズを減らせる。
デメリット:
- loha系は重い(学習時間増加)
- loha系にしても品質向上なし
dim下げたときの品質低下がやや少ない程度 - LoCon(C3Lier)での学習は標準のnetworks.loraでもできる
このデメリットでDim削ってファイルサイズを減らす価値を見いだせないし、LoConが標準で使えるからいらない子やね