
SDXLのv-predictionの知見とか
NoobAI-XL(v-prediction版)を使ってて感じたこととかを雑にまとめる。
前提知識
Stable Diffusionなどの拡散モデルは、ノイズ画像から除去すべきノイズを予測して少しずつノイズを除去する動作を繰り返すことで画像を生成する。
v-prediction(v-pred)ってなに?
v-predictionは除去するノイズを予測のアルゴリズムの一つ。
ノイズ除去前と除去後の差分を予測する。数値の安定性の改善や収束速度の改善があるらしい。これは後述するZero Terminal SNRを併用することで色の応答性の問題を修正する。
ちなみに、従来のSDXLモデルはepsilon(eps)というものを使用している。これは画像のノイズ部分を予測する。
Zero Terminal SNR(ZTNSR,ZSNR)ってなに?
SD1,SDXLのノイズスケジューラの欠陥があり、完全なノイズになるまでノイズを付与しない。この影響で非常に明るい、暗い、または純粋な単色背景を含む画像を生成できない(中間的な明るさになる)。
ZTSNRはこの欠陥を修正することできれいな単色背景や暗い表現が大幅に改善する。
なお、これはv-predでないと使用できないのでepsilonモデルは追加のノイズで欠陥を緩和するNoise Offsetが代替になる。

v-predモデルの使い心地
※ZTSNRが生きているモデルに限る
暗い絵を出しやすいので幻想的な画像の生成がはかどる。
かなり彩度が高くGuidance Scaleは4がちょうど良い。5以下じゃないときつい。
CFG1でも一応絵を出してくれるのでDMD2などの蒸留LoRAとの相性が良いかも。

Zero Terminal SNRの欠点
色の応答性が改善する一方、低めのCFGでないと彩度が高すぎる。
学習のデータセットによるが下の画像のように、特定プロンプトで構図が極めて不安定になる現象に遭遇した。とくにZTSNRの得意分野の暗い環境で崩れやすい気がする(本末転倒)。ハイパーパラメータを見直したりデータセットの調整をしたり何をやっても改善できなかった。
ほかにも精度が低下する気がする。
2025-01-19追記: SDEサンプラーにすると不安定になる問題を緩和できるっぽい。

頭が花になるのは草
マージの注意点
v-predモデルにepsilonモデルを混ぜる際は注意が必要。注意してマージしないとZTSNRの効果が消えて「なんちゃってv-predモデル」になる。
まとめ
v-predはZTSNRを併用することで色の応答性を改善する一方で不安定になりやすい。明暗の表現によほどのこだわりがなければepsilonでいいかな。
おまけ:NoobAI v-pred版ベースにモデル作りました。いわゆるマスピ絵は出さない方針なんで期待しないでください。 https://civitai.com/models/938672