学習コツ・体験談

Last-modified: 2024-04-20 (土) 18:34:05

ここでは、個人のアイデアや気付き、他ページに分類しにくい公式情報等を共有しています。
それぞれの使用環境によって有効性が異なる点にご留意ください。

SD1.5モデルでどうしても表現が苦手なもの

仕組みの制限で今のところ学習させるのもただ時間、電力の無駄遣い。あるいはできても出来栄えが非常に悪い。これらを避けて新しい技術を待とう。

  • 文字
  • 手の形、指の数、足指の数(ControlNetを利用すれば一部解消可)
  • ふにゃちん、ショタちん
  • ピアノ
  • 動物型使い魔(ケロちゃん、ラビリンなど手足の構造が人間と違うが人間の表情が表現できるものが該当。人間型の妖精は可能。動物型人間は未検証。たぶんできる。動物型ドールなど表情の変化がないものならたぶんできる)

keep_tokensと1girlのタグ

素材画像16枚、リピート数7、constant with warm up 5%, dadaptadanip, locon, shuffle captionはオフ、基礎倍率1、バッチ3、その他の条件を同じにしたところで検証してみた。
クォリティを順からいうと、④>③>①>②でした。

No.
keep_tokens2110
先頭タグkinomoto_sakura, 1girlkinomoto_sakura, 1girlkinomoto_sakura
1girlはタグから削除
1girl, kinomoto_sakura
生成結果40epoch付近
20230614043323.jpg
40epoch付近
1795479227.png
23epoch付近
1795479227 (2).png
24epoch付近
20230614060134.png

他に検証した結果として、

  • keep_tokens=2, 1girl, kinomoto_sakuraをタグ先頭にする 
    こちらはサンプルイメージがkeep_tokens=2, kinomoto_sakura, 1girlをタグ先頭にする と同じ程度だが、若干過学習気味で柔軟さが欠けている。
  • keep_tokens=0, kinomoto_sakura,1girl をタグ先頭にする
    柔軟性が若干下げた気がします。さらに髪飾りが変色するなどのデバフも。

意外なことに、少なくとも上記の条件では、keep_tokensを最初から0のままいじらない方がいい、という結論に達しました。

学習用画像が1枚しかなくても作る方法

結論から言えば学習画像が1枚だけしかなくてもLoRAは作れる
LoRAにおいて素材の枚数は関節のようなもので枚数が少ないほど同じ絵ばかり出るLoRAになってしまう。
それを回避する為に沢山の教師画像を用意するのだが
それが出来ない場合はそれなりの作業が必要になる。もちろん学習を多用するため良いグラボも必要。
以下に手順をメモ書き。LoRAの作成経験がある人向けの内容です。

  1. 手元にある少ない画像だけで学習したLoRAを作成
  2. それをモデルやプロンプトやControl Netや構図のi2iなどを根性の限り駆使して、別の角度の画像を作成し学習に使えそうな画像を出力していく
    特にこの手順は中々学習に使える画像が出ない場合が多く100枚1000枚と大量にランダム生成して1枚学習に使える画像が得られるかどうかなので
    根気と時間とグラボの性能が必要になる
  3. かろうじて得られた別角度の学習用画像数枚を使い、再度LoRAを作成する
  4. 上記2と3を繰り返す。繰り返すたびに多少は学習に使える画像が出やすくなってるはず…
  5. 学習画像が15~20枚ほどたまれば十分学習できるので完成

インペイントを利用することで似た画像を作る方法もある。

  • 参照する画像を1、2枚程度貼り付け余白部分にインペイントで生成すると同じキャラクターの別構図が生成される。少しガチャ度は高い。
  • 参照する画像の半分程度をインペイントで作り変える。満足するのが出来たら、先程生成の参照に使った部分をインペイントで作り変える。こうすることで1枚からかなりの精度で同じキャラ・イラストレーターの別画像を出すことが出来る。
    この方法なら数十枚程度の施行で画像が得られるのでおすすめ。

バックグラウンド学習にはWindows11の「効率モード」を。

