Stable Diffusionを使ったイラスト作成の記録(19) ~ 第15回の続き。ネガティブプロンプト係数の導入 ~
前回の記事
シリーズ一覧
Layered Diffusion Pipelineを使うためのリンク集
ライブラリの入手先と使用法(英語) : Githubリポジトリ
日本語での使用方法の解説 : Noteの記事
第15回の続きに戻ります
16回から18回までネガティブプロンプトの重みづけについて深く分析していましたが、一応の結論が得られたため、15回の例に戻って分析を続けます。
Layered Diffusion Pipelineのライブラリを更新して、ScaledEncodingとnegative_prompt_scaleという機能が追加されたので、今回はそれを利用して実験を行います。
実験内容
スクリプト
# スクリプト(19-1)
negative_quality_tags = """
blurry,
lowres,
duplicate,
morbid,
deformed,
monochrome,
greyscale,
comic,
4koma,
2koma,
chibi,
sepia,
lineart,
sketch,
simple background,
rough,
unfinished,
"""
novel_tags = """
novel illustration,
official art,
"""
sketch_tags = """
colored pencil,
sketch,
"""
# negative_scaleの設定
sot_scale = 1.0 # 開始トークンの係数
rest_scale = 1.0 # その他のトークンの係数
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=novel_tags,
negative_prompt=sketch_tags,
strength=using(0.5, after=0.8),
to_add=True,
)
],
negative_prompt_scale=(sot_scale, rest_scale),
)
スクリプト(15-1)にnegative_prompt_scaleを追加しました。negative_prompt_scaleはネガティブプロンプトだけに掛けられる係数で、1つ目の係数が開始トークン(SOT, <|startoftext|>)に掛けられる係数、2つ目がそれ以外のトークンに掛けられる係数です。
16回から18回までの分析で、開始トークンとそれ以外のトークンでは効果に差があるため、それぞれに係数を指定できるようになっています。
パラメータ
開始トークンの係数は、1.0の前後で上段から1.2, 1.1, 1.0, 0.9, 0.8と変化させました。それ以外のトークンの係数は1.0から増やす方向に左列から1.0, 1.2, 1.5と変化させました。
生成画像
観察結果 - 段(開始トークンの係数)の違い
下に行く(開始トークンの係数が小さくなる)に連れて、細かい書き込みや色合いが無視されて、ポスター風に変化しています。
上に行く(開始トークンの係数が大きくなる)に連れて、書き込みや色合いが細かくなって、緻密なイラスト風に変化しています。
観察結果 - 列(その他のトークンの係数)の違い
右に行く(その他のトークンの係数が大きくなる)と、画像がよりくっきりとなっています。色の彩度が上がり、絵の中心の人物によりフォーカスが当たった画像へと変化しています。
開始トークンの時とは異なり、書き込みや色合いの細かさの変化は少なく抑えられています。
まとめ
ネガティブプロンプト係数は画像生成の画質調整に有用
新たに導入されたネガティブプロンプト係数(negative_prompt_scale)は画像生成の画質調整に効果的であることが分かりました。
開始トークンとその他のトークンでは、ネガティブプロンプト係数の効果が異なるため、別々に調整するのが効果的です。