LoRA学習メモ (Lain, よしなが先生ほか)


概要

Kohya氏のsd-scripts等を使用してLoRAを学習させたときの個人的なメモをちょっとキレイにしたやつです。
SNSのタイムラインのように新しい情報は上にくるよう書く癖があるので(=降順)、順番に読むときは下の方から読むと良いかもしれません。

※現在のところ、sd-scripts作者(Kohya氏)のガイドラインにおおむね準拠した形で学習させておりその他の手法はわかりません。

情報

sd-scripts

なによりも最初に読むべき作者によるREADME。
いくら探しても見つからなかった情報が公式にふつうに書いてあった ← あるある

便利なツール

  • RedRayz/Kohya_lora_param_gui: GUI for kohya-ss sd-scripts - https://github.com/RedRayz/Kohya_lora_param_gui
    NVAスレニキ製のsd-scripts GUI。GUIで設定したparametersをsd-scriptsに渡してくれるシンプル仕様なのが良き
  • toshiaki1729/stable-diffusion-webui-dataset-tag-editor: Extension to edit dataset captions for SD web UI by AUTOMATIC1111 - https://github.com/toshiaki1729/stable-diffusion-webui-dataset-tag-editor
    おそらくふたばのとしあき製のデータセットタグエディター。スタンドアロン版もあるが若干バグってるのでIssueを読んで解決する必要あるかも

 

学習テスト|SDXL

ケース02:ゆるキャン:犬山あおい for Pony系統

2024年2月25日

▼LoRA生成サンプル

出力|AutisMix_SDXL
ケース02:ゆるキャン:犬山あおい for Pony系統

▼前提条件
そもそもPonyで犬子(このキャラクター)はかなり学習されている
二次創作顔から公式顔になるみたいなすごい微妙な変化

←未使用 | LoRA Enable→

2024-02-25_inuyama_aoi_comparison_default_and_LoRAenable

▼画像タグ付け

画像|64枚くらい

としあきタグエディターでWD14タガーを使ってタグ付けして、inuyama aoi, yurucamp, を先頭に追加。

▼コマンド
accelerate launch --num_cpu_threads_per_process 4 sdxl_train_network.py --pretrained_model_name_or_path "C:\ProgramTools\__GenerativeAI\StableDiffusionModels\__SDXL\Pony_Diffusion_V6_XL\ponyDiffusionV6XL_v6StartWithThisOne.safetensors" --train_data_dir "H:\Resources\Resources_AI\forLeaningImages\Yurucamp\inuyama_aoi\v3" --output_dir "H:\Resources\Resources_AI\__Models\__Lola\__MyLoRAs\SDXL" --network_module "networks.lora" --network_args "conv_dim=32" "conv_alpha=16" --mem_eff_attn --gradient_checkpointing --persistent_data_loader_workers --cache_latents --cache_latents_to_disk --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 768 --train_batch_size 2 --max_train_epochs 20 --network_dim 32 --network_alpha 16 --save_every_n_epochs 5 --optimizer_type "PagedAdamW8bit" --output_name "lora_XL_yurucamp_inuyama_aoi_v3_pagedAdamW8bit_d32a16" --save_precision "fp16" --lr_scheduler "cosine" --min_bucket_reso 320 --max_bucket_reso 1536 --caption_extension ".txt" --max_token_length 225 --shuffle_caption --keep_tokens 1 --seed 42 --no_half_vae --logging_dir "E:\Creative\Program\Github\__AI\Art\TraningLog\sd_scripts\log" --log_prefix=lora_XL_yurucamp_inuyama_aoi_v3_pagedAdamW8bit_d32a16

下のケース01から流用。

追加:--shuffle_caption --keep_tokens 1

▼結果
公式のアニメの感じは再現されていい感じ。
manga, comic, speech bubble, Onomatopoeia, multiple views, みたいなプロンプトがガン無視されるようになってしまった。1枚絵しかでない。
すでに概念は学習されているのですごく軽くしか回してないのに謎。
改善方法をみつけたい。

▼ログ(省略)

1
2
3
saving checkpoint: H:\Resources\Resources_AI\__Models\__Lola\__MyLoRAs\SDXL\lora_XL_yurucamp_inuyama_aoi_v3_pagedAdamW8bit_d32a16.safetensors
model saved.
steps: 100%|████████████████████████████████████████████████████████| 700/700 [41:42<00:00,  3.58s/it, avr_loss=0.0931]

ケース01:セーラーマーキュリー(水野亜美) for Pony系統

2024年2月25日

▼LoRA生成サンプル

出力|AutisMix_SDXL

