【Stable Diffusion】 少ないVRAMで高解像度の画像を生成する方法

この記事では,Stable Diffusionを用いて画像生成において,MultiDiffusionを用いて高解像度の画像を少ないVRAM(低スペックGPU)で実行する手順を記載します.

目次

MultiDiffusionとは?

MultiDiffusionは,訓練済みのDiffusion modelに対して追加学習等を行うことなく汎用的な制御を行うことのできるフレームワークといわれています.

Recent advances in text-to-image generation with diffusion models present transformative capabilities in image quality. However, user controllability of the generated image, and fast adaptation to new tasks still remains an open challenge, currently mostly addressed by costly and long re-training and fine-tuning or ad-hoc adaptations to specific image generation tasks. In this work, we present MultiDiffusion, a unified framework that enables versatile and controllable image generation, using a pre-trained text-to-image diffusion model, without any further training or finetuning. At the center of our approach is a new generation process, based on an optimization task that binds together multiple diffusion generation processes with a shared set of parameters or constraints. We show that MultiDiffusion can be readily applied to generate high quality and diverse images that adhere to user-provided controls, such as desired aspect ratio (e.g., panorama), and spatial guiding signals, ranging from tight segmentation masks to bounding boxes.

https://multidiffusion.github.io/

論文はこちら

MultiDiffusionを適用すると何ができるか

上記では,難しいことがかかれていますが,Stable Diffusionでの用途は高解像度化やパノラマ化,構図の指定が主です

具体的には,以下のような機能です.

  • 高解像度化:img2img (Tiled Diffusion + Tiled VAE)
  • パノラマ化:txt2img (Tiled Diffusion + Tiled VAE)
  • 構図の指定:txt2img (Regional Prompt Control)

この記事では,一つ目の機能である「高解像度化」することに着目します.

ここでの「高解像度化」は,「従来より少ないVRAMで高解像度な画像を生成すること」です.

従来の方法で,高解像度の画像(例えば,2048*2048)のような画像を直接生成するには感覚的にVRAM10-20GB程度以上必要です.

Batch sizeなどで複数枚出力するにはやはりそれなり以上のGPUが必要になります.また,画像生成専用サーバなどではない限り,画面表示でVRAMも使用してしまい,より良いGPUが要求されます.

MultiDiffusionのインストール方法

AUTOMATIC1111用のMultiDiffusionの拡張機能が開発されています.拡張機能は下記URLからアクセス可能です.

https://github.com/pkuliyi2015/multidiffusion-upscaler-for-automatic1111

拡張機能のインストール

[Extensions] > [Install from URL]でURLを入力し,[Install]をクリックしてください.

しばらく待つとインストールが完了します.

インストールが完了すると[Extensions] > [Installed]に”multidiffusion-upscaler-for-automatic1111″が追加されます.

インストールが完了すると,「Tiled Diffusion」と「Tiled VAE」が追加されます.

MultiDiffusionの使い方

img2img: Tiled Diffusion + Tiled VAEとは

「img2img: Tiled Diffusion + Tiled VAE」は高解像度化を実現する機能です.

具体的には画像をタイル(Tile)に小分割して,各領域において画像を生成して合成することで,省メモリを実現するものです.

このタイルの領域やそのオーバーラップ部の制御などが可能です.

使い方

基本的な使い方は,img2img+Tiled Diffusionの設定を行います.

1.通常のimg2imgと同様にもと画像を用意します.

2.Tiled Diffusionの設定を行います

「Enable Tiled Diffusion」をチェックすることで,この機能を有効化します.

ユーザが基本的に変更するのは”Upscaler”と”Scale Factor”です.これは,標準のアップスケーラの機能と同等です.

“Latent tile width”と”Latent tile height”はタイルの縦横のサイズであり,Latent tile overlapはタイルのオーバーラップサイズを意味しています.適切なサイズはが元画像やモデルにより異なります.また,サイズを大きくすると高速化します.

上手にアップスケーリングするコツ

最も重要なパラメータはDenoising strengthです.このパラメータが高解像度化の精度に直結します.

値が小さすぎる場合(0.1以下),標準のUpscalerと似た結果となり,大きい場合(0.5以上),オリジナルの画像から変化が大きくなります.

おすすめのDenoising strength値は0.2-0.35くらいです.

この値の範囲で,書き込み量を増やしたい場合は大きめの数値,オリジナルに忠実にしたい場合は小さめの値が目安です.

オリジナル

高解像度化後

アップスケーリングとの違い

ここでは,Tiled Diffusionを用いたimg2imgとアップスケーリングの比較を行います.

Tiled Diffusionを適用した結果

アップスケーリングの適用した結果

比較結果

上記画像を拡大して違いを確認します.

Tiled Diffusion

アップスケーリング

結果として,元画像を単純にアップスケーリングするよりもTiled Diffusionのimg2imgのほうが,画像の書き込み量(細部の表現)が増えていることがわかります.

これは当然img2imgの特性であり,アップスケーリングよりも良い結果となります.ただ,従来はimg2imgでは要求メモリ(VRAM)が大きい問題がありました.

やはり,Tiled Diffusionを利用する最大のメリットは,省VRAMとなるため大きなサイズのimg2imgを扱えることです.

従来はメモリの問題でimg2imgを諦めてアップスケーリングをしていた方には,Tiled Diffusionはかなり有用な手法と言えます.

スケーリング倍率の違い

ここでは,img2imgで2048×2048画像を作成する手順の違いによる比較を行います.

  • 手順1:512 x 512 から 1024 x 1024を生成する.その後,生成後の1024 x 1024から2048 x 2048を生成.
  • 手順2:512 x 512から一気に2048 x 2048を生成する.

細部の比較

下記の比較画像を確認してみると,明らかに手順1のほうが細部の書き込み量が多いです.少し手間がかかりますが,徐々にアップスケーリングするほうが良いということがわかります.

手順1

手順2

まとめ

Tiled Diffusionを用いることで少ないVRAMでimg2imgを実施することが可能になりました.

標準のアップスケーラと比較して,Tiled Diffusionを用いたほうがより鮮明が画像を生成できます.

よかったらシェアしてね!
目次