背景の描画密度を上げたい - Stable Diffusion

背景の描画密度を上げる方法やアイディアを紹介ます。

概要

Stable Difuusionで画像を生成した際に、画面の描画密度を上げたいことがあります。
この記事では、画面の描画密度を上げるいくつかの方法を紹介します。

SDXLでの実現方法

SDXLでの実現方法や検証結果を紹介します。

ControlNet + img2img を利用したアップスケールと高密度化

Stable Diffusion 1.5での試行錯誤結果を踏まえて次の方式で画面の描画密度を上げます。
  1. イラスト系のモデルを利用して、元となるイメージを生成します。イラスト系のモデルのため、生成された画像は細部の描画はされない場合が多いです。
  2. 生成された画像を img2img の入力画像に設定します。
  3. ControlNetを利用して、構図に対する制約を入れます。Canny または LineArt を利用します。
  4. 出力解像度を元の解像度から上げます。
  5. img2imgのモデルはフォトリアリスティック系のモデルを利用します。
  6. Denoising strengthの値を変更しながら画像を生成して、求める結果を取得します。

事前準備

ControlNetをインストールします。手順はこちらの記事を参照してください。

イメージの準備

次のプロンプトで画像を生成します。
Prompt
Prompt: fantasy world, big city, wide view, City on the water, spire in the center of the city, city on the water, canal, blue image, best quality, masterpiece
Negative prompt:worst quality, low quality
Sampling method: DPM++ 2M SDE Heun, Schedule type: SGM Uniform, Sampling steps: 30
Size: 1280x760

下図の画像を入力画像とします。縮小した状態ではわかりにくいですが、原寸サイズで見るともう少し細部を描画したい状態です。

設定

Stable Diffusion WebUI を表示し、[img2img]のタブをクリックして選択します。入力画像に先に準備した元画像を設定します。


出力サイズ設定します。[Resize by] のタブをクリックして選択します。[Scale]の値を 1.5とします。(大きな画像にしたい場合は、2でもよいです。)


ControlNetの設定をします。[Enable]のチェックボックスをクリックしてチェックをつけます。[Pixel Perfect]のチェックボックスにもチェックをつけます。 [Contorl Type]の枠の[Canny]のラジオボタンをクリックして選択します。[Preprocessor]に"canny"を選択します。[Model]には、"control-lora-canny-rank256 [ec2dbbe4]" を選択します。
[Weight]は0.5としています。値を小さくすることで、モデルによる画像の変化をある程度許容します。
メモ
今回はCannyを利用していますが、LineArtを利用する方法や、AnyTestを利用する方法もあります。


プロンプトは元画像生成時と同じ以下のプロンプトを使用します。
Prompt
Prompt: fantasy world, big city, wide view, City on the water, spire in the center of the city, city on the water, canal, blue image, best quality, masterpiece
Negative prompt:worst quality, low quality
Sampling method: DPM++ 2M SDE Heun, Schedule type: SGM Uniform, Sampling steps: 30
Size: Scale 1.5

Modelを Dream Shaper XL を利用して画像を生成します。画像が生成できましたが、色味が変わってしまっています。 Denoising strengthが強いため元の画像からの乖離が大きくなってしまっています。


Denoising stength の値を0.5に下げます。


再度、画像生成します。元画像の形状が維持され、形状の変化も少なくなりました。細部の描画密度は上がっています。

実行結果

画像生成の結果は下図です。モデルの違いにより生成画像の雰囲気が若干異なります。
img2imgで使用するモデルは、リアリスティックな画像を生成するモデルか、細部を描画するイラスト系のモデルを使用します。
model: Dreamshaper
model: Dreamshaper

model: Copax Melodies XL
model: Copax Melodies XL

model: defacta XL
model: defacta XL

model: Aniverse XL
model: Aniverse XL

model: Juggernaut XL
model: Juggernaut XL


