「Stable Diffusionに入力する文字数に制限はあるの?」「Stable Diffusionのトークンって何?」
こんな疑問を持つ方も少なくないでしょう。
実は、これらのトークンや構文を理解することで、思い通りの画像を生成できる可能性が高くなります。
今回PROMPTYでは、トークンについての解説とプロンプトを工夫する構文を紹介します。
Stable Diffusionにおけるトークン(Token)とは?
Stable Diffusionにおけるトークンとは、プロンプト内にある「意味のある文字列」を表します。
例えば、プロンプトで「photo realistic」と入力する場合、これは「photo」と「realistic」の2つのトークンから成り立っています。
Stable Diffusionを使った画像生成において、トークンの考え方は非常に重要です。このトークンの意味を知っておくことで、効果的なプロンプトを入力し、思い通りの画像を生成できる可能性が高くなります。
Web UIでトークン数を確認する方法
Stable Diffusion Web UIでは、プロンプトやネガティブプロンプトを入力するボックスの右上に、現在使っているトークン数が表示されます。
2つの単語を入力すると2トークンです。
カンマ(,)で区切った際にも1トークン使われます。
トークン数に制限はあるの?
以前のStable Diffusionのトークン数の制限は75トークンとなっており、76番目以降のプロンプトは出力画像に全く反映されていませんでした。
現在のStable Diffusionでは、トークン数の入力制限はありませんが、プロンプトに入力するトークン数は75以内をおすすめします。
Stable Diffusionはトークンを75区切りで認識するため、
「・・・dog(75トークン目),running(76トークン目),・・・」
といったようにプロンプトを入力してしまうと、75番目のトークンと76番目のトークンではプロンプトの影響力に差があるため、思い通りの画像が生成できなくなってしまいます。
AND構文とは?
AND構文は、文字列と文字列の間にANDと入力することで、トークン数を減らすことができる構文です。
例えば、男の子と女の子の画像を生成する際、「boy, girl」と入力すると、「boy」「,」「girl」の3つのトークンなります。
そこで、AND構文を使って「boy AND girl」と入力すると、「boy AND girl」で1つのトークンにまとめることができます。
このように、トークンを減らすことが、AND構文の役割でしたが、現在は75トークンの制限がなくなっているため、得られるメリットはあまり大きくありません。
BREAK構文とは?
BREAK構文は、文字列と文字列の間にBREAKと入力することで、特定の文字列を強調できる構文です。
前章で解説した通り、75番目のトークンと76番目のトークンでは、プロンプトの影響力に差があります。同じトークンを指定した場合でも、75番目に入力するよりも76番目に入力する方が、画像に反映されやすくなります。
プロンプトにBREAKと入力すると、自動的に75トークンの区切りを入れて、影響力の強い76番目(あるいは151番目)としてカウントしてくれます。
このBREAK構文を利用して、生成する画像に反映させたい要素を強調することで、思い通りの画像を生成できる可能性が高くなります。
例えば、次のプロンプトで赤い服・黒いハット・白いスカートのアニメ風イラストを生成します。
(masterpiece,best quality:1.4),1girl,full body,brown long hair,red shirt,black hat,white skirt
生成した画像:
ハットやスカートの色が正しく画像に反映されていません。
そこで、このようにBREAK構文を使って「black hat」「white skirt」を強調します。
(masterpiece,best quality:1.4),1girl,full body,brown long hair,red shirt,BREAK black hat, BREAK white skirt
生成した画像:
指定した色が正しく画像に反映されるようになりました。
今回生成した画像のその他の設定は次の通りです。
ネガティブプロンプト
(worst quality,low quality:2),(painting,sketch,flat color),(nsfw,nude,exposed skin,exposed chest,nipples,naked,bare navel),monochrome,grayscale,ugly face,bad face,bad anatomy,deformed eyes,missing fingers,acnes,skin blemishes
モデル:Anything V5
Sampling method:Euler a
Sampling steps:20
Width:512
Height:512
Batch count:3
Batch size:1
CFG Scale:7
Seed:-1
Script:None
括弧()を使った強調構文
特定の文字列の影響力を高めたり弱めたりする方法として、括弧で囲って強調するという方法があります。
例:黒髪と指定していたのに白髪が出た時に、()を付けて強調する
masterpiece,high quality,1 girl,(black medium hair),blue eyes,t-shirt,skirt,choker,blush,from above,frontal face
Stable Diffusionで括弧を使った強調構文については、こちらの記事で詳しく解説しています。
Stable Diffusionで画像生成を行う際に、思った通りの画像が出力されないことはないでしょうか。 Stable Diffusionでは、プロンプトを入力する際にAIに特に注目させたい点の目印として括弧を用いることがあります[…]
プロンプトのエラーを確認する
Web UIでプロンプトを入力している際、トークン数のカウンターが赤くなるときがあります。
これは、プロンプトの入力にエラーがあることを表します。特に、括弧の数や位置がうまく機能していない可能性に注意しましょう。
正しくプロンプトが入力されている場合:
プロンプトに問題がある場合(2つ目の括弧が閉じていない):
Web UIを使う際には、”Generate”を押す前に、プロンプトのエラーがないか一度確認することをおすすめします。
まとめ
今回PROMPTYでは、Stable Diffusionのトークンの基本から、AND構文やBREAK構文を使った実用的な画像生成の例を詳しく紹介しました。
この知識を活用することで、皆さまの思い通りの画像を生成することが可能となります。
是非、今回の例を参考に、Stable Diffusionで構文を使った画像生成に挑戦してみてはいかがでしょうか。
~Stable Diffusionで素早く画像生成するには~
Stable Diffusionの画像生成スピードや画像サイズは、グラフィックボード(GPU)の性能によって大きく変わります。
このため、より効率的かつ快適な画像生成を望むユーザーにとって、最適なグラフィックボードの選択が重要となります。
推論処理やLoRAなどの追加学習処理といった大量の計算を効率よく行うためには、12GB以上のVRAMを持つグラフィックボードを選ぶことを強くおすすめします。
2GBや4GBのVRAMを持つグラフィックボードでは、学習プロセスや高解像度の画像生成に支障が出る可能性が高いです。
コスパを重視する方は、RTX 3060を選ぶと良いでしょう。
このグラフィックボードを使えば、Stable Diffusionの画像生成機能を最大限に活用することが可能となります。