2025.02制作
2025.05更新
こんちには。SD1.5からLoRAの学習を始めて3年目のエリマキです。ILは2025年から触った初心者ですが、1ヶ月間毎日作って知識が溜まってきたので記事にしました。
早速ですが本題に入ります。背景LoRAの要点は3つ。
①少数の高品質なデータセットが良い。
②新しいタグの獲得、もしくは既存のタグの変更かによって、必要なデータセットが変わる。
③civitaiのトレーニングのパラメータについて。学習元は標準のILで良い。
④無駄にDimの高いLoRAは作るな!!!(例:容量216MのLoRAだけど1M程度の画像で学習なんてストレージの無駄。これは私の感想)
(⑤固定の構図やディーテイルを覚えさせる時はUnet LRを上げる、タグの変化はText Encoder LRで調整する(上級編) ) LRは下手に弄ってはいけない
背景LoRAに関して、この3つさえ知っていれば、作る側・使う側として問題無いです。
①少数の高品質なデータセットが良い
これについて、背景LoRAはコンセンプト・キャラLoRAに近い感覚です。背景の大まかな配置とその要素を記憶するイメージです。
1枚だけ、"覚えせたい要素が全て確定している"高品質な学習元があればもう背景LoRAは完成です。例は背景シーズンランク2位のarrssenneさんのLoRAです。
しかしこれはreference only・IP-Adapterとやっている事が同じです。汎用性も欠けます。覚えさせたくない要素もあるでしょう。
やる気がある人は覚えさせたい要素が共通している他の画像を探しましょう。
注意点として、覚えさせたい要素や配置を一致させることです。プールのロラの場合、プールの浴槽の配置と形が一致している画像を探して学習セットを増やします。学習したくない要素をインペイントで変更し枚数を増やすのも良いです。
結局、共通画像は中々見つからないため、少数の高品質なデータセットが重要になります。
私は最低2種類の背景パターン用意し、キャラの配置で4~10枚以上にかさ増しします。(例:ほぼ同じ四角のプールの画像を2枚集め、人や小物の違いで合計4枚のDatasetにする。tagの変化にも対応できるLoRAになります。)
②新しいタグの獲得、もしくは既存タグの変更かによって、必要なデータセットが変わる。
これにはSDXLの既存のタグが強いことに関係があります。結論として4種類に分かれます。
学習させる要素とその関連タグの有無によるLoRAの成果↓
❶関連タグ無し➡︎学習元の種類: 1~3 ➡︎背景の新規要素を学習
❷関連タグ無し➡︎学習元の種類: 10~➡︎ 学習したい要素が一致していないと覚えきれず学習失敗
❸関連タグ有り➡︎学習元の種類: 1~3➡︎既存タグの変更を学習
❹関連タグ有り➡︎学習元の種類:10~➡︎学習したい要素が一致していないと覚えきれず学習失敗、もしくはそのタグの雰囲気を変化させるStyle LoRAになる。
❷と❹の赤字だけ注意しましょう。❹は次の私のLoRAです。要素の異なる200枚のデータセットの背景LoRA。やっている事は背景を用いたStyle LoRAと同じです。⬇

❸の例⬇屋上の要素が共通する3種類20枚のデータセットの背景LoRA

学習元の1種類⬇

柵の概念の変化が確認できます。建物の配置も覚えていますね。人の有無、バリエーションによって学習枚数が増えました。
③パラメータについて。学習元は標準のILで良い。
次はパラメータに関して。
学習元は?
IL-v0.1で良い。派生モデルに背景タグの変化が見られないため
パラメータは?
civitaiの学習でコンセンプトを選択した時のデフォルトを調整。下記は私のメモ。
学習枚数=5~50の場合
epoch=100 (~100),repeat =1,(正則画像が無いため。) 正則画像の有無は分からない
⬆repeatはcivitaiのおすすめに合わせても良い。repeatを削ると明らかに学習のスピードが遅い。2025.03.31
battch=4 (6でも良い)
step=500~1000 (学習元が少ない場合300~500推奨)
背景は10枚の学習セットの場合、経験上300stepで殆んど学習を終えている。100epoch基本で前述のstep数に合わせてepochを調整。
dim=32,alpha=16だが、これは学習枚数が千、1万超えるなら良いと思う。
コンセンプトLoRAに近い場合はdim=2,alpha=1で良い。
学習枚数が増えて品質を心配するなら値を増やす。dim=8,alpha=4?
Dim ,alphaの変化は学習効率に違いが出ます。用途に合わせて変えましょう。(値を下げてもstepが少し増えれば実質変わらない。というのが個人的意見。詳しくは下記リンクを参照)
より高いstepを提言する記事もあるがそれはSD1.5の話ではないか?学習率はデフォルト。
Unet LR=0.0005
Text Encoder LR =0.00005
Optimizer=AdamW
(Adfactorでも可。最終的にどちらも学習が完了していたので気にしない)
気になる技としては、Unet・テキストエンコーダーの学習率を下げてstepを上げて丁寧に学習する方法
Dimやalphaなどの基本について⬇
https://education.civitai.com/lora-training-glossary/
最後に
長々と話しましたが、簡潔にLoRAというのは学習元をUNetとタグに圧縮して再現する装置です。学習元の入力が高クオリティなら出力も高クオリティになります。何か問題があればそれはパラメータではなく学習元や既存のUNetに起因するのが殆どです。
理論についてはSupermurge・階層LoRA制作者さんの記事を読んでおきましょう。https://note.com/hakomikan/n/n716397e39d56