NeutralPromptを使ってみよう
NeutralPromptが知られてなくて悲Cので、記事を書く事にしました。
NeutralPromptとは何?なに?
ljleb氏によるA1111 webUIの拡張機能の一つです。
特徴
生成中、指定したプロンプトに矛盾したノイズを抑制する事でプロンプトに対する忠実度を向上させる機能
指定したプロンプトにより生成されたノイズの影響力を強め、相対的にプロンプトの忠実度を向上させる機能
生成中、各stepで最も強い5%領域のみ保持し残り95%を破棄する事でNeutral Promptを使用する前の状態で得られる結果を強くする機能
CFG Scaleに干渉し、指定したプロンプトに対してより一致するように助ける機能
これら3つの機能を持っています。
使い方だけ教えてクレメンス…
そんなせっかちヴォーイ(ヴァーイ)達のために、使い方を先に解説しましょう。
インストール方法
Extensions>Availableと進みLoad fromで拡張機能一覧からNeutral Promptを探してinstallしましょう。
(さすがにこのページ見てるレベルの人はこれで通じると思いますが…)
利用方法
1:インストールすると、t2iのタブ内にNeutral Promptが現れるので、クリックすると以下のようになります。
2:Prompt formatterをクリックすると、以下のようになります。
3:Prompt formatterのテキストボックスに強調したいプロンプトを記入します。(画像のNeutral prompt(click on…)と書かれている箇所)
4:CFG rescaleを0~0.6程度の範囲で設定
注意:体感的に0.7辺りから彩度が目に見えて落ちてきます
5:Prompt weightを設定
0を基点に±どこまででも指定できます。
(スライドバーでは-3~3までしか設定できませんが後述します。)
6:Prompt typeを設定
プロンプトの強調方法を以下の二つの手法から選択します。
・Prependicular = プロンプトに矛盾するノイズを否定または除去する。
・Saliency-aware = プロンプトを強調する。
・Semantic guidance top-k = 本来得られる結果をより強調する。
基本的にはPrependicularだけで問題ないと思います。
興味のある方は後述する解説をご覧ください。
7:Apply to promptをクリックして適用する。
通常のプロンプトテキストボックスにprompt formatterで入力した内容が挿入されます。
挿入されたプロンプトを見てみましょう。
AND_PERP 任意のプロンプト :1
の形式が基本となります。
AND_PERPの箇所は動作させるためのキーワードで、変更すると動作しなくなります。
:1 の箇所はPrompt weightの値で好きな値を入力できます。(-1000000でも100000でもokですが動作保証しません)
一度Apply to promptで適用すれば以降は直接プロンプトを編集したりweightを変更しても問題ありません。
ただし、webUIを起動後は必ず一度Applyしないとプロンプトだけでは動作しない事に気を付けて下さい。
どんな風に変わるの?
実際に比較してみましょう。
例に使うプロンプトは以下のものを使い、同seed値で生成してみます。
Prompt
fullbody:1.2,(anime colored:1.5),solo,girl,(cloak),(leather glove),(gauntlet),(leather armor),(chainmail),(waist belt with pouches),(boots),attacking:1.5 slowmotion:1.2
Negative Prompt
(bad quality,normal quality,low quality, worst quality:2.0),monochrome,badhandv4,bare skin,bare cleavage,thigh skin
CFG rescaleはどれも0.4としています。
鎧を来た女の子が攻撃モーションを取っている姿を生成していると願って…いざ!!
NeutralPromptを適用しなかった場合はこうなりました。
では、さっそく適用した画像を見てみましょう。
weightはデフォルトの1です。
AND_PERPは次のように出力できました。
こんな感じで、プロンプト全体をAND_PERPで括ってやるとプロンプトに対して忠実に生成されるようになります。
プロンプトに書いたものだけを生成し、それ以外は一切描かない。というような傾向がよく現れます。
次にAND_SALTの場合を見てみましょう。
AND_SALTでもプロンプトに対する忠実度が高く素晴らしいですね。
最後に新しく追加された、AND_TOPKで生成しました。
AND_TOPKはプロンプトに対して忠実に生成させようとするものでなく、生成結果を強くするものですね。
このように、NeutralPromptを使用すると、プロンプトに対して割と素直に画像を生成してくれるようになります。
注意点
使用に向いていない時もあります。
それはプロンプトが極端に短い時です。
プロンプトが10トークン前後を下回るとあまり差がなくなる傾向が見られます。
もちろん、weight値を上下させる事で強調させる事は可能だと思いますが、今度はノイズが残るようになったりしてくるので、要注意です。
PERPとSALTとTOPKについて
ここからは知らなくても使えるので、読み飛ばしていただいても大丈夫です。
readmeと技術論文の内容を簡単にまとめたものを記述しておきます。
PERP
Perp-Negの論文で述べられている直交化プロセスを統合したものです。
プロンプトに対して矛盾または不適切なノイズの一部を抑制または除去します。
プロンプトに対して比較的忠実な画像が生成されやすくなります。
SALT
saliency-aware noise blendingのページに示されている技術で、ノイズブレンドからプロンプト制御を行う機能です。
出力されるノイズの収束が強い部分を強くすることで相対的にプロンプトに対して不適切なノイズが否定されプロンプトに対して比較的忠実な画像が生成されます。
プロンプト内容に忠実で強くした内容の画像が生成されます。
TOPK
semantic guidance top-k filteringのページで述べられている技術で、上記二つはノイズに対して処理を行いますが、TOPKでは各step毎のピクセルノイズマップそのものを監視し最も活性化を示している箇所5%を保持し残り95%を破棄しながら画像を生成するプロセスを取ります。
NeutralPromptを使用していない時の結果を強化した画像が生成されます。
つまりどういうことだってばよ?
まず、生成してみましょう。
生成した結果にある程度満足しているけど、一部破綻していてなんとかしたい時 → TOPK
生成してみたけど、プロンプト通りに中々生成してくれない時→ PERP SALT
という使い方がいいと思います。
プロンプトの通りを良くしたい方はPERP使ってイマイチだったらweight強くすれば、大体なんとかなるよ。