「Ultimate SD Upscale」で画像生成力をさらに高める!設定方法と高画質化のコツ

Further enhance your image generation power with "Ultimate SD Upscale"! How to set up and tips for high image quality

4K画像や8K画像を作るための方法を紹介するにゃ。
基本的な部分を知っておかないと無駄な作業が増えるにゃ。

アップスケールは出来るんだけどただ単純に画像が大きくなるのにゃ。
大きくすると同時に詳細なディテールが描き込まれるようにするにはどうしたらいいにゃ~

じゃーコツを抑えたスケールアップの方法を紹介するにゃ
後半に出てくるScriptにあるUltimate SD Upscaleとは、Stable Diffusionで生成した画像を高画質化するための拡張機能ですにゃ。 Ultimate SD Upscaleと同時にControllNetも使うにゃ。
あと、若干本来の目的と外れるけど応用のためにはTaggerが必要なのにゃ。
導入がまだの人は入れとくのにゃ。



ControlNetの導入

ControlNetの導入

AIイラストに指示画像を与えることでポーズや輪郭、奥行き情報などを指定できる機能です。



Taggerの導入

Taggerの導入

画像に対してタグ(キャプションや説明文)を自動的に生成する機能を提供します。

How-To Guides

Step 1: アップスケール画像の品質アップ

元となる画像サイズが小さいと詳細が書き込まれてないためにそもそも拡大した際に画像が大きくなるだけになります。
対象の画像が1024以下の場合はいったん倍のサイズにします。
この段階で詳細まで書き込まれた画像の場合はStep2に進んでしまって構いません。
今回は512x512の画像をスケールアップしていきます。
次の画像は適当なプロンプトで作成した画像になります。
まずはこの絵を綺麗にしていきます。

512pxのベース画像

Hires. FixとLoRAを利用してまずは細かい描写をアップスケールしていきます。
元画像をTaggerを利用してプロンプトを取得します。
Taggerに画像を入れてInterrogateします。

Taggerで生成されたプロンプト

タグが出来たらSend to txt2imgをクリックします。
ここでは品質の悪い画像を最初のステップとして高画質にする部分になります。
この段階で細かい描写をするにあたり必要に応じてtxt2imgタブのプロンプトにあるTaggerで作成したプロンプトにadd_detailを追加します。
プロンプトを大きく変えてしまうと絵が変わってしまうので、品質や画風のプロンプトなど構図などに影響を与えなそうなものも追加します。

プロンプトに補足項目を追加する



次にtxt2imgの設定を行います。

txt2imgの設定

Sampling methodはDPM++ SDE Karrasを使います。※好みで変えて下さい
Sampling stepsは30~50でOKです。
Hires.fixにチェックをいれて今回はアニメ調にするのでUpscalerはR-ESRGAN 4x+ Anime6Bを選択します。
Denoising Strengthは0.1~0.5ぐらいで調整します。※ここは作るものによるので試すしか無い部分です。
Upscaleは2倍にして縦長の画像を作る想定でWidth512,Height768の設定にします。
元画像を単純に大きくしたい訳では無いので元画像の内容を踏襲した絵を再構築するのが目的になります。
よって最終的に作成したい大きい画像のイメージでサイズを変更してOKです。
ここまで設定したらGenerateします。

この作業はどうしてもガチャになりますが元絵と似た綺麗な画像が出来ると思います。
今回はガチャで元画像と同じポーズの絵も出来たのですが、特にポーズにこだわってる訳ではないので次の画像をアップスケールすることにしました。

Sorce Modelの設定画面

ここまででStep1の作業は完了です。
ここがポイントでここから先は単純に拡大する作業になるので、この時点で元となる絵が綺麗に出来てないといくら拡大しても綺麗に見えません。



Step 2: Ultimate SD Upscaleを利用したアップスケール

最初にimg2imgタブに移動します。

img2imgの設定画面

