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 Quick Pickでcustomを選択します。Save trained model asの部分はsafetensorsを選択して下さい。
出来上がったLoRAの拡張子になります。
2.Pretrained model name or pathからベースとなるmodelを選択します。アニメ系などであればanyLoRAというモデルがあるのでCivitAIからダウンロードしてその辺を選んでみると良いかもしれません。
今回は安易ですがモデルの画像に車が使われていたのでunstableinkdreamという名前のLoRAをダウンロードしたのでこれを使います。
ここのタブ設定は以上です。全部の項目を説明すると長くなるので最低限LoRAを作るための設定のみして行きます。

Sorce Modelの設定画面



Step 2: Foldersの設定

次に隣のタブのFoldersの設定を行います。
1.Image folderとOutput folderにそれぞれ該当のフォルダを設定します。
こちらは前回の準備編で作成したフォルダをそれぞれ指定します。
Image folderには教師画像が入っているフォルダを選択し、Output folderは出来上がったLoRAが入るフォルダーです。
2.Model output nameは出来上がるLoRAの名前です。ここにつけた名前で○○.safetensorsという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セットの学習とは教師画像数×リピート回数です。
ということは集めた教師画像数とフォルダ名称に設定したリピート回数を何回学習するかということになります。
LoRAの場合は3~10ぐらいで十分とのこと。

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になります。


Parametersの設定画面2

Mixed precision & Save presicion

次の行にすすんでMixed precisionとSave presicionですがこちらはGeforce40系の12G以上を使ってるのであればbf16でそれ以下であればap16を選択します。
その隣のNumber of CPU threads per coreはCPUのコアが同時に処理できる命令の数を表す指標です。
学習時のCPUコアごとのスレッドの数です。タスクマネージャーのパフォーマンスを見ながら増やすと良いです。


Parametersの設定画面3

Optimizer

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

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

Parametersの設定画面4

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)の設定です。
Network Rank(Dimension)が大きいほど、元のモデルに近いカスタマイズが可能になりますが、追加学習に時間がかかります。逆に、Network Rank(Dimension)が小さいほど、元のモデルから大きく変化したカスタマイズが可能になりますが、追加学習に時間がかからなくなります。

Network Rank(Dimension)の最適な値は、使用するモデルやデータセットによって異なります。一般的には、以下のような規則があります。

デフォルト8ですが32~128が良いみたいです。元画像の要素が強く出すぎるのであれば数値を上げていくイメージでしょうか。

Network alphaはデフォルト1になってます。難しい話になるので出来上がったLoRAの精度がいまいちだなと思った時にこの数値をあげてみると良いぐらいに覚えておけば良いです。
ただし関係性としてはNetwork Rank>=Network alphaになるようにします。
Network AlphaとNetwork Rankが同じ値の場合、効果は打ち消されます。

Parametersの設定はここまでです。

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


フォルダの構成

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

Step 4: LoRA作成の実行

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

LoRAを生成する進捗状況



 

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

GPUの使用率




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

完成したLoRA

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

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

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

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

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