Windows11 22H2以降のタスクマネージャーに「効率モード」機能があります。従来の「プロセスの優先度を最低にする」よりも、フォアグラウンドのプログラムがさらにスムーズに動けるようになった模様。
ゲームなどをしながら学習したい時は「効率モード」を使うのを検討しよう。

デメリットは、学習速度が通常の半分以下に落ちるはめに。
ゲームが終わったら、効率モードを解除しよう。

学習の設定値に迷っている人はこれを試してみて

学習step数は画像枚数(images)と、繰り返し数(Train number of repetisions)と、回す回数(epoch)を掛け算して決まるが、経験上成功しやすかったのは400stepsだった。そこでその数字になるように、画像が10枚なら10x20x2で400にする。40枚なら40x5x2だ。学習回数は2回で固定しておいて、繰り返し数を増減させて画像枚数 x 繰り返し数が200になるようにする。すなわち学習1回で200stepsだ。繰り返し数は画像を擬似的に増やすような効果がある。200枚に増やせばいいと考えよう。
要注意なのはLeaning Rateで、デフォルトの0.0001では過学習になって破綻しやすかった(イラストではない写真の例)。レートはデフォルトの5分の1の 0.00002 がおすすめ。DataSetを作るたびにデフォルト値に戻るので、この値は気をつけて設定しよう。
さて、400stepsで成功したら、仕上げには倍の800stepsだ。学習回数を2回から4回に増やすだけ。400では少し学習が足りないはずなので、800で完成に近づく。とはいえ400でも十分な効果が得られるかもしれない。学ぼうとする素材によってケースバイケースだが、経験上、400は少し弱い、800で十分だと考えている。
また、作ったLoRAがちゃんと動くかは、<lora:loraname:1.2>とあえて1を超えて強く反映させてみて、学習素材がプロンプトを無視して出てきて、なおかつ画像が少し歪めば成功だ。1.2でも破綻ゼロだと、少し学習が足りない。通常は 0.2から0.5で十分だ。強めるときは0.6~0.8。そのあたりの数値を変えてみて、学習の効果を調べよう。
学習が完了したのかどうかは、loss比率でわかる。lossは0.1から始まり、stepsを重ねるたびに下がっていく。完成の目安は0.02だ。それ未満は過学習となるが、400 stepsは0.03~0.04程度で、 800 steps は0.016 程度に収束したので、経験則で得た値はやはり正しかった。

ぶっちゃけ初期値で良い

大抵の場合、Loraを作る時はDim32で十分足りている。上手くいかない場合は素材に問題があるか下手に設定を弄って失敗している可能性が高い。
まず何でもいいので初期値で素材を集めて一度まともなLoRAを完成させる。そして色々設定を弄るのはその後にする。
まともに作れる設定を知っていれば、失敗しても素材の方に問題があると気付く事が出来るので効率が上がる。

学習はVRAMが重要

イラスト生成はコア性能、学習はVRAMで決まると言って過言ではない。
生成はスピードが遅くなるだけだが、VRAM不足の場合、使用できる設定に制限が掛かり学習能力に影響が出てしまう。
現在、VRAM 8GBでもSDXLを学習可能だが、SDXLでみっちり学習したい場合はVRAMの多いモデルを選びたい。

avr_loss

小さいほど良いと言われるが、じつは成否にはあまり関係がない。
しかし、avr_lossが1の場合、学習結果が全て失われている。
avr_loss=1.0になっているのを見たら、時間の無駄になるのですぐに学習を中止した方が良い。

拡大学習→インペイント

LoRA学習を極端に部位に搾って学習させるとかなり高精度になる。具体的には、目の行きやすい顔や乳などを学習画像めいいっぱいにしておき、それらだけを学習させる。
こうすることで通常崩れやすい、乳首や瞳の中といった細やかなパーツも少ない枚数で高精度の学習が可能。

当然、出力画像もパーツ限定になってしまうわけだが、この画像を元手に周囲をインペイントで生成すればよい。
他部分も高クオリティのパーツを元に生成されるので、全体的に高クオリティになりやすい。
もちろん自分が気に入るようなパーツ同士をツギハギするかのようにインペイントすることで、理想パーツの集合体のような書き方も可能。