![](https://i.imgur.com/mGA7IfZ.jpeg "ケース01:セーラーマーキュリー(水野亜美)")

▼画像
77枚
ボケボケのとか古い映像のノイズとか小さい画像入りまくり。アップスケール前処理とかなんもしてない。意外となんとかなる。
としあきタグエディターでWD14タガーを使ってタグ付け。先頭にsailor mercury, mizuno ami,

![](https://i.imgur.com/JDS29Iu.jpeg "ケース01:セーラーマーキュリー(水野亜美)")

▼結果
レトロかわE
--shuffle_caption --keep_tokens 2をつけ忘れたからか、フォルダ名が10_sailormercury 1girl だから分からないが、mizuno ami だと反応しないLoRAが出来上がった。

▼コマンド

accelerate launch --num_cpu_threads_per_process 4 sdxl_train_network.py --pretrained_model_name_or_path "C:\ProgramTools\__GenerativeAI\StableDiffusionModels\__SDXL\Pony_Diffusion_V6_XL\ponyDiffusionV6XL_v6StartWithThisOne.safetensors" --train_data_dir "H:\Resources\Resources_AI\forLeaningImages\Sailormoon\sailormercury_v3" --output_dir "H:\Resources\Resources_AI\__Models\__Lola\__MyLoRAs\SDXL" --network_module "networks.lora" --network_args "conv_dim=32" "conv_alpha=16" --mem_eff_attn --gradient_checkpointing --persistent_data_loader_workers --cache_latents --cache_latents_to_disk --max_token_length 225 --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 768 --train_batch_size 2 --max_train_epochs 8 --network_dim 32 --network_alpha 16 --save_every_n_epochs 1 --optimizer_type "PagedAdamW8bit" --output_name "lora_XL_ponyV6_mizuno_ami_v1_pagedAdamW8bit_d32a16" --save_precision "fp16" --lr_scheduler "cosine" --min_bucket_reso 320 --max_bucket_reso 1536 --caption_extension ".txt" --seed 42 --no_half_vae --logging_dir "E:\Creative\Program\Github\__AI\Art\TraningLog\sd_scripts\log" --log_prefix=lora_XL_ponyV6_mizuno_ami_v1_pagedAdamW8bit_d32a16

▼メモ

学習元は、ponyDiffusionV6XL_v6StartWithThisOne.safetensors

オプティマイザにpagedAdamW8bitを使っている。個人的にオプティマイザはAdamW8bit信者だが、SD1.5のときに使用して結果に影響を与えずに速度向上ができたのでSDXLでも継続して使ってみている。SDXLで早くなっているかは未検証。

コマンドはKohya_lora_param_guiのでSDXL用プリセットをベースに作成した(気がする)。いまだに直打ちしてるのが --log_prefix= とかがGUIで対応してなかったからだった気がするので、GUIでやったほうが安全な気がする。

PonyはTEとUNETどっちもやったほうがいい (NVAスレ民説)とのことで以下を削除
--network_train_unet_only

エラー

AssertionError: network for Text Encoder cannot be trained with caching Text Encoder outputs / Text Encoderの出力をキャッシュしながらText Encoderのネットワークを学習することはできません

→削除:--cache_text_encoder_outputs --cache_text_encoder_outputs_to_disk

▼ログ

override steps. steps for 8 epochs is / 指定エポックまでのステップ数: 3080
running training / 学習開始
  num train images * repeats / 学習画像の数×繰り返し回数: 770
  num reg images / 正則化画像の数: 0
  num batches per epoch / 1epochのバッチ数: 385
  num epochs / epoch数: 8
  batch size per device / バッチサイズ: 2
  gradient accumulation steps / 勾配を合計するステップ数 = 1
  total optimization steps / 学習ステップ数: 3080
steps:   0%|                                                                                  | 0/3080 [00:00<?, ?it/s]
epoch 1/8
A matching Triton is not available, some optimizations will not be enabled.
Error caught was: No module named 'triton'
steps:  12%|██████▊                                               | 385/3080 [35:38<4:09:28,  5.55s/it, avr_loss=0.122]
saving checkpoint: H:\Resources\Resources_AI\__Models\__Lola\__MyLoRAs\SDXL\lora_XL_ponyV6_mizuno_ami_v1_pagedAdamW8bit_d32a16-000001.safetensors

epoch 2/8
steps:  25%|█████████████                                       | 770/3080 [1:08:55<3:26:46,  5.37s/it, avr_loss=0.106]
saving checkpoint: H:\Resources\Resources_AI\__Models\__Lola\__MyLoRAs\SDXL\lora_XL_ponyV6_mizuno_ami_v1_pagedAdamW8bit_d32a16-000002.safetensors

epoch 3/8
steps:  38%|███████████████████▏                               | 1155/3080 [1:41:56<2:49:54,  5.30s/it, avr_loss=0.111]
saving checkpoint: H:\Resources\Resources_AI\__Models\__Lola\__MyLoRAs\SDXL\lora_XL_ponyV6_mizuno_ami_v1_pagedAdamW8bit_d32a16-000003.safetensors

epoch 4/8
steps:  50%|█████████████████████████▌                         | 1540/3080 [2:14:57<2:14:57,  5.26s/it, avr_loss=0.115]
saving checkpoint: H:\Resources\Resources_AI\__Models\__Lola\__MyLoRAs\SDXL\lora_XL_ponyV6_mizuno_ami_v1_pagedAdamW8bit_d32a16-000004.safetensors

epoch 5/8
steps:  62%|███████████████████████████████▉                   | 1925/3080 [2:48:07<1:40:52,  5.24s/it, avr_loss=0.112]
saving checkpoint: H:\Resources\Resources_AI\__Models\__Lola\__MyLoRAs\SDXL\lora_XL_ponyV6_mizuno_ami_v1_pagedAdamW8bit_d32a16-000005.safetensors

epoch 6/8
steps:  75%|██████████████████████████████████████▎            | 2310/3080 [3:21:07<1:07:02,  5.22s/it, avr_loss=0.107]
saving checkpoint: H:\Resources\Resources_AI\__Models\__Lola\__MyLoRAs\SDXL\lora_XL_ponyV6_mizuno_ami_v1_pagedAdamW8bit_d32a16-000006.safetensors

epoch 7/8
steps:  88%|██████████████████████████████████████████████▍      | 2695/3080 [3:54:08<33:26,  5.21s/it, avr_loss=0.113]
saving checkpoint: H:\Resources\Resources_AI\__Models\__Lola\__MyLoRAs\SDXL\lora_XL_ponyV6_mizuno_ami_v1_pagedAdamW8bit_d32a16-000007.safetensors

epoch 8/8
steps: 100%|█████████████████████████████████████████████████████| 3080/3080 [4:27:09<00:00,  5.20s/it, avr_loss=0.113]
saving checkpoint: H:\Resources\Resources_AI\__Models\__Lola\__MyLoRAs\SDXL\lora_XL_ponyV6_mizuno_ami_v1_pagedAdamW8bit_d32a16.safetensors
model saved.
steps: 100%|█████████████████████████████████████████████████████| 3080/3080 [4:27:10<00:00,  5.20s/it, avr_loss=0.113]

(venv) E:\Creative\Program\Github\__AI\Art\sd-scripts_v5\sd-scripts>

学習テスト|SD1.5

学習テスト(sd-scripts: 5):ゆるキャン

ゆるキャン:犬山あおい

▼結果

かわよ
https://civitai.com/models/7033/yurucampinuyamaaoi

▼学習

学習の結果は、キャラクターデザインのリファレンスシートとかがあったり、アニメキャプチャがあったり、一貫性のあるリソースがあったためだと思います。
dim4設定(デフォルト値)でファイルサイズ9MBぽっちですが、どのようなモデルでも再現性は十分でした。

犬山あおい学習データ

python tag_images_by_wd14_tagger.py --batch_size 5 "H:\Resources\Resources_AI\forLeaningImages\Yurucamp\inuyama_aoi\40_inuyamaaoi 1girl"

64枚×40=2560

4エポック=10240

dim4, 768解像度、4エポック、

accelerate launch --num_cpu_threads_per_process 24 train_network.py --pretrained_model_name_or_path=C:/ProgramTools/__GenerativeAI/StableDiffusion_AUTOMATIC1111_v6.0/stable-diffusion-webui/models/Stable-diffusion/nai_sfw.ckpt --train_data_dir=H:\Resources\Resources_AI\forLeaningImages\Yurucamp\inuyama_aoi --reg_data_dir=H:\Resources\Resources_AI\forLeaningImages\touka\10images --output_dir=H:\Resources\Resources_AI\__Models\__MyTrainModels --train_batch_size=2 --use_8bit_adam --xformers --mixed_precision=fp16 --save_every_n_epochs=1 --save_model_as=safetensors --seed=42 --network_module=networks.lora --enable_bucket --color_aug --max_token_length=225 --text_encoder_lr 5e-5 --network_dim=4 --clip_skip=2 --learning_rate=1e-4 --max_train_steps=10240 --resolution=768,768

ログを出したかったけど入れるの忘れた

--logging_dir=logs --log_prefix=inuyamaaoi

 

学習テスト(sd-scripts: 4):BlueArchive

学習:Ajitani Hifumi

▼結果
いい感じにできた
⏬:https://civitai.com/models/7050/bluearchiveajitanihifumi

▼学習

学習の結果は、Danbooruにあるこのキャラクターのイラストがみんないい感じだったせいが大きいかと思います。

▼初期セットアップ
※使ってない

学習データ:314枚

フォルダ:40_Ajitani 1girl

628×40=25,120

python tag_images_by_wd14_tagger.py --batch_size 3 "G:\TOOL\__Python\gallery-dl\gallery-dl\danbooru\hifumi_(blue_archive)+solo\40_Ajitani 1girl"

accelerate launch --num_cpu_threads_per_process 24 train_network.py --pretrained_model_name_or_path=C:/ProgramTools/__GenerativeAI/StableDiffusion_AUTOMATIC1111_v6.0/stable-diffusion-webui/models/Stable-diffusion/nai_sfw.ckpt --train_data_dir=G:\TOOL\__Python\gallery-dl\gallery-dl\danbooru\hifumi_(blue_archive)+solo --reg_data_dir=H:\Resources\Resources_AI\forLeaningImages\touka\10images --output_dir=H:\Resources\Resources_AI\__Models\__MyTrainModels --train_batch_size=1 --use_8bit_adam --xformers --mixed_precision=fp16 --save_every_n_epochs=1 --save_model_as=safetensors --clip_skip=2 --seed=42 --network_module=networks.lora --enable_bucket --color_aug --max_token_length=225 --text_encoder_lr 5e-5 --network_dim=4 --clip_skip=2 --learning_rate=1e-4 --max_train_steps=25120 --resolution=768,768

おま環かもしれないけど、やっぱ透過PNG死ぬっぽいので大人しくJPGに変換するやで……

:\Creative\Program\Github\__AI\Art\sd-scripts\venv\lib\site-packages\PIL\Image.py:996: UserWarning: Palette images with Transparency expressed in bytes should be converted to RGBA images warnings.warn( steps: 1%|▎ | 131/25120 [04:43<15:01:54, 2.17s/it, loss=0.0562]

▼54枚に削減版

python tag_images_by_wd14_tagger.py --batch_size 5 "G:\TOOL\__Python\gallery-dl\gallery-dl\danbooru\hifumi_(blue_archive)+solo\02"

54×0×2=4,320

12960

57×40×2 = 4560

3エポック=13680

accelerate launch --num_cpu_threads_per_process 24 train_network.py --pretrained_model_name_or_path=C:/ProgramTools/__GenerativeAI/StableDiffusion_AUTOMATIC1111_v6.0/stable-diffusion-webui/models/Stable-diffusion/nai_sfw.ckpt --train_data_dir=G:\TOOL\__Python\gallery-dl\gallery-dl\danbooru\hifumi_(blue_archive)+solo\02 --reg_data_dir=H:\Resources\Resources_AI\forLeaningImages\touka\10images --output_dir=H:\Resources\Resources_AI\__Models\__MyTrainModels --train_batch_size=1 --use_8bit_adam --xformers --mixed_precision=fp16 --save_every_n_epochs=1 --save_model_as=safetensors --clip_skip=2 --seed=42 --network_module=networks.lora --enable_bucket --color_aug --max_token_length=225 --text_encoder_lr 5e-5 --network_dim=4 --clip_skip=2 --learning_rate=1e-4 --max_train_steps=13680 --resolution=768,768

あかん5時間は長い

512×512にする

accelerate launch --num_cpu_threads_per_process 24 train_network.py --pretrained_model_name_or_path=C:/ProgramTools/__GenerativeAI/StableDiffusion_AUTOMATIC1111_v6.0/stable-diffusion-webui/models/Stable-diffusion/nai_sfw.ckpt --train_data_dir=G:\TOOL\__Python\gallery-dl\gallery-dl\danbooru\hifumi_(blue_archive)+solo\02 --reg_data_dir=H:\Resources\Resources_AI\forLeaningImages\touka\10images --output_dir=H:\Resources\Resources_AI\__Models\__MyTrainModels --train_batch_size=1 --use_8bit_adam --xformers --mixed_precision=fp16 --save_every_n_epochs=1 --save_model_as=safetensors --clip_skip=2 --seed=42 --network_module=networks.lora --enable_bucket --color_aug --max_token_length=225 --text_encoder_lr 5e-5 --network_dim=4 --clip_skip=2 --learning_rate=1e-4 --max_train_steps=13680 --resolution=512,512

 
 

学習テスト(sd-scripts: 3):勝利の女神 NIKKE

※編集中
基本絵1枚で学習とかをしてました。
複数概念の学習も予定してます。

▼NIKKE_Anis_v2

▼結果

なんか基本絵1枚に比べてキャラ再現性が落ちた気がする。
言っちゃ悪いけど、学習リソースを増やしたいからと言って、キャラの特徴を捉えていないあんまりあれな絵を含めると逆に悪影響を及ぼす可能性がある。

NIKKE_Anis_v2

▼タグ付け

python tag_images_by_wd14_tagger.py --batch_size 4 "H:\Resources\Resources_AI\forLeaningImages\NIKKE\NIKKE_Anis\Manual2\40_nikkeanis 1girl"

あじたにひふみv1からコピーしてきたやつ

低dim設定

学習データ49枚:40_nikkeanis 1girl

49×40×2=1エポック3920

3エポック11760

4エポック15680

 

accelerate launch --num_cpu_threads_per_process 24 train_network.py --pretrained_model_name_or_path=C:/ProgramTools/__GenerativeAI/StableDiffusion_AUTOMATIC1111_v6.0/stable-diffusion-webui/models/Stable-diffusion/nai_sfw.ckpt --train_data_dir=H:\Resources\Resources_AI\forLeaningImages\NIKKE\NIKKE_Anis\Manual2 --reg_data_dir=H:\Resources\Resources_AI\forLeaningImages\touka\10images --output_dir=H:\Resources\Resources_AI\__Models\__MyTrainModels --train_batch_size=1 --use_8bit_adam --xformers --mixed_precision=fp16 --save_every_n_epochs=1 --save_model_as=safetensors --clip_skip=2 --seed=42 --network_module=networks.lora --enable_bucket --color_aug --max_token_length=225 --text_encoder_lr 5e-5 --network_dim=4 --clip_skip=2 --learning_rate=1e-4 --max_train_steps=15680 --resolution=512,512

 

running training / 学習開始
  num train images * repeats / 学習画像の数×繰り返し回数: 1960
  num reg images / 正則化画像の数: 10
  num batches per epoch / 1epochのバッチ数: 3920
  num epochs / epoch数: 4
  batch size per device / バッチサイズ: 1
  total train batch size (with parallel & distributed & accumulation) / 総バッチサイズ並列学習勾配合計含む: 1
  gradient accumulation steps / 勾配を合計するステップ数 = 1
  total optimization steps / 学習ステップ数: 15680
steps:   0%|                                                                                 | 0/15680 [00:00<?, ?it/s]epoch 1/4
steps:  25%|█████████████▊                                         | 3920/15680 [33:27<1:40:22,  1.95it/s, loss=0.0667]saving checkpoint: H:\Resources\Resources_AI\__Models\__MyTrainModels\epoch-000001.safetensors
epoch 2/4
steps:  50%|██████████████████████████▌                          | 7840/15680 [1:05:46<1:05:46,  1.99it/s, loss=0.0626]saving checkpoint: H:\Resources\Resources_AI\__Models\__MyTrainModels\epoch-000002.safetensors
epoch 3/4
steps:  75%|████████████████████████████████████████▌             | 11760/15680 [1:38:05<32:41,  2.00it/s, loss=0.0602]saving checkpoint: H:\Resources\Resources_AI\__Models\__MyTrainModels\epoch-000003.safetensors
epoch 4/4
steps: 100%|██████████████████████████████████████████████████████| 15680/15680 [2:10:26<00:00,  2.00it/s, loss=0.0588]save trained model to H:\Resources\Resources_AI\__Models\__MyTrainModels\last.safetensors
model saved.
steps: 100%|██████████████████████████████████████████████████████| 15680/15680 [2:10:26<00:00,  2.00it/s, loss=0.0588]

(venv) E:\Creative\Program\Github\__AI\Art\sd-scripts>a

▼NIKKE:Anis_v1

▼結果

Anis_v1

▼今回の学習の主目的

  • 基本絵1枚、合計データ10枚の低リソース学習はどういった結果を返すか
  • 解像度を上げたらどうなるか
  • network dim 128

▼画像編集

Danbooruは使わずにGoogle画像検索でポチポチダウンロード

NIKKE アニス

Danbooru収集

gallery-dl https://danbooru.donmai.us/posts?tags=anis_%28nikke%29+solo&z=5

タグ

python tag_images_by_wd14_tagger.py --batch_size 3 "H:\Resources\Resources_AI\forLeaningImages\NIKKE\NIKKE_Anis\Manual_simple\40_nikkeanis 1girl"

▼学習

40_nikkeanis 1girl

10枚、40回 = 400
1エポック800 (なんで×2されるのかわからん)

5エポック4000ステップ

主な変更点は以下

--resolution=768,768 --network_dim=128 --learning_rate=1e-4 --text_encoder_lr 5e-5

accelerate launch --num_cpu_threads_per_process 24 train_network.py --pretrained_model_name_or_path=E:\Creative\Program\Github\__AI\Art\StableDiffusion_AUTOMATIC1111_v7.0\stable-diffusion-webui\models\Stable-diffusion\AOM2f.safetensors --train_data_dir=H:\Resources\Resources_AI\forLeaningImages\NIKKE\NIKKE_Anis\Manual_simple --reg_data_dir=H:\Resources\Resources_AI\forLeaningImages\touka\10images --output_dir=H:\Resources\Resources_AI\__Models\__MyTrainModels --resolution=768,768 --train_batch_size=1 --learning_rate=1e-4 --text_encoder_lr 5e-5 --max_train_steps=4000 --use_8bit_adam --xformers --mixed_precision=fp16 --save_every_n_epochs=1 --save_model_as=safetensors --clip_skip=2 --seed=42 --network_module=networks.lora --enable_bucket --color_aug --max_token_length=225 --network_dim=128

running training / 学習開始
  num train images * repeats / 学習画像の数×繰り返し回数: 400
  num reg images / 正則化画像の数: 10
  num batches per epoch / 1epochのバッチ数: 800
  num epochs / epoch数: 5
  batch size per device / バッチサイズ: 1
  total train batch size (with parallel & distributed & accumulation) / 総バッチサイズ並列学習勾配合計含む: 1
  gradient accumulation steps / 勾配を合計するステップ数 = 1
  total optimization steps / 学習ステップ数: 4000
steps:   0%|                                                                                  | 0/4000 [00:00<?, ?it/s]epoch 1/5
steps:  20%|███████████▍                                             | 800/4000 [37:50<2:31:21,  2.84s/it, loss=0.0625]saving checkpoint: H:\Resources\Resources_AI\__Models\__MyTrainModels\epoch-000001.safetensors
epoch 2/5
steps:  24%|█████████████▉                                           | 979/4000 [47:22<2:26:10,  2.90s/it, loss=0.0534]

学習テスト(sd-scripts: 2):クレヨンしんちゃんのキャラクター

  1. 学習させたいキャラがそもそもマスピ顔だったりすると学習されてんのかされてないのかが曖昧で困る
    (あとマイナーすぎるキャラだと第三者からみて似てんのか似てないのかわからなくて困る)
  2. 完璧に学習されたまつざか先生(ビーチでビキニ着てるやつ)がスレにぽっと貼られて衝撃を受ける
  3. 流行の画風からはかけ離れたファミリーアニメ系のキャラクターは学習のスタートに最適かもしれない
  4. ↑イマココ

野原ひろし (クレヨンしんちゃんテスト02)

野原ひろし

▼画像収集
ImageeyeでGoogle画像検索から収集

▼プロンプト例(一番右)
1boy, white_background, jacket, upper_body, white_shirt, male_focus, necktie, facial_hair, formal, suit, (cowboy shot, looking at viewer:1.1), solo, simple_background, shirt, black_hair, (nhh:1.7), lora:LoRA_nnh_NoharaHiroshi:1.06
Negative prompt: nsfw, (worst quality, low quality:1.4), (depth of field, blurry, bokeh:1.2),( 3D, realistic:1.0), (loli, child, infant:1.4), pointy ears,
Steps: 28, Sampler: DPM++ SDE Karras, CFG scale: 8, Seed: 3966759607, Size: 512x864, Model hash: 038ba203d8, Model: AbyssOrangeMix2_sfw, Clip skip: 2, ENSD: 31337

かなり強調しないとモデルのデフォルト1mature maleがコスプレしただけのイケオジCEOマンみたいになりがち。

identiferを強調してもあまり意味はないっぽい(例:(nhh:1.7))。

▼概要
BooruDatasetTagManagerでnhhをすべてのタグの先頭につけてみるテスト

→タグ(nhh←NoHaraHiroshi)が効かないLoRAができた。1.0にしても2.0にしてもなんも影響力を発揮してない感じがある。一応、(nhh:1.0), lora:LoRA_nnh_NoharaHiroshi:1.3
みたいにLoRAの数値を上げていけばなんか効いてきて野原ひろしになるっちゃなる。
WD Taggerでタグ付けしたらそのまま学習に投げていいんじゃね?って感じはある

ベースモデル:NAI (nai_full).ckpt

タグ付け
python tag_images_by_wd14_tagger.py --batch_size 3 "H:\Resources\Resources_AI\forLeaningImages__KureyonShinchan__NoharaHiroshi\40_nhh 1boy"

学習
accelerate launch --num_cpu_threads_per_process 24 train_network.py --pretrained_model_name_or_path=C:/ProgramTools/__GenerativeAI/StableDiffusion_AUTOMATIC1111_v6.0/stable-diffusion-webui/models/Stable-diffusion/nai.ckpt --train_data_dir=H:\Resources\Resources_AI\forLeaningImages__KureyonShinchan__NoharaHiroshi --reg_data_dir=H:\Resources\Resources_AI\forLeaningImages\touka\10images --output_dir=H:\Resources\Resources_AI__Models__MyTrainModels --resolution=512,512 --train_batch_size=1 --learning_rate=1e-4 --max_train_steps=5000 --use_8bit_adam --xformers --mixed_precision=fp16 --save_every_n_epochs=1 --save_model_as=safetensors --clip_skip=2 --seed=42 --network_module=networks.lora --enable_bucket --color_aug --max_token_length=225 --network_dim=64

よしなが先生 (クレヨンしんちゃんテスト01)

かわE
よしなが先生
▼プロンプト例:右下の焼肉くわえてるやつ
1girl, solo, (28yo, mature female, curvy:1.2) , long hair, (bust up, upper body, looking at viewer:1.1), open mouth, brown hair, shirt, bow, standing, ponytail, hair bow, black eyes, (chewing, satisfied, content, holding chopsticks, eating, meat, barbeque, holding plate, full plate, yakiniku restaurant, dressed in traditional Japanese attire, kimono, geta sandals, hair tied up, happy face:1.1), lora:yoshinaga_v2_epoch-000003:1.08, (ysn:1.7), ,
Negative prompt: nsfw, (worst quality, low quality:1.4), (depth of field, blurry, bokeh:1.2),( 3D:1.0), (loli, child, infant:1.4), pointy ears,
Steps: 28, Sampler: DPM++ SDE Karras, CFG scale: 8, Seed: 2472926398, Size: 512x864, Model hash: 038ba203d8, Model: AbyssOrangeMix2_sfw, Clip skip: 2, ENSD: 31337

かなり強調しないとモデルのデフォルト1girlがコスプレしてるみたいなキャラクターになりがち。
(ysn:1.7),とか意味ないっぽい(?)
フォルダ命名規則「40_ysn 1girl」等は以下のように呼称されている

  • ysn = identifier
  • 1girl = class

引用:sd-scripts/train_db_README-ja.md at main · kohya-ss/sd-scripts
https://github.com/kohya-ss/sd-scripts/blob/main/train_db_README-ja.md

このときのidentifier(例:ysn)はタグ付け等をすると無効になるらしい(?)
identiferを強調してもあまり意味はなく、lora:yoshinaga_v2:1.08等、LoRA強度を強めて調整できることは確認できた。

1
2
3
>>497
フォルダ名はキャプションtxt付けた時点でプロンプトとしては意味無くなるってりどみに書いてあった
そんでキャプションがtaggerで付けたのそのまんまならそれぞれのプロンプトが汎用プロンプトの性質を持ちながらもキャラ特徴の呼び出しプロンプトになる

▼画像収集
Google画像検索で画像収集したかったので、Imageeyeなる拡張を使って収集。
Image downloader - Imageye - Chrome ウェブストア - https://chrome.google.com/webstore/detail/image-downloader-imageye/agionbommeaifngbhincahgmoflcikhm?hl=ja

なおPythonスクリプトでいい感じのを見つけようとすると
hardikvasa/google-images-download: - https://github.com/hardikvasa/google-images-download
が見つかるけど、古くてGoogleの仕様に対応していないらしいので非推奨。

▼学習素材
フォルダ:40_ysn 1girl
35枚くらい

▼学習
network_dim=32、clip_skip=2にしてみた以外はあまりLainと変わらない。
network_dim=32で72MBくらいになります。

ベースモデル:NAI (nai_full).ckpt

accelerate launch --num_cpu_threads_per_process 24 train_network.py --pretrained_model_name_or_path=C:/ProgramTools/__GenerativeAI/StableDiffusion_AUTOMATIC1111_v6.0/stable-diffusion-webui/models/Stable-diffusion/nai.ckpt --train_data_dir=H:\Resources\Resources_AI\forLeaningImages__KureyonShinchan\YoshinagaSense\sfw --reg_data_dir=H:\Resources\Resources_AI\forLeaningImages\touka\10images --output_dir=H:\Resources\Resources_AI__Models__MyTrainModels --resolution=512,512 --train_batch_size=1 --learning_rate=1e-4 --max_train_steps=10000 --use_8bit_adam --xformers --mixed_precision=fp16 --save_every_n_epochs=1 --save_model_as=safetensors --clip_skip=2 --seed=42 --network_module=networks.lora --enable_bucket --color_aug --max_token_length=225 --network_dim=32

学習テスト(sd-scripts: 1):Lain(岩倉玲音)

Lain

▼生成モデル:AOM2hard + LoRA_IwakuraLain_v4_nai :https://files.catbox.moe/ufxcer.safetensors

1
2
3
1girl, solo, teenage, (iwl:1.3), looking at viewer, short hair, bangs, brown hair, hair ornament, brown eyes, closed mouth, hairclip, expressionless, (x hair ornament:1.2), (asymmetrical hair, single sidelock:1.3), indoors, (messy room, night, dark:1.3), ( sketch, outline:1.1) ,( cyber, lot of cable, retro computer, IT gadget, PC parts:1.2), <lora:LoRA_IwakuraLain_v4_nai:1>, 

(worst quality, low quality:1.5), (depth of field, blurry:1.2),, (greyscale, monochrome, ,:1.0), (lip, nose), 

▼学習の流れ

  1. 画像収集にgallery-dl(スタンドアローン版)を使用:https://github.com/mikf/gallery-dl#id9
  2. gallery-dl https://danbooru.donmai.us/posts?page=1&tags=iwakura_lain+solo で画像を収集
  3. PhotoShift で人力で選別
  4. \sd-scripts\finetune\tag_images_by_wd14_tagger.py でタグ付け
  5. sd-scripts呪文を唱える
  6. 完成

学習時間1時間半くらい (RTX3060 12GB、Ryzen3900XT)

▼学習画像フォルダ
G:\TOOL__Python\gallery-dl\gallery-dl\danbooru\iwakura_lain_solo\X_Manual
学習画像115枚
フォルダ名:40_iwl 1girl
→tag: iwl class: 1girl

▼タグ付け

WD14Taggerによるタグ付け

  1. Git bash here とか、ディレクトリ欄に「cmd → Enter」とかでsd script ディレクトリを開く
  2. アクティベートする
    .\venv\Scripts\activate
  3. cd E:\Creative\Program\Github__AI\Art\sd-scripts\finetune
    みたいな感じで移動する (タグ付けのスクリプトがここのフォルダに置いてあった)
  4. python tag_images_by_wd14_tagger.py --batch_size 4 G:\TOOL__Python\gallery-dl\gallery-dl\danbooru\iwakura_lain_solo\X_Manual
    みたいな感じでバッチサイズとフォルダを指定する
  5. Enterで実行
  6. タグ付けされる

100枚のタグ付けに3分くらい。

▼正則化画像
透過10枚


▼ベースモデル:NAI (nai_full).ckpt

▼sd-scripts呪文
○ベース:公式LoRAガイドのコード↓

accelerate launch --num_cpu_threads_per_process 12 train_network.py
--pretrained_model_name_or_path=..\models\model.ckpt
--train_data_dir=..\data\db\char1 --output_dir=..\lora_train1
--reg_data_dir=..\data\db\reg1 --prior_loss_weight=1.0
--resolution=448,640 --train_batch_size=1 --learning_rate=1e-4
--max_train_steps=400 --use_8bit_adam --xformers --mixed_precision=fp16
--save_every_n_epochs=1 --save_model_as=safetensors --clip_skip=2 --seed=42 --color_aug
--network_module=networks.lora

○実際に使用したコード

accelerate launch --num_cpu_threads_per_process 24 train_network.py --pretrained_model_name_or_path=C:/ProgramTools/__GenerativeAI/StableDiffusion_AUTOMATIC1111_v6.0/stable-diffusion-webui/models/Stable-diffusion/nai.ckpt --train_data_dir=G:\TOOL__Python\gallery-dl\gallery-dl\danbooru\iwakura_lain_solo\X_Manual --reg_data_dir=H:\Resources\Resources_AI\forLeaningImages\touka\10images --output_dir=H:\Resources\Resources_AI__Models__MyTrainModels --resolution=512,512 --train_batch_size=1 --learning_rate=1e-4 --max_train_steps=10000 --use_8bit_adam --xformers --mixed_precision=fp16 --save_every_n_epochs=1 --save_model_as=safetensors --clip_skip=1 --seed=42 --network_module=networks.lora --enable_bucket --color_aug --max_token_length=225

変更点

  • --num_cpu_threads_per_process 24: CPUのスレッド数
  • --enable_bucket : NovelAIが開発した異なるアスペクト比で学習可能にするオプション
  • --color_aug : 学習時に動的にデータを変化させることで、モデルの性能を上げる手法
  • --max_token_length=225 : トークン長を拡張して学習

--network_dim オプションを付与して精度を上げてる人も多いっぽい。デフォルト4→64など。ここを増やすとLoRAのファイルサイズが肥大化する。
--learning_rate=1e-3は0.001 1e-4は0.0001 5e-5は、0.00005
5e-5は4ちゃんのLoRAで見た設定


https://atmarkit.itmedia.co.jp/ait/articles/1912/16/news026.html
learning_rate = こういうことしてるらしい

▼コマンドプロンプトのログ

running training / 学習開始
  num train images * repeats / 学習画像の数×繰り返し回数: 4600
  num reg images / 正則化画像の数: 10
  num batches per epoch / 1epochのバッチ数: 9200
  num epochs / epoch数: 2
  batch size per device / バッチサイズ: 1
  total train batch size (with parallel & distributed & accumulation) / 総バッチサイズ並列学習勾配合計含む: 1
  gradient accumulation steps / 勾配を合計するステップ数 = 1
  total optimization steps / 学習ステップ数: 10000
steps:   0%|                                                                                 | 0/10000 [00:00<?, ?it/s]epoch 1/2
steps:  92%|██████████████████████████████████████████████████▌    | 9200/10000 [1:18:09<06:47,  1.96it/s, loss=0.0596]saving checkpoint: H:\Resources\Resources_AI\__Models\__MyTrainModels\epoch-000001.safetensors
epoch 2/2
steps: 100%|██████████████████████████████████████████████████████| 10000/10000 [1:25:17<00:00,  1.95it/s, loss=0.0603]save trained model to H:\Resources\Resources_AI\__Models\__MyTrainModels\last.safetensors
model saved.
steps: 100%|██████████████████████████████████████████████████████| 10000/10000 [1:25:19<00:00,  1.95it/s, loss=0.0603]

(venv) E:\Creative\Program\Github\__AI\Art\sd-scripts>

書き込み保存

スレに書き込んだ書き込みの保存


817: 2023/01/25(水) 16:53:32.45
sd scriptのGUI版でLoraのトレーニング始めたんだけど、クソほどエラー吐いたのでやめた
ワイはいつになったら学習に着手できるんや

853: 2023/01/25(水) 18:24:29.23

817
これだけど
python -m venv venv のほうが python -m venv --system-site-packages venv より安全そうなため書き換えました。globalなpythonにパッケージがインストールしてあると、後者だといろいろと問題が起きます。)
に引っかかった感じかもしれない。torchとかglobalにインストールしてあると死ぬ
作者純正の方Cloneしてコマンド打ったら学習し始めたわ

954: 2023/01/25(水) 22:16:03.25

949
これワイもハマったわ
要するに_にリネームした学習画像データのフォルダは直接指定しないでねって話で例えば↓こういうこと
✕|E:\TrainDatas\001\img\40_kdy 1girl
◎|E:\TrainDatas\001\img
間違うと画像が見つかりませんと怒られる

849: 2023/01/27(金) 18:43:32.13
LoRAやってみてるんだけど、DBに比べるとモデルのデフォルト1girlが学習キャラのコスプレしてるみたいな画像にならない?
設定が悪いんかな
--resolution=512,512 --train_batch_size=1 --learning_rate=1e-4 --max_train_steps=800 --use_8bit_adam --xformers --mixed_precision=fp16 --save_every_n_epochs=1 --save_model_as=safetensors --clip_skip=2 --seed=42 --network_module=networks.lora --enable_bucket --color_aug --max_token_length=225

863: 2023/01/27(金) 19:54:20.70
ほーん
"learning_rate = 1e-4"は、学習率が0.0001を表しています。 これは、学習スピードがやや遅めで、精度が高い可能性が高いことを示しています。この値は環境やデータセットによって異なりますが、一般的には小さな値が使用されます。
学習率が大きすぎると、学習が収束しない、振動する可能性があります。学習率が小さすぎると、収束までに時間がかかる可能性があります。学習率を調整することで、学習スピードと精度のバランスを取りながら、最適な結果を得ることができます。

5e-5と1e-4を小数点表記で表すと?
"5e-5"は、0.00005、 "1e-4"は0.0001を表します。

866: 2023/01/27(金) 19:56:31.63

learning_rate = こういうことしてるらしい

937: 2023/01/27(金) 22:01:59.13
ついにLainを生成するのに成功した! asymmetrical hair, single sidelockとかやっても出なかったあの独特な髪型めちゃくちゃ安定してるわ。リークNAIを触り始めてからの目標だったので嬉しいぞ


個人的なメモだけどワークフロー簡単にまとめました

954: 2023/01/27(金) 23:02:10.82

947
そのまんま透過PNGやで。たしかWikiあったやつ
正直、正則化画像は雰囲気や


197
1e-3は0.001、5e-5は、0.00005、 1e-4"は0.0001で極小になるほど精度が上がって最適解に収束するらしい

227: 2023/01/28(土) 13:19:43.19
コスチュームがあんま決まってないキャラ(Lain)のLoRAだったら着せ替えは普通にできた
黒白ストライプのサンタ服とか花柄のねずみ色のセーラー服みたいなイミフな服も生成された
たぶんがっちりキャラデザされてるキャラだと生首方式のほうがいいかもしれない

862: 2023/01/29(日) 11:14:32.94
自分がドキュメント読んで理解した限りでは、Taggerでタグ付けして、なおかつキャプションつけるときにそれらを統合する手順を踏んでねって感じだったような。ただキャプション付けはエアプなんで合ってるかわからん

263: 2023/01/30(月) 01:15:39.61
240GB 1,400 LoRA files ほか
4ちゃんのくそデカ学習モデルパックはダウンロードしたかい
magnet:?xt=urn:btih:XFDFHICCEVQ6IXQXRSBBT7SN5SC6RWSI&dn=lora-torrent&tr=udp%3A%2F%2Ftracker.opentrackr.org%3A1337%2Fannounce

208
これはこのフォルダ名にすると「tag: iwl class: 1girl」になるぞっていう説明
LainのときはTaggerにお任せでそのまま学習に投げたから先頭にiwlとかはついてなかったと思う

653: 2023/01/30(月) 18:11:42.09



ただBooruDatasetTagManagerでnhhをすべてのタグの先頭につけてみたらなんかタグ(nhh←NoHaraHiroshi)が効かないLoRAができた。1.0にしても2.0にしてもなんも影響力を発揮してない感じがある。一応、(nhh:1.0),,lora:LoRA_nnh_NoharaHiroshi:1.08
みたいにLoRAの数値を上げていけばなんか効いてきて野原ひろしになるっちゃなる。
WD Taggerでタグ付けしたらそのまま学習に投げていいんじゃね?って感じはある

727: 2023/01/30(月) 19:45:28.37

LoRA学習のメモ追加で更新しといた

259: 2023/01/31(火) 18:09:22.90
次元数(rank)が違うとLoRAのマージができないっていう"次元数"ってnetwork dimのことだと理解してるんだけど、学習者ごとに各々好きな値を設定して配布する形になると、マージ互換性のないLoRAがたくさん出回ることになりそうだなあ

263: 2023/01/31(火) 18:14:54.49
Ti普通に有用だと思う。LoRA2つ以上使うと破綻してくる
LoRA or DreamBooth:キャラのベースデザイン
構図や仕草:Ti
みたいな棲み分けはよさそう

357: 2023/01/31(火) 21:15:44.40
フォルダがよしなが先生だらけになってきたぞ……

487: 2023/02/01(水) 01:13:34.55
う~ん着替えさせたいとか体型変えたいからとかで首を切ったり、タグを消したりっていうの疲れるだけであんまりしてもしなくていい気がする
よしなが先生とかデータはこんなんばっかだけど、curvyしたらムチムチになるし、school uniformも着るし、バイクも乗る

497: 2023/02/01(水) 01:32:40.09
っていうかフォルダの命名規則の「40_ysn 1girl」のidentifierってプロンプトに打つ必要ないんだな?
lora:yoshinaga_v2_epoch-000003:1.08とか打つだけで効いてる
これは複数概念を学習させたときに呼び出す呪文なんだろうか
って書いてたら>>484が書いてたわ学習なんもわからん

1
2
3
4
5
6
7
キャラの特徴は消すっていうか
残したタグに学習内容が分散されるのね
キーワード入れなくてもLoraが聞いてたのはほぼ絶対入ってる1girlに学習されてて
それがプロンプトに入ってるからだと学んだわ

黒髪じゃなくてもいいからblack hairは残しといいやってやってたら
black hairを入れないと効果が薄くなっちまった

Edit
Pub: 27 Jan 2023 12:15 UTC
Edit: 25 Feb 2024 11:46 UTC
Views: 45700