今回はミッドジャーニー(Midjourney)に実装された新たなコマンド「/shorten」について解説していきます。
「/shorten」は、ミッドジャーニー(Midjourney)においてのプロンプトの理解を深めたり、GPU時間の節約にも使える機能だと思います。
よろしければご覧ください。
shortenの使い方
「/shorten」はコマンドの一種です。
メッセージ欄に「/shorten」と挿入して、上に表示されるコマンド候補の「/shorten prompt」を選択します。
メッセージ欄に「/shorten prompt」と記入されますので、その後に続けて自由にプロンプトを書き込んでください。
今回は上図のように、長文を書き込んでみました。
これで送信します。
すると上図のような表示があります。
これが「/shorten」機能です。
※「/shorten」は「::」を使用したマルチプロンプトには非対応です。
以下で各項目を詳しくみていきましょう。
不必要なプロンプトは消してくれる
さきほどの「/shorten」結果の上部に「Important tokens」という項目があります。
送信したプロンプトで不必要な部分に「横線(打ち消し線)」を入れてくれています。
上記のように「横線」が入れられています。
「横線」を入れられた部分は、画像出力に影響をもたらさないため、削除しても結果に影響がありません。
上図は元々のプロンプトで作成したものです。
こちらは、「横線」が入った部分を削除して生成した画像です。
両者の「seed値」は同じにしています。
両者はプロンプトに違いがありますが、全く同じ画像になります。
このことからも、「横線」部分を削除しても画像に影響を与えないことが分かります。
「Shortened prompts」について
「/shorten」を実行すると、上図のように「Shortened prompts」という項目が表示されます。
いくつか番号がふられて、各番号にプロンプトが記載されています。
各プロンプトは元々のプロンプトよりも短く作られています。
これらのプロンプトは影響力が0より高いものだけを選んで配置されています。
画像のクオリティを上げたりする効果はありませんが、短いプロンプトで元画像の趣旨に沿った画像を出力できる可能性があります。
今回は1番の番号を押してみましょう。
ボタンを押すと、上図のようにプロンプトを修正することができます。
今回は修正せずにそのまま「送信」を押してみます。
こちらの画像が作成されました。
元々のプロンプトよりも短いですが、元画像と似た雰囲気の画像を作成することが出来ます。
「Show Details」について
「/shorten」を使用すると、「Show Details」というボタンが表示されます。
これを押してみます。
すると、上図のように各プロンプトに対して(数字)が羅列されます。
その下には、プロンプトとメーターが表示されます。
各プロンプトの横に表記されている(数値)が高ければ高いほど、そのプロンプトが画像生成に影響を及ぼすことになります。
メーターは、上から順に影響が高いプロンプトをいくつか並べてくれています。
最も数値の高いプロンプトを削除する
上記したプロンプトの中で、最も数値の高いプロンプトを削除して画像を生成してみましょう。
今回のプロンプトで言えば「smiling」がそれに該当します。
上図が「smiling」のみを削除して作成した画像です。
こちらが元画像になります。
元画像と「seed値」は同じですが、ガラッと雰囲気が変わりました。
「横線」部分を削除しても生成した画像は全く同じであったことを考えると、「smiling」のみを削除して大きく画像が変わったというのは、それほどプロンプトの影響力が高かったということだと思います。
(0.01)を削除してみる
上図にて、(0.01)の数値である「highlighting」のみを削除してみます。
(0.01)という数値は(0.00)を除くと最も低い数値です。
(0.00)を削除しても画像に影響を与えませんでしたが、(0.01)を削除するとどうなるでしょうか?
上図は「highlighting」のみを削除した画像です。
こちらが元画像です。
「seed値」は同じにしています。
右上の画像はほとんど同じに見えますが微妙に違っています。
(0.01)という低い数値であっても、画像に影響を及ぼしていることが分かります。
長文は後半の影響力が低下する
長文の各プロンプトが与える影響力についても確認してみます。
上記が元々のプロンプトです。
赤字の部分と青字の部分の順番をごっそり入れ替えてみます。
上記のように入れ替えました。
文章の意味自体は変わっていません。
これで画像を生成してみます。
文章を入れ替えて出来た画像が上図になります。
こちらは文章を入れ替える前の画像です。
文章の意味は変わっていなくても、語順を入れ替えるだけで全く違う画像が出力されます。
「/shorten」で確認する
文章を入れ替えたプロンプトを「/shorten」を使って解析したのが上図になります。
こちらは文章を入れ替える前のプロンプト解析です。
両者の間で各プロンプトの数値が全く違うことが分かります。
元々は「highlighting」は(0.01)の影響力しかありませんでしたが、文章を入れ替えると(0.29)と高くなり、ランキング入りもしています。
そして、最も数値が高かった「smiling」はなんと(0.00)となっており、不要なプロンプトに成り下がってしまいました。
文章を入れ替える前も後も、文章の後半の数値はほとんど0に近くなっています。
つまり、長文では後半に記入されたプロンプトは無視される傾向にあると言えます。
短文の語順の影響力について
長文では語順が後ろになる程、プロンプトの影響力が低下していました。
短いプロンプトでは語順の影響力は出るのでしょうか?
上記の短文のプロンプトの赤字と青字の部分を入れ替えてそれぞれ試してみます。
入れ替えても文章の意味は同じです。
プロンプト「A large jellyfish is drifting in the sea. A red moon is rising.」
プロンプト「A red moon is rising. A large jellyfish is drifting in the sea.」
「seed値」は同じにしています。
両者とも似たような画像が生成されました。
上図は文章を入れ替える前の解析です。
こちらは文章を入れ替えた後の解析です。
短文の場合は最後方でも「moon」(0.15)のように高い数値を記録できています。
また、入れ替える前の後方に位置している「A red」は(0.14)、 「moon」は(0.15)です。
一方で、最前列に位置した「A red」は(0.12)、「moon」は(0.10)となっています。
短文においては語順の違いはそれほど大きな影響はないのかもしれません(要検証)。
どれかは必ず(0.00)になる
上図のプロンプトは「dog, cat」です。
プロンプト通り、犬と猫が写っています。
このプロンプトを「/shorten」で解析します。
すると、上図のように「cat」のみが(1.00)で最大値を取り、「dog」は(0.00)で不要なものとして表記されています。
「Shortened prompts」の候補も「cat」のみとなっています。
本来の画像は犬と猫が同時に写っていますが、「cat」のみが重要視されています。
試しに「cat」のみで画像を生成してみます。
やはり猫のみの画像が生成されました。
「/shorten」というのは「約する」「縮める」という意味があるため、必ずどれかひとつのプロンプトは(0.00)となって省略してしまうようです。
よって、プロンプトが短すぎると、「/shorten」での結果と本来の生成画像が大きく違うことになるかもしれません。
GPU時間の節約になる
「/shorten」コマンドを実行するだけでは、GPU時間を消費しません。
GPU時間というのは、fastモードやturboモードなどの高速画像生成した際に消費する時間です。
各有料プランごとに残量が設定されています。
残量が尽きると、次の月の更新までは低速の画像生成モードであるリラックスモードでしか画像生成できません(残量を買い足したりプランアップグレードをすることは可能)。
また、Basicプランはリラックスモードを使用できないため、GPU時間の残量管理はシビアにしておかなければなりません。
そこで、まずはプロンプトを「/shorten」で解析して、各プロンプトがいかに反映されているのかを見ておくと無駄打ちが減るかもしれません。
影響力を持たせたいプロンプトが意外にも(0.00)だったりする場合は、画像生成する意味がありません。
その場合は再びプロンプト全体を見直した後に再度「/shorten」を実行して確認することをオススメします。
面倒ですが、こうすることでGPU時間の節約になると思います。