Pony系のモデルのため以下のプロンプトに変更しています。
Prompt
Prompt: fantasy world, big city, wide view, City on the water, spire in the center of the city, city on the water, canal, blue image, score_9, score_8_up, score_7_up,score_6_up, score_5_up, source_anime
Negative prompt: score_4, score_5, score_6, source_pony, source_furry,3d
Sampling method: DPM++ 2M SDE Heun, Schedule type: SGM Uniform, Sampling steps: 30
model: 3x3mixXLtypeJ v01
model: 3x3mixXLtypeJ v01

Stable Diffusion 1.5での実現方法

Stable Diffusion 1.5での実現方法や検証結果を紹介します。

イメージの準備

今回はこちらの画像から始めます。
Prompt
capital, (big Medieval city:1.2), lots of stone buildings, wide view, from above, (citadel:0.5), <lora:add_detail:1>, (bell tower:0.5)
Negative prompt
worst quality, low quality
Settings
Steps: 40, Sampler: DPM++ SDE Karras, Seed: 176021405, Size: 1024x512, Model: Counterfeit-V3.0

Add Detailも適用しているため、画面密度はそこそこありますが、倍のサイズにアップスケールした際にはもっと書き込みが欲しいです。 遠景ももっと書き込んでほしい希望です。

うまくいかない方法: プロンプトを変更

プロンプトに、"Detailed" "4K" "8K" を追加して、微細に描画できるか確認します。
Prompt
4k,8k, detailed, high detailed, capital, (big Medieval city:1.2), lots of stone buildings, wide view, from above, (citadel:0.5), (bell tower:0.5), <lora:add_detail:1>
若干描きこみ量が増えましたが、劇的な変化は出ていないです。


解像度を上げる代表的なプロンプト
以下のプロンプトが代表的ですが、モデルによっては効果のないものもあります。
  • 4k
  • highres
  • 8k
  • absurdres
  • detailed
  • ultra detailed
  • insanely detailed
  • extremely detailed

うまくいかない方法: Hires.Fixの利用

Hires.Fixを適用して2倍にアップスケールして詳細部分を描画してもらうことを期待します。
Settings
Hires upscaler: R-ESRGAN 4x+ Anime6B
画像のサイズは2倍になるのですが、それに応じて描きこみ量が増えていない印象です。画面が平面的になってしまったのも若干問題があります。


Settings
Hires upscaler: SwinIR_4x
アップスケーラーの種類を変更しても大きな違いは出ません。

うまくいかない方法: add_detail の適用量を上げる

add_detailの適用量を上げてみます。
Prompt
capital, (big Medieval city:1.2), lots of stone buildings, wide view, from above, (citadel:0.5),(bell tower:0.5), <lora:add_detail:1.5>

絵的な怪しさ(特に建物の背後の中景)が目立つようになってしまいました。こちらもあまりよろしくないです。

若干うまくいく方法: img2imgの利用

生成した画像をimg2imgでサイズを大きくする方法です。
img2imgで以下のパラメータで実行した例です。プロンプトは初期のプロンプトと同じです。デフォルトのパラメータでは思わしくない結果です。
Prompt
Steps: 20, Sampler: DPM++ SDE Karras, CFG scale: 7, Seed: -1, Size: 2048x1024, Model: Counterfeit-V3.0, Denoising strength: 0.75


Denoising strengthを1.2まで上げると、構図は変わってしまいますが、描きこみ量は増えます。
Prompt
Steps: 20, Sampler: DPM++ SDE Karras, CFG scale: 7, Seed: -1, Size: 2048x1024, Model: Counterfeit-V3.0, Denoising strength: 1.2

若干うまくいく方法 Tiled Diffusionの利用

Tiled Diffusionを利用してサイズを大きくした際に書き込みを増やす方法です。

デフォルトの設定での結果です。ある程度描きこみ量が増えます。
Settings
Tiled Diffusion upscaler: 4x-UltraSharp, Tiled Diffusion scale factor: 2, Tiled Diffusion: {"Method": "MultiDiffusion", "Tile tile width": 96, "Tile tile height": 96, "Tile Overlap": 48, "Tile batch size": 4, "Upscaler": "4x-UltraSharp", "Upscale factor": 2, "Keep input size": true},


