[生成AI] Stable Diffusion で生成する画像の解像度を上げる

生成AI

ここでは、Windows ローカル環境において、AUTOMATIC1111 / stable-diffusion-webui を使用して AI 生成画像の解像度を上げる方法を書いておく。なお、stable-diffusion-webui の導入方法については下記ページを参照。

最も手っ取り早い方法

PC のグラフィックメモリが十分にあり(少なくとも 12GB 以上)、GPU のパワーにも問題ない場合(GeForce RTX クラス以上)は、Hires.Fix を使うのが最もお手軽。

「txt2img」の「Generation」タブに「Hires. Fix」というチェックボックスがあるので、これにチェックを入れるだけ。元画像の何倍に拡大するかは「Upscale by」で指定する。これだけ。

ControlNet の Tile 機能を使用する方法

ControlNet に含まれる機能の1つとして、オリジナル画像をいくつかのマス(タイル)に細切れにし、それぞれの解像度を上げて再結合することで、解像度の高い画像を生成するというものがある。これを利用すれれば、一度に確保するメモリを小さくすることができ、メモリが少ない PC でも高解像度の画像を生成することができる。

手順は以下の通り。

ControlNet をインストール

「Extentions」の「Install from URL」タブを開いて、「URL for extension’s git repository」に以下の URL を入力して「Install」ボタンを押す。

https://github.com/Mikubill/sd-webui-controlnet.git

「Installed」タブを開いて Extentions のリストに「sd-webui-controlnet」が追加されていることを確認したら「Apply and restart UI」ボタンを押す。

「txt2img」の「Generation」タブに「ControlNet v1.1.xxx」が追加されていれば、インストール成功。なお、バージョンはその時点の最新がインストールされる。

ControlNet のモデルをダウンロード

以下のページから ControlNet のモデルをダウンロードする。

lllyasviel/ControlNet-v1-1 at main
We’re on a journey to advance and democratize artificial intelligence through open source and open science.

「control_v11f1e_sd15_tile.pth」というファイルをダウンロードして、extensions/sd-webui-controlnet/models の下に格納しておく。

オリジナル画像を生成

まずは、解像度を上げる前のオリジナル画像を txt2img で生成する。このとき「Hires. Fix」にはチェックしない。また、この時点ではまだ ControlNet も使用しない。なお、このときの画像サイズは 512×512 か 768×768 が良い(キレイに解像度を上げることができる)とされるが、それ以外のサイズでもそこまで劣化はしないので、あまり気にしなくても良いかもしれない。(あくまで筆者の環境ではふつうにアップスケールできた)

まずは普通にプロンプトを入力してお好みの画像を生成する。

画像が生成されたら、「Send image and generation parameters to img2img tab.」のボタン(画像プレビューの下に並んでいるボタンの1つ)を押して、生成された画像を「img2img」タブに送る。

ControlNet の設定

「img2img」の「Generation」タブの ControlNet の設定を展開して、「Enable」のチェックボックス ON、「Tile/Blur」のラジオボタンを ON にして「Preprocessor」に「tile_resample」、「Model」に「control_v11f1e_sd15_tile」が選択されていることを確認する。

続いてその下、「Script」に「SD Upscale」を選択、「Scale Factor」に何倍のサイズにしたいか(下図では 2倍 を指定)、「Upscaler」には None 以外なら何でも良いが、本記事の執筆時点で一番新しい「SwinIR 4x」を選択しておく。

いったん上記以外はデフォルトで OK。「Generate」ボタンを押すと、画像のアップスケール処理が始まる。

もしメモリ不足で処理が停止するようなら、「Tile overlap」の値を小さくすることで、一度に処理する画像サイズを小さくする(消費メモリを小さくする)ことができる。ただし、ここを小さくすればするほど処理時間は長くなるので、自身の環境に合わせてちょうど良いあたりを探していくと良い。

高解像度化の結果サンプル

まず、アップスケール前の画像。

そして、アップスケール後の画像。

元の画像を単純に引き伸ばしたのではなく、ちゃんと細部の描き込みがされた上でサイズが拡大されていることがわかる。(オリジナルにない装飾などが勝手に追加されていたりもするが)

この Tile を使ったアップスケーリングは、Hires. Fix に比べて時間はかかるが、メモリの消費を抑えられるので、ある程度スペックの低い(グラフィックメモリが少ない)環境でも高解像度化できるというメリットがある。

タイトルとURLをコピーしました