Tiled Diffusionは領域ごとに画像を分割して生成することで、領域ごとにプロンプトが混ざるのを防いだり、高解像度な画像を生成する際にVRAMメモリの削減や高速化に効果がある拡張機能です。使い勝手の良さから人気の拡張機能となっております。本記事ではそんなTiled Diffusionを解説していきます。次のような要望に応える記事となっております。
- 右と左に領域を分けて個性の異なる人物画像の生成方法が知りたい。
- 高解像度な画像をVRAM消費を抑えつつ生成時間を短縮する設定を知りたい。
- Tiled DiffusionとControlNetを併用した構図の制御について知りたい。
Tiled Diffusionとは?: 小さく画像を生成して結合して大きな画像を生成する技術
Tiled Diffusionは小さく画像を生成してそれらを結合して1つの大きな画像を生成する技術です。こうすることで高解像度の画像をVRAM消費を抑えながら生成したり、領域を分けて領域後にプロンプトを適用することができます。Tiled Diffusionは次の2つのプラグインから構成されています。
- Tiled Diffusion: 整合性を保ちつつ小さく画像を生成する技術
- Tiled VAE: タイル状に生成された画像を結合して仕上げをする技術
Tiled Diffusionを導入するメリット
領域にわけることでプロンプトの混ざりを防ぐ
Tiled Diffusionを導入することで領域を選択して画像の生成ができます。例えば左右に女の子を分けて表示するとします。そして左には金髪ロングヘア、右には黒髪のショートボブの子の画像を生成したいと思います。まずは普通にプロンプトを指定すると2人の特徴が混ざった画像が生成されます。
プロンプト: (8k, RAW photo, best quality, masterpiece:1.2), (realistic, photo-realistic:1.4), (extremely detailed 8k wallpaper)
and short bob black hair Japanese woman, upper body in Shibuya
and blonde long hair half woman, upper body in Shibuya
これを防ぐために左と右の領域をわけることで生成できます。別々に作ったら一枚絵にならないですが、Tiled Diffusionの技術を使うことで、領域を分けて生成したとしても一枚絵になるところがTiled Diffusionのポイントです。
VRAMを節約して高画質画像を生成できる
高画質画像を生成しようとすると少ないVRAMでは、エラーが発生することが多いです。ただし、Tile Diffusionを使うことで本来は生成できない解像度の画像を生成するのを可能にしてくれます。次の画像(クリックで拡大可)はタイル状に分割して画像を生成して、それらを一枚絵にすることで高解像度画像の生成を可能にしてくれます。
ControlNetも利用可能
画像の解像度を大きくすると、構図が崩れやすいですがControlNetを利用して構図の制御ができます。Tiled Diffusionとの併用ができるので効率的に高解像度な画像が生成できます。
Tiled Diffusionによる効率化。生成時間も短縮することができる
Tiled Diffusionは画像の生成時間が長くなるイメージを持たれているかたもいるとは思いますが実はTiled Diffusionを使うことで生成時間を短縮することができます。
640×960の解像度で検証したところ、通常29.3秒かかる画像がTiled Diffusionありだと28.7秒で生成できてわずかに高速化ができました。さらにメモリ使用量は9.8GBから8.8GBに減ります。
ただし、適切にTiled Diffusionの設定をしないとかえって72.5秒と時間がかかり悪影響になることもあります。なので正しい設定をすることが重要です。
txt2imgだけではなくimg2imgで画像をアップスケール
txt2imgだけではなくimg2imgでもTiled Diffusionを使うことができます。品質の向上や生成時間の短縮、VRAM消費を抑えたりとTiled Diffusionを利用することでメリットがあります。
Tiled Diffusionインストール
Tiled Diffusionのインストール方法について解説します。Tiled Diffusionと言っても今の形になるまでに何度か変更があって”multidiffusion-upscaler-for-automatic1111″だったり、”Tiled Diffusion”と”Tiled VAE”に分かれていたりと様々な名称があります。
- 1/3URLからTiled Diffusionをインストール
Extensions>Install from URLとタブを切り替えます。URL for extentoions git repositoryに「https://github.com/pkuliyi2015/multidiffusion-upscaler-for-automatic1111」を入力してInstallをクリックします。
- 2/3Installされたことを確認して再起動
Installedタブに切り替えて”multidiffusion-upscaler-for-automatic1111″がインストールされていることを確認します。そしてApply and restart UIで再起動します。
- 3/3インストールの確認
Tiled DiffusionとTiled VAEがインストールされていることを確認。
Tiled Diffusionを使って領域を分けて画像を生成
- 1/6Tied Diffusionのメニューを入力
Tiled Diffusionメニューを入力します。まずはTiled Diffusionの横にある「▼」をクリックしてメニューを開きます。次に”Enable Tiled Diffusion”にチェックを入れます。Region Prompt Controlの横にある「▼」をクリックしてメニューを開きます。”Create txt3img canvas”をクリックしてキャンバスを作成します。(作成時はキャンバスは空白ですが気にしないで大丈夫です。)
- 2/6背景領域の設定
Regionを設定します。Regionは背景、左の領域、右の領域に分けて指定します。
まずは背景のRegionを設定します。Enableにチェックを入れます。領域全体のx,y,w,hを設定します。x,yw,hは0~1の画面の割合を指定します。次にプロンプトとネガティブプロンプトを入力します。
プロンプト:
Shibuya
ネガティブプロンプト:
EasyNegative, (worst quality:1.4), (low quality:1.4), (normal quality:1.4), lowres,bad anatomy, bad hands
- 3/6左の領域の設定
Enableにチェックを入れますForegroundを選択しましょう。左の領域のx,y,w,hを設定します。左に表示したい人物のプロンプトを入力します。
プロンプト:
(8k, RAW photo, best quality, masterpiece:1.2), (realistic, photo-realistic:1.4), (extremely detailed 8k wallpaper), short bob black hair, Japanese woman, upper body, Shibuya, casual wear
ネガティブプロンプト:
EasyNegative, (worst quality:1.4), (low quality:1.4), (normal quality:1.4), lowres,bad anatomy, bad hands,
- 4/6右の領域の設定
Enableにチェックを入れます。Foregroundを選択しましょう。右の領域のx,y,w,hを設定します。右に表示したい人物のプロンプトを入力します。
プロンプト: (8k, RAW photo, best quality, masterpiece:1.2), (realistic, photo-realistic:1.4), (extremely detailed 8k wallpaper), blonde long hair, half woman, upper body, Shibuya, casual wear
ネガティブプロンプト:
EasyNegative, (worst quality:1.4), (low quality:1.4), (normal quality:1.4), lowres,bad anatomy, bad hands,
- 5/6Tiled VAEを有効化する。
Tiled VAEのEnable Tiled VAEにチェックを入れて有効化します。
- 6/6画像を生成する
プロンプトとネガティブプロンプトを入力して画像を生成します。プロンプトは全体に影響する品質のプロンプトを入力します。
生成される画像は次の通りです。
Tiled Diffusionを使って高解像度の画像を生成する
次は高解像度な画像を生成します。渋谷の風景のパノラマ画像を生成してみます。Tiled DiffusionとTiled VAEの設定は次の通りです。解像度はTiled Diffusionの中で設定しましょう。
- Tiled DiffusionのメニューのEnable Tiled Diffusionにチェック
- Overwrite image sizeにチェック
- 生成したい画像の解像度を設定
- Tiled VAEメニューのEnable Tiled VAEにチェック
あとは通常通りプロンプトを入力して画像を生成します。
プロンプト:(8k, RAW photo, best quality, masterpiece:1.2), (realistic, photo-realistic:1.4), (extremely detailed 8k wallpaper), street, Shibuya.
ネガティブプロンプト: EasyNegative, (worst quality:1.4), (low quality:1.4), (normal quality:1.4), lowres,bad anatomy, bad hands
生成される画像は次の通りです。
ControlNetを併用することで構図の制御を簡単に
大きな画像を生成すると構図の制御が大変です。それを容易にするためにControlNetを併用します。ControlNetで画像を生成するためには参照する画像が必要です。次の画像をベースに生成します。
Enabe Tiled DiffusionとOverwrite image sizeにチェックを入れて解像度入力します。
大きな画像なため次を設定します。
- Latent tile width: 分割するタイルの幅
- Latent tile height: 分割するタイルの高さ
- Latent tile overlap: タイルとタイルの重なりの長さ
Tiled VAEをEnableにチェックを入れます。
ControlNetの設定をします。
生成された画像は次の通りです。
Tiled Diffusionで効率化。設定を間違うと非効率になるので注意
640×960の解像度で画像を生成したときのベンチマークです。通常通り作成する場合と比べて適切に設定するとメモリと生成時間の短縮に効果があります。画像に対してタイルが小さくなり過ぎると性能が悪化してしまうのでタイルはそれなり大きく設定しましょう。大体1/6~1/4程度を目安に設定すると良いです。
通常通り | Tiled Diffusionあり | Tiled Diffusionあり(設定ミス) | |
---|---|---|---|
時間 | 29.3 | 28.7 | 72.5 |
メモリ | 9.8 | 8.8 | 9.1 |
width | 640 | 640 | 640 |
height | 960 | 960 | 960 |
Latent tile width | 160 | 64 | |
Latent tile height | 160 | 64 | |
Latent tile overlap | 80 | 16 |
img2imgでアップスケーリング
次の768×512の画像を1536×1024へアップスケールしてみます。
- 1/4プロンプトを入力して画像をセット
img2imgの手順と一緒でプロンプトを入力してアップスケーリングしたい画像をセットしましょう。
- 2/4アップスケーリングする解像度を指定
通常img2imgのメニューでリサイズする解像度を指定します。
- 3/4TiledDiffusiohnメニューを開き入力
Enable Tiled Diffusionのメニューを開きます。Enable Tiled Diffusionにチェックを入れます。今回は高解像度な画像を生成するためタイルのサイズを適切に設定しなおします。Upscalerを選択します。Enable Noise Inversionにチェックを入れます。
- 4/4画像を生成します。
最後に”Gererate”を押して画像を生成します。
左: アップスケール前(768×512)、右: アップスケール後(1536×1024)
コメント