見出し画像

img2img入門(8) アップスケーリング基礎編

この記事では、img2img で生成した画像の解像度を上げる『アップスケーリング』を行う方法について解説します。

アップスケーリングの必要性

アップスケーリングとは、画像を拡張し、解像度を上げることを指します。AUTOMATIC1111の生成する画像のサイズは、デフォルトで512px×512pxとかなり低解像度です。Stable Diffusion を使った画像生成では、このように低解像度で生成した画像からノイズを除去し、超解像化していくことで高解像度の最終版を作っていきます。
しかし、それならなぜ最初から高解像度で生成しないのでしょうか。それは、高解像度の画像は、巨大な演算空間が必要になるからです。縦横が倍になると、ピクセル数は4倍になります。大きな画像を作るためには巨大なVRAM、つまり高価なGPUが必要になるからです。さらに、大きな画像を生成しようとすると画像自体が崩壊してしまうこともあります。

アップスケーリングの方法はいくつかありますが、ここではここでは、Stable Diffusion 1.x系のモデル「bluePencil_v9b」でのimg2imgを利用したアップスケーリングについて解説します(SDXL系はさらに大きなメモリが必要になるため)。

img2imgを使ったアップスケーリング

seed値を固定し、生成した画像をもとに img2img を繰り返し、画像のサイズを拡大した生成結果を比較していきましょう。まずt2iで画像を生成します。

モデル bluePencil_v9b
プロンプト masterpiece, best quality, ultra detailed, 1girl
ネガティブプロンプト worst quality, low quality, normal quality, easynegative, NSFW
生成サイズ 512×512

masterpiece, best quality, ultra detailed, 1girl,
Negative prompt: worst quality, low quality, normal quality, easynegative, NSFW,
Steps: 20, Sampler: DPM++ 2M Karras, CFG scale: 7, Seed: 43598724, Size: 512x512, Model hash: 6772b99463, Model: bluePencil_v9b, VAE hash: ab33ad55c6, VAE: clearvae_v23.safetensors, TI hashes: "easynegative: c74b4e810b03", Version: v1.6.0-2-g4afaaf8a
生まれつき美しい…だけど、もっと美しくしてあげる…!

720×720

1024×1024

手足が崩れてきます

1280×1280

かなり崩壊してしまいました

1920×1920

ほぼ木の幹ですね

画像のサイズが上がるにつれ、クオリティが下がっていくのがわかります。1024×1024にすると人体が崩壊しはじめ、1920×1920では人間の面影もほとんどなくなってしまいました。
これは、Stable Diffusion 1.xが学習している画像のサイズが512×512であるために起こります。

Stable Diffusion is a text-to-image latent diffusion model created by the researchers and engineers from CompVis, Stability AI and LAION. It is trained on 512x512 images from a subset of the LAION-5B database. LAION-5B is the largest, freely accessible multi-modal dataset that currently exists.

Stable Diffusion with 🧨 Diffusers (huggingface.co)

Stable Diffusionは、CompVis、Stability AI、LAIONの研究者とエンジニアによって作成されたテキストから画像への潜在拡散モデルです。LAION-5Bデータベースのサブセットの512x512画像で学習されます。LAION-5Bは、現在存在する最大の、自由にアクセス可能なマルチモーダルデータセットです。

そのため、SD1.x系で高解像度の画像を生成したい場合は、512×512を基準とした低解像度で画像を生成し、それをアップスケーリングすることが重要なテクニックになってきます。
アップスケーリングの方法はいくつかありますが、ここではi2iを利用したアップスケーリングについて解説します。

i2iを使ったアップスケーリング

この方法は、シンプルにi2iで大きい画像サイズや倍率を指定して生成する方法です。

先程の画像です

この画像を 🖼 「Send to Img to Img」ボタンを使って、i2iタブに渡し、『Resize to』のパラメータで大きいサイズを指定します。今回は2倍の1024×1024に指定しました。『Resize by』で拡大する倍率を指定してもかまいません。

今回は元のイラストと近いイラストを生成したいので、プロンプトはそのまま、変更しません。そして『Denoising strength』は0.5にしておきます。値が小さすぎると描き込みが増えず、元絵に忠実ではありますが、サイズが大きいにもかかわらず低解像度のような低品質な画像になってしまいます。ちょうどいい値を探りましょう。『Generate』で生成します。

高解像度化することができました。拡大して比較してみましょう。

アップスケーリング前(左)、アップスケーリング後(右)

線が滑らかになり、アップスケーリングに成功していることがわかります。

Step数を上げる

先ほどアップスケールしたイラストと元のイラストを比べると、手や口元などの細部が少し異なっていることがわかります。

アップスケーリング前(左)、アップスケーリング後(右)

これをより元のイラストに近づけたい時には『Sampling steps』の値を増やします。

Stepとは、デノイズ処理を行う回数のことです。デフォルトでは20ですが、60に上げて生成したものを先ほどのイラストと比較してみましょう。

stepを上げた画像の方が、手や口元の精度が増していますね。Script「X/Y/Z plot」を使って、Steps を {20,40,60}, Denoisingを {0.4,0.5,0.6}して比較するなどして 好みのバランスを探ってみてください。

Script「X/Y/Z plot」を使って、Steps を {20,40,60}, Denoisingを {0.4,0.5,0.6}

例えば冒頭の例だと右手に持っている「何か」が少し邪魔ですね。
Step=40, Denoising=0.6 が口や表情の雰囲気がいいと思います。

512x512→1024x1024の多段階生成


1024x1024

この生成結果をさらに img2img や Extras にかけることで 512→1024→2048と精緻に制御を保ったまま細部を描きこみながら解像度を上げることができます。

この例は、上記の手法で錬成した1024x1024の画像を Extrasのアップスケーラー「R-ESRGAN 4x+ Anime6B」を使い x4倍、つまり4096x4096ピクセルにしたものです。アップスケールにかかる時間は10秒ほどで、生成にくらべてメモリ消費も大きくありません。

Postprocess upscale by: 4, Postprocess upscaler: R-ESRGAN 4x+ Anime6B Time taken: 9.4 sec. A: 0.84 GB, R: 1.67 GB, Sys: 3.8/5.99707 GB (63.3%)

今回紹介したアップスケーリング手法は基本中の基本で、省メモリで効果が大きい手法になります。他にも Hirez.FixやVAE、ControlNetなど各種機能拡張でのアップスケーリング手法がありますが、まずは基本として何度か練習をしておくことをおすすめします。


ここから先は

0字

Stable Diffusionをゼロから学ぶマガジン

¥500 / 月
初月無料
このメンバーシップの詳細

この記事が気に入ったらサポートをしてみませんか?