img2imgタブに移動したらSampling stepsを40~50ぐらいに設定します。
だいたいで良いです。書き込み量が多くなるという設定ですが、一定まで書き込むとその後いくら値を大きくしても変化がありません。
変化の乏しい書き込み量が多い分時間がかかって無駄になります。
このタイミングで絵柄を変えたくないのでDenoising strength 0.1で設定します。
構図が変わらないという意味では0.5まであげても構いませんが服も模様や背景が変わったりするので変化を楽しむ以外は上げない方が無難です。

img2imgへ画像をアップする

Step1で作成した画像を再度img2imgの画像にアップします。

ControlNetの設定画面

そして同じようにControllNetを開いてそこにも同じ画像を入れます。
ControllNetのEnableとPixel PerfectにチェックをいれTileを選択します。
ControllNetの設定はここまでです。

次にScriptの設定を行います。
ContorollNetの下の方にあるScriptからUltimate SD Upscaleを選択します。

Ultimate SD Upscaleの設定

詳細項目の中からTarget size typeのSelectからScale from image sizeを選択します。
横にあるScaleは現在の画像を何倍にするかです。
次にUpscalerから好みのものを選択します。今回はR-ESRGAN 4x+を使います。

ここからは意味を理解して設定した方が良いTypeについて少し解説します。
タイルとは、画像を小さな正方形や長方形に切り分けたものです。タイルに分割することで、大きな画像を高画質化する際にGPUメモリ不足エラーを回避したり、処理時間を短縮したりできます。

最初に出てくるtypeは、タイルの分割方法を指定する設定です。以下にそれぞれのタイプの特徴と効果を説明します。
- Liner: タイルを一列に並べて分割します。このタイプは、画像の縦横比が大きく異なる場合や、画像の中心部分に重要な要素がある場合に有効です。タイルの数が少なくて済むので、生成時間も短くなります。ただし、タイル同士のつなぎ目が目立ちやすいという欠点があります。
- Chess: タイルをチェス盤のように交互にずらして分割します。このタイプは、画像全体に細かいディテールがある場合や、画像の縦横比が近い場合に有効です。タイル同士のつなぎ目が目立ちにくくなりますが、タイルの数が多くなるので、生成時間も長くなります。
- None: タイルを分割せずに一枚の画像として扱います。このタイプは、画像サイズが小さい場合や、タイル分割による効果が期待できない場合に有効です。タイル同士のつなぎ目が発生しないので、画像の一体感が保たれますが、画像サイズが大きい場合はメモリ不足やエラーが発生する可能性があります。

更に同じ名称で下にtypeがありますがこちらには、以下の4つの値が設定できます。

- Normal: 画像を均等にタイルに分割します。タイルのサイズは、Tile widthとTile heightで指定します。この方法はシンプルですが、タイルの境界部分にぼやけやギザギザが発生する可能性があります。
- Chess: 画像をチェス盤のようにずらしてタイルに分割します。タイルのサイズは、Tile widthとTile heightで指定します。この方法は、Normalよりも境界部分のぼやけやギザギザを減らすことができます。
- Half tile offset pass: 画像をNormalと同じ方法でタイルに分割した後、さらに半分ずらしてタイルに分割します。つまり、2回のアップスケール処理を行います。この方法は、Chessよりもさらに境界部分のぼやけやギザギザを減らすことができますが、処理時間が倍になります。
- Half tile offset pass (seamless): 画像をHalf tile offset passと同じ方法でタイルに分割した後、Seem fixという機能で境界部分を補正します。Seem fixは、タイルの境界部分をぼかして自然につなげる機能です。この方法は、最も高品質なアップスケール結果を得ることができますが、処理時間が最も長くなります。

さてここまで設定が終わったらGenerateしてみましょう。
Web上ではサイズが大きすぎて丸々乗せることは出来ませんが、顔の部分だけの変化を参考にのせます。

Parametersの設定画面1

Parametersの設定画面1

かなり精密な描写でアップスケール出来てます。
この方法で4Kサイズや8Kサイズの画像が作成できます。

すごく綺麗な絵が出来たのにゃ。

印刷物などに利用する8K画像などもこの方法を使えば作れるにゃ。

ポイントはUltimate SD Upscaleを適用する前の段階でどれだけ高画質な画像を生成できるかなのにゃ。