実写系LoRA制作のポイント(2)

目次

はじめに

前回はLoRA制作時の素材に関していくつかのポイントをまとめました。

そして、今回はkohya_ssを使用する際の設定項目についてまとめていきたいと思います。はじめにLoRA制作に使用するkohya_ssは優れたツールであり、このツールの内容についても多くの先人により詳細な使用方法説明が存在していますので、本記事では我々がLoRA制作時に気をつけているポイント・設定についてまとめていくものと致します。

kohya_ssの設定

LoRA制作で使用するツール「kohya_ss」には、様々な設定があり、初心者が扱うには難しい印象がありますが、ほとんどの項目についてはデフォルト値で使用できますので、何度か制作していくとわかってくるのではないかと思います。
今回は、基本的な使い方は理解されているという前提にさせて頂き、我々がLoRA制作時に気をつけているポイントを解説していく形にさせて頂きますので、ご了承ください。

設定項目

では、各設定項目を見ていきます。

ベースモデル(Pretrained model name or path)

ここで選択したベースモデルを使用して画像生成すると学習元の画像に近くなる、というイメージで捉えています。
使用する予定のモデルを選択するか、あるいはツールで用意されているものを選択して、学習をすすめていきます。
どのモデルを使うこともできますが、制作するLoRAがSDの場合は、SDのベースモデルを選択し、SDXLのLoRAを作る場合はSDXLのモデルを選択してください。

エポック数(parameters / Epoch)

1セットの学習回数です。
画像の数と、フォルダ名で指定した回数の乗算回数を、ここで指定したセット数を繰り返して学習します。
この値が大きくなるほど、学習する情報量が増えていきますが、学習時間が長くなります。またくりかえす学習の回数が多くなると「過学習」と呼ばれる学習しすぎた状態となりクオリティも低下します。
LoRA制作の初歩の段階では、この値を調整して学習の進み具合を確認していくのが良いと思います。

スケジューラ(parameters / LR Scheduler)

学習率と呼ばれる学習の具合を変化させていく設定です。
constant:一定した学習率
cosine:コサインカーブ、最初は頑張ってしだいにゆっくりになる
adafactor:調整しながら学習する
大雑把にいうとこのような感じですが、LoRA制作の初期は、constantで画像とタグ、回数等の確認をすすめていき、その結果を元にcosineやadafactorで学習し直していくのがよいように思います。

オプティマイザー(parameters / Optimizer)

学習の仕方というべきか、学び方というべきか、このアルゴリズムで学習がすすみます。どれがダメでどれが良いと一口に言えるものではなく、得意不得意があるように思いますので、素材により試していくのが良いと思います。
ちなみに、代表的なものについて私は下記のようにイメージしています

AdamW:万能型、オールマイティ、過学習になるのでチューニングには回数、学習率の調整が必要
Adafactor:過学習になりにくい、学習率可変、AdamWよりも学習が弱くなる傾向がある印象
Dadaptation:過学習になりにくい、学習率可変、
Lion:過学習になりにくい、比較的新しいオプティマイザ、学習率可変、実写系では細部の再現が弱い印象

我々がよく使用するのは、AdamWです。VRAMの少ない場合はAdamW8bitがあります。

ネットワークランク(parameters / Network Rank)
ネットワークアルファ(parameters / Network Alpha)

ニュートラルネットワークの設定になりますが、大雑把に説明すると、ネットワークランクが学習の詳細部分の精度となり、ネットワークアルファが、学習を進めていく速度というイメージです。(正確には違うと思います)
この2つの値と先のEpochにより学習が繰り返し行われますが、この学習の進みが悪いと回数を増やしてもクオリティが上がりませんし、進みが早すぎると過学習になりやすくなります。

各設定のポイント

スケジューラとオプティマイザーの組み合わせ

実写系のLoRA制作においては、
・constant + AdamW
・constant + Adafactor
・cosin_with_restarts + Adafactor
・cosin_with_restarts + AdamW
の組み合わせで使うことが多いように思います。

constantは短時間でプロトタイプの制作が可能になります。反面、過学習になる可能性があります。
cosine_with_restatsは時間をかけて高クオリティのものを作ることが可能です。反面、少ない学習回数では学習効果が実感できづらいのである程度クオリティが見えてからの選択になります。

Adafactorは過学習になりにくい(過学習にはなるが、クオリティの低下が少ない)ので、回数のチューニングを行えない場合はこれを使用する場合があります。
AdamWは回数のチューニングを行うのが前提であるがより高クオリティのLoRA制作が可能になります。

