🦊8の倍数の解像度しか生成できないのはなぜ?
🏠️ | 🦊雑に学ぶComfyUI
https://gyazo.com/74438e54d131fb86c2f02e889a9fad7b
EmptyLatentImageノードでは、値を8刻みでしか設定できません
無理やりそれ以外の解像度を入力しても、出力は必ず8の倍数になっています
これはなぜなんでしょう?🤔
latent diffusion model
Stable Diffusion をはじめとする latent diffusion model は、拡散モデルで必要な莫大な計算負荷を、低解像度の潜在空間に圧縮することで削減します
この圧縮/復元を行うのがVAEです
VAEの圧縮率と8の倍数
よく使われるSD-VAEやWAN VAEは、高さ・幅を8分の1に圧縮します(面積では64分の1)
潜在表現の縦横は整数である必要があるため、仮に幅513pxの画像を入力したとしても、値は512pxに丸められ、端の1pxは切り捨てられるわけですね
潜在サイズ = floor(入力サイズ ÷ 圧縮率)
8の倍数以外の解像度の画像を入力することはできますが、この処理が入るため出力は必ず8の倍数になります
他の圧縮率のVAE
あまり多くはありませんが、4 / 16 / 32 といった圧縮率のVAEもあります
新しいモデルを使うときはチェックしたほうがいいかもしれませんね
動画モデルのVAE
動画向けのVAEでは、空間だけでなく時間方向にも圧縮が入るものがあります
WAN系では時間方向には4倍圧縮、つまり、4つのフレームが1つの潜在にマッピングされます
このため、生成できるフレーム数は、(最初の条件付けの1 + 4n)フレーム (e.g. 81, 121 ...) となります
2フレームだけ生成といったことはできないんですね
image2image・画像編集モデルの注意点
上に書いたように、8の倍数以外の解像度を使ってもエラーが出ることはなく生成できます
ただし、出力は8の倍数に丸められるため、入力画像と出力画像の解像度が違う、という問題が発生します
もしピクセルパーフェクトを求めるなら、先に8の倍数にクロップ・パディングする必要があります