高解像度の画像を生成する方法は色々あると思います。最近ではTiled Diffusion with Tiled VAEなどが人気ですが、この記事ではUltimate SD Upscaleを使って、高解像度の画像を生成する方法について解説していきます。なお正しい情報を提供できるよう努めてはいますが技術屋ではないので、内部の処理などについての詳細な理解は不足しています。
Ultimate SD Upscaleとは
Ultimate SD UpscaleはStable Diffusionで生成した画像を高解像度化する拡張機能です。この拡張機能を利用することでweb UI単体では出来ない高解像度の画像生成が細かい設定を行うことができます。
仕組みとしては、選択されているアップスケーラーで画像を拡大した後に、画像をタイル状に分割してインペイント (i2i) することで高解像度化を行うようです。継ぎ目に関してのオプションを有効化しているとタイル間の継ぎ目の再描画も可能とのことです。
Ultimate SD Upscaleの導入方法
Google Colaboratory版
%cd /content/stable-diffusion-webui/extensions/
!git clone https://github.com/Coyote-A/ultimate-upscale-for-automatic1111 /content/stable-diffusion-webui/extensions/ultimate-upscale-for-automatic1111
%cd /content/stable-diffusion-webui
ローカル版
- 方法1
-
web UIを起動 → 「Extensions」タブをクリック → 「Available」タブをクリック → 「Ultimate SD Upscale」を探す → install
- 方法2
-
web UIを起動 → 「Extensions」タブをクリック → 「Install from URL」タブをクリック →
https://github.com/Coyote-A/ultimate-upscale-for-automatic1111.git
と入力 → 「Install」
Ultimate SD Upscaleの使い方
こちらがUltimate SD Upscaleの設定項目です。i2iタブにてScriptでUltimate SD Upscaleを選択すると表示されます。
ノイズ除去強度 | 公式曰く0.35推奨、変化を望まない場合は0.15~0.20 |
ターゲットサイズの種類 | 画像サイズから拡大 |
アップスケーラー | フォトリアリスティックな画像にはESRGAN、それ以外にはR-ESRGAN 4x+ |
種類 | チェス |
タイル幅 / 高さ | 2Kの場合は512px |
マスクのぼかし | 512-768pxのタイルサイズでは12-16 |
余白 | 適値 |
Seams fix : 種類 | – |
アップスケール | 「 | 」
Seams fix | – |
【設定項目】
- Target size type(ターゲットサイズの種類)
-
生成物の画像サイズを取得する設定です。
- img2img設定より:元画像のimg2imgの幅と高さから取得されます。
- 任意のサイズ:幅と高さのスライダーが展開され、自由にサイズを指定できます。最大値は8192。
- 画像サイズから拡大:元画像に対して何倍スケールを行うか指定できます。
- Upscaler(アップスケーラー)
-
アップスケーラーの選択項目。
- Type(種類)
-
アップスケーリング時に使用される畳み込みフィルターの種類を選択するためのものです。
- Linear:単純な線形フィルターですべてのタイルを1つずつ、列ごとに、行ごとに処理(平均化してアップスケール)するようです。
- チェス:チェス盤(市松模様)のように2×2のブロック単位で処理(交互に平均化してアップスケール)するようです。よってシャープなエッジが得られます。
- なし:フィルターを使用しない単純な拡大です。処理は早いですが、品質は上記二つと比べて劣化すると思います。
- Tile Width(タイル幅)
-
処理するタイルの幅です。タイルが大きいほど、最終的な画像にアーティファクトが発生しにくくなります。2Kの場合、通常512pxで十分なようです。
- Tile Height(タイル高さ)
-
処理されるタイルの高さです。デフォルトは0であり、この場合は幅と同じになります。タイルが大きければ大きいほど、最終的な画像にアーティファクトが発生することは少なくなります。2Kの場合、通常は512pxで十分なようです。
- Mask blur(マスクのぼかし)
-
アップスケール時に低解像度故に起こりうる情報の欠落をぼかしで補う設定です。調整することで、ノイズやディテールを保持しながら、アップスケーリングの品質を向上させることができます。512-768pxのタイルサイズでは12-16に設定します。継ぎ目がある場合は増やしてください。
- Padding(余白)
-
アップスケーリング時に画像の周囲に追加される余白の量を調整する設定項目です。余白はアップスケーリング後の画像の解像度が元の画像よりも大きくなった場合に必要になります。余白が多すぎると画像の品質が低下する可能性があるため、適切な値を選択する必要があります。
- Seams fix : Type(種類)
-
アップスケーリング処理において、畳み込みフィルターのサイズが画像の幅や高さと合わない場合、隣接する畳み込み処理の結果が滑らかにつながらず、シーム(縫い目)が生じることがあるようです。Seams fixを有効にすることで、これらのシーム(縫い目)を修正し、滑らかな画像を生成することができます。
- なし
-
Seams fixを使用しない場合は「なし」に設定します。
- Band pass
-
画像の周波数帯域を抽出して画像のノイズを除去したり、エッジを強調したり、滑らかにしたりする設定のようです。シームだけに作用することでoffset passより処理が短い時間で済むようです。
- ノイズ除去:Band passにより生成された画像に対して、ノイズ除去処理を行う設定です。
- 幅:Band passによるフィルタリングにて残す周波数帯域の幅のようです。値を下げるほど、より細かな模様やディテールが失われますが、同時にノイズも除去されやすくなります。
- 余白:画像の周囲に追加する余白のサイズを調整する設定です。余白を追加することで歪みやズレを補正できるようです。しかし、余白が多すぎると画像のディテールが失われたり、不自然な歪みが発生することがあります。
- Harf tile offset pass
-
アップスケーリング処理によって生じたピクセルのずれを補正するための設定項目のようです。Band passよりも広い範囲に作用するため良い結果が得られるものの、処理に多くの時間が掛かるようです。
- ノイズ除去:Band passと同じ。
- マスクのぼかし:マスク処理の際に使用するぼかしの程度を調整する設定です。マスク処理によって補正された領域の端が、より自然なグラデーションで繋がるようになるようです。ただし、値が大きすぎると、マスク処理によって画像のディテールが失われたり、不自然な見た目になることがあります。値によっては処理に時間が掛かるため調整が必要です。32pxの余白でで8-16に設定が推奨されています。
- 余白:Band passと同じ。
- Harf tile offset pass + intersections
-
Harf tile offset passに加え、intersectionsでタイル間の余白も補正できるようです。より良い結果が得られるものの、より処理に時間が掛かります。
設定項目はHarf tile offset passと同じであるため解説は省略します。
- Upscaled(アップスケール)
-
Ultimate SD Upscaleによるアップスケールを行う場合は「
」。デフォルトで有効。 - Seams fix
-
Seams fixを利用する場合に「
」。
不明点があったり、Ultimate SD Upscaleについてより理解したい場合はGitHubで公開されているWikiを見ると良いかもしれません。
以上です。
コメント