Stable Diffusion
前回、Stable DiffusionのCFG Scaleをいじってみました。

今回はStable DiffusionのHires. Fixをいじってみましょう。
Hires. Fixとはまず画像を低解像度で生成した後、画像を拡大して、img2img(画像から画像を生成するプログラム)で再度画像を生成させることで、高解像度の画像を得る機能だそうです。
こちらのページで詳しく解説されていますので、良かったらどうぞ。
それでは始めていきましょう。
Hires. fix
まずはHires. fixがWeb UIのどこにあるか確認してみましょう。

ページの真ん中らへんにありますが、オプション機能のためか折りたたまれているので、右側の◀︎ボタンをクリックして開いてみます。

開くと「Upscaler」、「Hires steps」、「Denoising strength」、「Upscaled by」、「Resize width to」、「Resize height to」の項目があります。
ただし「Resize width to」と「Resize height to」がグレーアウトしています。

これは「Upscaled by」か「Resize width to」、「Resize height to」のどちらかしか選べず、現状では「Upscaled by」が選択されている状態ということです。
「Upscalde by」は最初に生成する画像の縦横比は変えずに、何倍の解像度にするかという値になります。
例えば最初に生成する画像が「512 x 512」で、Upscaledが「2」の場合、最終的には「1024 x 1024」の画像が生成されるということです。
「Resize width to」、「Resize height to」の場合は、最初に生成する画像のサイズに関わらず、新しい縦横のピクセル数に変換されます。
ということで「Upscaled by」、「Resize width to」、「Resize height to」は単純に最終的に生成される画像サイズの話なので、今回は「Upscaled by」を使い、値は「2」で固定にします。
「Upscaler」は画像を拡大する際の方法を選択します。
20種類近くありますが、またUpscalerによって画像を生成する時間も大きく変わりますので自分の環境に合ったものを、そして生成する画像の品質も変わるようですので、好みのものを探してみるとよいでしょう。
今回は「Latent」と「R-ESRGAN 4x+」、「LDSR」を試してみましょう。
また「Hires. step」は高解像度化する際のステップ数で0だとSampling stepsと同じステップ数になります。
通常はSampling stepsよりも少なくていいとのことですので、迷ったら「0」かSampling stepsより10少ないくらいにしておけばいいのかなと思います。
今回は「0」でいきます。
「Denoising strength」はノイズ除去の強度で、小さいと下の画像とは違ったものになり、大きいと元の画像に近くなるとのことです。
今回は「Denoising strength」を、Web UIのデフォルトが「0.7」ですので、「0.3」、「0.5」と比較してみましょう。
実際に試してみる
それでは実際に試していきましょう。
これまでモデルは女の子ばかりでしたので、そろそろ男の子にも登場してもらいましょう。
ということでプロンプトはこんな感じで用意してみました。
Prompt: 1boy, junior high school, sitting, white shirt, short sleeves, rigid denim, wooden chair, outside
白い半袖シャツとジーンズを履いた中学生くらいの男の子が外で気でできた椅子に座っていると言った感じです。
基本的な画像生成条件はこんな感じです。
Sampling method: DPM++ 2M SDE
Schedule type: Karras
Sampling steps: 30
Width: 512
Height: 512
まずはHires. fixなしで画像を生成してみます。

画像生成まで22秒でした。
画質に関しては、拡大すると分かりますが、解像度がやはり落ちるため全体的にぼやけた感じになっています。
次にHires fix.無しでピクセル数を倍にしてみます。
Sampling method: DPM++ 2M SDE
Schedule type: Karras
Sampling steps: 30
Width: 1024
Height: 1024

生成時間は1分28秒でした。
解像度が上がったため、全体的に絵がはっきりとした感じになりました。
気になるのはかなりの猫背になっていることでしょうか。
次に最初の解像度を512×512に戻し、Hires. Fixの条件を加えます。
まずはUpscalerの違いを見ていきます。
Upscaler: Latent
Hires steps: 0
Denoising strength: 0.7
Upscaled by: 2

生成時間は1分50秒でした。
こちらもかなりはっきりとした絵になっています。
解像度を最初から1024×1024にしたものと比べて、より自然な感じに仕上がった気がします。
特に後ろの垣根の葉っぱなんかはより1枚1枚鮮明に描かれているように思えます。
ただどんどん前のめりになっているのは何なんでしょうか。
次にUpscalerを「R-ESRGAN 4x+」に変えてみます。
Upscaler: R-ESRGAN 4x+
Hires steps: 0
Denoising strength: 0.7
Upscaled by: 2

生成時間は1分54秒でした。
正面を向いているからか、目が他の画像よりもイキイキしている感じがします。
全体的な質としては「Latent」と大きく変わりがないですし、生成時間も同じくらいなので、気に入った方を使うといいかもしれません。
今度はUpscalerを「LDSR」に変えてみましょう。
Upscaler: LDSR
Hires steps: 0
Denoising strength: 0.7
Upscaled by: 2

生成時間は3分17秒でした。
もう私のような絵の素人にはどれも大きく変わらないように見えます。
生成時間的には倍近くまで増えています。
Upscalerを「Latent」と「R-ESRGAN 4x+」、「LDSR」の3つ試してみましたが、個人的にはどれも十分な品質の絵が描けていると感じました。
そして生成時間的には「Latent」と「R-ESRGAN 4x+」が同程度、「LDSR」が長めとなったので、とりあえず私のような絵の素人さんは「Latent」を試して気に入らなかったら、他のUpscalerを試すという方針でいいのでは無いでしょうか。
次は「Denoising strength」を変えてみます。
ここまで「0.7」で画像を生成してきましたので、次は「0.5」にしてみます。
Upscaler: Latent
Hires steps: 0
Denoising strength: 0.5
Upscaled by: 2

生成時間は1分50秒でした。
全体的に、特に体と髪の毛がリアル感が増したように思えます。
さらに下げて「0.3」にしてみます。
Upscaler: Latent
Hires steps: 0
Denoising strength: 0.3
Upscaled by: 2

生成時間は1分49秒でした。
こちらは全くノイズが減り切っておらず、まだぼやけたままの画像になっています。
ということであまり下げすぎるのも良く無いということが分かりました。
ではその中間の「0.4」を追加でやってみましょう。
Upscaler: Latent
Hires steps: 0
Denoising strength: 0.4
Upscaled by: 2

生成時間は1分52秒でした。
The中途半端、まさにもう少しで完了といった感じのところで終わってしまいました。
こうなると多分「0.5」以上にするのが正解っぽいです。
次回はStable DiffusionのRefinerを試してみましょう。
ではでは今回はこんな感じで。
コメント