当ブログにはプロモーション、アフィリエイト広告が含まれます。

【2024年版】sd-scriptsでLoRAを作成する方法

昨今便利なLoRA作成ツールが登場していますが、Web UIのアップデートで使えなくなってしまうことがありました。

原因を調べてもわからないことが多く、素人が解決するのは中々難しいです。

そこで今回は、さまざまなLoRA作成ツールの元となっており、安定して使用できる「sd-scripts」の使い方についてご紹介します。

sd-scriptsとは?

sd-scriptsはKohyaさんという方が作ったLoRA作成ツールです。

コマンドラインで操作するLoRA作成ツールで、少し難しそうに見えますが、基本はパスや学習回数などを指定するだけでオリジナルのLoRAが作れます。

またスタンドアローンで動かせるため、他のツールと競合することがなく安定して使用が可能です。

他のLoRA作成ツールは、大体sd-scriptsが元になっているので、こちらに慣れておくと何かと便利です。

kohya-ss/sd-scripts

sd-scriptsのインストール

  1. pythonとgitのインストール
  2. gitでsd-scriptsをクローン
  3. accelerate configの回答
  4. bitsandbytesのインストール(任意)

pythonとgitのインストール

Stable Diffusion Web UIをインストールしている方は既に導入済みなので飛ばして大丈夫です。

sd-scriptsを動かすためにpython、インストールやアップデートするためにgitが必要です。

githubのページにpythonとgitのリンクがあるので、そこからダウンロードしてください。

Windows Required Dependencies

pythonのインストーラーを起動したら、「Add python.exe to PATH」にチェックを入れて「Install Now」をクリックしてください。

それ以降は特に設定することなくそのまま進んで問題ありません。

gitのインストーラーも設定できる項目は多いですが、全てデフォルトのまま進んで問題ありません。

gitでsd-scriptsをクローン

sd-scriptsをインストールしたいフォルダに移動して、ターミナルを開いてください。

フォルダ内の空白部分で右クリックして、「ターミナルを開く」で起動できます。

パスに日本語があると動かない可能性があるので、ドライブ直下がおすすめです。

ターミナルが開いたら以下のコマンドを一行ずつコピペして実行してください。

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

python -m venv venv
.\venv\Scripts\activate

pip install torch==2.0.1+cu118 torchvision==0.15.2+cu118 --index-url https://download.pytorch.org/whl/cu118
pip install --upgrade -r requirements.txt
pip install xformers==0.0.20

accelerate config

簡単に説明すると、上2行はsd-scriptsをフォルダにインストールして、sd-scriptsにディレクトリを変更しています。

python -m venv~は仮想環境を作成・アクティブにするためのスクリプトです。

pip~では必要なライブラリをインストールしています。ここは環境によって結構時間がかかります。

accelerate configは、accelerate(Pythonを高速化するためのライブラリ)の設定です。

accelerate configの回答

accelerate configを実行すると、いくつか質問に答える必要があります。

以下の通りに回答してください。

  1. This machine
  2. No distributed training
  3. NO
  4. NO
  5. NO
  6. all
  7. fp16

「*」が付いてる方が選択されている方です。またカーソルは矢印キーではなく数字キーで動かせます。

7以外はカーソルを動かす必要はありませんが、7のfp16は数字キー1で選択できます。

「NO」と「all」はキーボードで入力してください。

なお、7については、RTX30,40系でVRAM12GBの場合、bf16の方がいいそうです。ここはご自身の環境に合わせて選択してください。

bitsandbytesのインストール(任意)

こちらはオプションで、メモリ使用量削減や計算速度の向上が期待できる「AdamW」というオプティマイザーを使用するのに必要なライブラリです。

インストールしなくても別のオプティマイザーを使用すれば動かせますが、AdamWを使いたい場合はこちらをインストールする必要があります。

なお、バージョンが2つあり、私の環境だと0.35.0は動きませんでした。

ですので、0.41.1をインストールしています。

インストールする場合は、再度sd-scripts内でターミナルを開き、仮想環境をアクティブにしてください。

.\venv\Scripts\activate

その状態で以下のコードを実行します。

python -m pip install bitsandbytes==0.41.1 --prefer-binary --extra-index-url=https://jllllll.github.io/bitsandbytes-windows-webui

これでインストールは完了です。

LoRA作成に必要な画像とファイルの準備

LoRA作成に必要な画像データやファイルの準備をします。

  1. 学習画像の準備
  2. キャプションデータの作成
  3. tomlファイルの作成
  4. 実行スクリプトの作成

学習画像の準備

任意の場所にフォルダを作って、学習させたい画像を入れておいてください。

私はsd-scripts内にtrainというフォルダを作り、その中に画像を入れました。

C:\sd-scripts\train

1枚特徴をつけた女性を作成し、referenceで20枚生成しています。

作成した時のプロンプト

1girl, white background, ponytail, red hair ribbon, white shirt, denim pants, black hair

キャプションデータの作成

キャプションデータは、画像の内容をテキストで記述したデータです。

これを編集することで学習させる要素を調整できます。

作り方はいろいろありますが、おそらく「dataset-tag-editor」が一番使いやすいと思います。

Web UIの拡張機能・スタンドアローンでも動かせます。

別途記事にて解説しているので、こちらを参考にしてみてください。

tomlファイルの作成

こちらは学習時に読み込む設定ファイルのことです。

tomlファイルでパスやリピート数を指定しておけば、それを学習時に読み込むことができます。