Tile Width, Tile Heightの値を小さく(48)し、オーバーラップも小さく(24)した結果です。構図が大きく変わってしまいますが、描きこみ量は増えています。
Settings
Tiled Diffusion: {"Method": "MultiDiffusion", "Tile tile width": 48, "Tile tile height": 48, "Tile Overlap": 24, "Tile batch size": 4, "Upscaler": "4x-UltraSharp", "Upscale factor": 2, "Keep input size": true}


Tile Width, Tile Heightの値を小さく(48)し、オーバーラップを大きく(48)した結果です。構図が大きく変わってしまいますが、描きこみ量は増えています。
Settings
Tiled Diffusion: {"Method": "MultiDiffusion", "Tile tile width": 48, "Tile tile height": 48, "Tile Overlap": 48, "Tile batch size": 4, "Upscaler": "4x-UltraSharp", "Upscale factor": 2, "Keep input size": true}

うまくいかない方法: Sampling steps の値を上げる

Sampling stepsの値を上げて変化を確認します。Sampling methodは"DPM++ SDE Karras"を利用しています。ステップが上がると 詳細部分の描画が増えますが、画面全体でみると、描きこみ量が増える大きな変化は出ていないです。


Sampling steps 240の結果です。若干描きこみが増えています。


なお、img2img2でSampling stepsの値を増やしても元画像の制約(Denoising strength:0.75)があるため、描きこみは増えませんでした。

うまくいかない方法: CFG Scale の値を上げる

sd-dynamic-thresholding を導入して、CFG Scaelの値を上げる方法です。 手順の詳細はこちらの記事を参照してください。

CFG Scaleを上げることで、複雑性や変化度は上がりますが、描きこみの量が増える状況にはなりませんでした。

うまくいかない方法: 最初から大きい解像度で出力する

キャラクターの場合は、サイズが大きいと崩れ等が気になりますが、背景であれば多少崩れても問題ないので、 大きいサイズで出力するアイディアです。
結果は下図です。同じオブジェクトの繰り返しになってしまい。絵的に問題があります。

そこそこうまくいく方法:img2imgでモデルを変更する

イラスト系モデルの場合はデフォルメをするため、細部の描きこみをしないものもあります。 そのため、どうしても描画密度が上がらないモデルもあります。 対処法として、背景部分の描きこみはリアリスティック系のモデルに変更する方法があります。
別のモデルで画像をはじめから生成する方法もありますが、元画像を別のモデルでimg2imgする方法を利用します。
モデルによって遠景が空気遠近法表現で鮮明に描かれない度合いの違いや、鮮明感が強くフォトリアリスティックになる場合があるため、 どのモデルを採用するかで結果は大きく変わります。

また、キャラクターを画面内に合成する場合は絵柄と背景がマッチしている必要があるため、キャラクターの絵柄によっても採用するモデルは異なってきます。
mzpikas_tmnd_enhanced
mzpikas_tmnd_enhanced
HameFMix
HameFMix
Dream Shpaer
Dream Shpaer
Meina Mix
Meina Mix

GhostMix
GhostMix
Pikas New Generation
Pikas New Generation
Rev5 Animated
Rev5 Animated
CetusMix
CetusMix
A Zovya RPG Tools
A Zovya RPG Tools
DivineEleganceMix
DivineEleganceMix
Stoked Illustratrion
Stoked Illustratrion
BrainDance
BrainDance
Meina Alter
Meina Alter
DefMix
DefMix

若干うまくいく方法:高精細の画像でlineartを作成して、img2imgでペイントする

モデルを変更することで、描きこみの量を増やした画像を作成できました。この画像をControlNetの入力に利用し、lineartで構図を制約して 本来使用したいモデルで画像生成すれば、描きこみ量の多い(線の多い)画像を生成できるのではないかというアイディアです。

画像を入力し、lineart_realistic または lineart でエッジを抽出します。


txt2imgで元の画像生成時と同じプロンプトと設定を利用し、ControlNetのlineartを有効にします。


画像生成結果が下図です。lineartどおりの画像が生成できていますが、画像に色が乗りません。
遠景の形状もつぶれてしまっています。


lineartのControl Weightを0.5まで下げます。若干色が乗ります。背景部分のつぶれも減少します。カラーは淡くなる傾向です。書き込み量はかなり増えている状況です。


