Kohya's GUIを使ったLoRAの作り方

How to create LoRA using Kohya's GUI.

事前準備が終わってついにオリジナルLoRAの作成にゃ。
準備さえ出来ていればここでは設定を入れるだけで作成に進めるにゃ。

教師画像集めが大変だったにゃ。
早く出来上がりが見てみたいにゃ~

一度環境を作ってしまえば設定して作成するまで工程は簡単なのにゃ
LoRAを作成するにはKohya's GUIが必要なのにゃ。
導入がまだの人は入れるのにゃ。



Kohya's GUIの導入

Kohya's GUIの導入

LoRAという追加学習を簡単に行えるようにしたツールです。

How-To Guides

Step 1: Sorce Modelの設定

kohya_ssのフォルダにあるgui.batをクリックしてGUIを起動します。
起動直後はDreamBooth画面が開いていると思いますがそのとなりのLoRAタブをクリックして移動して下さい。
LoRAタブの初期画面がSorceModelタブになります。
この画面から設定して行きます。

以下の画像の項目が表示されてない場合はDreamBoothタブを開いてるかも知れませんので画像の一番上の部分でLoRAが選択されているか確認して下さい。

1.ModelでPretrained model name or pathでベースにするモデルを選択します。Trained Model putput nameの部分は完了した際のLoraの名称を入力します。
2.Image folderに学習する画像のフォルダを選択します。ここで選択するフォルダは学習するフォルダの一つ上の階層のフォルダを指定します。
そのほかSDXLのLoRAを作成するのでチェックします。

ここを間違うと実行時に画像が見つからないエラーが表示されるので、その場合はここを見直してください。
ここのタブ設定は以上です。全部の項目を説明すると長くなるので最低限LoRAを作るための設定のみして行きます。

Sorce Modelの設定画面



Step 2: Foldersの設定

次にFoldersの設定を行います。
1.Output folderに該当のフォルダを設定します。
こちらは前回の準備編で作成したフォルダをそれぞれ指定します。
Output folderは出来上がったLoRAが入るフォルダーです。
ここの設定は以上です。

Foldersの設定画面



Step 3: Parametersの設定

次にParametersの設定を行います。
こちらは設定項目が沢山ありますが本記事では必要最低限に絞って設定して行きます。

Parametersの設定画面1

Train batch size

まずはTrain batch sizeを設定します
モデルのパラメータを更新する際に一度に使用するデータの数を指定するオプションです。
バッチとは「いっぺんに読み込む画像の枚数」です。バッチサイズ2なら、一度に2枚の画像を同時に学習します。
train batch sizeを大きくすると、学習が速くなる可能性がありますが、グラフィックボードのメモリ(VRAM)の消費量も増えます。
逆に、train batch sizeを小さくすると、学習が遅くなる可能性がありますが、VRAMの消費量も減ります。

train batch sizeが大きすぎると、CUDA out of memoryというエラーが発生します。
エラーにならないギリギリでは学習速度が低下します。タスクマネージャーで使用メモリ量を確認しながら調整するとよいでしょう。
また、違う絵を複数同時に学習すると個々の絵に対するチューニング精度は落ちますが、複数の絵の特徴を包括的にとらえる学習になるので、最終的な仕上がりが良くなる可能性があります。
設定可能な最大値と1で出来を比べてみると良いかも知れません。

Epoch

次に設定するのはその隣にあるEpoch数です。
1Epochは1セットの学習を表します。1セットの学習とは教師画像数×リピート回数です。
ということは集めた教師画像数とフォルダ名称に設定したリピート回数を何回学習するかということになります。
正則化画像を利用しない場合はリピート回数とEpochの関係性は気にする必要はありません。
よってEpoch数はLoRAファイルを作成する数を設定し、枚数の調整をリピート回数で行うと簡単です。
10ファイル作成し、ちょうど良いLoRAを採用するようにし、学習が少ない場合はリピート数を増やします。

正則化画像を使う場合の補足:
教師画像が入っているフォルダに設定する数値(repeats)とepoc数(epochs)の関係性。
教師画像が少なくても十分な特徴を持っている場合は、repeatsを小さくしてepochsを大きくすることで、精度の高いモデルを作成できる可能性があります。
逆に、教師画像が多くても似たような特徴しか持っていない場合は、repeatsを大きくしてepochsを小さくすることで、多様な特徴を学習できる可能性があります。

Max train epoch

次のMax train epochはミニバッチ勾配降下法という学習手法を用いる際の設定値ですが、設定してみてよさそうなところを探るしかないということです。
そんなこと言い出したら答えなんて出ないので設定しないのもありです。

Save every N epochs