sd-scriptのフォルダ内にテキストファイルを作成し、以下を入力してください。

[general]
[[datasets]]
[[datasets.subsets]]
image_dir = 'C:\sd-scripts\train'
caption_extension = '.txt'
num_repeats = 10
image_dir準備した画像フォルダのパス
caption_extension キャプションデータの拡張子
num_repeats学習の各ステップを繰り返す回数

num_repeatsはいろいろな意見がありよくわからないので、公式と同じ10にしました。

任意の名前をつけて保存し、拡張子を「.toml」に変更します。

今回は「config.toml」で保存しました。

拡張子が表示されていない方は、フォルダの表示オプションから設定できます。

実行スクリプトの作成

学習を実行するためのスクリプトを作成します。

公式のやつだとうまく動かせなかったので、こちらの動画概要欄にあるスクリプトをお借りしました。

日本一わかりやすいLoRA学習!sd-scripts導入から学習実行まで解説!東北ずん子LoRAを作ってみよう!【Stable Diffusion】
🐸本動画は、画像生成AI『Stable Diffusion webUI AUTOMATIC1111』(ローカル版)で使用する学習データの自作方法について解説したものです。23年4月時点での仕様に基づいて作っています。🐸本動画は技術研究目的で...

赤字の部分は自身の環境に合わせて編集してください。

accelerate launch --num_cpu_threads_per_process 1 train_network.py
 --pretrained_model_name_or_path=学習に使用するモデル
 --output_dir=LoRAの出力先
 --output_name=LoRAのファイル名
 --dataset_config=作成した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
--train_batch_size大きくすると学習速度が向上しますが、VRAM消費量も増加します。
--max_train_epochs全体の学習を何回繰り返すか
--optimizer_typebitsandbytesをインストールしていれば使用可。してない場合は別のを指定、または削除してください オプティマイザ関係

なお、学習回数については「画像枚数×リピート数×エポック数=ステップ数」となります。

このステップ数によって結果が変わると言われていますが、こちらもいろいろな意見があり、1000、2000、4000が良いなどさまざまです。

結局自分が良ければいいので、ここらへんも結果を見ながら調整してみてください。

それぞれ設定したら改行は削除して、行ごとに半角スペースで区切ります。

ChatGPTに「改行を削除して行ごとに半角スペースで区切ってください」とお願いすればやってくれます。

ChatGPT

私の環境だとこのような感じです。

accelerate launch --num_cpu_threads_per_process 1 train_network.py --pretrained_model_name_or_path=C:\stable-diffusion-webui\models\Stable-diffusion\2D\anyloraCheckpoint_bakedvaeBlessedFp16.safetensors --output_dir=C:\stable-diffusion-webui\models\Lora --output_name=sample --dataset_config=C:\sd-scripts\config.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

モデルはanyloraを使用。outputはそのままsdwebuiのloraフォルダを指定してます。

sd-scriptsでLoRA作成

sd-scriptで仮想環境をアクティブにして、上記で作成したスクリプトを実行します。

実行する前の画面はこんな感じです。

実行すると学習が始まります。

今回画像枚数20枚×リピート数10×エポック数10でステップ数は2000です。

クオリティがかなり悪く、色が濃くぼやけた感じになってしまいました。

ステップ数4000にしたら多少マシになったので、結果がイマイチだったときは学習回数などを調整してみてください。

なお、過学習でも色が濃くぼやけた感じになることもあるので、学習回数は増減どちらも試すのをおすすめします。

LoRAのクオリティを調整する方法

いろいろパラーメータを設定できますが、おそらく影響が大きいのは元画像のクオリティや学習回数だと思われます。

実際にスクリプトはコピペで学習回数を変えたらうまくいったりもあったので、元画像にノイズの多い物が混じってないか、ステップ数の増減などを調整してみてください。

もし細かく設定したい場合は、公式にどの引数で何を設定できるかが書いてあります。

スクリプトを自分で編集したり、細かい部分を調整したりしたい方は、日本語の解説があるので公式を読みながら試してみてください。

sd-scripts/docs at main · kohya-ss/sd-scripts

sd-scriptsでLoRAを作成する方法まとめ

今回はsd-scriptsでLoRAを作成する方法について、ご紹介しました。

まとめ
  • sd-scriptsはLoRA作成ツールの元祖
  • WebUIのアップデートに影響されない
  • コマンドラインで動かすため若干操作が難しい
  • 元画像や学習回数でクオリティが大きく変化する

有名どころのLoRA作成ツールは結構触ってますが、アップデートによってUIが大きく変わったり、使用できなくなったりで、自由にLoRA作成ができないことがあります。

便利は便利ですが、使えないのが一番キツイので、そういう点だとsd-scriptsは一番安心できるかもしれません。

別のツールに影響されることなく、比較的アップデートも頻繁に行われているからです。

もちろん環境によっては不具合が出たり、ちょっと操作が難しいとかもありますが、覚えておいて損はありません。

LoRAを自分で作成してみたいという方はぜひ挑戦してみてください。

SDWebUIA1111
スポンサーリンク
イクリ

Stable Diffusionを使った画像生成AIの情報をメインに発信しています。
以前多ジャンルで運営していましたが、全ジャンルに同じ熱量を注ぐのが難しく分割しました。
AI以外のジャンルはnoteでゆるく運営してます。

イクリをフォローする
イクリをフォローする

コメント

タイトルとURLをコピーしました