背景の描画密度を上げる方法やアイディアを紹介ます。
Stable Difuusionで画像を生成した際に、画面の描画密度を上げたいことがあります。
この記事では、画面の描画密度を上げるいくつかの方法を紹介します。
SDXLでの実現方法や検証結果を紹介します。
Stable Diffusion 1.5での試行錯誤結果を踏まえて次の方式で画面の描画密度を上げます。
ControlNetをインストールします。手順はこちらの記事を参照してください。
次のプロンプトで画像を生成します。
下図の画像を入力画像とします。縮小した状態ではわかりにくいですが、原寸サイズで見るともう少し細部を描画したい状態です。
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としています。値を小さくすることで、モデルによる画像の変化をある程度許容します。
プロンプトは元画像生成時と同じ以下のプロンプトを使用します。
Modelを Dream Shaper XL を利用して画像を生成します。画像が生成できましたが、色味が変わってしまっています。
Denoising strengthが強いため元の画像からの乖離が大きくなってしまっています。
Denoising stength の値を0.5に下げます。
再度、画像生成します。元画像の形状が維持され、形状の変化も少なくなりました。細部の描画密度は上がっています。
画像生成の結果は下図です。モデルの違いにより生成画像の雰囲気が若干異なります。
img2imgで使用するモデルは、リアリスティックな画像を生成するモデルか、細部を描画するイラスト系のモデルを使用します。
Pony系のモデルのため以下のプロンプトに変更しています。
Stable Diffusion 1.5での実現方法や検証結果を紹介します。
今回はこちらの画像から始めます。
Add Detailも適用しているため、画面密度はそこそこありますが、倍のサイズにアップスケールした際にはもっと書き込みが欲しいです。
遠景ももっと書き込んでほしい希望です。
プロンプトに、"Detailed" "4K" "8K" を追加して、微細に描画できるか確認します。
若干描きこみ量が増えましたが、劇的な変化は出ていないです。
Hires.Fixを適用して2倍にアップスケールして詳細部分を描画してもらうことを期待します。
画像のサイズは2倍になるのですが、それに応じて描きこみ量が増えていない印象です。画面が平面的になってしまったのも若干問題があります。
アップスケーラーの種類を変更しても大きな違いは出ません。
add_detailの適用量を上げてみます。
絵的な怪しさ(特に建物の背後の中景)が目立つようになってしまいました。こちらもあまりよろしくないです。
生成した画像をimg2imgでサイズを大きくする方法です。
img2imgで以下のパラメータで実行した例です。プロンプトは初期のプロンプトと同じです。デフォルトのパラメータでは思わしくない結果です。
Denoising strengthを1.2まで上げると、構図は変わってしまいますが、描きこみ量は増えます。
Tiled Diffusionを利用してサイズを大きくした際に書き込みを増やす方法です。
デフォルトの設定での結果です。ある程度描きこみ量が増えます。
Tile Width, Tile Heightの値を小さく(48)し、オーバーラップも小さく(24)した結果です。構図が大きく変わってしまいますが、描きこみ量は増えています。
Tile Width, Tile Heightの値を小さく(48)し、オーバーラップを大きく(48)した結果です。構図が大きく変わってしまいますが、描きこみ量は増えています。
Sampling stepsの値を上げて変化を確認します。Sampling methodは"DPM++ SDE Karras"を利用しています。ステップが上がると
詳細部分の描画が増えますが、画面全体でみると、描きこみ量が増える大きな変化は出ていないです。
Sampling steps 240の結果です。若干描きこみが増えています。
なお、img2img2でSampling stepsの値を増やしても元画像の制約(Denoising strength:0.75)があるため、描きこみは増えませんでした。
sd-dynamic-thresholding を導入して、CFG Scaelの値を上げる方法です。
手順の詳細はこちらの記事を参照してください。
CFG Scaleを上げることで、複雑性や変化度は上がりますが、描きこみの量が増える状況にはなりませんでした。
キャラクターの場合は、サイズが大きいと崩れ等が気になりますが、背景であれば多少崩れても問題ないので、
大きいサイズで出力するアイディアです。
結果は下図です。同じオブジェクトの繰り返しになってしまい。絵的に問題があります。
イラスト系モデルの場合はデフォルメをするため、細部の描きこみをしないものもあります。
そのため、どうしても描画密度が上がらないモデルもあります。
対処法として、背景部分の描きこみはリアリスティック系のモデルに変更する方法があります。
別のモデルで画像をはじめから生成する方法もありますが、元画像を別のモデルでimg2imgする方法を利用します。
モデルによって遠景が空気遠近法表現で鮮明に描かれない度合いの違いや、鮮明感が強くフォトリアリスティックになる場合があるため、
どのモデルを採用するかで結果は大きく変わります。
また、キャラクターを画面内に合成する場合は絵柄と背景がマッチしている必要があるため、キャラクターの絵柄によっても採用するモデルは異なってきます。
モデルを変更することで、描きこみの量を増やした画像を作成できました。この画像をControlNetの入力に利用し、lineartで構図を制約して
本来使用したいモデルで画像生成すれば、描きこみ量の多い(線の多い)画像を生成できるのではないかというアイディアです。
画像を入力し、lineart_realistic または lineart でエッジを抽出します。
txt2imgで元の画像生成時と同じプロンプトと設定を利用し、ControlNetのlineartを有効にします。
画像生成結果が下図です。lineartどおりの画像が生成できていますが、画像に色が乗りません。
遠景の形状もつぶれてしまっています。
lineartのControl Weightを0.5まで下げます。若干色が乗ります。背景部分のつぶれも減少します。カラーは淡くなる傾向です。書き込み量はかなり増えている状況です。
img2imgで元のオリジナルの画像を入力し、ControlNetにもオリジナルの画像を入力しlineartを有効にします。
生成に使うモデルをリアリスティック系のモデルにし、出力のサイズをオリジナルの2倍にします。
オリジナルの構図を維持しつつ、描画密度を上げられるのではないかというアイディアです。
リアリスティック系のDreamShaperを利用した場合の結果が下図です。この場合でも色の乗り方が良くありません。
イラスト系モデル(Counterfeit)でも思わしくない出力です。
色の乗りが良くないのは、ControlNetの影響が強すぎる可能性があるため、ControlNetの適用量を減らすことにします。
Control Weight の値を0.5に下げます。生成結果が下図です。元の構図が維持され、描きこみ量も増え、希望の出力になっています。
Dream Shaperを利用した結果です。
なお、オリジナル画像を作成したモデルで実行してもサイズが倍になることで書き込み量が若干増えます。ただし、同じプロンプト、シードを利用した場合は
色の乗りが若干悪いです。
プロンプトやシードを変更すると、色が乗りやすいです。
Cannyを利用するとlineartより色が乗るという情報があるため、検証します。
img2imgで入力画像にオリジナルの画像を利用し、ControlNetにもオリジナルの画像を入力し、Cannyを適用します。
Control Weightは0.5まで下げて適用します。
リアリスティック系のモデル(Dream Shaper)でオリジナルの倍のサイズの画像を生成すると下図の結果になります。
構図もオリジナルと同様で、描きこみ量も増えており、希望の出力になっています。
img2imgでオリジナルの画像を作成したモデルで生成した場合の結果が下図です。イラスト系のモデルでも描きこみ量を若干増やすことができました。
Control Weightをデフォルトの1.0に設定して適用した結果です。
どちらの画像も描きこみ量があまり増えず、シャープ感も低い結果になりました。おそらくオリジナル画像のCannyの影響が強く、
元の低解像度の画像の影響度が高いためかと考えられます。全体的に柔らかい画像になり、絵画的な効果が出るため、
今回の目的とは一致しませんが、効果として利用できそうです。
ControlNetでノイズを追加すると細かいオブジェクトが描画されます。
手順の詳細はこちらの記事を参照してください。
ControlNetでノイズ画像を設定し、Lineartモデルを設定した場合の結果です。
書き込みの密度は上がりますが、元の画像のイメージとは大きく異なります。
ControlNetを2つ作成してノイズ画像を設定し、LineartモデルとTiledモデルを設定した場合の結果です。
こちらも書き込みの密度は上がりますが、元の画像のイメージとは大きく異なります。
背景の描画密度が上がる"Silicon-landscape-isolation"のLoRAを適用します。
プロンプトは以下です。
結果は下図となります。背景の密度は上がりますが、元の画像から構図は大きく変わってしまいます。