Stable Diffusionの最適サイズは512×512になりますが、いざ出力していくともっと大きい画像が欲しくなります。
ただ、単純に出力する画像サイズを大きくしてしまうと、学習されている画像データとかけ離れてしまうため破綻した画像が生成されてしまい使い物にならないのです。
そこで何かやり方はないのか調べてみると、Stable Diffusionの「Hires. fix」と「Extras」でできるようで、今回は「Hires. fix」試してみました。
Hires. fixとは
Hires. fixはStable Diffusionのtxt2imgのオプションで、画像生成の過程でアップスケールを行います。生成の過程でアップスケールしたサイズで再描写してノイズ除去やディテールの表現を行うので精細な画像が生成できるようです。
使い方はGenerationタブの中にあるHires. fixのチェックボックスをONにして設定するだけです。簡単ですね。
具体的な設定は以下。
設定値:Upscaler
アップスケールする際のアルゴリズムを指定します。
「R-ESRGAN 4x+」を選んでおけば間違いないようです。
設定値:Hires steps
アップスケールする際のステップ数を指定します。
0だとSampling stepsと同値が設定されるそうですが、通常は10~20で十分のようです。値が大きいほど生成時間がかかるので、Sampling stepsを大きな数字にしている場合は20とかに設定してもいいかもしれません。
設定値:Denoising strength
アップスケールする際の元画像との忠実度。0に近いほどアップスケールする前の画像と似た画像がでます。初期値だと0.7になっていますが、0.7だと元画像から結構変わるはずで、元画像に似せるなら0.3~0.5程度が良さそうです。
設定値:Upscale by
拡大率です。「2」だと縦横それぞれ2倍になります。
縦横等倍ではない場合は「Resize width to」「Resize height to」の項目をそれぞれ指定しましょう。
試してみた結果
元画像はこれ
敢えて指の描写がある難しいものを選んでみました。
指は少し破綻してします。
拡大率2 + Denoising strength 0.3
綺麗に拡大できていますね。
指の破綻もだいぶ解消しています(完全解消ではありませんが)。
花の描写が少しつぶれているのが気になります。
拡大率2 + Denoising strength 0.4
Denoising strength 0.3よりも花の描写は細かくなってますが、襟の花柄も立体感が出てしまってます。まぁ、これはこれでいいのかもしれませんが(笑)
指の描写はDenoising strength 0.3と変わらず。
拡大率2 + Denoising strength 0.5
掲載は自粛しますが、指の描写が破綻してしまいました。
Denoising strengthは数値を上げていけば元画像に縛られない描写になっていきますが、破綻もしやすくなりそうです。
一方、桜は枝の部分含め一番綺麗だったので、指のような苦手な描写が含まれていなければ使えそうです。
拡大率3 + Denoising strength 0.4
拡大率を3倍にすると2倍に比べて生成がめちゃくちゃ長くかかるようになるので、実用では使いづらいです。
これも掲載は自粛しますが、右腕の部分が破綻してしまいました(どう破綻したかはご想像してください(笑))。
同じDenoising strength 0.4でも、拡大率が上がると描写が破綻しやすくなるようです。
Upscalerを変えてみたら
UpscalerにLatentやLanczosを選んで試してみましたが、ぼやけた絵になってしまいやはりR-ESRGAN 4x+が良さそうです。
Latentで出力したらこうなりました。
結論
私の場合、下記設定が良さそうです。
Upscalerは「R-ESRGAN 4x+」
Hires stepsは「40~50」
Upscalerは「2」
Hires. fixだと2倍までの拡大が実用ですね(2倍以上だと時間がかかりすぎる)。
コメント