いろいろ試していたらもっと簡単にできました
SDXL、Pony Diffusion V6 XLのモデル性能のおかげで、教師画像を増やす手順の部分を簡素化できました。
やっていることは今までの記事と同じです。
教師画像1枚のLoRAで必要十分な品質が得られたので、無理に有料サービスを使わないでも大丈夫かもという内容です。
実験の経緯
8枚という少枚数でもそれなりのLoRAが作れたのでもっと少ない枚数でも行けるのではないかと思い、実際に1枚の絵でLoRAを作ってみました。
SD1.5の場合は教師画像1枚でのLoRAは出力が偏りすぎたり、画質が劣化してガビガビになったり、どんなpromptを入れても同じ絵しか出せない過学習LoRAになることが多かったのですが、SDXLの場合はモデル構造が変わったからか教師画像1枚でもそれほど品質の劣化が起こらずに再生成(蒸留)ができました。
実験環境と使用イラストとタグと学習設定
学習modelはPony Diffusion V6 XLです。
使用イラストは同じくPony Diffusion V6 XLで出力したものになります。
実験的に背景はそのままで、顔の切り抜きもしませんでした。
画像サイズはアップスケールをしたので2048×2624です。
学習モデルと教師画像の出力モデルを揃えると絵柄の差異が少なくなるため、学習後のLoRA出力が自然になる気がしました(元のモデルで出る絵柄なのだから再現しやすくて当たり前だよね、という話)。
逆に言うと教師画像の絵柄や要素があまりにも学習モデルとかけ離れている場合は再現が難しい可能性があります(人間モデルでケモノを学習する等)。
その場合は事前に他の手段で教師画像を増やした方がいいかもしれません。
SDXLが性能高いので気にしなくてもいい可能性もありますが。
Pony Diffusion V6 XLがどのタグをどのような内容で学習しているのか不明なため、いったんtaggerで出たタグ(e621タグ)を全部残し、生成時に効果のあるものないものを足したり引いたりして調整する方法を取りました。
最適なやり方ではないと思うので、こうしたらこうなるのかくらいの参考になりましたら。
今回は教師画像1枚の学習でタグ数も多いためトリガーワードはあまり機能せず、無いよりはマシかな?という影響度でした。
※普及しているタグ付けの良い方法は詳しい方の記事を参考にしてください(マルゼンスキーム法など)。
学習設定は前回とほぼ変えていません。
教師画像数が1枚なので batch1 の 600epoch(=600step) --lr_warmup_steps 100 にしたくらいです。
学習時間は15~20分くらいでした。
1枚学習LoRAの結果
生成modelはPony Diffusion V6 XLです。
学習時のタグをそのまま使用すると、ほぼ同じ構図の画像が出力されます。
ここからpromptを減らして、どのワードがキャラクターに影響していてどのワードが影響していないかを確認します。
promptをanthroのみにしても絵が変わりません。
トリガーワードのみにしてもほぼ変わりません。
anthro(獣人)要素が減って少し人よりになっています。
このままではpromptごとの影響も分からず、明らかに使えないのでLoRAの強度を下げます。
学習時のタグに戻してLoRAの効果強度を0.5にしてみました。
教師画像の要素が色濃いですが、元のキャラクターの特徴を維持しつつモデルの影響度も出てきているように感じます。
ちなみに0.3まで下げるとこのような結果に。
かわいいですが教師画像の構図に固定されすぎているので、試しにpromptとLoRA強度を変更調整してみます。
・LoRA強度:0.5
・背景変更:outside, sky, detailed background, day → (white background:1.4), simple background,
・装飾品変更:weapon, melee weapon, sword, holding weapon → 除去
・口を閉じる:open mouth → closed mouth
・表情変更:smile → angry
・座る:standing → sitting
・一部品質系タグ除去:hi res, digital media (artwork) → 除去
・余分な要素除去:gesture, looking at viewer, full-length portrait → 除去
promptに従って構図・背景・表情の変更ができましたが元のキャラクターの体型から離れてしまってたので、今度はLoRA強度を上げつつ体型や構図をpromptで調整してみます。
元のキャラクター要素を引き継ぎつつ、prompt影響をある程度受け付ける状態にできました。
このままでも簡単な絵であれば十分作れますが、元の教師画像の影響が強く自由度は高くありません。
ですがこのくらいの可変性があれば「キャラクターシート風画像」生成等で教師画像数を増やせるので「1枚絵LoRAを作る」→「強度やpromptを調整して教師画像を生成」→「増やした教師画像で再度LoRAを作る(精度・柔軟性アップ)」という流れでキャラクターLoRAを作るのに十分実用できそうです(この繰り返し手順はLoRAの蒸留と呼ばれています)。
やっていることは今までの記事とほとんど同じですが、SDXLの性能向上により綺麗な教師画像をローカルのStableDiffusionでも簡単に自家生産できるようになったことは大きいかなと思います。
SD1.5の頃からあった考え方なので、他の方がすでに同様の手法の記事を書かれているとは思いますが、SDXLでケモノオリキャラLoRA作る工程の参考になりましたら幸いです。
お読みいただきありがとうございました。
参考リンク
コピー機学習法・LoRAの蒸留ですごいLoRAを作られている方です。
線画化LoRAやFlat LoRAなどたくさん使わせていただいてます。