今回は、リアル系LoRAの学習にはどれくらいの学習が必要なのか調べてみました。
Epochごとのプロットをみると、lossが平均的に下がっていることがわかります。
こちらも、おおよそ40エポックごろにtextencoder/unet両方の学習率の上昇が殆どなくなっているように見えます。つまり画像あたり、40エポックx5回繰り返し = 200回の学習がされたころに学習率が収まっているように見えます。
次は、sdxl10ArienmixxlAsian_v45Pruned のほうです。
こちらは,27エポックぐらいまで色彩が飛ぶ感じですね。そこから落ち着きが出る感じです。
まずこれ以降の話の前提となる、学習回数に関係しそうなパラメータ等は以下の通りです。オプティマイザはadafactorなので学習率(learning_rate)は初期値扱いです。
network_dim=16
network_alpha=2
sampler="ddim" (default)
learning_rate=5e-5
optimizer_type="adafactor"
fp8_baseオプションを利用
fp8_baseオプションについては、以前の記事を参考にしてください。8GBのVRAMでも高速なLoRA学習を実現してくれる重要な機能です。
学習に使ったベースモデルは以下2種類
leosamsHelloworldXL_helloworldXL60.safetensors
sdxl10ArienmixxlAsian_v45Pruned.safetensors
学習の画像の枚数は147枚、画像ごとの繰り返し回数は5回です。キャプション付与はWD14でSmilingWolf/wd-convnext-tagger-v3モデルを使っています。(リアル系には少し弱いかも)
一枚の画像当たり200回の学習が目安か
まず、leosamsHelloworldXL_helloworldXL60に対しての学習。resume機能を使ったためグラフが切れていてすみませんが、濃い青->水色->ピンク->橙色とステップが進んでいて、合計52エポックまで学習しています。
学習率(lr:learning-rate)の方について、textencoderの方はおおよそ40エポックあたりで学習率が上昇しなくなり平坦に、u-net側も52epochになるころには平坦になりかけというところでしょうか。
1エポックあたり、各画像を5回繰り返し学習しているので、一枚の画像あたり52x5=260回学習していることになります。
もう一つの例。sdxl10ArienmixxlAsian_v45Prunedに対するほぼ同じ学習データ(少しだけデータを増やしました)を与えた場合のグラフです。こちらも紫ー>緑ー>橙ー>濃い青ー>水色と学習が進んでいます。トータルで51エポックです。
こちらも、おおよそ40エポックごろにtextencoder/unet両方の学習率の上昇が殆どなくなっているように見えます。つまり画像あたり、40エポックx5回繰り返し = 200回の学習がされたころに学習率が収まっているように見えます。
147枚x5回繰り返し/(batch=3)で、1エポックあたり245ステップ。ステップ数は一ステップあたり6から7秒。なので、だいたい、1エポックあたり25分程度。約40エポック以上ということで、大体17時間以上が学習に必要な時間でした。
エポックを通じた画質の変化
さて、実際の結果です。上の各線の終端ごとのLoRAで描かせた結果です。
まずleosamsHelloworldXL_helloworldXL60の方から。
上の方が,LoRAの学習が一番進んだもの、一番下がLoRA未適用です。
下から2枚目3枚目では、色合いがおかしいですが、学習が進むと色合いも落ち着いてきます。色合いの落ち着きがLoRAの学習進度の参考になるかと思います。
こちらは,27エポックぐらいまで色彩が飛ぶ感じですね。そこから落ち着きが出る感じです。
顔の形状などは早期から学習が進んでいるように見えますが、細かいディテール、質感、色彩などの落ち着きに時間がかかる印象です。
さてさて、学習が進んだLoRAですが、上記の最後の出力を見ても、少し荒れが見られたりしてあまり使える気がしませんね・・・。学習データが良くないのかもと思いつつ、次回は、少し過学習なLoRAでも、オリジナリティのある出力が出せるんですといったところを。
(あれ、今回は英語がない・・・)