[続]低解像度での絵柄のまま高解像度化(hi-res fix)したい【StableDiffution WebUI研究】
低解像度でhi-res fixなしの絵柄を、hi-res fix後も維持したいという試みだよ。
固定シードで、hi-res fixのDenoise値を0.1刻みで出力したものを比較検討したよ。若干、手描き感のある描線になっているのは、今回の趣旨であるDenoiseのせいではなく、hi-res fixのアップスケーラがLanczosだからなので、そこは気にしないよ。
キモになる目の描写に注目すると、Denoise値が0.3の時に変化が起きはじめていて、0.5の時にはもう明白な違いがあるよ。デフォルトの0.7になると「ああ、いつものだ」というバキバキまつげだよ。
人によってどのポイントが一番好みかは違うだろうけれどもロボ的には0.3から0.4のあたりに着地点を見いだせそうだよ。でも絶対にこれという数値がひとつあるというわけではなく、全体の描写量との兼ね合いなどで、都度調整していくのがベストなのだろうなという気はするよ。
これ以外にも試した画像での検証も含めると、0.1前後だとhi-res後の描写が甘く線に力がなかったりしたので、0.2くらいからのスタートだと思った方がいいかもしれないよ。
そして別の注目として、キャラの周辺を漂うように描かれているごく細かなドット(星、光点)を見てみるよ。値が大きくなるにつれて、やはりドットの総量がぐっと減っているよ。あんまりにも細かな部分なので、Denoise行程によって(noise扱いで)消されてしまったのではないかと思われるよ。
Denoise値が大きいと描写の情報量は減るのだろうなと思っていたけど、この検証でもそれが明らかになったよ。0.7だと、左上の稲穂のようなオブジェクトの「房」がひとまとめな描写になっていたり、右に流れている髪の毛の表現も、まとめられて簡素化されているよ。目の中の色も線も減っているので、これもDenoiseのせいなのだろうと思われるよ。
というところで現状をまとめると、低解像度時の出力と同じ絵柄・描写をhi-res fix後にも得ることは、
「hi-res fixのDenoising Strength値を極端に低く設定する(0.2~0.4くらい)」
ことによっておおむね可能になるよ。画像のカンバスサイズと、描写しているものの面積比で最適な数値は変動すると思うので、その都度良い感じになるよう調節する手間は必要かもしれないよ。これはたとえば、顔アップと半身像では顔そのもののサイズが違うので、設定にも違いが生じるということだよ。
ただし例外条件として、
「hi-res fixのupscalerにLatent系を設定しないこと」
というのがあるようだよ。やってみたら妙にブロックノイズ感のある画像になってしまったので、Latent系のアルゴリズムは低Denoiseとは相性が悪そうだよ。よく使われているというESRGAN 4x 系列なら大丈夫だったよ。
そんなところで今回は以上だよ。StabreDiffutionを使い始めたころに参考にしたブログ記事とかだと、Denoising Strength値はデフォのままでいいとか書いてあったから無思考でそのままにしていたけど、結構重大な影響のあるパラメータだったよ。
呪文
- Steps 30
- Scale 8
- Seed 2058264085
- Sampler DPM++ 2M Karras
- Strength
- Noise
- Steps 30
- Scale 8
- Seed 2058264085
- Sampler DPM++ 2M Karras