Tiled Diffusion3つの使い方を紹介。領域分割、高解像度画像生成、VRAM最適化

Tiled Diffusionは領域ごとに画像を分割して生成することで、領域ごとにプロンプトが混ざるのを防いだり、高解像度な画像を生成する際にVRAMメモリの削減や高速化に効果がある拡張機能です。使い勝手の良さから人気の拡張機能となっております。本記事ではそんなTiled Diffusionを解説していきます。次のような要望に応える記事となっております。

  • 右と左に領域を分けて個性の異なる人物画像の生成方法が知りたい。
  • 高解像度な画像をVRAM消費を抑えつつ生成時間を短縮する設定を知りたい。
  • Tiled DiffusionとControlNetを併用した構図の制御について知りたい。
GitHub - pkuliyi2015/multidiffusion-upscaler-for-automatic1111: Tiled Diffusion and VAE optimize, licensed under CC BY-NC-SA 4.0
Tiled Diffusion and VAE optimize, licensed under CC BY-NC-SA 4.0 - GitHub - pkuliyi2015/multidiffusion-upscaler-for-auto...

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”に分かれていたりと様々な名称があります。

Tiled Diffusionのインストール手順
  • 1/3
    URLからTiled Diffusionをインストール

    Extensions>Install from URLとタブを切り替えます。URL for extentoions git repositoryに「https://github.com/pkuliyi2015/multidiffusion-upscaler-for-automatic1111」を入力してInstallをクリックします。

  • 2/3
    Installされたことを確認して再起動

    Installedタブに切り替えて”multidiffusion-upscaler-for-automatic1111″がインストールされていることを確認します。そしてApply and restart UIで再起動します。

  • 3/3
    インストールの確認

    Tiled DiffusionとTiled VAEがインストールされていることを確認。

Tiled Diffusionを使って領域を分けて画像を生成

Tiled Diffusionの使い方
  • 1/6
    Tied 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/6
    Tiled VAEを有効化する。

    Tiled VAEのEnable Tiled VAEにチェックを入れて有効化します。

  • 6/6
    画像を生成する

    プロンプトとネガティブプロンプトを入力して画像を生成します。プロンプトは全体に影響する品質のプロンプトを入力します。

生成される画像は次の通りです。

Tiled Diffusionを使って高解像度の画像を生成する

次は高解像度な画像を生成します。渋谷の風景のパノラマ画像を生成してみます。Tiled DiffusionとTiled VAEの設定は次の通りです。解像度はTiled Diffusionの中で設定しましょう。

  1. Tiled DiffusionのメニューのEnable Tiled Diffusionにチェック
  2. Overwrite image sizeにチェック
  3. 生成したい画像の解像度を設定
  4. 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で画像を生成するためには参照する画像が必要です。次の画像をベースに生成します。

UnsplashでHandy Wicaksonoが撮影した写真
Talitha – Handy Wicaksonoが撮影したこの写真をUnsplashでダウンロードする

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.328.772.5
メモリ9.88.89.1
width640640640
height960960960
Latent tile width16064
Latent tile height16064
Latent tile overlap8016

img2imgでアップスケーリング

次の768×512の画像を1536×1024へアップスケールしてみます。

img2imgでアップスケーリング
  • 1/4
    プロンプトを入力して画像をセット

    img2imgの手順と一緒でプロンプトを入力してアップスケーリングしたい画像をセットしましょう。

  • 2/4
    アップスケーリングする解像度を指定

    通常img2imgのメニューでリサイズする解像度を指定します。

  • 3/4
    TiledDiffusiohnメニューを開き入力

    Enable Tiled Diffusionのメニューを開きます。Enable Tiled Diffusionにチェックを入れます。今回は高解像度な画像を生成するためタイルのサイズを適切に設定しなおします。Upscalerを選択します。Enable Noise Inversionにチェックを入れます。

  • 4/4
    画像を生成します。

    最後に”Gererate”を押して画像を生成します。

左: アップスケール前(768×512)、右: アップスケール後(1536×1024)

コメント