LoRA学習

更新日2023-11-02 (木) 18:48:43
作成日:2023年10月2日

LoRAの学習で新たにLoRAファイルを作成する手順

手順の種類

LoRA学習するためには、インストール方法と学習方法を決める必要がある

インストール方法

  • sd-scripts基本方式
  • derrian方式
  • bmaltais方式
  • ddPn08方式 等

学習方法

  • DB(DrearmBooth)-クラスID方式
    • 特定の単語に学習対象をを紐づけする。髪型、服装等がプロンプトで変更できない
  • DB(DrearmBooth)-キャプション方式
    • 画像ごとにキャプションが記憶されたテキストファイルを用意して学習する。画像の詳細をキャプションに記述できる。白い服のキャラ、赤のスカートなど。素材から何を学習させるか調整しやすい(顔だけ、服装だけなどテキストで指定→顔LoRA、服装LoRAなど)
  • ファインチューン方式
    • 作成したキャプションからメタデータを作成

このページの手順はインストールは「sd-scripts基本方式」、学習方法は「DB-キャプション方式」について説明。

「sd-scripts基本方式」でのインストール

kohya-ssさんの「SD-scripts」を「sd-scripts基本方式」でインストール

以下にアクセス

https://github.com/kohya-ss/sd-scripts

「README-ja.md」にインストール方法が記載されている

コマンドプロンプトを開く

  • インストールフォルダ作成

作業はコマンドプロンプトで実行する

C:\SD\kohyass202309を作成

> cd \SD\kohyass202309
> git clone https://github.com/kohya-ss/sd-scripts.git
Cloning into 'sd-scripts'...
remote: Enumerating objects: 4360, done.
remote: Counting objects: 100% (4360/4360), done.
remote: Compressing objects: 100% (1307/1307), done.
remote: Total 4360 (delta 3073), reused 4290 (delta 3047), pack-reused 0
Receiving objects: 100% (4360/4360), 8.27 MiB | 5.07 MiB/s, done.

Resolving deltas: 100% (3073/3073), done.
> cd sd-scripts

Pythonで仮想環境venvを構築して、「activate」化する

> python -m venv venv
  • 「activate」化 → 終了するには「.\venv\Scripts\deactivate.bat」
> .\venv\Scripts\activate
(venv) C:\SD\kohyass202309\sd-scripts>

venvの中に必要なファイルを入れる→以下のコマンド実行後はvenvフォルダの容量が増加する。

(venv) C:\SD\kohyass202309\sd-scripts>pip install torch==1.12.1+cu116 torchvision==0.13.1+cu116 --extra-index-url https://download.pytorch.org/whl/cu116
Looking in indexes: https://pypi.org/simple, https://download.pytorch.org/whl/cu116
(略)
Successfully installed certifi-2023.7.22 charset-normalizer-3.2.0 idna-3.4 numpy-1.26.0 pillow-10.0.1 requests-2.31.0 torch-1.12.1+cu116 torchvision-0.13.1+cu116 typing-extensions-4.8.0 urllib3-2.0.5

[notice] A new release of pip available: 22.2.1 -> 23.2.1
[notice] To update, run: python.exe -m pip install --upgrade pip

(venv) C:\SD\kohyass202309\sd-scripts>pip install --upgrade -r requirements.txt Processing c:\sd\kohyass202309\sd-scripts
(略)
   Running setup.py install for library ... done
   Attempting uninstall: urllib3
    Found existing installation: urllib3 2.0.5
    Uninstalling urllib3-2.0.5:
      Successfully uninstalled urllib3-2.0.5
  Attempting uninstall: requests
    Found existing installation: requests 2.31.0
    Uninstalling requests-2.31.0:
      Successfully uninstalled requests-2.31.0
Successfully installed MarkupSafe-2.1.3 PyWavelets-1.4.1  
(略)

[notice] A new release of pip available: 22.2.1 -> 23.2.1
[notice] To update, run: python.exe -m pip install --upgrade pip

