Stable Diffusion Web UIの便利な拡張機能紹介記事です。
今回は簡単にいろいろなLoRA作成ができる「TrainTrain」の使い方について、解説します。
v1.8.0で動かなかった問題は2024年4月5日に修正されました。現在は使用できます。
TrainTrainとは?
TrainTrainは、Stable Diffusion Web UI上で簡単にLoRAが作成できる拡張機能です。
hako-mikanさんという方が24年1月にリリースしたばかりの拡張機能で、パスやパラーメータを指定するだけで簡単にLoRAが作成できます。
また通常のLoRAだけではなく、iLECOやDifference(差分LoRA)なども作成可能。
LoRAの階層などもいじれるようになっているため、初心者から上級者まで幅広く使えます。
hako-mikan/sd-webui-traintrain: LoRA training extention for Stable Diffusion Web-UI
TrainTrainのインストール
Stable Diffusion Web UIを起動して、Extensions→Install from URL→URL for~に以下のURLを入力し、Installボタンをクリックしてください。
https://github.com/hako-mikan/sd-webui-traintrain.git
Web UIをリスタート、または再起動して、「TrainTrain」タブが追加されていればインストール完了です。
TrainTrainの使い方
TrainTrainは主に3つのことができます。
- LoRAの作成
- iLECOの作成
- Difference(差分LoRA)の作成
LoRA作成
事前に学習用の画像とキャプションデータが必要です。
今回は画像とキャプションデータがセットになっている「01_LoRA学習用データ」にある「zundamon」をお借りしました。
以下のページからダウンロード可能です。
もし服装やキャラクターなど自分で作成したいものがあれば、その画像をフォルダにまとめておいてください。
キャプションデータは、「dataset-tag-editor」などの拡張機能で簡単に作成できます。
こちらの記事で解説しているので参考にしてみてください。
画像とキャプションデータを用意したら、パスやパラーメータを設定します。
プリセットからLoRAを選択して矢印ボタンを押せば、LoRA学習用の設定を反映できます。
分かる部分のみですが、パラーメータは以下の通りです。
①Mode | 作成するLoRAのmode |
②lora data directory | 画像フォルダのパス |
③lora trigger word | LoRAを使用するためのキーワード |
④Model | 学習に使用するモデル |
⑤image size(height, width) | 学習する画像サイズ カンマ区切りでheight, widthそれぞれに指定 1つだとその値が横縦になる |
⑥train iterations | 学習回数 |
⑦train batch size | 1度に何回学習するか 増やすと学習は速くなるがVRAM消費量が増加 |
⑧VAE | 学習に使用するVAE |
⑨save lora name | LoRAのファイル名 |
⑩use gradient checkpointing | 学習は遅くなるけどVRAM消費量を抑えられる |
画像サイズは元の画像と違うと切り取られるため、画像端にいるキャラクターなどはうまく学習できない可能性があるようです。
また学習回数については元の画像数などにもよるため、一概に〇回が良いというものはありません。
LoRAの反映具合などを見ながら調整してみてください。
よくわからなければ①②③④⑧⑨だけ設定して、あとはデフォルトでも良いと思います。
詳細は公式に日本語の解説があるので、そちらを確認してみてください。
sd-webui-traintrain/README_ja.md at main · hako-mikan/sd-webui-traintrain
設定が出来たらStart Trainingをクリックすれば、学習が始まります。
自動でLoRAフォルダに保存されるので、そのままtxt2imgなどで使用可能です。
LoRAはRefreshを押せば表示されます。
・作成したLoRAで生成した画像
<lora:zundamon:1>, 1girl, green hair
iLECOの作成
iLECOはLECOの学習を高速化したもので、用途としては特定の要素を取り除いたり、別の要素に置き換えたりが可能です。
特定の要素を除去する
iLECOで学習させたLoRAを使用すると、学習した要素を除去できます。
真ん中のプリセットからiLECOを選択して矢印をクリックすれば、iLECO用の設定になります。
画面下に行くと「Original Prompt」と「Target Prompt」があるので、ここに除去・または置き換えたいプロンプトを入力します。
まずは特定の要素のみ除去したいので「Original Prompt」にflowerと入力し、「Target Prompt」は未入力にしました。
基本のパラメータはそのままで、モデル・VAEのみ指定し、ファイル名をiLECO-flowerに設定。
この状態でStart Trainingをクリックすれば学習が始まり、終わるとLoRAが保存されます。
weight:1ではflowerが出てしまっていますが、一応学習要素を除去できていると思います。
使用プロンプト:<lora:iLECO-flower:0>, flower
特定の要素を別の要素に置き換える
「Original Prompt」に入力した要素を「Target Prompt」の要素に置き換えることができます。
「Original Prompt」にflower、「Target Prompt」にcatを入力してみました。
パラーメータは上記と同じで、モデル・VAEのみ設定してファイル名だけiLECO-flower-catにしています。
Start Trainingを押せば学習が始まり、終わるとLoRAが保存されます。
実際に使って見ると、weightが高くなるほどflowerがcatに置き換わっているのがわかると思います。
もしうまく反映されない場合は、学習回数を500などに増やしてみてください。
なお、私の使い方のせいかもしれませんが、long hairを除去しようと思って学習させてもlong hairは除去できませんでした。
もしかしたら要素によって、反映しにくいものがあるかもしれません。
Difference(差分LoRA)の作成
名前の通り異なる2枚の画像から差分が作れるLoRAです。
例えば開口、閉口の2枚で学習したLoRAを使用すると、weightで口の開き具合を調整できます。
画像の用意
まずは元となる画像を2枚用意してください。
今回はこちらの開口・閉口の画像を使いました。
画像の一部を変更したい場合は、インペイント機能で簡単に変更できます。
とりあえず何らかの画像を1枚作り、seed値やパラーメータなどを生成時と同じ設定にしておいてください。
それをControlNetに取り込んで、有効化、inpaintにチェック、変更したい箇所にマスクをかけます。
一応プリプロセッサー・モデルがinpaintになっているか確認してください。
この状態でマスク部分に反映させたいプロンプトを追加します。
こちらの画像はopen mouthで生成しているので、ここをclosed mouthに変えるだけです。
これで生成すると閉口画像が作成できます。
img2imgでやる方法やその他細かい機能はこちらの記事を参考にしてください。
差分LoRAの学習
TrainTrainタブでプリセットからDifferenceを選択して、矢印ボタンを押せば設定を読み込めます。
私の環境だとmodeのみiLECOになっていたので、もし違ってたらここだけ手動でDifferenceにチェックしてください。
一番下のOriginal ImageとTarget Imageに画像を取り込みます。
後はModel・VAE・ファイル名を設定すればOK。
Start Training押すと学習が始まり、終わるとLoRAが保存されます。
後半は少し人物が変わってますが、一応徐々に口が閉じるようになっています。
なんとなく同じシード値で生成しましたが、違うシード値で生成しても同じ効果が得られます。
Difference_Use2ndPassで差分LoRAを作成
DifferenceにはUse2ndPassというものもあり、こちらで作るとクオリティが異なります。
Difference_Use2ndPassの設定をプリセットで呼び出し、下の方にある「2nd pass」タブのuse 2nd pass settingsにチェックを入れます。
これでスタートすると学習が2回行われ、同じシード値の場合は通常のDifferenceより一貫性が高くなりました。
別のシード値だとこんな感じです。
なお、使用しているグラボ(3060Ti VRAM8GB)の関係か、hires.fixを使用した画像(1024×1024)を学習すると1時間以上かかりました。
「use gradient checkpointing」にチェックを入れたら半分くらい時短できたので、同じような環境の人は試してみてください。
TrainTrainで発生したエラー
最新バージョン(24年2月3日)時点のものだと以下のエラーで動かせませんでした。
Error: default_collate: batch must contain tensors, numpy arrays, numbers, dicts or lists; found <class 'NoneType'>
原因は全くわかりませんが、今のところダウングレードで動かせています。
拡張機能のパスでターミナルを開き、「git checkout SHAハッシュ」でダウングレードできます。
SHAハッシュはgithubページのCommitsから確認してください。
原因の特定ができているわけじゃないのでどこに戻せばいいのかわかりませんが、私は1月19日の「Update install.py」のSHAハッシュで動かせるようになりました。
・パス
stable-diffusion-webui\extensions\sd-webui-traintrain
・コマンド
git checkout SHAハッシュ
追記:24年2月4日に修正されたようです。実際にアップデートしたら使えました。
TrainTrainでError: default_collate:というエラーが出る現象は修正されました。
— hakomikan (@hakomikanx) February 4, 2024
TrainTrainの使い方まとめ
今回はTrainTrainの導入&使い方について解説しました。
そんなに他のLoRA作成ツールを触ったわけではないのですが、現時点で個人的には一番簡単なLoRA作成ツールだと思います。
パラメータによって何が変わるのかわからなかったり、階層をいじったりはまだ難しいですが、理解できる人ならより詳細なLoRA学習・作成が可能かと思われます。
初心者から上級者まで幅広くLoRA作成ができる拡張機能なので、興味がある方はぜひ使ってみてください。