次のSave every N epochsは設定したepoch数ごとにLoRAを作成する設定です。
例えばEpochに10を設定してここに3の値を設定すると3,6,9,10のタイミングでLoRAファイルを作成します。
完成したLoRAが過学習になり使い物にならなかったら6回目で出来上がったLoRAを使うみたいな使い方が出来ます。

Caption Extension

次のCaption Extensionは元画像と一緒に入っているタグが記述されたファイルの拡張子を設定します。
このサイトの導入手順を行ったのであればtxtになります。


Optimizer

Optimizerは選択するものによってかなり精度に違いが出ます。
Optimizerという部分でAdamW8bitが選択されてますが、これはVRAMの使用率が低くて精度が良いものということでデフォルトになってます。
しかし実感としては「AdamW」(32ビット)とか「Adafactor」がかなり精度が良いと思います。
「AdamW」(32ビット)はその名の通りデフォルトで選択されているものの32ビット版なので単純に考えると数倍結果が良いかもしれません。
「Adafactor」はAdam手法を取り入れつつ学習の進み具合に応じて学習率を適切に調節するのでLearning rate設定が自動で行われます。
この2点はより良い結果が得られるかもということを覚えておくと良いかもしれません。
ただしどちらもAdamW8bitよりVRAMを消費します。

「Adafactor」を使う場合はOptimizerの左にあるLR warmup(% of setps)の値を0にする必要があります。
0にしないと実行時にエラーになります。これに気づかずAdafactorを使えるようになるまでだいぶ悩みました。
また、他のOptimizer設定よりもLearning rateは高めの方が良いようです。0.001の高めの学習率が良いとされてます。

Adafactorは、AdamやRMSPropなどの他のオプティマイザーと比べて、学習率の初期値や減衰率に敏感ではありません。
そのため、あまり細かく調整する必要がなく、0.001という一般的な値で十分な場合が多いです
Adafactorは、学習率の減衰を指数関数的に行います。これは、学習が進むにつれて、学習率を徐々に小さくしていくことで、収束に近づけるためです。そのため、
初期値が少し大きめでも、最終的には小さな値になります。
とは言っても結局のところ正解は無いのでもう少し小さい学習率の方が良いかもしれませんし試すしかありません。

更にスクロールすると画像のMax resolutionとEnable bucketsの部分が出てきますが、ややこしい関係性なので理解しておいた方が良いでしょう。

Parametersの設定画面3

Learning rate

Learning rateは精度に関して重要な部分です。
はじめはデフォルトで良いですが慣れてきたらここを設定することもあるので説明を記載します。
学習の速度や精度に影響するパラメーターの一つで、大きすぎると学習が不安定になり、小さすぎると学習が遅くなります。

値が小さいほどゆっくりと学習を行い精度があがります。
値が大きいほどベースとなるモデルの影響を受けます。

デフォルトで1eー4(0.0001)になっています。
1e-4(0.0001)~1e-7(0.0000001)あたりから最適なところを探るとよさそうです。

1e-4の設定で作成後、他の設定値は同じまま1e-7を試してみた時にメモリ不足のエラーが発生したので値を小さくするほどメモリを消費する様です。

LR warmup

先の設定にあったEpochのどこのタイミングで学習率を最大にするかを設定します。
つまりEpochよりも大きな値を設定する意味がありません。
設定した値によって学習率が最大値に達するタイミングを制御します。
Epoch10でLR warmupを5にした場合は学習率の最大値に達する速度が早くそれ以降は一定に保たれます。
Epoch10でLR warmupを10た場合は最大値に達するまで徐々に学習率をあげ10で最大値に達します。
使い方としては1と10でLoRAを作成し理想的な方に近づけていきます。1の方が精度が良さそうであれば次は2と5で試してみるといった具合です。

enable buckets & max resolution


enable bucketsとは、画像のサイズやアスペクト比に関係なく、追加学習を行うことができるようにするオプションです。
enable bucketsにチェックした場合、画像はバケットサイズという範囲に自動的にスケーリングされます。バケットサイズはデフォルトでは256-1024ピクセルですが、max resolutionで指定した値があれば、それが優先されます。

max resolutionとは、画像のサイズを制限するためのオプションです。
max resolutionで指定した値よりも大きい画像は、その値に合わせて縮小されます。
max resolutionで指定した値よりも小さい画像は、そのままのサイズで学習されます。
enable bucketsとmax resolutionの関係性は以下の通りです。

・enable bucketsにチェックしない場合: max resolutionの設定は必須です。max resolutionで指定した値よりも大きい画像は縮小され、小さい画像は拡大されます。画像のアスペクト比は無視されます。
・enable bucketsにチェックした場合: max resolutionの設定は必要ありません。画像はバケットサイズという範囲に自動的にスケーリングされます。画像のアスペクト比は保持されます。ただし、もし画像のサイズを制限したい場合は、max resolutionで指定することができます。