(venv) C:\SD\kohyass202309\sd-scripts>pip install -U -I --no-deps https://github.com/C43H66N12O12S2/stable-diffusion-webui/releases/download/f/xformers-0.0.14.dev0-cp310-cp310-win_amd64.whl
(略)
Installing collected packages: xformers
Successfully installed xformers-0.0.14.dev0

[notice] A new release of pip available: 22.2.1 -> 23.2.1
[notice] To update, run: python.exe -m pip install --upgrade pip

(venv) C:\SD\kohyass202309\sd-scripts>copy /y .\bitsandbytes_windows\*.dll .\venv\Lib\site-packages\bitsandbytes\
.\bitsandbytes_windows\libbitsandbytes_cpu.dll
.\bitsandbytes_windows\libbitsandbytes_cuda116.dll
        2 個のファイルをコピーしました。

(venv) C:\SD\kohyass202309\sd-scripts>copy /y .\bitsandbytes_windows\cextension.py .\venv\Lib\site-packages\bitsandbytes\cextension.py
        1 個のファイルをコピーしました。

(venv) C:\SD\kohyass202309\sd-scripts>copy /y .\bitsandbytes_windows\main.py .\venv\Lib\site-packages\bitsandbytes\cuda_setup\main.py
        1 個のファイルをコピーしました。

設定を実行

accelerate config

質問には順に以下のように答える

  • This machine
  • No distributed training
  • NO
  • NO
  • NO
  • all
  • fp16
(venv) C:\SD\kohyass202309\sd-scripts>accelerate config
------------------------------------------------------------------------------------------------------------------------
In which compute environment are you running?
This machine
------------------------------------------------------------------------------------------------------------------------
Which type of machine are you using?
Please select a choice using the arrow or number keys, and selecting with enter
 * No distributed trainingg
    multi-CPU
    multi-GPU
    TPU
    MPS
(略)
Which type of machine are you using?
No distributed training
Do you want to run your training on CPU only (even if a GPU is available)? [yes/NO]:NO
Do you wish to optimize your script with torch dynamo?[yes/NO]:NO
Do you want to use DeepSpeed? [yes/NO]: NO
What GPU(s) (by id) should be used for training on this machine as a comma-seperated list? [all]:all
------------------------------------------------------------------------------------------------------------------------
Do you wish to use FP16 or BF16 (mixed precision)?
Please select a choice using the arrow or number keys, and selecting with enter
    no                                                                           * fp166
    bf16
(Enter入力)

accelerate configuration saved at C:\Users\JE2ISM/.cache\huggingface\accelerate\default_config.yaml

回答は1行目が0,2行目が1になり、選択すると項目の前に「*」が付く。その後Enterで確定して次の質問に移動する。

学習方法(DB-キャプション方式)

必要なもの

  • 学習素材(教師画像)
  • 正則化画像(必ず必要ではない)
  • キャプション(テキスト)

学習素材フォルダの作成

E:\LoRAData\TrainingDataに作成する

ファオルダ内に以下のフォルダを作成

  • sozai
  • seisoku ←今回は未使用
  • outputs

以下のテキストファイルも作成

  • datasetconfig.txt
  • commandline.txt

キャプションファイルの作成

タグファイル作成

Stable Diffusionの拡張機能を利用してキャプションファイルを作成する

  • wd1.4tagger(画像のタグを自動作成ツール)を拡張機能にインストール

以下のURLから拡張機能にインストールする

wd1.4taggerの実行

素材ファイルをsozaiフォルダに入れる

素材画像のファイル名を01.png, 02.png....とファイル名を連番にリネーム

  • 実行

Stable Duffsionを再起動

「Tagger」というタブが出来るのでクリック

「Batch from Directoryタブ」をクリック

「Input directory」

E:\LoRAData\TrainingData\sozai

「Output directory」

E:\LoRAData\TrainingData\sozai

キャプション1.png

「Additional tag」にトリガワードを入力

