【Stable Diffusion Web UI】オリジナルLoRAの作り方(追加学習モデル)

この記事では、Stable Diffusion WebUI(AUTOMATIC1111)の追加学習をしてLoRAファイルを自作する方法を紹介しています。

30枚程度の画像を追加学習して、オリジナルのLoRAファイルを作成します。


Stable Diffusionとは

Stable Diffusionは、無料で使える画像生成AIです。テキストを打ち込むと、それに応じた画像が生成されるしくみです。人物や動物、風景など、さまざまな画像を生成できます。

例えば、「サングラスをかけた猫」と入力するとそのような画像が生成されます。生成する画像のスタイルも多様でイラストや写真、水彩画やアニメ調など、自分の好きなテーマでAIに生成してもらうことができます。

stablediffusion

Stable Diffusion Web UI(AUTOMATIC1111)の使い方

Stable Diffusion Web UI(AUTOMATIC1111)ブラウザを通じて手軽に画像生成を行える無料のWEBアプリケーションで、Google Chromeなどの主要なブラウザで利用できます。

プログラミングを一切必要とせず、WEB UIによる簡単なグラフィカルな操作が可能です。Stable Diffusion Web UIをローカルPCにインストールして使用する、もしくはクラウドサーバーにインストールして使用します。

sd-webui


Stable Diffusion Web UI(AUTOMATIC1111)に関する全般的な使い方については、以下の記事でまとめていますので、あわせてご覧ください。


  Stable Diffusion WebUIのインストール・使い方(初心者ガイド) この記事では、Stable Diffusion WebUI(AUTOMATIC1111)を使う方法をまとめて紹介しています。 業界最安級GPUクラウド | GPUSOROBAN


LoRAとは

Stable Diffusion Web UIのモデルにおいて「Checkpoint」と「LoRA」という似たような概念が使われます。


Checkpointは、モデルファイルの本体になります。一方のLoRAは追加学習ファイルと呼び、モデルファイル(Checkpoint)に対して追加学習を行った差分ファイルになります。差分を学習するためLoRAは非常に少ない計算量で作成できます。


Checkpointがモデルの本体だとすると、LoRAはパーツのような役割で、背景のLoRA、髪型のLoRA、服装のLoRAなど、複数のLoRAを1つのCheckpointに対して適用することができます。

CheckpointとLoRAはセットで使用するため、組み合わせを事前に把握しておく必要があります。


この記事ではモデルファイル(Checkpoint)に30枚の画像を追加学習して、LoRAファイルを作成します。

stablediffusion


モデルファイルは、Ether Blu Mixというアニメ風のモデルファイルを使用しています。


  Ether Blu Mix - Ether Blu Mix 5 | Stable Diffusion Checkpoint | Civitai 🔹☁️ Hello, this is Ether Blu Mix ☁️🔹 Ether Blu Mix is a stylized anime model specialized in creating character illustrations with vibrant colors, exp... https://civitai.com/models/17427/ether-blu-mix


モデルファイル(Checkpoint)の使い方は以下の記事で解説しています。


  【Stable Diffusion Web UI】モデルの使い方(Checkpoint) この記事では、Stable Diffusion WebUI(AUTOMATIC1111)のモデルの使い方について紹介します。 業界最安級GPUクラウド | GPUSOROBAN


追加学習をせずに既存のLoRAファイルをそのまま使う方法は、以下の記事で解説しています。


  【Stable Diffusion Web UI】LoRAの使い方(追加学習モデル) この記事では、Stable Diffusion WebUI(AUTOMATIC1111)の追加学習モデルLoRAの使い方について紹介しています。 業界最安級GPUクラウド | GPUSOROBAN


推奨環境

LoRAの学習には多くの計算をするため、GPUメモリ(VRAM)が必要になります。

GPUメモリ(VRAM)16GB以上が推奨です。


この記事ではGPUSOROBANのA4000を搭載したインスタンスを使用します。

