見出し画像

【StableDiffusion】WebUI上で使えるLoRA学習ツールsd-webui-traintrainが便利すぎた件について【コピー機学習法】

■記事の対象ユーザ

1.LoRAを自作したことがある、または自作したい気持ちがある
2.LoRA作成ではKohya's_GUIのお世話になっている
3.コピー機学習法の作成手順を面倒に感じている

この記事を書くまでの
対象範囲が 狭いのである

■ようするに?

・学習用に別環境を用意しなくてもWebUIだけ学習ができる
・コピー機学習法でのLoRA作成が1STEPで済む
・いくつもキューイングしておける

こんな感じの差分LoRAが1回の設定で作ることができるよ!

適用度を上げると口を開くLoRA

0.はじめに

Kohya's GUIでコピー機学習法で差分LoRAを作る時、中間ファイルが色々残っていて後から苦労した経験とかありませんか?
私はどうも整理が苦手で、作業フォルダの中がtest1とかtest2だとかの謎LoRAまみれになっている事がよくあります。

今回紹介する2024年1月にリリースされたsd-webui-traintrain(以下traintrain)はStableDiffusion Web-UI上で動作する学習用のツールです。

traintrainには通常のLoRAを作成する機能の他に、簡単にコピー機学習法でLoRAが作れるモードがあり、従来の様にコピー機LoRA①とコピー機LoRA②を作ってマージするという手間が必要ありません。
中間ファイルを作らずとも目的の差分LoRAが作れるのには触ってから驚かされました。

やめてくれハウラ、その口撃は私に効く

補足:コピー機学習 is 何?

そうね、でも私が説明するより月須和さん(@nana_tsukisuwa)のnote記事がめちゃくちゃ腑に落ちる内容だったからそっちを案内しておくね

私から一言だけ説明しておくと「目の大きさ」とか「髪の長さ」とかを適用度に応じてスライダー式に出力を調整できるLoRAを作るのに使われている手法だよ。差分学習法って呼ばれる場合もあるけど同じものだと思って貰えれば問題ないと思うんよ。

絶対分かりやすいんだって

1.インストール

ここは他のWebUI拡張と変わらないからサラっと流しておくね。
まず、公式リポジトリからURLを取得して

WebUIの拡張機能からインストール

インストール後、UIを再読み込みすると「TrainTrain」タブが表示されるよ

うん、いつも通りだね

2.設定

ここではSD1.5用のLoRAを1つ作ってみた時の設定について書いていくよ。

なんでって?SDXL用のはまだ検証中でSD1.5用しか成功してないからさ!

2-1.プリセットの選択

リポジトリの「差分」モードの説明にも「Difference_Use2ndPass」を使ってねと書いてあるので、選択して右側の左下矢印ボタンを押すと、プリセットの内容が各項目に反映されるよ。

項目名が無いから分かりにくいけど、ここね

(ちなみに一番上の「差分」プリセットを選ぶと何故か「iLECO」プリセットがロードされました)

おねがいします!

2-2.モード

ここは作りたいLoRAの種類によって変更するよ。
今回はプリセットで「Difference_Use2ndPass」を選んだのでここは「差分」が指定されているはず。

ここで「iLECO」を選んだ場合は画面下の方にプロンプト欄が、
「差分」を選んだ場合は画像アップロード用のUIがそれぞれ表示されます。

選んだモードでパラメータのUIが変わる。怪焔王のモード!!
少なくともグニキは関係ないと思う

補足:iLECOについて

教師画像を必要としない追加学習方法で、モデルがプロンプトベースで出力した画像を教師画像にして学習する手法だよ。

iLECOについてはtraintrainの作者さんがLECOの説明記事を書いてくれていて、そちらが分かりやすいよ。

ほんとなんだって!しんじて!

ちなみにiLECOの「i」はインスタントの「i」で、LECOで計算に使っているプロンプトの一部を省略して数十倍に高速になったから「インスタント」なんだって。

そういうこと

2-3.モデル / VAE

LoRAを作成するのに使うベースモデルとVAEを選択するよ。
VAEは各モデル推奨のものを設定しておくよ。

2-4.必須パラメータ

プリセット通りでOK!と言いたいところだけど、試しに作って見たら
学習不足な感があったから少しだけ調整していくね。

network_rank / network_alpha:
デフォルトの16で試して出来たLoRAを適用したら、変化量が足りなかったので小さくしてます。

画風とか覚える量が多いのなら16がいいのかもね

train iterations:
学習回数。Kohya's_GUIだとエポック数と画像フォルダの繰返し数とかで調整する必要があったけど、traintrainはここで何STEP学習させたいか入力すれば、エポック数とかをよしなにしてくれます。(たすかる)

最初はデフォルト500で試して変化量が足りなかったから1,000に増やしてます。公式リポジトリにも「差分」の場合、推奨は500~1,000って書いてあるしね。

train batch size:
バッチ数。増やすと同時に学習する画像数が増えるので学習時間が早くなる+使用するVRAMも増える。

注意点として例えば1→2に増やすと単純に2倍の速度で学習するようなものではなくて、同時に2枚学習するから1枚の画像からLoRAが学習する特徴が減るので結局その分学習回数を増やさないといけないみたい。

train learning rate:
学習率。LoRAの場合大体1e-4~1e-3(=0.0001~0.001)くらいが適当と聞く。
公式リポジトリの説明や先達の情報だとコピー機LoRAの場合1e-3程度で十分とあるのでここは1e-3(=0.001)に変更。