itako

「Interrogate」をクリックして実行

キャプション2.png

実行完了

キャプション3.png

  • 実行後
E:\LoRAData\TrainingData\sozaiに素材分のテキストファイル(キャプションファイル)が出来る

キャプション4.png

キャプションファイルの編集

「タグ付け(Tagger)」で作成したテキストファイルを編集する。

  • CSV形式のファイルで、一番初めがトリガーワード、2つ目以降の学習させるワードを削除する

服装に関するLorAを作成するときは、「dress」、「Blouse」、「tight skirt」や「kimono」などを削除する。

先に作成したテキストファイルの内容を以下のように入れる

  • datasetconfig.txt
[general]
[[datasets]]
[[datasets.subsets]]
image_dir = 'E:\TrainingData\sozai'
caption_extension = '.txt'
num_repeats = 1  ← 素材の繰り返し学習数

UTF-8で保存で必ず保存

  • 拡張子を「.txt」から「.toml」に変更

以下のコマンドラインのパスなどを指定するファイル。

  • commandline.txt

「pretrained_model_name_or_path」事前学習モデルを指定
meinamix_meinaV11.safetensors:アニメ系モデル

accelerate launch --num_cpu_threads_per_process 1 train_network.py
 --pretrained_model_name_or_path=C:\SD\stable-diffusion-webui\models\Stable-diffusion\meinamix_meinaV11.safetensors ← CheckPointのモデルを指定(今回はイラスト風を指定)
 --output_dir=E:\LoRAData\TrainingData\outputs ← 出力フォルダ指定
 --output_name=FILE_NAME_HERE  ←出力ファイル名
 --dataset_config=E:\LoRAData\TrainingData\datasetconfig.toml ←コンフィグファイル
 --train_batch_size=1
 --max_train_epochs=10 ← エポック数
 --resolution=512,512  ← 素材の解像度かな?
 --optimizer_type=AdamW8bit
 --learning_rate=1e-4
 --network_dim=128
 --network_alpha=64
 --enable_bucket
 --bucket_no_upscale
 --lr_scheduler=cosine_with_restarts
 --lr_scheduler_num_cycles=4
 --lr_warmup_steps=500
 --keep_tokens=1
 --shuffle_caption
 --caption_dropout_rate=0.05
 --save_model_as=safetensors
 --clip_skip=2
 --seed=42
 --color_aug
 --xformers
 --mixed_precision=fp16
 --network_module=networks.lora
 --persistent_data_loader_workers

commandline.txtを1行に変更する

とりあえずのパラメータ

以下のパラメータくらいでやってみた

  • datasetconfig.txt
    • num_repeats = 10
  • commandline.txt
    • train_batch_size=4
    • max_train_epochs=8

LoRAファイル作成

手順

  • 仮想環境のアクティベート
  • commandline.txtの内容をコピペで実行
  • コマンドプロンプトから仮想環境のアクティベート
c:
cd \SD\kohyass202309\sd-scripts
.\venv\Scripts\activate
  • commandline.txtの内容を実行
(venv) C:\SD\kohyass202309\sd-scripts>accelerate launch --num_cpu_threads_per_process........
(略)
prepare tokenizer
Loading dataset config from E:\LoRAData\TrainingData\datasetconfig.toml
(略)
running training / 学習開始
  num train images * repeats / 学習画像の数×繰り返し回数: 1
  num reg images / 正則化画像の数: 0
  num batches per epoch / 1epochのバッチ数: 1
  num epochs / epoch数: 10
  batch size per device / バッチサイズ: 1
  gradient accumulation steps / 勾配を合計するステップ数 = 1
  total optimization steps / 学習ステップ数: 10
