今回は、ミッドジャーニー(Midjourney)のプロンプトの順番と、「::」によるプロンプトウェイトの関係性について研究してみました。
プロンプトの順番を変えると生成画像にどのような影響を与えるのか?
語順の変更と、プロンプトウェイトの関係性はどのようになっているのか?
などについて解説していきます。
※今回の記事は3月31日に書いています(--V 5bで全て作成しています)。
語順は出力結果に影響を及ぼす(ことがある)
テキストプロンプトの順番によって、画像出力に大きな変化が生じる場合もあれば、特に変化が見られない場合もあります。
以下でそれぞれについて解説していきます。
語順によって変化が見られない場合
犬と猫(2単語)の場合
生成テキスト「a dog , a cat,」
生成テキスト「a cat , a dog.」
以上のように、猫と犬の順番を入れ替えても、どちらも普通に画面に登場します。
犬、猫、鳥(3単語)の場合
生成テキスト「a dog , a cat , a bird.」
犬→猫→鳥の順番でプロンプトを記入しています。
犬と鳥は出力されていますが、猫は消えている場合があります。
生成テキスト「a cat ,a bird , a dog.」
猫→鳥→犬の順番でプロンプトを記入しています。
こちらもやはり猫が消えている場合があります。
生成テキスト「a bird , a dog ,a cat.」
鳥→犬→猫の順番でプロンプトを記入しています。
猫がいない場合があります。
何度か試しましたが、私が確認する限りは犬は毎回出力されますが、猫が出力されないことが多いです。
語順を変えてもその現象に変わりはありませんでした。
三匹の動物の順番による影響は私には確認できませんでした。
語順によって変化が見られる場合
長文の場合①
生成テキスト「a cat , Mountains, rivers, nuts, leaves, branches, trunks, roots , a dog.」
日本語訳としては、「猫、山、川、木の実、葉っぱ、枝、幹、根っこ、犬」です。
語順としては、猫を先頭にして、犬を最後にしています。
何回か試しましたが、このプロンプトで犬が登場することはありませんでした。
生成テキスト「a dog , Mountains, rivers, nuts, leaves, branches, trunks, roots , a cat.」
この画像の語順としては、犬を先頭にして、猫を最後にしています。
そうすると、犬のみしか画面に現れません。
上の2つの画像とプロンプトから考察すると、明らかに語順による影響を受けていると考えられます。
長い文章の場合は、語順によってプロンプトの比重が変わる可能性があります。
長文の場合②
生成テキスト「One girl with dark hair, wearing red shoes, walking in the city.」
日本語訳としては「赤い靴を履いて街を歩いている、黒髪の一人の少女」という意味です。
写実的な描写になっています。
生成テキスト「in the city , One girl with dark hair, wearing red shoes, walking.」
日本語訳としてはさきほどの画像とほぼ同じです。
ただし、語順を変えており、最後尾にあった「in the city」を先頭に持ってきています。
なぜかは分かりませんが、何度試してみてもアニメ調の画像が出力されます。
もしかしたらですが、人物や動物を説明するプロンプトは写実的になりやすく、街や風景を説明するプロンプトは絵画的・アニメ的になりやすいのかもしれません。
今回は「in the city」が先頭に配置されたため、風景の比重が大きくなってアニメ調になった可能性があります(要検証)。
プロンプトウェイトと語順の関係性
語順によって画像出力に影響があることが分かりましたが、プロンプトウェイトとの関係性はどうなっているのでしょうか?
プロンプトウェイトについて
テキストプロンプトの直後に「::2」「::5」などを配置すると、そのプロンプトの比重が大きくなります。
その「::数字」のことをプロンプトウェイトと呼びます。
「::数字」の数に応じて、対象のプロンプトが強調されます。
プロンプトウェイトと語順の関係
犬と猫(2単語)の場合
生成テキスト「a dog , a cat,」
この場合は、犬も猫も同時に現れています。
生成テキスト「a dog::3 , a cat.」
dogの直後に「::3」というプロンプトウェイトを付与しました。
犬を強調するように指示を出したため、猫の存在が消えました(dog::2でも同様の効果)。
生成テキスト「a dog , a cat::3」
犬を先頭において、後方のcatにプロンプトウェイト3を与えています。
この場合は、犬は消えずに存在することができています。
犬を先頭に配置したため、語順による比重が大きいため、消えることが無かったのかもしれません。
生成テキスト「a cat , a dog」
猫→犬の順でプロンプトを記入しています。
両者共に画面に現れています。
生成テキスト「a cat::3 , a dog.」
catの直後に「::3」を配置して、猫を強調しました。
そうすると、犬の存在が消えて、猫のみが出力されました(cat::2でも同様の効果)。
生成テキスト「a cat , a dog::3」
猫→犬の順番のままで、犬を強調しました。
猫は消えることなく存在して、犬と猫が共存できています。
以上の結果から、語順が先頭かつプロンプトウェイトが高い場合、他のプロンプトを排除するレベルで強調されることがあると分かります。
長文の場合
生成テキスト「a cat , Mountains, rivers, nuts, leaves, branches, trunks, roots , a dog.」
長文の場合は、先頭に記入した猫は出力されますが、最後尾の犬は無視されます。
生成テキスト「a cat , Mountains, rivers, nuts, leaves, branches, trunks, roots , a dog::10.」
最後尾に記入した犬にプロンプトウェイト10を付与してみました(a dog::10)。
しかし、犬が出現することはありませんでした。
プロンプトウェイトによる影響よりも、語順による影響のほうが強いことが分かります。
生成テキスト「a cat::10 , Mountains, rivers, nuts, leaves, branches, trunks, roots , a dog.」
こちらは、先頭の猫にプロンプトウェイト10を付与しましまた。
猫以外のほとんどの要素は排除されています。
「語順が先頭+プロンプトウェイトを高める」というのは、かなり強烈に画像出力に影響を与えるようです。
語順とプロンプトウェイトの詳細な関係性
今までは対象のプロンプトを先頭と最後尾で比較していましたが、以下では少しずつ順番をずらして検証してみます。
猫が先頭(9単語中)
生成テキスト「a cat , Mountains, rivers, nuts, leaves, branches, trunks, roots , a dog.」
生成テキスト「a cat::10 , Mountains, rivers, nuts, leaves, branches, trunks, roots , a dog.」
猫を先頭に記入して、プロンプトウェイト有りと無しで比較しています。
猫が2番目(9単語中)
生成テキスト「Mountains, a cat , rivers, nuts, leaves, branches, trunks, roots , a dog.」
猫を2番目に配置しました。
少し遠目から猫を見ている構図になりました。
生成テキスト「Mountains, a cat::10 , rivers, nuts, leaves, branches, trunks, roots , a dog.
猫を2番目に配置し、プロンプトウェイト10を付与しています。
猫を主役とした構図ですが、他の要素も少し反映されるようになっています。
猫が3番目(9単語中)
生成テキスト「Mountains, rivers, a cat , nuts, leaves, branches, trunks, roots , a dog.」
猫を3番目に配置しました。
かなり引いた構図となり、猫の存在が薄れています。
そして犬が登場しました。
生成テキスト「Mountains, rivers, a cat::10 , nuts, leaves, branches, trunks, roots , a dog.」
猫を3番目に配置し、プロンプトウェイト10を付与しています。
猫が強調はされていますが、川が出現しています。
猫が4番目(9単語中)
生成テキスト「Mountains, rivers , nuts , a cat , leaves, branches, trunks, roots , a dog.」
猫を4番目に配置しました。
もはや地図的な様相を呈してきました。
猫らしきものが見えるという程度の画像となっており、猫は完全に脇役となりました。
生成テキスト「Mountains, rivers , nuts , a cat::10 , leaves, branches, trunks, roots , a dog.」
猫を4番目に配置し、プロンプトウェイト10を付与しています。
プロンプトウェイト無しとでは大きく構図が違っています。
まだまだ猫が主役の構図です。
猫が5番目(9単語中)
生成テキスト「Mountains, rivers , nuts , leaves , a cat , branches, trunks, roots , a dog.」
猫を5番目に配置しています。
なぜか犬が猫よりもかなり増えています。
猫が見当たらない絵も見られます。
生成テキスト「Mountains, rivers , nuts , leaves , a cat::10 , branches, trunks, roots , a dog.」
猫を5番目に配置し、プロンプトウェイト10を付与しています。
猫が主役であることにはまだ変わりはありませんが、遠目から猫を見ている構図になりました。
猫が6番目(9単語中)
生成テキスト「Mountains, rivers , nuts , leaves , branches , a cat , trunks, roots , a dog.」
猫を6番目に配置しています。
抽象的なイラストになりつつあります。
生成テキスト「Mountains, rivers , nuts , leaves , branches , a cat::10 , trunks, roots , a dog.」
猫を6番目に配置し、プロンプトウェイト10を付与しています。
イラスト的な画風が出てきました。
猫が7番目(9単語中)
生成テキスト「Mountains, rivers , nuts , leaves , branches , trunks, a cat , roots , a dog.」
猫を7番目に配置しています。
6番目に配置時と特に変わりなく経過しています。
生成テキスト「Mountains, rivers , nuts , leaves , branches , trunks, a cat::10 , roots , a dog.」
猫を7番目に配置し、プロンプトウェイト10を付与しています。
やはりイラスト調の画像が多くなっていますが、猫が主役であることには変わりはありません。
猫が8番目(9単語中)
生成テキスト「Mountains, rivers , nuts , leaves , branches , trunks , roots , a cat , a dog.」
猫を8番目に配置しています。
6番目に配置した絵とあまり変わらない印象です。
生成テキスト「Mountains, rivers , nuts , leaves , branches , trunks , roots , a cat::10 , a dog.」
猫を8番目に配置し、プロンプトウェイト10を付与しています。
猫にシルエットが掛かることが増えている印象です。
猫が最後尾(9単語中)
生成テキスト「Mountains, rivers , nuts , leaves , branches , trunks , roots , a dog , a cat.」
猫を最後尾(9番目)に配置しています。
やはり、6番目に配置した絵とあまり変わりません。
生成テキスト「Mountains, rivers , nuts , leaves , branches , trunks , roots , a dog , a cat::10.」
猫を最後尾(9番目)に配置し、プロンプトウェイト10を付与しています。
遂に猫が登場しない画像が出力されるようになりました。代わりに犬がよく見られるようになりました。
以上の検証から、語順の影響力はかなり強い印象を受けましたが、プロンプトウェイトである程度調整可能ということも分かりました。
プロンプトウェイトが競合した場合
複数のプロンプトにそれぞれ「::」のプロンプトウェイトが付いた場合、どうなるのでしょうか?
以下で解説していきます。
生成テキスト「a cat , Mountains, rivers, nuts, leaves, branches, trunks, roots , a dog.」
これを元画像として、プロンプトウェイトを複数設定してみます。
複数のプロンプトウェイトは難しい
生成テキスト「a cat , Mountains, rivers, nuts, leaves::5, branches, trunks, roots , a dog.」
まずはプロンプトウェイトをひとつだけに絞って出力しました。
「leaves」=「葉っぱ」にプロンプトウェイト5を付与しています。
先頭に配置された猫が主役ですが、葉っぱも印象的な場所に配置されています。
生成テキスト「a cat::3 , Mountains, rivers, nuts, leaves::5, branches, trunks, roots , a dog.」
ここからはプロンプトウェイトを2箇所に設置しました。
葉っぱの他に、猫にもプロンプトウェイトを付与しています(a cat::3)。
しかし、猫の姿はなく、なぜかネズミに置き換わっていたりします。
生成テキスト「a cat , Mountains, rivers, nuts, leaves::5, branches, trunks, roots::3 , a dog.」
これは「葉っぱ」にプロンプトウェイト5を付与して、「根っこ」にもプロンプトウェイト3を付与しています。
しかし、画像からは根っこの要素はほとんど見られません。
生成テキスト「a cat , Mountains, rivers, nuts::3 , leaves::5, branches, trunks, roots , a dog.」
上の画像は「葉っぱ」にプロンプトウェイト5を付与して、「木の実」にプロンプトウェイト3を付与しています。
しかし、木の実は見当たりません。
以上のように、プロンプトウェイトを複数用いると、思い通りの画像を作りづらい印象です。
不思議な現象
プロンプトウェイトを複数使用することで、不思議な現象が起きます。
以下でご紹介します。
生成テキスト「a dog , a cat.」
上の画像はまだプロンプトウェイトを使用していません。
日本語訳は「犬、猫」です。
生成された画像も犬と猫が共存しています。
生成テキスト「a dog::3 , a cat.」
犬にプロンプトウェイト3を付与しています。
猫の存在が消えました。
生成テキスト「a dog::3 , a cat::2.」
犬にプロンプトウェイト3、猫にプロンプトウェイト2を付与しています。
犬の方がプロンプトウェイトが高く、そして語順が先のためか、猫の存在が消えています。
生成テキスト「a dog::3 , a cat::3.」
犬のプロンプトウェイトを3。
猫のプロンプトウェイトを同じく3に設定しています。
しかし、犬が消えてしまいます。
語順が先で、しかもプロンプトウェイトも同じである「犬」の存在がなぜか消えてしまうことがあります。
生成テキスト「a dog::2 , a cat::3.」
こちらも画像も、犬に2のプロンプトウェイトを付与して、猫に3のプロンプトウェイトを付与しています。
犬のプロンプトウェイト以上の数字を猫が持つと、犬の存在がかき消されることがよく起こります。
生成テキスト「a dog , a cat::3.」
一方で、犬にプロンプトウェイトを設けず、猫にだけプロンプトウェイトを設定すると、犬と猫が再び共存し出します。
さきほどの画像では犬をプロンプトウェイトで強調したにも関わらず、消えてしまいました。
むしろプロンプトウェイトを持たせない方が、存在を強調できるという矛盾が生じています。
こういう不思議な現象が現在のV5では生じるため、プロンプトウェイトを複数設定することは避けたほうが良いと個人的には思いました。
まとめ
- 長文においては、語順の影響力はかなり強い。
- 先頭に近いほどプロンプトの持つ影響力は増す。
- 語順が下がっても、プロンプトウェイトを高く設定すればある程度は強調可能(限度はある)。
- プロンプトウェイトを複数使用するのは、現状効果的では無さそう。
今回の記事の内容は、ミッドジャーニー(Midjourney)の公式ガイドにも記されていません。あくまで私個人が少ない試行から導いた独自の考察です。ご了承ください。