save lora name:
保存するLoRAの名前。メキシコに吹く赤い熱風のことはもういい。

補足情報① network type:
「lierla」って何さ?ってなるけどlierlaが普通のLoRAのことらしいです。

補足情報② train optimizer:
オプティマイザ。私はよくAdamW(8bit)を使ってたるんですけど、公式リポジトリをみると差分モードではうまく動作しない。と注意書きがあるので通常のAdamWにしてます。lionとかprodigyでも問題ないとは思うけどね!

補足情報③ use gradient checkpointing:
gradient checkpointを使うと20%ほど学習速度が遅くなる代わりにVRAM使用量が減るというもの。学習中のVRAMが100%に張り付くようならチェックを入れましょう。

ちなみにこれは私の環境でギリギリ耐えられている時の例

補足情報④ network blocks:
TextEncoderとU-NETの学習ブロックの指定。
TextEncoder(=BASE)を学習させると画風への影響が大きくなる。
U-NETもBlockに応じてどの辺に効くかが分かれているので、例えば顔の部分だけ、という場合なら顔に影響すると言われているOUT3~5だけにチェック入れるとかしてもいいかも。

とはいえ今回はデフォルトのまま(全チェック)で作ってみるよ

2-5.任意パラメータ

今回はプリセットのまま変更はないので省略するね。

2-6.2nd pass

モード「差分」を選ぶと表示される項目。
コピー機学習法で言うところの元のコピー機LoRAを作るのが1st Pass、変化後のコピー機LoRAを作るのが2nd Passという感じ。

network_dimとnetwork_alpha以外は1st Passと同じにしたいので
「Copy settings from 1st pass」ボタンを押して設定をコピーするよ。

network_dimは1st Pass目より小さく指定すると構図や画風に影響を及ぼさないようにできるって公式リポジトリの説明にもあるから今回は4に指定するよ。

塗りや構図に影響させたいなら同じ値にするよろし。だって。
右側のどでかいボタンね

2-7.画像の設定

「差分」モードに指定していると、画面最下部に画像をアップロードできるUIが表示されるよ。LoRAに学ばせたい差分を求めるための「変化前の画像」と「変化後の画像」をそれぞれ設定するよ。

「あ」の口の開閉差分を出したい

EyeCollectionっていう有名な目の差分LoRAを作られている十条さん(@JujoHotaru)さん曰く

ということで
1.使用する画像は変化点以外はピクセルレベルで一致させる
2.変化点は大げさになるように作る

の2点を意識した画像を用意して設定するようにしているよ。

まったくです

3.学習の実行

設定を終えたら画面上部にあるボタンから学習を開始するわけだけど
traintrainで嬉しいのはキューイング機能があるところ。

「Add to Queue」を選択すると、処理待ちとして登録することができて
複数の設定をキューイングしておくと、自分が寝ている間や仕事に行っている間にLoRAの学習を続けて処理してくれるよ。

キューイングしたあと「Start Training」押さないと学習が始まらないから注意してね。

GPUの性能にもよるけど、うちのRTX3080なら数分~十数分くらいで完成するよ。

4.結果の確認

以下のプロンプトを与えてLoRAの適用度だけを変更していくよ。
「open mouth」は入れてないから口が開いている=LoRAの効果ってことで

masterpiace,1girl,solo,black hair,red eyes,face_focus,

サンプル1:「差分」モードのデフォルト設定で学習させた場合
「記事書く前に試して弱かった」って書いてたLoRAです。

強度2.0で当てても控えめ

サンプル2:記事通りの設定で学習させた場合
今回の記事の設定で作成したLoRAです。

強度1.0までは変わらないけど、2.0ではより強く効くように

これだと分からないので、サンプル2を1.0~2.0で小刻みに適用してみると

こんな感じ。1.6~1.8くらいがちょうどいいかな?

じゃあ試しにプロンプトに「side view」とか加えて横顔も描画させてみるよ

おや

ドイツ軍人は狼狽えない。こんなこともあろうかとレンジの中に別角度の教師画像から作ったサンプルLoRA3の完成品があるので、そちらで試すと・・・

別角度の教師画像
開いた!がおー!
たぶん弱いとおもう

5.おわりに

実は今回の記事を書く前、従来のKohya's GUIで同じように「あ」の口の差分LoRAを作ってたんだけど、traintrainだと同じ機能を持った差分LoRAがお手軽に作れちゃったし、キューイング機能と併せるとより効率的にLoRAが作れそうな予感がするよ。

そうする

偉い人が言ってたけど「類似した機能を持つLoRAをマージすると安定感が増す」らしいので、今回のSample2とSample3あたりをマージすればもっといい感じに効く差分LoRAが作れると思うのよね。

LoRAって試せば試すほど「なんもわからん」ってなるから奥が深いんですよね・・・。あーだこーだ試行した知見が増えると皆が幸せになれそうなので沼にハマろ。大丈夫だよ!!痛いのは最初だけだから!!!!

これはLoRAなんもわからんきもち
また機会があればー

おまけ:トラブルシューティング

bitsandbytesが無いと怒られた場合

さぁ!いざ学習開始!ってタイミングでコンソールにエラーがでたよ。
Pythonのパッケージが環境にインストールされていないことが原因なんだけどStabilityMatrixの場合は次の手順でインストールできるよ。

別に起動してなくてもよい
右上のメニューからPythonパッケージを選択
+ボタンを押す
パッケージ名を入力してOK


この記事が気に入ったらサポートをしてみませんか?