うまくいく方法:オリジナルの画像でlineartを作成して、リアリスティック系モデルでimg2imgでペイントする

img2imgで元のオリジナルの画像を入力し、ControlNetにもオリジナルの画像を入力しlineartを有効にします。 生成に使うモデルをリアリスティック系のモデルにし、出力のサイズをオリジナルの2倍にします。 オリジナルの構図を維持しつつ、描画密度を上げられるのではないかというアイディアです。

リアリスティック系のDreamShaperを利用した場合の結果が下図です。この場合でも色の乗り方が良くありません。
Dream Shaper 7
Dream Shaper 7


イラスト系モデル(Counterfeit)でも思わしくない出力です。
Counterfeit 3.0
Counterfeit 3.0


色の乗りが良くないのは、ControlNetの影響が強すぎる可能性があるため、ControlNetの適用量を減らすことにします。
Control Weight の値を0.5に下げます。生成結果が下図です。元の構図が維持され、描きこみ量も増え、希望の出力になっています。
Dream Shaperを利用した結果です。
Dream Shaper 7
Dream Shaper 7




なお、オリジナル画像を作成したモデルで実行してもサイズが倍になることで書き込み量が若干増えます。ただし、同じプロンプト、シードを利用した場合は 色の乗りが若干悪いです。
Counterfeit 3.0
Counterfeit 3.0


プロンプトやシードを変更すると、色が乗りやすいです。
Counterfeit 3.0
Counterfeit 3.0

うまくいく方法:オリジナルの画像でControlNet Cannyを作成して、リアリスティック系モデルでimg2imgでペイントする

Cannyを利用するとlineartより色が乗るという情報があるため、検証します。

img2imgで入力画像にオリジナルの画像を利用し、ControlNetにもオリジナルの画像を入力し、Cannyを適用します。 Control Weightは0.5まで下げて適用します。
リアリスティック系のモデル(Dream Shaper)でオリジナルの倍のサイズの画像を生成すると下図の結果になります。 構図もオリジナルと同様で、描きこみ量も増えており、希望の出力になっています。
Dream Shaper 7
Dream Shaper 7



img2imgでオリジナルの画像を作成したモデルで生成した場合の結果が下図です。イラスト系のモデルでも描きこみ量を若干増やすことができました。


Control Weightをデフォルトの1.0に設定して適用した結果です。
どちらの画像も描きこみ量があまり増えず、シャープ感も低い結果になりました。おそらくオリジナル画像のCannyの影響が強く、 元の低解像度の画像の影響度が高いためかと考えられます。全体的に柔らかい画像になり、絵画的な効果が出るため、 今回の目的とは一致しませんが、効果として利用できそうです。
Dream Shaper 7
Dream Shaper 7

Counterfeit 3.0
Counterfeit 3.0

ControlNetでノイズを追加して描画密度を上げる

ControlNetでノイズを追加すると細かいオブジェクトが描画されます。 手順の詳細はこちらの記事を参照してください。

ControlNetでノイズ画像を設定し、Lineartモデルを設定した場合の結果です。
書き込みの密度は上がりますが、元の画像のイメージとは大きく異なります。

ControlNetを2つ作成してノイズ画像を設定し、LineartモデルとTiledモデルを設定した場合の結果です。
こちらも書き込みの密度は上がりますが、元の画像のイメージとは大きく異なります。

Silicon-landscape-isolationを利用する

背景の描画密度が上がる"Silicon-landscape-isolation"のLoRAを適用します。
プロンプトは以下です。
Prompt
Prompt: capital, (big Medieval city:1.2), lots of stone buildings, wide view, from above, (citadel:0.5), <lora:add_detail:1>, (bell tower:0.5) <lora:Silicon-landscape-isolation:1.0>
Negative prompt: worst quality, low quality

結果は下図となります。背景の密度は上がりますが、元の画像から構図は大きく変わってしまいます。


著者
iPentecのメインデザイナー
Webページ、Webクリエイティブのデザインを担当。PhotoshopやIllustratorの作業もする。
掲載日: 2023-07-23
iPentec all rights reserverd.