Parametersの設定画面5

Network Rank & Network alpha

Network Rank(Dimension)の設定です。他のサイトでDimと書かれていたらこれのことです。
この値が大きいほど教師データに忠実になります。実感ですが上げれるだけ上げれば結果が良い気がします。

デフォルト8ですがキャラ学習の場合、実写など極め細やかな学習が必要な場合でも最大で32ほどあれば良いです。
StyleLoRAの場合は128~256という話もありますがSDXLの場合、そこまで必要なさそうです。

Network alphaはデフォルト1になってます。キャラLoRAの場合Network Rankの半分の設定で作成し、似てない場合はDimの値に近づけていくと良さそうです。
ただし関係性としてはNetwork Rank>=Network alphaになるようにすれば良いようです。
Network AlphaとNetwork Rankが同じ値の場合、効果は打ち消されます。

Advanced設定:
最後にアニメ系のLoRAの場合はAdvancedタブにあるClick Skipを2すると良いという情報があります。
これも本当に良いかどうかは試してみるしかないですが、今回は実写の車なので1のままにします。
  

フォルダの構成

★Advancedタブ情報追加(2023/10/11)★

フォルダの構成

Gradient checkpointing

メモリ不足でエラーが出る場合はこのオプションをチェックするとかなり余裕ができます。
デメリットは速度低下ですが、そもそもメモリ不足でエラーになるわけですから、その場合には必須です。
Gradient checkpointingとは、深層ニューラルネットワークを学習する際にメモリ使用量を削減するための手法です。通常、バックプロパゲーションで勾配を計算するためには、フォワードパスの出力を全て保存しておく必要がありますが、これはメモリを多く消費します。Gradient checkpointingでは、一部の層の出力だけを保存しておき、他は破棄します。バックプロパゲーションでは、保存した層から再度フォワードパスを計算して必要な出力を得ます。これにより、メモリ使用量をO (sqrt (n))まで減らすことができます。ただし、計算時間は増加します。


memory efficient attention

こちらの設定もLoRAの作成時に使用するメモリ量を削減することができます。
具体的には、attentionという機構を使って、画像の特徴を関連付ける際に、一部の計算を省略することでメモリ効率を高めます。
ただし、このチェックボックスをオンにすると、LoRAの品質が若干低下する可能性があります。


Full bf16 training(experimental)

RTX3XXX以上のグラボの場合はこのチェックをすることで速度向上とメモリ消費を抑えれる可能性があります。
ただしモデルによっては上手く動かない可能性があるので、有効にした場合と無効にした場合を比べてみて効果があれば有効にするのが良いです。
現時点では実験的な機能らしく試した結果、速度が見込めない場合は無効で使うと良いかもしれません。
ベースとなるモデルに依存するようなのでモデルごとに効果が出るか試す必要があります。


Persistent data loader

このチェックボックスは、学習データをメモリに保持するかどうかを選択するオプションです。
学習データをメモリに保持すると、学習速度が向上しますが、メモリ使用量が増加します。
学習データをメモリに保持しないと、学習速度が低下しますが、メモリ使用量が減少します。
VRAMに余裕がある場合はチェックすると生成速度が高まります。


Color augmentation

LoRA学習時にメモリ効率の高いAttentionレイヤーを使用するかどうかを選択するオプションです。
メモリ効率の高いAttentionレイヤーとは、xformersというライブラリに含まれる、メモリ使用量を削減しながら高速なAttention計算を実現するレイヤーのことです。

メモリ効率の高いAttentionレイヤーを使用すると、以下のようなメリットがあります。
・メモリ使用量が減少するため、GPUメモリが少ない環境でもLoRA学習が可能になる。
・Attention計算が高速化されるため、学習時間が短縮される。

しかし、メモリ効率の高いAttentionレイヤーを使用すると、以下のようなデメリットもあります。
・LoRA生成の品質が低下する可能性がある。
・xformersのバージョンによってはエラーが発生する可能性がある。

VRAMにかかわるので取り上げましたが、品質が下がる可能性を含むのでVRAMが足りないなどでなければ基本チェック無しで良さそうです。


Noise offset type

載せるべきか迷った部分ですが参考までに記載します。

このオプションは、LoRA学習時に教師データの画像に追加するノイズの種類を指定するものです。
ノイズとは、画像にランダムに発生する小さな変化やぼやけなどのことで、画像の品質を低下させる要因となります。
しかし、機械学習においては、ノイズを適度に加えることで、学習の効果を高めることができる場合があります。
なぜなら、ノイズを加えることで、教師データの多様性や表現力が向上し、モデルが教師データに適応しすぎることを防ぐことができるからです。
Originalが選択されていればノイズを使わないということになりますが、学習結果にちょっとしたスパイスを加えたい的な要素のようです。

