『Stable Diffusionで画像を生成してもらったら、プロンプトの要素が混ざって変な画像ができてしまった』という経験はありませんか?
プロンプトの要素が混ざっている場合、強調構文の一種である『AND構文』を使って分けるのが有効です。
しかし『AND構文って、どうやって使うの?』と思った方も多いはずでしょう。
そこで本記事では、強調構文の基本的な使い方から、『AND構文とは何なのか?』『どうやってAND構文を使うのか?』を解説します。
※Stable Diffusionの立ち上げ方・使い方については、以下の記事で詳しく解説しています。
トークンとは
まずは、Stable Diffusionで呪文(プロンプト)や強調構文を入力するにあたって重要な『トークン』について解説します。
「トークン」とは、簡単に言うと、呪文(プロンプト)の中に存在する“意味を持つ文字・単語”のことをいいます。
例えば、<white long dress>という呪文(プロンプト)を入力すると、white/long/dressの3トークンに分かれます。このトークン数は、入力欄の右側で確認できます。
このトークン数には、いくつかの決まりが設けられています。
そのルールについては、以下の記事で詳しく解説していますので是非参考にしてください!
呪文(プロンプト)の強調構文とは
プロンプトの強調構文とは、特定のトークン(文字列)を強くするためにプロンプトに挿入する文字列です。
主には『Break』や括弧を、プロンプト内に書き込みます。
強調構文のメリット
強調構文を使えば、生成された画像を簡単に修正できます。例えば下の画像です。
プロンプトでは、『青い瞳』と指示しました。しかし左側の瞳が、若干紫になっています。
1 girl,standing pose,cute,cute eyes,detailed hair,anime,highlight hair,front sun light,beautiful hair,illustration,face up,smile,white teeth, school uniform, blue ribbon,gentle smiling expression of a woman,black hair,Blue eyes, acing front,
ちょっとした修正のためにプロンプトを変更したり、ネガティブプロンプトを追加するのは、少し面倒ですよね。
そこで利用して欲しいのが、強調構文です。強調構文なら、簡単な文字列をプロンプトに追加するだけで、生成した画像を修正できます。
強調構文を使って、修正した結果が下の画像です。
微妙な違いはあるものの、人物はそのままで瞳の色は青くなっていますね。
どのように強調構文を使って修正したかは、後述します。
- Stable Diffusionのプロンプトの見本が知りたい
- 画像生成が思ったようにできない
- 色々なプロンプトを探したい
強調構文を入力する方法
まず強調構文には、『Break構文』と『括弧で囲む』の2つがあります。
①Break構文
Break構文は、強調したいプロンプトの1つ前に挿入します。括弧で囲む場合は、強調したいプロンプトを括弧で囲むだけです。
※詳しくは、以下の記事を参考にしてください。
②括弧でくくる
括弧で強調する方法には、以下の3パターンがあります。
- (プロンプト):括弧内のプロンプトが1.1倍強くなる
- ((プロンプト)):括弧内のプロンプトが1.1倍×1.1倍の、合計1.21倍になる
- (プロンプト:数値):書き込んだ数値分だけ強くなる(1.4と書いた場合、プロンプトが1.4倍強くなる)
括弧を使う場合、修正しながらそれぞれ試してみてください。
どのように強調構文を使って修正したかは、次に解説していきます。
【検証】呪文(プロンプト)を強調構文で入力した効果は?
ここからは、強調構文にどれぐらいの効果があるか、検証結果をもとに紹介していきます。
Break構文の効果
まずはBreak構文です。先ほどの『紫がかった瞳を青くした』画像修正では、Break構文を使用しています。
青い瞳を強調したかったので、プロンプト内の『Blue eyes(青い瞳)』の1つ前に『Break』を挿入しました。
1 girl,standing pose,cute,cute eyes,detailed hair,anime,highlight hair,front sun light,beautiful hair,illustration,face up,smile,white teeth, school uniform, blue ribbon,gentle smiling expression of a woman,black hair,break,Blue eyes, acing front,
Break構文は、強調したい指示の1つ前に『Break』と書き込むだけでOKです。
Break構文は小さい修正には有効ですが、大掛かりな修正では効果を発揮しない場合があります。例えば下の画像です。
プロンプトでは『夜の道』と指示していますが、生成された画像は夕方です。
1 girl,standing pose,cute,cute eyes,detailed hair,anime,highlight hair,front sun light,beautiful hair,illustration,face up,smile,white teeth, break,school uniform, blue ribbon,gentle smiling expression of a woman,black hair,Blue eyes, acing front,night walk
そこでBreak構文で修正してみた結果が、下の画像です。まだ夕方ですね。
1 girl,standing pose,cute,cute eyes,detailed hair,anime,highlight hair,front sun light,beautiful hair,illustration,face up,smile,white teeth, break,school uniform, blue ribbon,gentle smiling expression of a woman,black hair,Blue eyes, acing front,break,night walk
今回のように、Break構文では修正仕切れない場合があります。
括弧で囲む効果
次にプロンプトを括弧で囲った時の効果を紹介します。今回は下画像の背景を、夕方から夜に変更しました。
先ほど紹介した括弧を使う3つの方法を、それぞれ試したので、サクッとみていきましょう。
1 girl,standing pose,cute,cute eyes,detailed hair,anime,highlight hair,front sun light,beautiful hair,illustration,face up,smile,white teeth, break,school uniform, blue ribbon,gentle smiling expression of a woman,black hair,Blue eyes, acing front,(night walk),
1 girl,standing pose,cute,cute eyes,detailed hair,anime,highlight hair,front sun light,beautiful hair,illustration,face up,smile,white teeth, break,school uniform, blue ribbon,gentle smiling expression of a woman,black hair,Blue eyes, acing front,((night walk)),
1 girl,standing pose,cute,cute eyes,detailed hair,anime,highlight hair,front sun light,beautiful hair,illustration,face up,smile,white teeth, break,school uniform, blue ribbon,gentle smiling expression of a woman,black hair,Blue eyes, acing front,(night walk:1.4),
『括弧で囲っただけでは効果がなかったが、二重括弧や数値を入力したらしっかり夜道になった』という結果になりました。
ちょっとした修正にはBreak構文、大きな修正には括弧で囲むといった感じで、強調構文を禹使い分けてみてください。
呪文(プロンプト)のAND構文とは
最後に、AND構文について解説します!
AND構文とは、プロンプトに書き込んだ複数のトークンを、1つに統合させる文字列です。
AND構文のメリット
AND構文には、統合したトークンの関係性を明確にする効果があります。
例えば猫と女の子を描いてもらうと、猫の格好をした女の子が生成されてしまいます。
AND構文を使えば、猫と女の子を分けて描いてくれるわけです。
AND構文を使った結果は、後に紹介しますね。
AND構文を入力する方法
AND構文の入力方法は、関係性を計画にしたいトークンの間に『 AND 』と入力するだけです。
ANDの前後には、トークンを区切るカンマは必要ありません。
また、半角スペースがあるプロンプトと無いプロンプトでは、生成結果が異なります。
【検証】呪文(プロンプト)をAND構文で入力した効果は?
先ほどの画像を、AND構文を使って修正してみました。まずは修正前の画像とプロンプトです。
cat,girl,masterpiece, best quality, highly detailed, ultra detailed, high resolution, absurdres, 4K, 8K,school uniform, full body,
上記のプロンプトに、AND構文を追加した結果が下の画像です。
cat AND girl,masterpiece, best quality, highly detailed, ultra detailed, high resolution, absurdres, 4K, 8K,school uniform, full body,
『cat,girl』から『cat AND girl』に書き換えた結果、女の子から猫の要素が外れて猫と女の子の画像が生成されました。
またLoraで追加学習してもらって、精度を高める方法もあります。
※Loraについては、下記の記事で詳しく解説しています。
まとめ
いかがでしたでしょうか?
今回は『AND構文』について解説してきました。
今回のポイントをまとめると、以下のようになります。
- 『AND構文』とは、2つのトークンを統合して1つにまとめる文字列
- まとめたトークンの関係性を詳しくできる
- 複数の要素が混ざってしまったときに有効
もし今回のような『猫と女の子を描いてもらったら、猫の格好をした女の子が生成された』のようなな、プロンプトが混ざったときにAND構文を試してみてください。
- Stable Diffusionのプロンプトの見本が知りたい
- 画像生成が思ったようにできない
- 色々なプロンプトを探したい