steps:   0%|                                                                                     | 0/10 [00:00<?, ?it/s]
epoch 1/10
steps:  10%|■■                                                          | 1 /10 [00:25<03:52, 25.84s/it, loss=0.373]
epoch 2/10
(略)
epoch 9/10
steps:  90%|■■■■■■■■■■■■■■■■■■■■■■■■■■■■      | 9/10 [00:29<00:03,  3.30s/it, loss=0.00562]
epoch 10/10
steps: 100%|■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■| 10/10 [00:30<00:00,  3.02s/it, loss=0.175]
saving checkpoint: E:\LoRAData\TrainingData\outputs\itako.safetensors  ←モデルの保存場所
model saved.
steps: 100%|■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■| 10/10 [00:32<00:00,  3.27s/it, loss=0.175]

完成LoRAファイル

E:\LoRAData\TrainingData\outputsに「accelerate launch の --output_name」で指定したファイルが作成される

このファイルの主ファイル名を適当にリネームして「C:\SD\stable-diffusion-webui\models\Lora」コピーする

プロンプト

1girls, best quality,masterpiece,<lora:itako:1>, itako ←トリガーワード(各学習画像のテキストファイルの行頭のワード)

キャプションファイル作成の手作業は大変なので、手抜きでAWKとバッチで処理

  • AWKで、LoRA学習ファイル作成時フォルダ構造

LoRA学習.png

オリジナル学習ファイルがあるフォルダの下位フォルダtmpに白抜き学習画像ファイルと学習用タグファイルを作成する

下位フォルダtmpにStableDuffsionでタグファイルを作成

作成したタグファイルからオリジナル学習ファイルがあるフォルダの下位フォルダtmp2に学習用タグファイルを作成する

最終的に学習用タグファイルと白抜き学習画像ファイルを一つのフォルダにコピーしてこのフォルダを「-datasetconfig.txt」の「image_dir =」に指定する

学習画像ファイル

学習画像は白抜きにした(必要はないかも)

  • 白抜きファイルを学習画像数だけ行うバッチ作成awk

学習ファイル数は50

  • a1.awk
BEGIN{
for (i = 1; i < 51; i++) {
	printf("transparent-background --source %02d.png --type white\n", i);
	printf("move %02d_white.png tmp/\n", i);
	printf("ren tmp\\%02d_white.png %02d.png\n", i, i);
}
}

このawkは入力ファイルが不要なので適当なファイルを指定

gawk -f a1.awk duumy.txt > a1.bat

あとはバッチ実行

キャプションファイル関係

  • 学習させるワードの削除awk

削除するワードを指定する

  • a2.awk
{
gsub(/1girl, /, "", $0);
gsub(/solo, /, "", $0);
gsub(/kimono, /, "", $0);
gsub(/japanese clothes, /, "", $0);
gsub(/flower /, "", $0);
gsub(/sash, /, "", $0);
gsub(/sandals, /, "", $0);
gsub(/smile, /, "", $0);
gsub(/floral print, /, "", $0);
gsub(/uchiwa, /, "", $0);
gsub(/obi, /, "", $0);
print $0;
}
  • a2.awkを学習ファイル数だけ実行してtmpフォルダに保存するバッチを作成するawk

学習ファイル数は50

  • b2.awk
# 学習する箇所のワードの削除するawkを起動し削除結果をtmpフォルダに保存する
# 事前にdummy.txtファイル、tmpフォルダを作成のこと
# これらを行うバッチ作成
# gawk -f b.awk dummy.txt > b.at

BEGIN{
for (i = 1; i < 51; i++) {
	printf("gawk -f a2.awk ..\\%02d.txt > tmp\\%02d.txt\n", i ,i);
       printf("copy %02d.png tmp\\%02d.png\n", i ,i);
}
}

このawkは入力ファイルが不要なので適当なファイルを指定

gawk -f b2.awk dummy.txt > b2.bat

あとはバッチ実行

参考


添付ファイル: fileキャプション4.png 38件 [詳細] fileキャプション3.png 36件 [詳細] fileキャプション2.png 36件 [詳細] fileキャプション1.png 39件 [詳細] fileLoRA学習.png 38件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2023-11-02 (木) 18:48:43