解説だけ読んでると通常はそのままがよさそうです。おまじない的に適用したら良いものになるかも的に使う場面があるかもといった所。


Don’t upscale bucket resolution

LoRA学習時にメモリ効率の高いAttentionレイヤーを使用する場合に、Attention計算の解像度を上げるかどうかを選択するオプションです。
解像度を上げると、以下のようなメリットがあります。

Attention計算の精度が向上するため、LoRA生成の品質が向上する可能性があります。
Attention計算の安定性が向上するため、学習の収束が早くなる可能性があります。

しかし、解像度を上げると、以下のようなデメリットもあります。
メモリ使用量が増加するため、GPUメモリが少ない環境ではLoRA学習ができなくなる可能性があります。
Attention計算が遅くなるため、学習時間が長くなる可能性があります。

Parameterに関する設定はここまでです。

Step 4: LoRA作成の実行

ここまで設定が出来たらいよいよ実行です。
「Start traning」を押してLoRAを作成しましょう!
長かったですが、一度覚えてしまったらほぼ固定値なので次からは楽です。

実行ボタンを押すと以下のような感じでStepが進んで行き100%になったらLoRAの完成です。
場合によっては数時間かかるので寝る前とかにポチっと実行して置くのがお勧めです。
寝る前に以下のプログレスバーの0%が表示されるまでは見届けましょう。
もしもメモリ不足などでエラーが出る場合はこの表示が行われる前にエラーになります。
逆にここまで表示が行われたら時間がかかれども後は待つだけです。

LoRAを生成する進捗状況



 

実際のPCはどんな感じかと言いますと自分の環境だとGPUは12GのVRAMはフルで活用され、PCに乗ってる128Gのメモリは半分程の60Gほど消費します。

GPUの使用率




さて、実際出来上がったLoRAを試した結果ですが、比重0.8でこんな感じの絵が出来ました。

完成したLoRA

実感メモ

2025年4月18日更新

Illustriousが登場してから、LoRAの作成がかなり簡単になった。
設定にそこまでこだわらなくても、アニメ調のLoRAが手軽に作れるようになった。
出来上がった結果を見て、「ラインが太すぎる」と感じたら、Epochを下げるなどの調整が必要だが、ポイントを押さえれば問題ない。

基本的な手順
1. 高解像度の画像を30枚程度集めること。

2. 集めた画像の背景をwhite backgroundに加工する。Taggerで抽出したタグからwhite backgroundとsimple backgroundを覚えさせないようにする。

3. kohya'sアプリ起動後最初にAdamWのプリセット設定を読み込む。(たぶん気が付いてない部分で良い設定値になってるところがありそう)

4. Parametersは以下のように変更する:
- LR Scheduler: `cosine_width_restarts`
- Optimizer: `AdamW`
- Max resolution: `1536,1536`
- Network Rank (Dim): `64`
- Network Alpha: `32`
※Network Rankは32まで落としても良さそう。ここは作りながら調整していくと良い。

5. Advancedは以下のように変更する:
- Click Skip: `2`
- Gradient checkpointing: チェック(必須)
これによりグラボのメモリを節約できる。学習時間は延びるが、バッチサイズを増やせるので結果的に早くなる。
LoRAの品質も落ちないらしい。

実際の設定例
RTX4090を利用して、Max resolutionが1536サイズでもバッチサイズ3まで増やせる。

- バッチサイズ: `3`
- ステップ数: `10`
- Epoch: `10`
この設定で作成すればOK。学習しすぎると、ガビる以前にプロンプトが効きにくくなったり、
キャラのアップが多くなることがあるので、そのあたりは学習量で調整すれば問題ない。

SD1.5用LoRA作成用の準備

Kohya's GUIを使ったLoRAの作り方[SD1.5]

過去のSD1.5版のアーカイブ記事です。

長い解説だったのにゃ。
奥が深すぎて沼なのにゃ。

この作業も毎回全部読むのは大変だから箇条書きで書いておくにゃ。

1.gui.batでKohya's GUIを起動
2.LoRAタブに移動
3.SourceModelタブでベースとなるモデルの選択
4.Foldersタブに移動し教師画像フォルダとLoRAの出力先などを設定
6.Parametersタブに移動し、細かいパラメータの設定
7.Start traningで実行

なんども作業してるとふと忘れたときでもここを見るだけで作業できるにゃ。

ベースとなるモデルによっても調整が必要だからたまには詳細部分から読んでみるのが良いにゃ。