さらに学習速度を上げたい場合は、GPUメモリの大きいA100を搭載したインスタンスがおすすめです。


GPUSOROBANは、GPUサーバーをクラウドで使えるサービスです。

ローカルPCのスペックが低くても、クラウドに接続することで高性能なGPUを利用できます。

1時間50円からの業界最安級のコストで利用でき、構築した環境や画像データをクラウドに保存できます。


GPUSOROBANの詳しい情報は公式サイトをご覧ください。


  生成AIに最適なGPUクラウド「高速コンピューティング」|GPUSOROBAN GPUSOROBANの高速コンピューティングは、NVIDIAの高速GPUが業界最安級で使えるクラウドサービスです。NVIDIA A100を始めする高速GPUにより、画像生成AI、大規模言語モデルLLM、機械学習、シミュレーションを高速化します。 業界最安級GPUクラウド | GPUSOROBAN


LoRAの学習方法

LoRAを作成する方法は以下の3通りありますが、この記事ではDreamBooth(キャプション)方式を使います。

  • DreamBooth(キャプション)
  • DreamBooth(class+identifer)
  • ファインチューン


DreamBooth(キャプション)の方式では、学習に「画像」と「キャプション」を使用します。

キャプションとは、学習させたくない内容をキーワードで指定するファイルです。

キャプションを使って学習を制御をかけることで、意図した画像を生成するモデルが作りやすくなります。


LoRA学習の環境構築

ここではLoRAの学習をする環境構築について解説します。


はじめにGPUSOROBANのインスタンスを作成・起動し、Stable Diffusion Web UIをインストールします。


GPUSOROBANのインスタンス作成方法およびStable Diffusion Web UIのインストール方法は、以下の記事をご覧ください。


  【Stable Diffusion Web UI】GPUSOROBANにインストール この記事では、Stable Diffusion WebUI(AUTOMATIC1111)をGPUSOROBANで使う方法を紹介しています。 業界最安級GPUクラウド | GPUSOROBAN


※インスタンス作成の際に[ソフトウェアの選択]でPython3.10を選択するようにしてください。

stablediffusion



またLoRAの学習には、元になるモデルファイル(Checkpoint)が必要になりますので、あらかじめご用意ください。


モデルファイル(Checkpoint)の入手方法は以下の記事で解説しています。


  【Stable Diffusion Web UI】モデルの使い方(Checkpoint) この記事では、Stable Diffusion WebUI(AUTOMATIC1111)のモデルの使い方について紹介します。 業界最安級GPUクラウド | GPUSOROBAN


ファイルを格納するディレクトリの準備

インスタンスに接続したら次のコマンドを実行して、LoRAの学習で使用するファイルの格納先を作成します。

mkdir -p TrainingData/{source_inputs,regular_inputs,outputs}

stablediffusion


次のコマンドを実行し、ディレクトリ階層が以下のようになっていることを確認します。

ls TrainingData

stablediffusion


(ディレクトリ階層)
TrainingData
    ├── source_inputs
    ├── regular_inputs
    └── raw_outputs


LoRA学習に使用する教師データの準備

LoRAで学習するための教師データを用意します。


教師データに使う画像の数は20枚以上を推奨しています。

学習に使う画像の数が多いほうがよいですが、多すぎると過学習になる問題もあります。

画像サイズは512x512以上、アスペクト比は1:1が推奨です。


この記事では手書きの画像を30枚ほど用意しました。

stablediffusion


用意したファイルを、インスタンスのディレクトリにアップロードします。

[TrainingData] > [source_inputs]

stablediffusion


インスタンスへのファイルのアップロード方法は以下の記事をご覧ください。


  インスタンスへのファイル転送(WinSCP) | GPUSOROBAN WinSCPを使ってローカル環境からGPUSOROBANのインスタンスへのファイル転送手順を解説しています。GPUSOROBANは低コストで高性能なGPUインスタンスを提供するクラウドサービスであり、詳細は公式サイトで確認できます 業界最安級GPUクラウド | GPUSOROBAN


