今回は画像生成AIであるStable Diffusionで、LoRAによる学習を実行する方法を解説します。
前回の記事「sd-scriptsのインストール方法を解説 | LoRA学習環境をPaperspace、Google Colaboratoryで構築」でLoRA追加学習を行うためのツール、sd-scriptsのインストール方法を解説しました。
今回はその続編として、実際にLoRAで用意した画像データを学習させる方法について解説します。
GUIではなくコマンドラインでの操作が少しややこしいですが、習得すれば好きなキャラクターの画像を存分に生成できますので、ぜひ活用してみてください。
LoRA(Low-Rank Adaptation)を使用することで、学習させたキャラクターや衣装を固定して画像生成が可能。
また、当ブログのStable Diffusionに関する記事を以下のページでまとめていますので、あわせてご覧ください。

LoRA(Low-Rank Adaptation)の学習環境を用意する
LoRAで学習を行うためにKohya S.さんが公開されているsd-scriptsというツールを使用します。
sd-scriptsのインストール方法を以下の記事で解説していますので、事前に済ませておいてください。

LoRA(Low-Rank Adaptation)の学習方式
sd-scriptで使用できるLoRAの学習方式には以下の3つがあります。
- Dreambooth class+identifier
- Dreambooth キャプション
- fine tuning
Dreambooth class+identifierでは学習内容を細かく指定するのが難しく、fine tuningは学習コストが高いため、今回はDreambooth キャプションを使って学習を行います。
尚、今回紹介する学習手順はテルルとロビン【てるろび】旧やすらぼさんがYouTubeで公開されている「日本一わかりやすいLoRA学習!sd-scripts導入から学習実行まで解説!東北ずん子LoRAを作ってみよう!【Stable Diffusion】」を参考にさせて頂きました。

LoRA学習で使用するディレクトリ構造
学習に使用する作業フォルダとしてTrainingDataを作成し、その中に必要なデータを配置します。
/notebooks/ (ルートディレクトリ)
└── TrainingData
├── reference_image (素材画像)
├── regularized_image (正則化画像)
├── outputs (出力ファイル)
└── datasetconfig.toml
/notebooks/
がルートフォルダで、その下にTrainingData
フォルダがあります。そしてTrainingData
の下には役割が明示されたreference_image
, regularized_image
, outputs
という3つのサブフォルダと、datasetconfig.toml
というファイルがあります。datasetconfig.toml
は最後に作成しますので、まずはフォルダ構造だけを以下のように作成してください。
ルートディレクトリはPaperspace場合ですので、他の環境の場合は任意のディレクトリに置き換えてください。
学習用の画像素材を用意する
今回、学習に使用するデータはsd-scripts製作者のKohya S.さんが公開されているカエルの画像をお借りしました。

サンプルデータの中からランダムに6枚ほど選んで使用します。
画像をreference_image
のディレクトリに配置します。

LoRAの練習におすすめのデータセット
今回は手順を覚えて頂くために、少ない画像を手作業で用意しますが、手順を覚えて後にもう少し実践的なデータで練習したいという方向けに、無料で使用できる最適なデータセットを以下の記事で解説しています。


キャプションファイルを作成する
続いて学習内容を指定するためのキャプションファイルを作成思案す。
stable-diffusion-webui-wd14-taggerのインストール
キャプションファイルの作成には、AUTOMATIC1111 Web UIの拡張機能として使用できるstable-diffusion-webui-wd14-taggerというツールを使用します。
stable-diffusion-webui-wd14-taggerは、読み込んだ画像ファイルを解析し、その画像を表現するプロンプトをテキストファイルとして生成するツールです。
インストール手順
Web UIを起動したらExtensions
→Install from URL
と進み、以下のURLを入力してください。
https://github.com/toriato/stable-diffusion-webui-wd14-tagger

URLを入力したら、Install
をクリックしてtaggerをインストールします。
インストールが完了したらWeb UIを再起動します。
taggerでのキャプション生成手順
Web UIが再起動したら、Tagger
のタブが追加されていますのでクリックします。

Batch from directory
のタブをクリックします。

Input directory
とOutput directory
に学習用画像が配置されているディレクトリのパスを入力します。

