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損失を使用することで品質と安定性のバランスをとるものです。
この機能はコマンドの引数に--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となります。
青っぽくなる現象が解消。ミカは通常のLoRAのほうがメモリアルに近い雰囲気。
青白いブルームのような効果が消えた。
風景画を試す。シャープネスとディテールが大幅に増加。
ほかのプロンプトでも同様。
青っぽくなる現象が解消するも背景が地味になった。
青っぽくなる現象が解消。背景の描写が増えた。
まとめ
DoRA + Scheduled Huber Lossで色ずれを解消し、特定条件下でシャープネスとディテールが向上しました。
上記の組み合わせは特定のデータセットに強く引っ張られる現象を軽減する可能性があるようです。
追加検証:畳み込み層は不要?
上の検証で作成したモデルは画風や背景が時々不安定になることがあり、SuperMergerで畳み込み層をAnimagineに差し替えたところ改善しました。
Conv込みとLinearレイヤーのみの学習を比較してみます。
畳み込み層無しにすることで背景が地味になる現象が改善。ほかにも背景が不自然になったり画風が不安定になったりする現象を軽減。
キャラ
ブルーアーカイブのウタハで検証。
学習設定
画像数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
違いは…わかりません!
従来の手法のMSEは衣装がおかしくなっています。
暖色系のブルームがかかっている?
smooth_l1はそれが解消したように見えます。
まとめ
大きな違いは出なませんでしたが、おまじない程度に入れておいてもよいでしょう。
Scheduled Huber Lossは特定少数のデータセットに強く引っ張られる現象を軽減する可能性があります。
今回作成したモデル: https://civitai.com/models/359389/turquoise-xl?modelVersionId=440666
使用ツールなど:
この記事が気に入ったらサポートをしてみませんか?