sd-scriptsのインストール

LoRA学習を行うためのパッケージ「sd-scripts」をインストールします。


venv環境の作成

Stable Diffusion Web UIをインストールしたvenv仮想環境に、sd-scriptsをインストールすると依存関係でエラーが起こりますので、必ずvenv仮想環境を切り替えてからsd-scriptsをインストールしてください。


venv仮想環境(base)から出ます。

deactivate

stablediffusion


venv仮想環境(lora)を新しく作成します。

python -m venv .venv/lora

stablediffusion


作成したvenv仮想環境(lora)に入ります。

source ~/.venv/lora/bin/activate

stablediffuision

(lora)user@<インスタンス名>:~$のように括弧内の名称が変わったら、venv仮想環境の切り替えが完了です。


リポジトリ・ライブラリの準備

パッケージをアップデートします。

sudo apt-get update

stablediffusion


sd-scriptsのリポジトリを複製します。

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

stablediffusion


sd-scriptsのディレクトリに移動します。

cd sd-scripts

stablediffusion


必要なライブラリをインストールします。

pip install torch==1.13.1+cu117 torchvision==0.14.1+cu117 torchaudio==0.13.1 --extra-index-url https://download.pytorch.org/whl/cu117
pip install --upgrade -r requirements.txt
pip install -U --pre triton
pip install xformers==0.0.16rc425
pip install bitsandbytes
pip install scipy

stablediffusion


インストールしたソフトウェアの各種バージョン確認を行います。
Pythonを起動し、バージョンが3.10であることを確認します。

python

stablediffusion


次のコマンドを実行し、torchのバージョンが1.13であることを確認します。

import torch
torch.__version__

stablediffusion


torch.cuda.is_available()のコマンドを実行し、Trueが返されるとPyTorchからGPUが適切に認識されています。

torch.cuda.is_available()

stablediffusion


accelerate configの設定

ここではGPUの計算パラメーターのaccelerate configの設定をします。


次のコマンドを実行します。

accelerate config


以下の質問が開始されますので、カーソルキーで以下の項目を選び、Enterキーで次に進みます。

In which compute environment are you running?

:This machine


Which type of machine are you using?   

:No distributed training



以下の質問がされますので、回答のとおりに[文字列]を入力し、[Enter]キーで次に進みます。