Additional tags(split by comma)
にトリガーワードを設定します。今回はカエルの画像を学習させるためkero_chan
としました。

最後にInterrogate
をクリックします。

以下のようにメッセージが表示されたら、キャプションの生成が完了しました。

先ほど指定したディレクトリを確認すると、学習用の画像ファイルと同じ名前のテキストファイルが生成されていることが確認できました。

キャプションファイルを修正する
生成されたタグ
今回は例として01.txt
のファイルを確認してみます。以下のような内容となっています。
先頭には先ほど設定したトリガーワードが定義されています。
kero chan, no humans, white background, simple background, solo, open mouth, full body, dinosaur, from side, claws
このファイルは先ほど読み込んだ01.png
のカエルの画像を表現する文字列が並んでいます。
キャプションファイルは過学習を防止するための情報を保持するファイルであるため、学習させたくない内容を定義しておくものになります。
逆に、学習させたい内容を表す文字列はキャプションファイルから削除する必要があります。
学習させたい内容はキャプションファイルから削除する。
[素材]-[キャプション]=[学習データ]
修正後のタグ
01.txt
の内容を以下のように、トリガーワードと学習させたくない内容だけに編集しました。
kero chan, white background, simple background, dinosaur
同様の作業を他の全てのキャプションファイルにも実施します。
datasetconfig.toml
を作成する
続いて学習に必要な設定ファイルdatasetconfig.toml
を作成します。
テンプレートを作成する
まず以下のテンプレートをメモ帳などにコピーしてください。
[general]
[[datasets]]
[[datasets.subsets]]
image_dir = '\notebooks\TrainingData\reference_image'
caption_extension = '.txt'
num_repeats = 1
パラメータを変更する
image_dir
の行に学習に使用する画像ファイルが格納されているディレクトリを指定します。
image_dir = '\notebooks\TrainingData\reference_image'
num_repeats
繰り返し学習する回数を指定します。
num_repeats = 1
ファイル名と拡張子を変更する
最後にファイルをdatasetconfig.toml
という名前で保存します。
その際、エンコードを必ずUTF-8
に設定して保存してください。

Accelerateのコマンドを作成する
LoRAの学習はMeta社が開発したPyTorchというライブラリによって実行されます。
PyTorchは、Pythonで記述されたオープンソースの機械学習ライブラリで、旧Facebookの人工知能研究グループにより開発されています。
また、今回使用するAccelerateは、PyTorchやTensorFlowの分散トレーニングを容易にするライブラリです。accelerate launch
コマンドの詳細は以下のページを参考にしてください。

