kohya式Lora学習(DreamBooth、キャプション方式)導入のメモ書き
なお導入にあたってはyoutubeの下記動画を参考にしたが、同じ手順だと私の環境ではエラーとなったためEasy Training Scriptsを使って導入
また、私の用途では正則化画像が必要であったが、参考動画では正則化画像を使用しないため結果として手順が異なることとなった
そのため導入・実行方法の履歴を簡単にメモ書き
必要に応じて加筆・修正予定
SD Scripts の導入
スクリプトを下記サイトよりダウンロードしてインストール
installer v5のinstall_sd_scripts_v5.batをダウンロード
スクリプトフォルダを作りたい場所にinstall_sd_scripts_v5.batを移動してから実行する
batファイル自体は最初しか使わないがインストール後にSD Scripts の場所を動かすのは少し面倒なので先にbatファイルを動かしておく
なおインストールにはあらかじめGitがインストールされていることが前提
installing torch
batを実行すると上記が表示される。多少時間がかかるので気長に待つ
Do you want to install the optional cudnn1.8 for faster training on high end 30X0 and 40X0 cards? [Y,N]?
3000、4000番台のグラボがあれば「Y」と入力
続行するには何かキーを押してください . . .
上記が表示され、install_sd_scripts_v5.batと同じフォルダ内にLoRA_Easy_Training_Scriptsというフォルダが出来ていればOK
素材の準備
動画のとおり
なお正則化画像はStableDiffusionで品質プロンプトと1girlで適当な女の子のイラストを生成して準備した
どの程度影響するのかは分からないが指の破綻等のあるイラストを除外していったため結構面倒
必要枚数についてはREADMEに数百枚程度の用意が望ましいとあるが、たくさんあっても教師画像と同じ枚数しか使用されないと解説しているサイトもあったり、実際にPowerShellを実行してもそのような記述があったりで正直よく分からない
一般的には数百枚程度、用意するのが望ましいようです(枚数が少ないと class 画像が一般化されずそれらの特徴を学んでしまいます)。
train_README-ja
調べても分からなかった点として、正則化画像にもtxtファイルでのタグ付け処理が必要なのかどうか
しかし数百枚のデータにタグ付けしていくことは現実的ではない気がするのでやらなかった
大丈夫だろうか
また、正則化画像自体も学習対象(girlなど一般クラスとして)となるため特定のモデル(7th_anime_v3_B.safetensorsやanythingなどのこと)に引っ張られたくない場合は、複数のモデルでの作成が望ましい
動画でも言及されているがLoraキャラ単体でしか生成しない場合は正則化画像は不要(girl=学習キャラになる)
データセットとコマンドファイルの準備
基本的に動画のとおり
ただし私は正則化画像を使用するため若干修正の必要がある
datasetconfig.toml
[general]
[[datasets]]
[[datasets.subsets]] image_dir = ‘D:\TrainingData\sozai’
caption_extension = ‘.txt’
num_repeats = 1
日本一わかりやすいLoRA学習!sd-scripts導入から学習実行まで解説!東北ずん子LoRAを作ってみよう!【Stable Diffusion】
赤字部分は各々のデータ格納場所、目的に応じて修正
[general]
[[datasets]]
[[datasets.subsets]]
image_dir = ‘C:\TrainingData\sozai’
caption_extension = ‘.txt’
num_repeats = 1[[datasets.subsets]]
正則化分を追記
is_reg = true
image_dir = ‘C:\TrainingData\seisoku’
class_tokens = ‘girl’
num_repeats = 1
そのまま参考となるサイトが見つからず、READMEを見ながら悪戦苦闘していたのですが、Lora適用時に1girlだけで生成しても教師画像に引っ張られることは無くなったので正則化の処理も上手くいっている気がする
コマンドライン
accelerate launch –num_cpu_threads_per_process 1 train_network.py –pretrained_model_name_or_path=X:\YOUR_FAVORITE_MODEL_PATH.safetensors –output_dir=D:\TrainingData\outputs –output_name=FILE_NAME_HERE –dataset_config=D:\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
日本一わかりやすいLoRA学習!sd-scripts導入から学習実行まで解説!東北ずん子LoRAを作ってみよう!【Stable Diffusion】
ここも各々の格納場所、主にLoraを使用するモデル、名前、実行回数を変更
学習で重要なところではtrain_batch_sizeはバッチ処理回数、max_train_epochsはエポック回数を表している
PCスペックに応じて変える
ほかの項目も調べれば分かるが、調べないと分からないうちは変えなくてもいいかと
accelerate launch –num_cpu_threads_per_process 1 train_network.py –pretrained_model_name_or_path=C:\StableDiffusion\stable-diffusion-webui\models\Stable-diffusion\〇〇〇〇〇〇.safetensors –output_dir=C:\TrainingData\outputs –output_name=test2-50 –reg_data_dir=C:\TrainingData\seisoku –dataset_config=C:\TrainingData\datasetconfig.toml –train_batch_size=2 –max_train_epochs=50 –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
格納場所・名前・正則化分を追記、バッチ回数なども変えています
実行
LoRA_Easy_Training_Scripts\SD_scripts を開き右クリックからターミナルで開く
下記コマンドを入力
venv/Scripts/Activate.ps1
(venv) PS C:\TrainingData\LoRA_Easy_Training_Scripts\sd_scripts>
と表示されたらあらかじめ準備していたコマンドライン.txtをすべてコピペして実行
コマンドラインの記述をよく見れば分かるがデータセットコンフィグもこの処理の中で実行される
終わったらコマンドラインの中で指定したOUTPUTフォルダの中にsafetensorsファイルが出来ているはず
注意点
正則化画像フォルダの命名規則
いろんなサイトを調べている中で”学習のepoch数に合わせてフォルダの命名を行う必要がある(下のREADMEでいうところの「5_cat」など)”との説明も多く見たがDreamBooth、キャプション方式ではフォルダ名ではなく直接的に画像を置かれているパスを指定する必要がある
方式が複数あるためどの学習方法を前提に解説しているか確認が必須
今回の方式では命名規則はなく、コマンドラインなどに格納場所を書いておけばそれでOK
Readmeにも書いてあった
まず注意点として、
config_README-ja より抜粋image_dir
には画像ファイルが直下に置かれているパスを指定する必要があります。従来の DreamBooth の手法ではサブディレクトリに画像を置く必要がありましたが、そちらとは仕様に互換性がありません。また、5_cat
のようなフォルダ名にしても、画像の繰り返し回数とクラス名は反映されません。これらを個別に設定したい場合、num_repeats
とclass_tokens
で明示的に指定する必要があることに注意してください。
正則化画像の枚数
素材の準備編で数百枚必要との情報もあったが学習時のPowerShellで下記の記載を確認
実際のところよく分からない
some of reg images are not used / 正則化画像の数が多いので、一部使用されない正則化画像があります
windows powershell
コメント