見出し画像

【Stable Diffusion】自作「LoRA」、反映度と学習回数について【Kohya’s GUI】

■記事の対象ユーザ

1.Stable Diffusion WebUIをローカルに構築して、イラスト生成しはじめた
2.自作LoRAを作ってみたが、どうも上手いこと反映されていない気がする

この記事を書くまでの

■ようするに?

これが
こうなる

作ってはみたけど

1.自作の3DモデルからStableDiifusionを使い好みの画像を作成

 オリジナルキャラを学習させるべく、ベースとなる3Dモデルを作成し、プロンプトとControlNetを使って色んな角度や表情で素材を30枚ほど作ってみたよ。(どんな画像が最適か理解らないから適当だよ!)

作成した画像+タグ付けしたもの

特徴として
「黒髪」「ショートヘアー」「インナーカラー青」
「褐色肌」「ケモ耳」「狐しっぽ」「青い瞳」「黄色い髪飾り」
あたりを覚えてもらったよ。

この子の特徴が出れば成功

2.前回の手順でLoRAを作成

過去記事でやってみたから読んでみてね

3.よっしゃ試したろ!

デフォルトの設定で使ってみて効果を見てみるよ。
サンプリング方法:LCM
サンプリングステップ:8
CFGスケール:2
(LCM_LoRA_Weight_SD15は高速描画のために設定しているよ)

### キーワードタグ、1girlLCM-LoRA名、自作LoRAhokushin_ai_kaula,1girl,<lora:LCM_LoRA_Weights_SD15:1>,<lora:hokushin_ai_khaula:1>

結果 → はぁー!特徴がねぇ!

誰だお前たちは

検証してみた

1.理屈

学習が十分かどうかの指標として「学習率」というものがあるようで
「LoRA」「学習率」で検索すると有志の情報が出てくるよ。

あと、LoRAを作るのに使ったツール「Kohya’s GUI」のGitリポジトリの中にもちゃんとドキュメントがあったよ。
「バッチサイズ」「学習率」「エポック」あたりが参考になると思うよ。

https://github.com/kohya-ss/sd-scripts/blob/main/docs/train_README-ja.md

学習率に関連する要素としては
・素材画像の枚数
・エポック数
・バッチ数
・繰り返し回数
があるようで、十分な数を学習させないと効果が得られないみたいね

ちなみに今回の手順では以下のようになっていたよ
・素材画像の枚数:30枚
・エポック数:10
・バッチ数:2
・繰り返し回数:1
→STEP数150

2.調整する設定について

### Kohya’s GUI で学習開始時に出てくる内容 (学習画像30枚×繰り返し回数1)

running training / 学習開始
  num train images * repeats / 学習画像の数×繰り返し回数: 30
  num reg images / 正則化画像の数: 0
  num batches per epoch / 1epochのバッチ数: 15
  num epochs / epoch数: 10
  batch size per device / バッチサイズ: 2
  gradient accumulation steps / 勾配を合計するステップ数 = 1
  total optimization steps / 学習ステップ数: 150

・「繰り返し回数」を1回→30回まで変更してみる
・「エポック数」を10、20と試してみる

繰り返し回数は、画像を格納したフォルダの頭に付けた数字となるよ

繰り返し回数=1

エポック数は、Kohya's GUIのパラメーターに設定があるよ

エポック数=10

ちなみに、Gitのドキュメントに書いてあるけど
エポックが10→20になるとSTEP数が2倍になるよ。

学習データが一通り学習されると(データが一周すると)1 epochです。繰り返し回数を指定した場合は、その繰り返し後のデータが一周すると1 epochです。

Kohya's GUIのdoc

さらに、学習に使うオプティマイザーでも効果が違うという情報があったので、STEP数を増やした時の過剰な学習を抑止できる?というAdafactorを指定してみるよ。

Kohya's GUIのパラメーターのBasicのところにあるよ

Adafactorを使うときは学習率を自動判断するらしいので
学習率のパラメーターを消しておかないとエラー吐くから気を付けてね。

