AI ToolkitでSDXL (Illustrious) LoRAの学習をする
https://gyazo.com/b0d3bb95931f32192df7619f612a202e
WAI-illustrious-SDXL v16.0 をベースにAI ToolkitでLoRAを学習する
なんとなくミャクミャクさんでやっていきますnomadoor.icon
目次
データセットの準備
AI Toolkitのインストール
AI Toolkitへデータセットを読み込む
学習設定
学習開始
学習できているかの確認
データセットの準備
1. 画像を集める
量より質です。なるべく綺麗で高解像度な画像を集めます
枚数はそれほど多くなくても大丈夫です。今回は15枚で進めます
2. 画像を編集する
画面に対して対象が小さすぎる場合は、軽くトリミングします
ただし、あまり厳密にやりすぎなくても大丈夫です
どれが学習対象かをモデルに教えるためには、逆に学習対象ではないもの(背景・別衣装など)が多少混じっていたほうが良いこともあります。たぶん… nomadoor.icon
3. キャプションをつける
画像1枚ごとに、それを説明するテキストファイルを作ります
基本の考え方は、LoRA学習でのタグ付けTipsと同じです
重要なのは、画像の説明を全部そのまま残すのではなく、「そのキャラ自体を定義する語」を消すことです。
https://gyazo.com/0b39351c0a14cdf1e768d4cc64b9ac0c
髪色・服装・体色・角・しっぽ・固有の付属物のように、そのキャラらしさそのものを表す語は消して、状況や構図や背景を表す語は残します。そうすることで、キャラの特徴をトリガーワード側に集約できます
これはキャラLoRAの場合で、例えば絵柄LoRAを作るなら、絵柄に関するもの"だけ"を消します
例 : ミャクミャクさん
before : mascot, sitting, indoors, office, desk, laptop, office chair, lanyard, id card, multiple eyes, smile, blue body, red appendages, plush, photo
この例なら、multiple eyes blue body red appendages のような「ミャクミャクさんそのものを定義する語」は消します
そして先頭にトリガーワード (今回は myakumyaku-san) を追加します
after : myakumyaku-san, sitting, indoors, office, desk, laptop, office chair, photo
(opt)3.5. MLLMでキャプションを自動で作る
今はAIの性能がかなり高いので、この作業はかなり自動化できます
やらせることは単純で、まず画像から illustrious 形式のタグを書かせ、そのあと「キャラ自体を定義する語だけ消す」というルールで整えてもらいます
ChatGPTでやった例 → https://chatgpt.com/share/69c4c369-b4d4-83ab-95c4-ebf9ca5e6823
4. ファイルの整理
後でAI Toolkitに読み込ませやすいよう、画像は整理しておきます
連番でなくても構いませんが、画像と対応するテキストファイルは同じファイル名にしておきましょう
code:detaset
📂images/
├── 0001.png
├── 0001.txt
├── 0002.png
├── 0002.txt
├── ...
├── 0020.png
└── 0020.txt
AI-Toolkitのインストール
https://github.com/Tavris1/AI-Toolkit-Easy-InstallAI-Toolkit-Easy-Install
インストーラー(直リンク) をダウンロードして解凍
AI-Toolkit-Easy-Install.bat を実行してインストールしてください
Start-AI-Toolkit.bat で起動します
Runpodでやるなら、公式のテンプレートがオススメです
AI Toolkitへデータセットを読み込む
Datasetタブへ移動
右上の New Dataset をクリックして、適当な名前でフォルダを作ります
右上の Add Images をクリックして、さきほど作った画像とテキストをフォルダごとドラッグアンドドロップします
https://gyazo.com/8e7d24641bb2491bca6ad449bddcaa69
画像と、それに対応するキャプションが正しく読み込まれていればOKです
学習設定
+ New Jobタブへ
https://gyazo.com/b4ef7a58d34d67eb34963f61d1bc50c3
JOB
Trainining Name
好きな名前をつけます
Trigger Word
キャプションの先頭にトリガーワードを入れていなかった場合、ここに書くとまとめて挿入してくれます
MODEL
Model architecture : SDXL
Name or Path
実際にベースにするモデルを指定します
今回は https://civitai.com/models/827184/wai-illustrious-sdxlWAI-illustrious-SDXL v16.0 をベースにするので、どこかにダウンロードして、そのモデルへの絶対パスを入力します
$ path\to\wai16.safetensors
TARGET
Linear Rank : 16
Conv Rank : 8
これを上げるほど、LoRAに詰め込める情報量が増えます
ただ、キャラLoRA程度なら 16 / 8 で十分です
SAVE
Save Every : 100
このステップごとにLoRAが保存されます
Max Step Saves to Keep : 30
上で設定した間隔でLoRAが保存されますが、その数が Saves to Keep を超えると古いものから削除されます
ストレージ容量が十分にあるなら、全部保存できるだけの値を入れておくと安心です
TRAINING
Batch Size : 2 / Grandient Accumulation : 2
Batch Size と Gradient Accumulation を掛けた値が、実質的なバッチ量です
Gradient Accumulation は、GPUメモリの使用量をほとんど増やさずにバッチ量を増やせます
バッチを増やすと学習が速くなるだけでなく、対象の特徴を掴みやすくなって上手く学習できることもあります
ひとまず実質4程度にしておくと無難です
Steps : 3000
何step必要かは、実際に学習してみないと分かりません
この値はあとから増やせるので、とりあえず適当で構いません
Lerning Rate : 0.00007
一般的な値は 0.00005 ~ 0.0001 くらいです
値が大きいほど早く収束し、小さいほど時間をかけてゆっくり収束します
ただ、ゆっくりやれば良いというものでもないので、このあたりは経験です
DATASETS
Target Dataset
さきほど作ったデータセットを選択します
Resolutions
512 / 768 / 1024 あたりを複数設定
データセットに高解像度の画像があるなら大きいほうが有利ですが、そのぶん学習時間も伸びます
キャラLoRA程度なら 768 まででも十分です
SAMPLE
🚨AI Toolkit上でLoRAを適用して画像生成してくれる機能がありますが、あまり当てにならないので今回は使いません
Dispable Sampling : ✅
この機能をオフにします
設定が終わったら、右上の 🟩Create Job をクリックします
学習開始
🚨まだこの時点では学習は始まっていません
Job画面右上の ▶ ボタンを押すと学習が始まります
学習ができているかを確認 & どこで止めるか?
LoRAがちゃんと学習できているかは、実際にできたLoRAを使って生成してみるしかありません
Loss Graph などは、あまり当てにしないほうが良いです
もしComfyUIで普段使っている生成設定があるなら、その設定で試すのが一番確実です
LoRAのダウンロード
https://gyazo.com/d3f7c198f0ffd434876eee7522f5387d
Job画面右側の Checkpoints に、保存されたLoRAが並んでいきます
ダウンロードボタンを押して取得しましょう
どのようなプロンプトでテストするか?
LoRAを適用し、トリガーワードをプロンプトに入れて生成します
これでキャラが出てくれば、ひとまず最低限はOKです
ただし、LoRAの性能としてはそれだけでは不十分です
たとえばキャラLoRAなら、キャラを出すこと自体はそれほど難しくありません
それよりも、プロンプトに従って柔軟に画像生成できるかのほうが重要です
そのため、一つのプロンプトだけでなく、なるべく学習画像に無かったようなポーズ・衣装・絵柄でも複数枚生成して確認するのが良いです
過学習について
過学習とは、LoRAがデータセットの画像に引っ張られすぎて、学習画像に近い条件ではよく出ても、少し条件を変えると崩れやすくなる状態です
Learning Rate や Step数、データセットの偏りで起こります
そのため、長く学習させればよいというものではありません
学習画像に無かったポーズ・衣装・絵柄でも試しながら、止めどころを探しましょう
ComfyUI workflow
https://gyazo.com/88aed03eb70c3ada096a5e388c3cc245
SDXL_list.json
Create List ノードを使ってプロンプトを複数入れると、1回の Run でまとめて生成できます
LoRA の strength は、0.8 前後でうまく出る状態をひとまず目安にするとよいでしょう
LoRA以外のパラメータは固定で生成しましょう
Stepごとの生成例 feat. ミャクミャクさん
https://gyazo.com/c8739cbbb75ff09453c092c7e2612308https://gyazo.com/715f92faeca1d427be017153631582a8https://gyazo.com/266b39d5c9e8ec1d383e66af75ba2253
800 | 1300 | 1800
https://gyazo.com/040467bfb8701ff106ecc1fe01545f75https://gyazo.com/b0d3bb95931f32192df7619f612a202ehttps://gyazo.com/a0a4b53f690cc515e08103225f336adb
2400 | 2700 | 3000
https://gyazo.com/a90b8f3b293e75939c7dcfb26334ecd3https://gyazo.com/cf10d44f3c466e847754ed6dbe7f7bcchttps://gyazo.com/708b9f6cc164cd85b65d35c56f0ceeb8
3300 | 3600 | 4000
今回で言えば2700 あたりが良さそうですねnomadoor.icon