LoRA学習 †更新日2023-11-02 (木) 18:48:43
作成日:2023年10月2日
LoRAの学習で新たに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
> .\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 質問には順に以下のように答える
(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に作成する ファオルダ内に以下のフォルダを作成
以下のテキストファイルも作成
キャプションファイルの作成 †タグファイル作成 †Stable Diffusionの拡張機能を利用してキャプションファイルを作成する
以下の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 「Additional tag」にトリガワードを入力 itako 「Interrogate」をクリックして実行 実行完了
E:\LoRAData\TrainingData\sozaiに素材分のテキストファイル(キャプションファイル)が出来る キャプションファイルの編集 †「タグ付け(Tagger)」で作成したテキストファイルを編集する。
服装に関するLorAを作成するときは、「dress」、「Blouse」、「tight skirt」や「kimono」などを削除する。 先に作成したテキストファイルの内容を以下のように入れる †
[general] [[datasets]] [[datasets.subsets]] image_dir = 'E:\TrainingData\sozai' caption_extension = '.txt' num_repeats = 1 ← 素材の繰り返し学習数 UTF-8で保存で必ず保存
以下のコマンドラインのパスなどを指定するファイル。
「pretrained_model_name_or_path」事前学習モデルを指定 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行に変更する とりあえずのパラメータ †以下のパラメータくらいでやってみた
LoRAファイル作成 †手順 †
c: cd \SD\kohyass202309\sd-scripts .\venv\Scripts\activate
(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とバッチで処理 †
オリジナル学習ファイルがあるフォルダの下位フォルダtmpに白抜き学習画像ファイルと学習用タグファイルを作成する 下位フォルダtmpにStableDuffsionでタグファイルを作成 作成したタグファイルからオリジナル学習ファイルがあるフォルダの下位フォルダtmp2に学習用タグファイルを作成する 最終的に学習用タグファイルと白抜き学習画像ファイルを一つのフォルダにコピーしてこのフォルダを「-datasetconfig.txt」の「image_dir =」に指定する 学習画像ファイル †学習画像は白抜きにした(必要はないかも)
学習ファイル数は50
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 あとはバッチ実行 キャプションファイル関係 †
削除するワードを指定する
{ 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; }
学習ファイル数は50
# 学習する箇所のワードの削除する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 あとはバッチ実行 参考 † |