見出し画像

sd-scirptsのScheduled Huber Lossの検証


はじめに

いろいろLoRA作成記録( https://rentry.co/irir_lora )の肥大化に伴いnoteに移植したものです。今後作成記録はnoteに掲載します。

kohya-ss氏作成のsd-scipts(https://github.com/kohya-ss/sd-scripts )の4月7日の更新でScheduled Huber Lossが実装されました。
これは、暴れやすい学習初期に品質がやや低いが異常値に強いHuber損失関数を使用し、後半に異常値に弱いが高品質なMSE損失を使用することで品質と安定性のバランスをとるものです。

従来のMSE(L2)損失関数では、異常値の影響を大きく受けてしまい、生成画像の品質低下を招く恐れがありました。一方、Huber損失関数は異常値の影響を抑えられますが、画像の細部再現性が損なわれがちでした。

この手法ではHuber損失関数の適用を工夫し、学習の初期段階(ノイズが大きい場合)ではHuber損失を、後期段階ではMSEを用いるようスケジューリングすることで、異常値耐性と細部再現性のバランスを取ります。

https://github.com/kohya-ss/sd-scripts

この機能はコマンドの引数に--loss_typeにsmooth_l1を指定することで使用できます。
どういうものか気になったので画風とキャラクターで検証します。

LoRAの作成には自家製のGUIを使用しました。

画風(DoRA + Scheduled Huber Loss)

通常のLoRAと学習の安定性が高いDoRA(Weight Decomposed Low-Rank Adaptation)+Scheduled Huber LossでAnimagine-XL-3.1の画風を変えて比較します。
二回学習とマージをしました(いわゆるReLoRA)。

学習設定

画像数x繰り返し数=333x2
バッチサイズ=2
Optimizer=Lion
Dim=16,Alpha=6,Conv Dim=8,Conv Alpha=3
warmup steps=250
lycoris_kohya
Unet LR=0.00012, Text Encoder LR=8e-06 ※二回目は半分の値
huber_c=0.1

LoRA vs DoRA with Scheduled Huber Loss

2.0が通常のLoRAで、2.1がDoRA + Scheduled Huber Lossとなります。

比較1(トマト収穫)
比較2(聖園 ミカ)

青っぽくなる現象が解消。ミカは通常のLoRAのほうがメモリアルに近い雰囲気。

比較3(リコリス・リコイル)

青白いブルームのような効果が消えた。

比較4(風景)

風景画を試す。シャープネスとディテールが大幅に増加。
ほかのプロンプトでも同様。

比較5

青っぽくなる現象が解消するも背景が地味になった。

比較6

青っぽくなる現象が解消。背景の描写が増えた。

まとめ

DoRA + Scheduled Huber Lossで色ずれを解消し、特定条件下でシャープネスとディテールが向上しました。
上記の組み合わせは特定のデータセットに強く引っ張られる現象を軽減する可能性があるようです。

追加検証:畳み込み層は不要?

上の検証で作成したモデルは画風や背景が時々不安定になることがあり、SuperMergerで畳み込み層をAnimagineに差し替えたところ改善しました。
Conv込みとLinearレイヤーのみの学習を比較してみます。

畳み込み層の有無の比較。2.1が畳み込み層あり、2.2がなしで学習したもの

畳み込み層無しにすることで背景が地味になる現象が改善。ほかにも背景が不自然になったり画風が不安定になったりする現象を軽減。

キャラ

ブルーアーカイブのウタハで検証。

学習設定

画像数x繰り返し数=72x4
エポック数=7,バッチサイズ=2,総ステップ数=1008
Optimizer=Prodigy,LR=1,eps=1e-08,betas=[0.9,0.99],safeguard_wamup=True,decouple=False
lycoris_kohya,algo=lora,dora_wd=True
Dim/Alpha=4/1,Warmup steps=100,Shuffle captions=True,Keep Tokens=False
huber_c=0.1

比較1

違いは…わかりません!

比較2

従来の手法のMSEは衣装がおかしくなっています。
暖色系のブルームがかかっている?
smooth_l1はそれが解消したように見えます。

まとめ

大きな違いは出なませんでしたが、おまじない程度に入れておいてもよいでしょう。
Scheduled Huber Lossは特定少数のデータセットに強く引っ張られる現象を軽減する可能性があります。

今回作成したモデル: https://civitai.com/models/359389/turquoise-xl?modelVersionId=440666

使用ツールなど:



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