長いプロンプトだと後半の呪文の効きが悪いような…
そんなときはBREAKを使ってみましょう✨
Stable Diffusionでイメージ通りの画像を生成したいときには、自然とプロンプト(呪文)が長くなりますよね。
そのとき、後ろほうの呪文の効きが悪いと感じたことはありませんか?
たとえば、こんなプロンプトで画像を生成してみると、後ろのほうの「white t-shirt」があまり反映されません。
girl, swept bungs, medium hair, pink hair, ponytail, purple eyes, smile, white t-shirt, upper body
なんかTシャツがピンクっぽくなってる…
本記事では、このようなときに役立つBREAKの使い方について解説します。
BREAK構文とは
BREAK構文とは、Stable Diffusionでプロンプトの中の特定の言葉を強調する方法です。
プロンプトの途中にBREAKというテキストを入れることで、その後ろの言葉を強調できます。
…なんかよくわからん
順を追って説明しますね♪
「トークン」と「グループ」
Stable Diffusionでは、プロンプトで使う1つ1つの言葉のことを「トークン」といいます。
この「トークン」の数え方には注意が必要です。たとえば「short hair」は1つのトークンではなく「short」と「hair」でトークンは2つと数えます。
また、区切りに使う「カンマ」も1トークンとなります。
よって、「girl, short hair」というプロンプトなら、トークンの数は「4」となります。
このトークンの数はWeb UIのプロンプト入力欄の右上の方に表示されています。
4/75となっていますね。この分子の「4」がプロンプトのトークン数です。
分母の「75」ってのは何?
よく気づきましたね😊そこがポイントです💡
Stable Diffusionは「75個のトークン」で「1つのグループ」を形成します。
なので、たとえばプロンプトが100個のトークンの場合は、先頭から75個のトークンが1つめのグループとなり、残りの25個のトークンが2つめのグループになるというわけです。
「トークン」の順序で効き具合が変わる
グループで分かれるのはわかったけど…それがなんなの?
それぞれのトークンの効き具合に関連してきます
グループ内の前にあるトークンほど画像生成に与える影響が強くなります。
つまり、グループ内の1番目のトークンが最も影響が強く、75番目のトークンが最も影響が弱くなるということです。
たとえば、100個のトークンで構成されたプロンプトの場合、76番目のトークンは2つめのグループの1番目なので、75番目のトークンよりも効きは強いということです。
単純にプロンプトの後ろにあるほど影響が弱くなるのではなく、グループの区切りが影響するということがポイントです。
本記事冒頭のプロンプト例を考えると、「white t-shirt」は1つめのグループの後ろの方にあるので生成画像への影響力が弱く、効きが悪かったということになるでしょう。
girl, swept bungs, medium hair, pink hair, ponytail, purple eyes, smile, white t-shirt, upper body
「BREAK」でグループを区切ることができる
逆に言うと、「white t-shirt」をグループの先頭に持ってくれば影響力は強くなるはずですよね。
プロンプトの途中にBREAKというテキストをはさむと、そこでグループを強制的に区切ることができます。
つまり、「white t-shirt」の前にBREAKを入れれば、「white t-shirt」は2つめのグループの先頭のトークンとなるので、効きを強めることができるのです。
girl, swept bungs, medium hair, pink hair, ponytail, purple eyes, smile, BREAK white t-shirt, upper body
BREAK構文を使う
では、実際に「BREAK」を書いてみて、その効果を検証してみましょう!
「BREAK」の書き方
プロンプトの区切りたい箇所に「BREAK 」を入れます。BREAKの後の半角スペースを忘れないでください。
BREAKを入れると、グループの数が増えるので、プロンプト右上に表示されているトークン数の分母が変わります。BREAKがきちんと効いているかの確認になります。
分母が75から150になってる。グループが1つ増えたってことだね
BREAKでちゃんとグループを区切れたということが確認できました💡
「BREAK」の効果
以下のように、white t-shirtの直前でBREAKを入れるケースと入れないケースで生成画像を比べてみましょう。Tシャツに注目です!
BREAK以外の強調方法
Stable Diffusionでは特定のトークンを強調する記法が他にもありますので、ここで紹介しておきます。
()で囲む
プロンプト内で強調したい言葉を()で囲むことで効果を強めることができます。
()が1つだけだと、効果は1.1倍となります。
()はいくつも重ねることができ、重ねるたびに効果は1.1倍されていきます。
たとえば、()を3つ重ねて(((white t-shirt)))などとすることもできます。このとき、強調効果は1.1×1.1×1.1=1.331倍です。
より効果を強めたいときに()をいくつも重ねるのは面倒ですよね。その場合は、(white t-shirt:1.4)のように効果の倍率を数値で直接指定することもできます。この書き方の場合は効果は1.4倍です。
()による強調はとてもよく使われる記法です💡
まとめ
Stable Diffusionのプロンプトは「トークン」から成り立っていて、75個のトークンで1つのグループを形成しています。
このグループ内で後ろにいくほどトークンの影響が弱まってしまいますが、BREAKを使うことでグループを強制的に分割して、任意のトークンの影響を強めることができます。
かっこ()を使うことでプロンプト内の言葉を強調することもできますが、本記事で紹介した「BREAK構文」もテクニックの一つとして覚えておくとよいでしょう。
コメント