Stable Diffusionの最適サイズは512×512になりますが、いざ出力していくともっと大きい画像が欲しくなります。
ただ、単純に出力する画像サイズを大きくしてしまうと、学習されている画像データとかけ離れてしまうため破綻した画像が生成されてしまい使い物にならないのです。
そこで何かやり方はないのか調べてみると、Stable Diffusionの「Hires. fix」と「Extras」でできるようで、今回は「Extras」を試してみました。
Extrasとは
ExtrasはStable Diffusionの高画質化ツールです。
何といってもスピードの速さが魅力。Hires. fixと比べるとめちゃくちゃ早くて一瞬のように思えるくらい。
また、Hires. fixが再描写するのに対して、Extrasは純粋な拡大処理を行っているイメージなので、画像は変えず高解像度化したいときにおススメです。
使い方はExtrasタブを開き、変換したい画像を登録し、拡大率とUpscalerを選択するだけです。
その他にも様々なパラメータがあり、例えばGFPGANは顔の崩れを修正するそうですが、あまり使わないようなので本記事では割愛します。
これがExtrasの拡大生成後の画面です。
左上に元画像を設定して、その下のパラメータを調整後、右上のオレンジの「Generate」ボタンを押すと生成されます。
具体的な設定は以下。
設定値:Scale by
アップスケールする拡大率です。2だと、縦横各2倍になります。
縦横等倍ではない場合は「Scale to」タブで設定しましょう。
設定値:Upscaler 1
アップスケールする際のアルゴリズムを指定します。
Hires. fixの時と同様に「R-ESRGAN 4x+」を選んでおけば間違いないようです。
なお、Extrasの場合は「Upscaler 2」があり、もう1つアルゴリズムを加えることができます。「Upscaler 2 visibility」で影響度を指定します。
どういうときにUpscaler 2を使用するのかは不明です(勉強せねば)。
試してみた結果
元画像はこれ
Hires. fixの時と同じ画像です。敢えて指の描写がある難しいものを選んでみました。
指は少し破綻してします。
拡大率2
純粋に拡大されていますが、右目の縁取りの黒色が太すぎて不自然になってますね。
元画像が768×512で結構小さいので、それを引き延ばそうとすると情報不足なのかもしれません。
Hires. fixで2倍にした後、さらにExtrasで2倍
Extrasでの拡大だけだとちょっと不自然なので、まず、Hires. fixで2倍の大きさにして、それをさらにExtrasで2倍に拡大してみました。
まず、Hires. fixで768×512→1536×1024に。
再描写されるので、自然な仕上がりです(ただし、元の画像とは異なるものになります)。
その後、Extrasで1536×1024→3072×2048に。
うん、これなら自然です!
かなり綺麗に仕上がっています。
3072×2048の大きさまで拡大できれば実用的ですね。
結論
私の場合、「Hires. fixで2倍にして、さらにExtrasで2倍に拡大」というのが定番になりそうです。
Stable Diffusion始めたころは「512ピクセル角程度しか生成せないのか~」とガッカリしたのですが、そうではなくて良かったです(笑)
コメント