Do you want to run your training on CPU only (even if a GPU / Apple Silicon / Ascend NPU device 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


最後に以下の質問が表示されますので、カーソルキーで以下の項目を選び、Enterキーで次に進みます。

Do you wish to use FP16 or BF16 (mixed precision)?

:fp16


stablediffusion


ここまででsd-scriptsのインストールが完了です。


stable-diffusion-webui-wd14-taggerのインストール

LoRAで画像を学習する際に、学習させない内容をキーワードで定義するキャプションファイルを作成します。


画像の特徴をキーワードとして抽出するのは直感では難しいので、stable-diffusion-webui-wd14-taggerという拡張機能を使います。

この拡張機能により画像の特徴を表すキーワードを自動で生成できます。


次のコマンドを実行し、venv環境(base)に切り替えます。

※venv仮想環境を切り替えずにStable Diffusion Web UIを起動した場合、sd-scriptsで構築した環境が崩れる可能性がありますので、 必ずStable Diffusion Web UIをインストールしたときのvenv仮想環境に切り替えるようにしてください。

source ~/.venv/base/bin/activate

stablediffusion


stable-diffusion-webuiのディレクトリに移動し、Stable Diffusion Web UIを起動します。

cd stable-diffusion-webui
bash webui.sh

stablediffuision


[Extensions]タブ、[Install from URL]タブを開き、[URL for extention’s git repogitory]に以下のURLを貼り付けて、[Install]ボタンをクリックします。

https://github.com/picobyte/stable-diffusion-webui-wd14-tagger

stablediffusion



[Installed]タブを開き、[Apply and restard UI]ボタンをクリックし、Web UIを更新します。

stablediffusion


更新後に[Tagger]タブが表示されていたら、インストール完了です。

stablediffusion


※以下の”toriato”が含まれるURLからでもwd14-taggerでもインストールをすることができますが、Stable diffusion Web UI v1.6では[taggar]タブが表示されないエラーが確認されています。

当該エラーが発生する場合は前述の"picobyte"が含まれるURLをご利用ください。

https://github.com/toriato/stable-diffusion-webui-wd14-tagger


キャプションの作成・編集

ここでは学習に必要なキャプションファイルを作成・編集する方法を解説します。


キャプションの作成

キャプションを作成する方法は以下のとおりです。


初めにデータのインプットとアウトプットをするフォルダパスの指定をします。

[Tagger]タブ、[Batch from directory]タブを選択します。

[Input directory]に学習用の画像データを格納したフォルダパスを貼り付けます。

/home/user/TrainingData/source_inputs


[Output directory]に出力先のフォルダパスを貼り付けます。

/home/user/TrainingData/raw_outputs

stablediffusion


次に画面の下の方にある[Additional tags(split by comma)]に任意のトリガーワードを入力します。

トリガーワードは作成したLoRAを呼び出すためのプロンプトとして使用します。

今回は猫のキャラクターを扱うためトリガーワードを[neko-chara]としました。

stablediffusion


最後に[Interrogate]ボタンをクリックします。

stablediffusion


次のような表示がされたら、キャプションファイルの作成が完了です。

stablediffusion


キャプションの編集

キャプションは、学習させたくない内容を指定するものです。

作成したキャプションファイルには、学習に必要なキーワードが含まれているため、そのままでは使えません。


キャプションファイルに記述されているキーワードを編集する必要があります。

まず以下のディレクトリからキャプションファイルを確認してみます。

[Stable-diffusion-webui] > [TrainingData] > [raw_outputs]


拡張子.txtのテキストファイルをエディタ等で開きます。(この記事では、VScodeのエディタを使用しています。)

stablediffision


例として[img(1).txt]を開いてみます。


キャプションファイルの先頭にはトリガーワード(neko-chara)が表示され、続いて画像[img(1).txt]の特徴を抽出したキーワードがカンマ区切りで並んでいます。


これらのキーワードから学習させたいものを削除します。

neko-chara, greyscale, monochrome, no humans, white background, pokemon (creature), cat,solo, simple background, looking at viewer, open mouth, animal focus


※キャプションは学習させたくないものを指定するファイルのため、ここでは学習させたいキーワードを削除する点にご注意ください。


学習させたいキーワードの削除後は、以下のようにトリガーワードと学習させたくないキーワードだけが残ります。

neko-chara, greyscale, monochrome, no humans, white background, solo, simple background, looking at viewer


キャプションファイルは学習用画像の枚数の分だけ生成されているため、全てのファイルを手動でキーワード編集していては日が暮れてしまいます。


この記事ではスクリプトを使って自動的ににキャプションファイルの編集を行います。


このスクリプトは、指定のディレクトリの中のキャプションファイルから、指定したキーワードを削除するプログラムになっています。


まず除外するキーワードはWeb UIの[tagger]タブの[Tag confidences]を参照します。

[Tag confidences]では、全てのキャプションファイルのキーワードが集計されていますので、この中から学習させたいキーワードを控えておきます。

stablediffusion


次のコマンドでPythonファイルを作成し編集します。

nano pruning.py

stablediffusion


以下のスクリプトをコピーして開いたファイルに貼り付けます。

[excluded_keywords]に学習させたいキーワード(=キャプションファイルから削除するキーワード)を入力します。

編集を終えたら[Ctrl]+[S]キーでファイルを保存し、[Ctrl]+[X]でファイルを閉じます。

import os
excluded_keywords = ['cat','pokemon (creature)','solid circle eyes',':3','animal focus','comic','white cat','._.','open mouth']
input_directory = "/home/user/TrainingData/raw_outputs"
output_directory = "/home/user/TrainingData/source_inputs"
for filename in os.listdir(input_directory):
    if filename.endswith(".txt"):
        input_path = os.path.join(input_directory, filename)
        output_path = os.path.join(output_directory, filename)
        with open(input_path, "r") as input_file:
            content = input_file.read()
            keywords = content.split(", ")
            filtered_keywords = [kw for kw in keywords if kw not in excluded_keywords]
        with open(output_path, "w") as output_file:
            output_file.write(", ".join(filtered_keywords))
print("done")

stablediffusion


python pruning.pyを実行し、全てのキャプションファイルから指定したキーワードを削除します。

python pruning.py

stablediffusion


キーワードを削除したキャプションファイルは、[TrainingData] > [source_inputs]のディレクトリに格納されています。

stablediffusion


datasetconfigファイルを作成する

LoRAの学習におけるパラメーターを指定するdatasetconfigファイルを作成する手順を解説します。

次のコマンドを実行してディレクトリを移動し、datasetconfigファイルを作成し編集します。

cd TrainingData
nano datasetconfig.toml


以下の内容をコピーして開いたファイルに貼り付けます。

[general]
[[datasets]]
[[datasets.subsets]]
image_dir = '/home/user/TrainingData/source_inputs'
caption_extension = '.txt'
num_repeats = 1


image_dirの行に学習に使用する画像ファイルのディレクトリパスを指定します。

num_repeatsは繰り返し学習する回数になります。

stablediffusion


編集が完了したら、[Ctrl]+[S]キーで保存し、[Ctrl]+[X]キーでファイルを閉じます。


Accelerateファイルを作成する

LoRAの学習を実行するaccelerate.shファイルを作成する方法を解説します。

次のコマンドを実行し、ディレクトリを移動してaccelerate.shファイルを作成し編集します。

cd sd-scripts
nano accelerate.sh


(accelerate.shファイルの編集画面)

accelerate launch --num_cpu_threads_per_process 1 train_network.py
--pretrained_model_name_or_path=/home/user/stable-diffusion-webui/models/Stable-diffusion/etherBluMix_etherBluMix5.safetensors
--output_dir=/home/user/stable-diffusion-webui/models/Lora
--output_name=neko-chara
--dataset_config=/home/user/TrainingData/datasetconfig.toml
--train_batch_size=1
--max_train_epochs=20
--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

stablediffusion


(主要なコマンドの説明)

--pretrained_model_name_or_path=/home/user/stable-diffusion-webui/models/Stable-diffusion/etherBluMix_etherBluMix5.safetensors

LoRAの元になるモデルファイル(Checkpoint)のパスを指定します。LoRAは追加学習をするため、元になるモデルファイルが必になります。


--output_dir=/home/user/stable-diffusion-webui/models/Lora

LoRAファイルを格納するディレクトリパスを指定します。


--output_name=neko-chara

LoRAファイルの名前を指定します。


--dataset_config=/home/user/TrainingData/datasetconfig.toml

datasetconfig.tomlファイルが格納されているディレクトリパスを指定します。


--train_batch_size=1

バッチサイズを上げると学習の速度があがります。
GPUメモリ(VRAM)の大きさによってバッチサイズに限りがあります。


--max_train_epochs=10

学習の上限回数を指定できます。epochが増えると学習の精度が上がりますが、epochを上げすぎると過学習になることもあります。


編集が完了したら、[Ctrl]+[S]キーで保存し、[Ctrl]+[X]キーでファイルを閉じます。


学習の実行

用意したファイルを使って学習を実行します。

次のコマンドを実行し、venv仮想環境を(lora)に切り替えます。

source ~/.venv/lora/bin/activate

stablediffuision


次のコマンドを実行し、ディレクトリを移動します。

cd sd-scripts

stablediffusion


次のコマンドを実行し、accelerate.shファイルを実行します。

bash accelerate.sh

stablediffusion


以下の表示がされたら、LoRAファイルの作成が完了です。

saving checkpoint: xxxxx

stablediffuision


動作確認

作成したLoRAファイルを確認してみます。

次のコマンドでディレクトリを移動し、作成したLoRAファイルを確認します。

cd ../stable-diffusion-webui/models/Lora/
ls

stablediffusion


この記事では[neko-chara.safetensors]が作成したLoRAファイルになります。

venv仮想環境を(base)に切り替えます。

source ~/.venv/base/bin/activate

sd-lora-leraning


ディレクトリを移動し、Stable Diffusion Web UIを起動します。

cd 
cd stable-diffusion-webui/
bash webui.sh

sd-lora-leraning


[Lora]タブを開き、[Refresh]ボタンを押すと[LoRAファイルのサムネイル]が表示されます。

[サムネイル]をクリックすると、[Prompt]に&lt;lora:neko-chara:1>というトリガーワードが表示されます。

stablediffusion


LoRAの元になるモデルファイル(Checkpoint)の設定をします。LoRAは追加学習をしたファイルであるため、元になるモデルファイルと組み合わせて使う必要があります。

[Stable Diffusion checkpoint]のプルダウンメニューからモデルを選択するとセットされます。

stablediffusion


この状態で[prompt]、[Negative prompt]にテキスト入力し、[Generate]を押して画像を生成します。

stablediffusion


学習データの特徴を捉えた画像が生成されていることが確認できました。

stablediffusion


参考までにこの記事で使用したパラメーターは以下のとおりです。

Prompt:&lt;lora:neko-chara:0.8>masterpiece, best quality, movie still, creature,solid circle eyes,two ears,sky, cloud
Negative prompt: NSFW, worst quality, low quality,bad ears,bad mouth,bad eyes
Steps: 20,
Sampler: DPM++ 2M Karras,
CFG scale: 7,
Seed: -1,
Size: 512x512,
Model hash: 6965f33b20,
Model: etherBluMix_etherBluMix5,
VAE hash: d080a9911b, VAE: kl-f8-anime2.vae.pt,
Lora hashes: "neko-chara: caaca595e494", Version: v1.6.0


もっと自由な画像生成を

Stable Diffusionを実行する環境で、以下のような悩みをお持ちではないでしょうか?

  • 画像生成が遅い
  • 使いたいGPUが使えない
  • GPUメモリ(VRAM)が足りない
  • ランタイムがリセットされる度にデータが消えるため、設定のやり直しが大変
  • 画像データのバックアップが面倒
  • Web UIの起動に時間がかかる
  • コンピューティングユニットの制限がストレス
  • 動作が不安定


制限を気にせず、高速かつ格安に画像生成がしたいなら、GPUクラウドサービス「GPUSOROBAN」がおすすめです。


  生成AIに最適なGPUクラウド「高速コンピューティング」|GPUSOROBAN GPUSOROBANの高速コンピューティングは、NVIDIAの高速GPUが業界最安級で使えるクラウドサービスです。NVIDIA A100を始めする高速GPUにより、画像生成AI、大規模言語モデルLLM、機械学習、シミュレーションを高速化します。 業界最安級GPUクラウド | GPUSOROBAN


まとめ

この記事では、LoRAファイルの作り方について紹介しました。

オリジナルのLoRAファイルを作ることで、意図した画像を生成しやすくなります。

Stable Diffusionに関する記事を以下のページでまとめていますので、あわせてご覧ください。


  Stable Diffusion WebUIのインストール・使い方(初心者ガイド) この記事では、Stable Diffusion WebUI(AUTOMATIC1111)を使う方法をまとめて紹介しています。 業界最安級GPUクラウド | GPUSOROBAN



MORE INFORMATION

GPUでお困りの方はGPUSOROBANで解決!
お気軽にご相談ください

10日間無料トライアル
詳しい資料はこちら
質問・相談はこちら