Stable Diffusionで画像を拡大したいときはHires. fixかExtrasを使うのが王道かと思いますが、i2iでも画像が拡大できるということを知ったので試してみました。
i2iとは
i2iは「image to image」の略で元の画像をベースにして新たな画像を生成する手法です。
単純な拡大とは異なり画像を新規生成するのですが、生成元となる画像を指定しているので絵が崩れず、さらに生成後の画像サイズも指定できるのです。
生成時の画面はこちらになります。

設定が必須なのは、サンプラー(Sampling method)とSampling steps、それと画像の拡大率(もしくは画像サイズ)くらいです。
CFG ScaleとDenoising strengthも必要ですが、下記を参考にしてみてください。
CFG Scale:どれくらいプロンプトに従うか、の値で、値が大きい方がよりプロンプトに従うようになります。ただ、値を上げ過ぎると逆にプロンプトと違う画像が生成されてしまうようで、7からスタートして少しずつ上げていくのが良さそうです。
Denoising strength:どれくらい元の画像を忠実に再生成するか、の値で、0が最も忠実になります。0.5~0.6くらいが良いようです。
試してみた結果
それでは試した結果になりますが、元画像はこれを使用しています。

768×512の画像です。
これをi2iで拡大してみます。
拡大率2、Resize mode:Just resize
サンプラーは「DPM++ 2M SDE Karras」を指定して、拡大率2倍で「Just resize」で生成してみました。
顎に当てている手が少し変わったのと、背景がよりボケているように見えます。

拡大率2、Resize mode:Just resize (latent upscale)
先ほどと同条件で、Resize modeを「Just resize (latent upscale)」を選び、UpscalerをLatentにして生成。

髪が少し乱れ気味になりました。
顎に当てている手はこちらの方がオリジナルに近いです。
また、洋服の肩の皺がはっきりしています。
全体的にコントラストが強くなった画像になっていて、「Just resize」よりもくっきりした印象になりました。
参考:Hires. fixで拡大率2
i2iとの比較として、Hires. fixでの拡大も見てみましょう。
upscalerに「R-ESRGAN 4x+」を選択して生成してみました。

i2iよりもより自然です。
i2iだとupscalerがlatentしか選択肢がないのに対して、Hires. fixだと「R-ESRGAN 4x+」はじめ、お好みのものを選択できるのが大きいですね。
参考:Extrasで拡大率2
さらに比較としてExtrasでの拡大も見てみましょう。
元画像が768×512だと小さく、情報量が足りていないので、Extrasでの拡大だと不自然になりますね。

特に目元が気になります。
結論
やはり拡大目的だとi2iよりもHires. fixの方が優れているようです。
私の場合、「Hires. fixで2倍にして、さらにExtrasで2倍に拡大」というのが拡大時の定番ですが、i2iはそれを覆すことはなかったです。
コメント