学習率とepoch数

学習率は、スケジューラとLearning rate及び回数で主に調整します、通常はLearning rateを0.0001(デフォルト)で使用しますのでスケジューラと回数で調整していきます。うちの場合、学習素材は20~40枚として、回数を20回にすることが多いと思います。
そして、この条件でEpoch数を上げていきます。最初の目安としては下記程度かと思います。

constant の場合、20~30
cosin_with_restartsの場合、30~40

LoRAの学習時に、Save every N epochsの値を2~5の範囲で入力しておくと学習過程でLoRAを保存してくれますので、それを使って過学習になるボーダーを見つける手助けにもなります。

ベースモデルの選定

特定のモデルを使用するのが明確な場合は、そのモデルを使用すると良いと思いますが、汎用性をもたせる場合は、kohya_ssで用意してくれているモデルを使用するのも良いと思います。

SDの場合は、runwayml/stable-diffusion-v1-5
SDXLの場合、stabilityai/stable-diffusion-xl-base-1.0

その他、ご自身で用意しているモデルを使用しても問題ないと思います。なるべくオーソドックスなものを使用すると他のモデルでの生成時にも素直な挙動をしてくれるのではないかと思いますが、他のモデルを使用する場合は、教師データ(正規化画像)を用意した方が安心かもしれません。
ちなみに、現状でSDXLのLoRAを制作する場合は、教師データの有無でクオリティに大きな差がないように思っていまして現在制作しているLoRAには教師データを使用していません。

ネットワークランクとネットワークアルファ

Network Rankは、どこまで細かく学習対象の内容を理解するかの指標のようなもので、8~128まで指定できます。基本的には8の倍数(8、16、32、64、128)で指定するようにしています。この値を大きくすると出来上がるLoRAのファイルサイズが大きくなっていきます。
Network Alphaは、0~Network Rankの値まで設定します。この値は学習率に影響し、数値が大きいほど1回の学習で学習する内容が濃くなります。
SDにおいては、Network Rankの値は結果に強く影響しますが、SDXLにおいてはそれほど大きな差にならないケースが多いように思います。実際の学習内容を比較して検討しても良いと思いますが、我々がSDXLのLoRA制作を行う場合は、16くらいまでで制作しています。8でもいいのだけれど安心の意味で少し上げておこう的な感じです。

チューニングのフロー

LoRA制作においては、1回でハイクオリティなLoRAが出来ることは稀です。いや、ありません。
繰り返し制作を行うのですが、より効率よく制作する為にいくつかのステップを実施しています。

ベースモデル:stabilityai/stable-diffusion-xl-base-1.0
画像枚数:20
くりかえし数:20

1:画像とタグによる効果の確認を行います。

constant + AdamW(または AdamW8bit)
Epoch:10
Network Rank:8
Network Alpha:8

ここで生成されたLoRAに画像生成を行い、クオリティを確認します。プロンプトで指定したものが反映されていない場合はタグ付けをやり直します。生成された画像の色がばらついたり、構図がずれている場合は、画像の選定をやり直します。

2:回数でクオリティ(過学習)の確認

cosin_with_restarts + AdamW(または AdamW8bit)
Epoch:80
Network Rank:16
Network Alpha:4

エポック数を変化させて、画像を生成して確認します。
Save every N epochs に2、4といった数を入れておき、ステップごとに生成されるLoRAを用いて満足できるクオリティの到達点(目安)を探します。

3:最終生成

cosin_with_restarts + Adafactor
Epoch:先に見つけた回数
Network Rank:16
Network Alpha:4

オプティマイザを変更して過学習ができにくい条件で再度学習させていきます。
ここでも先のステップと同様にステップごとのLoRAを使って確認していきます。

4:配布用処理

LoRAを配布したり、依頼主に納品する場合は、データ中にゴミがないか確認します。
確認は、Web UI AUTOMATIC 1111のtoolkitを使用します。
また、出来上がったLoRAが余計なものを学習していた場合で、階層で除去可能な場合は階層マージを使用して取り除きます。

最後に

以上のような考え方でLoRA制作を行っています。
皆さまの制作活動の参考になりましたら、幸いです。

AIに関しては、新しい技術であり、次々と新しいツールも出てきています。今後便利になっていくことが予想される反面、法的な整備が追いついていないのも現状です。よりよい未来のために道具としてのAIを正しく使うように示していくのも我々クリエイターの努めだと思っています。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次