見出し画像

Stable Diffusionを使ったイラスト作成の記録(14) ~ 画質タグの効果を検討(2) ~

前回の記事

シリーズ一覧

Layered Diffusion Pipelineを使うためのリンク集

前回の反省点

前回はポジティブ画質タグの効果を詳しく分析しようと試みましたが、不明確で曖昧な点が多く残る結果になりました。何よりも、タグの効果を客観的に検討する手法を確立できなかったのは大きな問題でした。

タグの効果を客観的に観察するためには、比較する画像を適切に選択する必要があります。それは純粋にタグの有り無しだけが反映された画像であることが望ましいですが、前回の実験手法では、それがきれいに切り分けられていませんでした。

今回の手法

前回は、レイヤーを1枚使い、一つのプロンプトに描画対象(1girl)と画質タグの両方を併記しました。しかし、今回は画質タグの生成画像への影響量を正確にコントロールするため、2枚のレイヤーを使い、内の1つのレイヤーは、ポジティブ画質タグだけを含むレイヤーとすることにしました。

さらにSPレイヤーは、混合タイプで使うともう一方のレイヤーのプロンプトの影響を減少させ、加算タイプで使うともう一方のレイヤーのネガティブプロンプトの影響を増大させるため、ポジティブ画質タグの効果だけを切り出すことが難しくなります。

そのため、ポジティブ画質タグを含むレイヤーは、ゼロ和レイヤーとして、ネガティブプロンプトは空文字列を与えることにしました。

スクリプト

# スクリプト(14-1)
negative_quality_tags = ""  # ネガティブ画質タグ
positive_quality_tags = ""  # ポジティブ画質タグ

images = pipe(
    num_steps=30,
    size=image_size,
    rand_seed=rand_seed,
    initialize=Randomly(strength=using(0.99999, until=1.0)),
    iterate=[
        Layer(
            prompt="1girl",
            negative_prompt=negative_quality_tags,
        ),
        Layer(
            prompt=positive_quality_tags,
            strength=using(0.5, after=0.8),
            is_zero_sum=True,
        )
    ]
)

initializeの設定は、前回の記事の後に発見されたバグの修正によって、同じ乱数シードでも前回とは異なる画像が生成されるようになったことに対する回避策です。通常は不要です。

このスクリプトでは、ポジティブ画質タグはメインレイヤーの半分の強さで画像生成プロセスの残り80%に対して適用されます。全工程で適用しなかったのは、画像の構図に対する影響が大きいと画像の比較が難しくなるため、画像生成の序盤の構図に対する影響の大きいステップへの適用を避けたためです。

画質タグ

また、実験に使用する画質タグも、前回より細分化することにしました。前回の分析で、タグの効果に対する理解が一定程度進んだため、ある程度の効果が期待されるタグの中で、効果が類似していそうなものをグループ化しました。

空文字タグ
まず、実験で比較元となる画像として、何も含まない空文字列をポジティブ画質タグとした画像を作りました。これは、ネガティブプロンプトと相殺されて、実質的には画像に対して何の影響も与えることはありません。

挿絵タグ
カラー挿絵イラスト風タグに含まれていたnovel illustration, official artの2つのみを含むタグのグループです。

手書きタグ
前回のまとめで、スケッチ風タグと呼んだタグの中から、watercolorを除いた残りのcolored pencil, sketch, millipenの3つのタグのグループです。

水彩タグ
上で除いたwatercolorのみを含むタグのグループです。

高精細タグ
前回のまとめで高精細タグと呼んだ8k wallpaper, extremely detailed, highresの3つのタグのグループです。

陰影タグ
前回、陰影を強める可能性があるとしたbeautiful glow, dramatic shadowの2つのタグのグループです。

生成画像

生成画像の配置
seed=1334630829
seed=1124067389
seed=129970857
seed=2895285493
seed=3545805225
seed=1578222291

まず目につくのは、挿絵タグの画像がはっきりと画像が整う傾向にあるのに対し、手書きタグの画像は崩れる傾向にあるという点です。なので、挿絵タグをプロンプトに、手書きタグをネガティブプロンプトに入れることで、画像を整える効果が期待できるのではないかと思います。

挿絵タグで注意すべきところは、文字のようなものが生成された画像があることです。小説の挿絵なので、文字が入っていることがあるのだと思います。これはネガティブプロンプトで文字を抑制することで解決できるのではないかと思います。

下段の水彩タグ、高精細タグ、陰影タグはそれぞれに特徴的な変化を生成画像に与えているように見えます。

水彩タグは、色合いをやや淡くして、白い光の粒のようなノイズが入りやすくなるようです。

高精細タグは、中間的でやや落ち着いた色合いで、細部の書き込みが丁寧になっているように見えます。

陰影タグは、夜のような暗いところに照明が当たっているような色合いで、肌の露出面積が広がる傾向にあります。beautiful, dramaticという単語の影響を感じさせるような格好の良さが生まれているようです。

まとめ

画質レイヤーをゼロ和レイヤーで実現する

画質レイヤーをゼロ和レイヤーを用いて実現すると、画質タグの影響を他との干渉をあまり受けないように切り出すことができます。さらに、レイヤーの適用開始のタイミングや適用強度を変えることで、画質タグの影響をコントロールしやすくなります。

(挿絵タグ - 手書きタグ)を汎用的に使う

挿絵タグが画像を整え、手書きタグが画像を崩す傾向にあるので、プロンプトに挿絵タグ、ネガティブプロンプトに手書きタグを常に設定することで、いつも画像を整える効果を期待できると思います。

ただし、挿絵タグには文字のような図形を生むことがあるので、ネガティブプロンプトを工夫する必要があります。

追加のタグは適宜使用する

上の汎用的なタグに加えて、好みの雰囲気を生むためにタグを追加することができると思います。今回試した水彩タグ、高精細タグ、陰影タグの他にも、いろいろなバリエーションを生み出すことができるのではないかと思います。

追加のタグを、汎用画質タグを含むレイヤーに追加するか、新たなゼロ和レイヤーとして実現するかは、さらに調査が必要な点ではないかと思います。

Layered Diffusion Pipelineライブラリへの変更

今回、ゼロ和レイヤーの有用性を確認することができましたが、今、通常レイヤーをすべてゼロ和レイヤーに置き換える変更を検討しています。それに合わせて、これまでやや混乱気味であったcfg_scale, strength, mask_byの使い分けやSPレイヤーとの関係も整理しようと考えています。

いいなと思ったら応援しよう!