Stable Diffusion メモ: highres fix, Upscaler
※書きかけ。検証不足のためあてにしない事
一部のモデルは、hires fixを行う行わないでかなりの差が出る…というか、highres fixをする前提で作られている。オフの状態で繰り返し出しつつ良さげなのが上がってきたら、ここぞというところでimg2img→Extrasで仕上げる、というのが流れになる。
UpscalerとDenoises Strengthの関係
Upscalerでノイズを加えて、それをDenoisesで整えるという流れになっている。ノイズを加えないこともできるが、その場合ディティールはあまり上がらない。Denoisesが弱すぎるとUpscalerが加えたノイズが消しきれず、強すぎると意図しないところも「整え」てしまい、全く違う絵になってしまう。
Upscalerは大きくわけて「ノイズを意図的に加える(Latent)か、加えない(それ以外)か」の2択。Latentもさらに細かく分かれているが、これらはノイズの加え方の微妙な違いであって何が優れているとかはなく、実際に試してみるほかにない。
Upscaler
Latent → ボケモザイク
Latent(antiailiased) → ボケ
Latent(bicubic) → モザイク
Latent(bicubit antiailiased) → モザイク。丸い物体が現れやすいかも?
Latent(nearest) → トゲトゲ
Latent(nearest-exact) → すごいトゲトゲ。カクカクした物体が現れやすいかも?
None → ディティールはほぼ上がらない(が、Strength次第で出力に改変が起きる)
それ以降 → 意図的にノイズを加えるものではないのでほぼNoneと同じ結果になる
Denoises Strength
ディティールを足したい用途だと、感覚的には0.45~0.55あたりが良い感じがする。ほぼ変えたくなければ0.3あたりを狙う。それ以下だとボケてしまい(あるいは、細かいノイズのような模様が全体的にかかる)、それ以上だと内容が大きく変わってしまう。
個人的な検証の結果、0.5あたりはUpscalerに関わらずやはりそれなりの「モデルの癖」がかなり出るので、アップスケール前に気に入った結果が出ているのであれば、Noneに設定したうえで0.4あたりを基準にするのが良い。(それでもやはり多少の改変は受ける)
Upscale by
2(それ以上だとメモリを食いすぎる。さらに大きくしたいならExtraのUpscalerを使ったほうが良い)
txt2imgのHires Fix
Hires fixはtxt2imgで出力した結果を直ちにアップスケールする方法だが、アップスケール前の結果が確認できない、あるいは確認のためにHires fixを外して同じ設定で一度出す必要があるなど、使いづらいのでおすすめしない。Hires fixなしで気に入った結果が出たら、img2imgでHires化したほうが良い。
img2imgでUpscale
出力サイズを縦横2倍の大きさを指定する事で実質アップスケーラーとして働く。ただしメモリを食うし速度も遅い。プラグインのTiled Diffusionのほうがおすすめ。こちらは画像を細分化して出力するらしいのでメモリも食わず処理も前者より速い。
個人的な検証の結果では、Resize modeのJust resizeとJust resize (latent upscale)の違いはほぼ無い。
Sampling Stepsは、結果に違いが出るがほぼ誤差である。大きくすると時間がかかるので20で十分である。
比較的影響が受けやすいのは「promptで指定されていない部分」である。たとえば背景について全くpromptを入れてない場合、AIに任されている状態なので、sampling stepsで結構違いが出る。きまぐれにしたくない場合はpromptを入れたほうが良い。
むしろ結果に大きく影響するのはDenoising Strengthである。0.3/0.4/0.5と変えるだけでもかなり変わってくる。何度か試して微調整が必要。0.4だと表情が悪い意味て「落ち着いて」しまうことが多い。表情豊かにしたい場合は0.3とかを試す。0.5以上にするとおかしい指などを修正してくれる場合もあるが運要素が強い。upscalerに賭けるよりも画像を直接加筆修正したほうが早いかも。
txt2imgとupscaleで使うモデルを別のものにした場合、Denoising Strenth次第で絵柄が結構変わる。
違うモデルで出力した画像、あるいはそもそもAI画像でない画像をi2iする場合実行前にInterrogate DeepBooruを使ってタグの補完をしたほうがより忠実になりやすい。また間違って認識している要素(キャラ名が違うとか、censoredが入ってたり)を削除することでイメージ補完の方向性をある程度コントロールすることができる。ただし「無い要素を追加」する方向ではあまり期待しないほうが良い。そのためにはDesoising Strengthを大きくしなければならないが、そうすると全体が大きく書き換わってしまうからだ。追加したい場合は画像に直接「加筆」したほうが手っ取り早い。
ExtrasのUpscaler
None -> なんもしない。サイズを変えようともしない。なんのためにあるんだ。
Lanczos -> やはり古いアルゴリズムなので使えない。
Nearest -> なんもしてないのと同じようなもの。サイズは変わるが。
ESRGAN_x4 -> 油絵(キャンバス)に塗ったようなザラザラしたテクスチャがのこる。味といえば味だが加工はしづらそう
R-ESRGAN 4x+ -> つやつや仕上げ。かろうじてディティールは残っているが少しなにか混ぜたほうがいいかも?
R-ESRGAN 4x+ Anime6B -> ディテールがかなり潰れる。目に見えてわかるくらいなのであまりよろしくない。50%でもかなりわかる
個人的な結論としては ESRGAN_x4 と R-ESRGAN 4x+ の50%混合がちょうどいい感じかなあ