これもKohya's GUIのパラメーターのBasicのところにあるよ
学習率(Learning rate)を消さなかった場合
LR warmup (% of steps)を0にしなかった場合

3.検証結果

最初に書いた様に「1girl」とターゲットタグ「hokushin_ai_khaula」を設定して後はLoRAに任せるよ。

hokushin_ai_khaula,1girl,<lora:LCM_LoRA_Weights_SD15:1>,

サンプリング方法:LCM
STEP数:8
CFGスケール:2

LoRAなし
エポック数10、繰り返し1回=150STEP ★最初のヤツ
エポック数10、繰り返し5回=750STEP
エポック数10、繰り返し10回=1,500STEP
エポック数10、繰り返し20回=3,000STEP
エポック数20、繰り返し10回=3,000STEP
エポック数20、繰り返し20回=6,000STEP
エポック数10、繰り返し30回=6,000STEP
エポック数20、繰り返し30回=9,000STEP

4.特徴は反映されるようになったけど・・・

・最初の150STEPのものは、特徴が全く出ていないため論外だったね

・750STEPは黒髪、ケモ耳あたりは強く出る様になったけど
 インナーカラーの青や、瞳の色、ケモミミが複数でてくるとか
 まだ誤差が多いように感じるね。

・1,500STEPは目の色はもう間違えなさそうだけど、髪飾りがなかったり
 やたらワンコが召喚されるね。野良犬ゥ!

・3,000STEPになると間違えなくはなったけど、たまに崩れてたり
 画風なのか、色がやたら黄緑になるね。

・6,000STEPは色の黄緑は消えてきた気がするけど、横顔が多くなった気が
 するし、また髪飾りがなくなることが多いね。あと抽象化され始めた?

・9,000STEPは教師画像に合わせて背景がより白くなった気がするけど
 それ以外は6,000STEPと変わらない気がするね。

服装を指定して教師画像が再現できる?

素材画像を作った時と、ほぼ同じプロンプトを与えてみてどうなるかを確認してみるよ。

### ポジティブプロンプト → これの末尾に自作LoRAを付け替えて検証
hokushin_ai_kaula,1girl,solo,skirt,boots,thighhighs,pleated skirt,white skirt,criss-cross halter,cleavage,smile,jacket,looking at viewer,black footwear,white background,open clothes,knee boots,shirt,open jacket,black jacket,simple background,black thighhighs,closed mouth,halterneck,long sleeves,miniskirt,zettai ryouiki,choker,<lora:LCM_LoRA_Weights_SD15:1>,
### ネガティブプロンプト
(worst quality:1.4),(low quality:1.4),(monochrome:1.3),bad anatomy,bad hands,missing fingers,
笑顔の素材画像、かわいい
エポック数10、繰り返し1=150STEP
エポック数10、繰り返し5=750STEP
エポック数10、繰り返し10=1,500STEP
エポック数10、繰り返し20=3,000STEP
エポック数20、繰り返し10=3,000STEP
エポック数20、繰り返し20=6,000STEP
エポック数20、繰り返し30=9,000STEP

再現できるね

エポック数20、繰り返し20以上=STEP数6,000以上だと
教師画像にかなり近いような絵しか出てきてないね。

逆にエポック数10、繰り返し5=STEP数750も、雰囲気は出ているけど
髪飾りがエラーになっていることが多そうね。

1,500STEP~3,000STEPくらいが丁度良いような気がするね。
多少強くてもLoRAの比重を0.8とかにして弱めてやればいいわけですし。

おわりに

今回は上手くいかなかったLoRAの調整と検証を行ったよ。
余談だけど学習素材が1024x1024だったからか、512x512で出力しようとするとガビガビになったよ。もしかしたら学習した解像度も大事なのかも。

ともかく、これでウチの子1号ことKhaula(ハウラ)ちゃんが再現しやすくなったね!やったぁ!

自害命じられる子とは関係ないよ。
雌カモシカ=美人って意味のアラビア女性名だよ。

死にたくないよ


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