見出し画像

拡大率で顔はここまで変わる、Hires upscaleの沼(Stable Diffusion解説)

はじめに

昨日Stable DiffusionにおけるLoRAの役割について記事を書きましたが、最後のところで画像のクオリティを決めるのは拡大率だと書きました。

今日はそんな拡大率(Hires upscale)について書きたいと思います。

Hires upscaleとは

Stable DiffusionのHires upscaleはイラストの解像度を上げて高画質化する機能です。拡大する際にアルゴリズムを選択するのですが、実際はそのアルゴリズムを元にHires stepsやDenoising strengthなどのパラメータを用いて画像を再生成することになります。

Stable Diffusionがどのような過程で画像を生成しているのかというのが良く分かる機能ではありますが、Stable Diffusionはノイズに対して何度もアルゴリズムを適用して、徐々にノイズを除去していき、最終的にきれいな画像を得るという方法で動作しています。

Checkpointの多くは512x512の画像を学習データとして使用しているため、512x512の画像を一度生成し、それを拡大することでより学習データに近い画像を生成することができます。

Hires upscaleを使わずに単純に画像の解像度を上げると一人だけ生成したいのに複数人生成される事になるのですが、これは学習データの画像サイズに起因していると言われています。

Hires upscaleの効果について

Hires upscaleを使わず画像を生成すると、何だか顔が変になると思います。顔のディテールを上げるためには拡大率を2.5倍ぐらいにするのがちょうど良いように思っています。

以下、同じSeed値でHires upscaleの倍率を変えながら生成された画像を掲載します。

Hires upscaleなし

Steps: 25, Sampler: DPM++ 2S a Karras, CFG scale: 7, Seed: 3619585163, Size: 512x910, Model hash: a92311f07a, Model: orangechillmix_v70

Hires upscaleなし

Hires upscale 1.5倍

Steps: 25, Sampler: DPM++ 2S a Karras, CFG scale: 7, Seed: 3619585163, Size: 512x910, Model hash: a92311f07a, Model: orangechillmix_v70, Denoising strength: 0.5, Hires upscale: 1.5, Hires upscaler: R-ESRGAN 4x+ Anime6B

Hires upscale 1.5倍

Hires upscale 2.5倍

Steps: 25, Sampler: DPM++ 2S a Karras, CFG scale: 7, Seed: 3619585163, Size: 512x910, Model hash: a92311f07a, Model: orangechillmix_v70, Denoising strength: 0.5, Hires upscale: 2.5, Hires upscaler: R-ESRGAN 4x+ Anime6B

Hires upscale 2.5倍

どうでしょう、衣装に関してはそこまで変化が無いものの、目の細かさが拡大率を上げる毎に良くなっていると思います。

もうひとつ別パターンを載せておきます。

Hires upscale 1.5倍(別パターン)

Steps: 25, Sampler: DPM++ 2S a Karras, CFG scale: 7, Seed: 1558506888, Size: 512x910, Model hash: a92311f07a, Model: orangechillmix_v70, Denoising strength: 0.45, Hires upscale: 1.5, Hires upscaler: R-ESRGAN 4x+ Anime6B

Hires upscale 1.5倍

Hires upscale 2.5倍(別パターン)

Steps: 25, Sampler: DPM++ 2S a Karras, CFG scale: 7, Seed: 1558506888, Size: 512x910, Model hash: a92311f07a, Model: orangechillmix_v70, Denoising strength: 0.45, Hires upscale: 2.5, Hires upscaler: R-ESRGAN 4x+ Anime6B

Hires upscale 2.5倍

どうでしょう、こちらも1.5倍より2.5倍の方が顔が良いように思います。

因みにStable Diffusionでは毎回ノイズから画像を再生成しているので出来上がる画像にランダム性があり、同じSeed値だからといって同じ仕上がりには成らないのが難しいところです…。

一部おかしいところがあれば部分的に補正することもできるのですが、その話はまた別の機会にしたいと思います。

さいごに

今回は全身の画像生成ということもあり顔の面積が少ないため拡大率を上げる方向で生成しましたが、もし画像内の顔の割合が多い場合は拡大率を上げなくてもそこそこのクオリティの画像を作ることができます。

なぜ拡大率を上げないと綺麗に成らないかというと先に記載した学習データが512x512であることが要因と考えていますが、顔のサイズが学習したデータと同じサイズぐらいに成らないと綺麗に生成できないのだと思います。

もちろん拡大率を上げるとそれだけ生成に時間がかかり、Stable Diffusionのランダム性もあって失敗した場合の損失が大きくなってしまいます…。

もう少し低解像でもクオリティの高い画像が生成できれば良いのですが、そこは今後の技術革新に期待したいところです。

ではでは。


よければ❤️、シェア⤴️、サポートお願いします❗🥰