コマンドテンプレート
まず、以下のaccelerate launch
コマンドのテンプレートをメモ帳などにコピーしてください。
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を使って画像生成を行う際に使用するモデルを設定してください。
ここはLoRAファイルを指定するのではなく、SDで画像生成する際に使用したいモデル(ベースとなるモデル)を指定します。
例えばリアル系であればChilloutMix、アニメ系であればSukiyakiMixV1などです。
LoRAは既存のStable Diffusionのモデルに対して局所的に追加学習を行うという形になるため、使いたいモデルごとにLoRAファイルを用意する必要になります。
--pretrained_model_name_or_path=X:\YOUR_FAVORITE_MODEL_PATH.safetensors
作成したLoRAファイルを出力するディレクトリのパスを指定します。
--output_dir=D:\TrainingData\outputs
先ほど作成したdatasetconfig.toml
ファイルが配置されているパスを指定します。
--dataset_config=D:\TrainingData\datasetconfig.toml
使用できるメモリに余裕がある場合は、高い数値を設定すると学習の速度が向上します。
--train_batch_size=1
今回、紹介した以外の項目は、必要に応じて変更してください。
実際に使用するコマンドを作成する
先ほどのコマンドのテンプレートを実際に使用できる形に整形します。
- 全ての改行を削除する
- コマンド間は半角一文字分のスペースを入れる
整形後のコマンド例
整形後のコマンド例です。
整形後は以下のように全てのコマンドが1行に集約されます。
今回はPaperspaceで実行する場合の例として作成しました。パスなどは各環境に合わせて変更してください。
accelerate launch --num_cpu_threads_per_process 1 train_network.py --pretrained_model_name_or_path=/notebooks/stable-diffusion-webui/models/Stable-diffusion/breakdomain_M2000.safetensors --output_dir=/notebooks/TrainingData/outputs --output_name=FILE_NAME_HERE --dataset_config=/notebooks/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学習を実行する
accelerateコマンドを実行して学習を行います。
accelerate launchコマンドを実行する
まず、コマンドラインを起動したらsd-scriptsのディレクトリに移動します。
(ルートディレクトリは環境に応じて変更してください)
cd /notebooks/sd-scripts/
コマンドラインに先ほどのaccelerate launch
コマンドとパラメータを貼り付け、実行します。
accelerate launch --num_cpu_threads_per_process 1 train_network.py --pretrained_model_name_or_path=/notebooks/stable-diffusion-webui/models/Stable-diffusion/breakdomain_M2000.safetensors --output_dir=/notebooks/TrainingData/outputs --output_name=FILE_NAME_HERE --dataset_config=/notebooks/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
実行結果
正常に学習が実行されると以下のように学習ログが出力されます。
/usr/local/lib/python3.10/dist-packages/bitsandbytes/cuda_setup/paths.py:27: UserWarning: WARNING: The following directories listed in your path were found to be non-existent: {PosixPath('/usr/local/lib/python3.10/dist-packages/cv2/../../lib64')}
warn(
CUDA SETUP: CUDA runtime path found: /usr/local/cuda-11.6/lib64/libcudart.so
CUDA SETUP: Highest compute capability among GPUs detected: 6.1
CUDA SETUP: Detected CUDA version 116
CUDA SETUP: Loading binary /usr/local/lib/python3.10/dist-packages/bitsandbytes/libbitsandbytes_cuda116_nocublaslt.so...
use 8-bit AdamW optimizer | {}
override steps. steps for 10 epochs is / 指定エポックまでのステップ数: 60
running training / 学習開始
num train images * repeats / 学習画像の数×繰り返し回数: 6
num reg images / 正則化画像の数: 0
num batches per epoch / 1epochのバッチ数: 6
num epochs / epoch数: 10
batch size per device / バッチサイズ: 1
gradient accumulation steps / 勾配を合計するステップ数 = 1
total optimization steps / 学習ステップ数: 60
steps: 0%| | 0/60 [00:00<?, ?it/s]
epoch 1/10
steps: 10%|███████████████▎ | 6/60 [00:11<01:39, 1.83s/it, loss=0.0698]
epoch 2/10
steps: 20%|██████████████████████████████▍ | 12/60 [00:20<01:20, 1.68s/it, loss=0.0577]
epoch 3/10
steps: 30%|█████████████████████████████████████████████▌ | 18/60 [00:29<01:08, 1.62s/it, loss=0.0535]
epoch 4/10
steps: 40%|████████████████████████████████████████████████████████████▊ | 24/60 [00:38<00:57, 1.60s/it, loss=0.0265]
epoch 5/10
steps: 50%|████████████████████████████████████████████████████████████████████████████ | 30/60 [00:47<00:47, 1.58s/it, loss=0.0506]
epoch 6/10
steps: 60%|███████████████████████████████████████████████████████████████████████████████████████████▏ | 36/60 [00:56<00:37, 1.57s/it, loss=0.0424]
epoch 7/10
steps: 70%|██████████████████████████████████████████████████████████████████████████████████████████████████████████▍ | 42/60 [01:05<00:28, 1.57s/it, loss=0.0388]
epoch 8/10
steps: 80%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▌ | 48/60 [01:14<00:18, 1.56s/it, loss=0.0404]
epoch 9/10
steps: 90%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▊ | 54/60 [01:24<00:09, 1.56s/it, loss=0.0353]
epoch 10/10
steps: 100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 60/60 [01:33<00:00, 1.55s/it, loss=0.0642]
saving checkpoint: /notebooks/TrainingData/outputs/kero_chan01.safetensors
model saved.
steps: 100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 60/60 [01:35<00:00, 1.60s/it, loss=0.0642]
root@XXXXXXX:/notebooks/sd-scripts#
最後にsaving checkpoint
としてモデル名が表示されたら学習完了です。
saving checkpoint: /notebooks/TrainingData/outputs/kero_chan01.safetensors
最初に作成したoutputs
フォルダの中にkero_chan01.safetensors
が生成されています。
これでLoRAファイルの作成は完了です。
作成したLoRAファイルを使って画像を生成する
実際にStable DiffusionでLoRAファイルを使って画像を生成する方法は、以下の記事で解説しています。

Stable Diffusionのローカル環境
Stable Diffusionを使用する際にGoogle ColaboratoryやWebサービスを利用されている方も多いかと思います。しかし、最近Google Colabの無料での使用範囲が大きく制限されたり、Webサービスでは月額費用がかかったりします。
欲しいイラストを生成するにはかなりの回数をトライする必要があるため、これらの制約に縛られることなく使用できるローカル環境を構築するのがおすすめです。
ローカルのPCに搭載するグラフィックボード
ローカルマシンで実行する上で重要になってくるのがグラフィックボードです。
Stable Diffusionでイラストを生成するために実行される推論処理を、グラフィックボード上のGPUを使って大幅に高速化することができます。
トライする回数が増えれば品質の高いイラストが生成される可能性が上がりますので、グラフィックボードは重要です。Stable Diffusionで使用するためのGPUは2022年に新たにNVIDIAから発売されたRTX4000シリーズのGPUとVRAM12GB以上のものがおすすめです。最近は半導体不足も一服したこともあり、新しい製品ながら価格が下がりつつあります。
エントリーモデルのGPU
予算を安く抑えたい方向けにはRTX4070を搭載したグラフィックボードがおすすめです。
予算に余裕がある方向け ミドル~ハイエンド
予算に余裕がある方向けにおすすめのRTX 4080、ビデオメモリ16GB以上搭載のモデルです。
大サイズの画像を高速に生成したい方向けのハイエンドGPU、RTX 4090 ビデオメモリ24GB搭載モデルです。
予算とパフォーマンスに合わせて選んでみてください。
画像生成AIについて学ぶ
動画学習プラットフォームUdemyでは、画像生成AIで高品質なイラストを生成する方法や、AIの内部で使われているアルゴリズムについて学べる講座が用意されています。
Udemyは講座単体で購入できるため安価で(セール時1500円くらいから購入できます)、PCが無くてもスマホでいつでもどこでも手軽に学習できます。
画像生成AIの使い方を学ぶ
Stable DiffusionやMidjourneyの使い方や活用方法を勉強したい方には、以下の講座がおすすめです。

画像生成AIの仕組みを学ぶ
画像生成AIの仕組みについて学びたい方には、以下の講座がおすすめです。
画像生成AIで使用される変分オートエンコーダやGANのアーキテクチャを理解することで、よりクオリティの高いイラストを生成することができます。

UdemyのStable Diffusionなど、AIアート関連の講座は海外のものも多いですが、ブラウザのリアルタイム翻訳機能を使うことで日本語字幕付きで視聴できます。
Udemyの海外講座の字幕を日本語化する方法
まとめ
今回はsd-scriptsを使って実際にLoRA学習を実行する方法を解説しました。
実行する環境や内容によってさらにパラメータを調整することで良い結果を得られるようになりますので、データセットやパラメータを工夫してみてください。
LoRAに関するトピックを以下の記事でまとめています。

また、以下の記事で効率的にPythonのプログラミングスキルを学べるプログラミングスクールの選び方について解説しています。最近ではほとんどのスクールがオンラインで授業を受けられるようになり、仕事をしながらでも自宅で自分のペースで学習できるようになりました。
スキルアップや副業にぜひ活用してみてください。

スクールではなく、自分でPythonを習得したい方には、いつでもどこでも学べる動画学習プラットフォームのUdemyがおすすめです。
講座単位で購入できるため、スクールに比べ非常に安価(セール時1200円程度~)に学ぶことができます。私も受講しているおすすめの講座を以下の記事でまとめていますので、ぜひ参考にしてみてください。

それでは、また次の記事でお会いしましょう。
参考
