【画像AI】NJ(MJ)にイメージプロンプトで文字を与えるとどうなる?
こんちは、ねむえむです。
術師というよりMJ(ミッドジャーニー)、NJ(にじジャーニー)でAIの挙動研究・プロンプト実験をする人です。もはやプレイヤーよりデバッガーに近いです。
前回はウェイトの合計値が±0になるときのマイナスのウェイト0.001付近の変な挙動を調査してました。何の役に立つんだこれ。
また雑な研究報告になると思うので結論から書くと
・日本語は無理
・短いアルファベットと数字なら反映できる
・文字はMJのほうが得意かもしれない
・画像プロンプト内の文字が、文字プロンプトとして若干効く
・seed固定すると文字だけ異なる似た雰囲気の画像になる
・日本語は無理
などの知見が得られました。
では、どうしてそうなったのか順を追って解説していきます。
発端
にじの質問チャンネルで定期的に「文字入りで生成したい」という声が上がったり、雑談で「画像生成AIはいつになったら文字生成できるんだ」という話がありました。
これについて、StableDiffusionの会社Stability AIのラボが開発したらしい「DeepFloyd」というのが文字の精度がスゴイと話題になっていると聞きました。
確かにスゴイ。AIに文字が不可能じゃないならMJにも文字対応の未来はありそう。
と思っていた折、MJにblend機能が追加されてイメージプロンプトがかなり注目を浴びてきました。
前々から「文字がただの文字として生成できないのは、表示したい文字列にもトークンがあるからでは?」
(=『りんご』という文字列が欲しくて『りんご』と入力すると、果実のりんごが出る)
という仮説を立てていたので、
「イメージプロンプトで文字列を用意すれば、その文字列で文章プロンプトを汚染することが無いし現状のNJ・MJでも出せるのでは!?」と考えたのが発端です。
まずNJで実験してみる
用意した画像
最初の女性のTシャツにこれらの文字を表示するというのが目的です。
ちなみにblendで試すとこうなってしまうので
blend機能は使わず、イメージプロンプト生成で一律に「白Tシャツの文字」という文章プロンプトを補強しています。
イメージプロンプトの順番は全て女性が先で、文字画像が後(さらにその後に文章プロンプト)です。
合成結果は以下。
『にじジャーニー』
『架空新聞(縦書き)』
『いろは』
見ての通り、日本語は無理でした。縦書きなんてなかった。
にじジャーニーを使っている人はご存知だと思いますが、多言語でプロンプトを打てるからといって日本語が通じているわけではありません。それらは自動的に英語に機械翻訳されて伝わっているので、結局英語しかNJくんには伝わりません。
つまりこれらの文字も「なんかよくわからない記号の羅列」として再構築されているのでこんなになりました。かろうじて画数が生きているかもぐらいですね。
まあ前述のDeepFloydもどうせ英語だけでしょうし、国産AIは無いので日本語対応はハナから諦めてます。英語が反映できればヨシ。
『ABC』
うーん……
いまひとつではありますが、日本語と比べたら格段に改善はしてますね。少なくともアルファベットではある。
ちなみに「文字列イメージプロンプト使わなくてもABC出せるだろ」という意見もあると思うので対照実験もしています。
文字列イメージプロンプトを使用せず、女性のイラストのほうと文章プロンプトだけでアルファベットを出せるかという実験。
‘ ’で単語を区切ってあげてプロンプトをもっと頑張ればできそうな気もしますが、単純なプロンプトよりも文字列イメージプロンプトのほうが遥かに強力かつ正確に作用しているのは明らかです。これは対照実験と比較して効果アリと見て良いでしょう。
他も見ていきます。
『y=x2』
かろうじて数字や数式を作ろうという気概は見えますね。
『1981/5656』
短い数字ではABCと同じ結果になることが予想できたので、区切って長くしてみました。
数字(のようなもの)が描かれていますが、やはり長くしたり複雑にすると精度が著しく低下しそうです。
そして次が問題の生成です。
『blue hair tongue』
えっ……なんか……
3単語は長いのでやっぱり難しそうなんですが、それより急に髪の毛食ってない?
そもそも『青い髪』『舌』という単語の文字列でイメージプロンプトをしてみたのには理由があります。
ちょっと前に「CLIP特徴空間では、iPodと書いた紙を貼り付けたリンゴがiPodと認識される」という記事を見た記憶があったからです。
※見つけました。
まさかね〜と思いつつやってみたら、tongueを使って髪の毛を食べてしまった。心なしか髪も青みがかかっている気がする。
怪しくなってきたので、もっとわかりやすい単語の文字列を用意しました。
そして結果は。
『RED EYES』
完全にやられてました。
MJのイメージプロンプトにも活字アタックが通ってしまう……と言うと聞こえが悪いので、一般向けには「AIはイメージプロンプトの中に文章で書かれている英単語も読んで反映する」と言っておきましょう。
実験的にはただの副産物なんですが、何かやばいものの扉を開いた気がする。
まあ開いてしまったものは仕方ないので、いったん「文字列イメージプロンプトで文字を生成する試み」から離れて、イメージプロンプトの文字列がどれぐらい効くかを試してみます。
活字イメージプロンプトの強度検証
さすがにふざけているように見えますが、CLIP的にはこれが効くはず。
プロンプトは何も邪魔しないように「,」だけ入力してイメージプロンプトに突っ込んでみます。
結果は。
ダメでした……。
さすがに無茶だったので、文章プロンプトでlandscapeなどを入れてみます。
少女が消えた……。
ならばと、文章プロンプトを
landscape, girl
にしてみます。
出ました!
理想の状態です。文字が邪魔なのはまあイメージプロンプトなので仕方ないです。応用するなら道の看板とかに文字を刷り込ませれば良いし、最悪消せば良いので。
ただ、これが本当にあの活字イメージプロンプトアタックの効果によるものなのか?という疑問はあるので、例によって対照実験です。
イメージプロンプトを使わないlandscape, girlの生成を行います。
似た雰囲気のものはありますが、
①奥に山 3/8
②手前に少女 3/8
③真ん中に川あるいは水 2/8
全てを満たす画像は8枚中1枚でした。
イメージプロンプトのほうが4枚中3枚出ているので、描写対象と構図は活字イメージプロンプトによる効果ありと見て良いでしょう。
ちなみに、別AIでは構図の指定、遠影・近影の描き分けの指定ができるものが既にあるような話を見ました。
※記事URL見つけました
これこれ。こういうこと。
まあNJやMJではどうしても文字が入り込んできてしまうので、それをやるには違和感のないように刷り込ませる工夫(前述の看板作戦など要検証)や、とりあえず構図だけ出す下書きの生成だと割り切って後から清書する必要が出てきそうです。
(成果物をさらにイメージプロンプトするのもアリ。ただどのみちめんどい)
とりあえず活字イメージプロンプトの話はここまでにして、本筋に戻ります。
MJで文字列イメージプロンプトが反映できるか
副産物でお腹いっぱいですがMJでも試します。
こちらはシンプルに、
文字列イメージプロンプト
+ 文章プロンプト(whiteboard word)
だけで生成します。
『いろは』
『ABC』
やはり日本語はダメですが、英語はにじジャーニーよりだいぶ精度が良い気がする。
他のプロンプトでも生成してみようと思い、次は「word」のみの文章プロンプトで出します。
『いろは』
『ABC』
やはり日本語はダメ、ABCの精度が良い、そして何だこの少女…?
やけに出るな…と思って気づきました。
このとき、うっかりミスなんですが、他の生成の都合で/prefer suffix機能でseed値を固定してしまっていました。
よく見れば少女以外の3つの生成も類似点が多い。
seedを固定することで生成物の再現性がある(わずかなプロンプトの変更ならほぼ同じ画像が出る)のは知っていたので、
『文字列イメージプロンプト程度の影響力なら生成物を固定したまま文字を入れ替えられるのか?』
という新たな疑問が出てきました。他の文字列でも試していきます。
『RED EYES』
『架空新聞(縦書き)』
・英語でも文字列が長くなると難しそう
・雰囲気は似るが同じと言い張るのは難しそう
ということがわかりました。
あとRED EYESはしっかり侵食してますね。左下キモい。
文字が完全に意のままに表現・描写できればseed固定テクニックもある程度意味がありそうですが、RED EYESでもまともに描けないのではあまり活用方法は思いつきません。まあ知識として残しておくぐらいで。
seedは固定しておくと色んな発見があって面白いので良いですね。
ランダム生成した後からでも✉️封筒(envelope)絵文字のリアクションをつけることでseedが確認できるので、雰囲気が気に入って微調整したいときは使ってみてください。
実験は以上になります。
まとめ
・日本語は無理
・短いアルファベットと数字なら反映できる
・文字はMJのほうが得意かもしれない
・画像プロンプト内の文字が、文字プロンプトとして若干効く
・seed固定すると文字だけ異なる似た雰囲気の画像になる
活字イメージプロンプトでアタックできるというのが今回は大きな発見でした。
一応これはAI認識を騙しているのでバグみたいなものです。面白いですが、好ましい状態ではありません。
ただの「文字列」として使いたいのに単語が生成全体に影響してしまうのは、逆手に取らず正直に見れば困ります。赤い目を出したければ文章プロンプトにRED EYESと入れれば良い。
一応開発のかたに確認したらこういった挙動は把握しており、現状では難しいが今後のメジャーアップデートで解決する見込み(たぶん確定ではなく、解決するという目標がある?)とのことでした。
文字の生成も活字アタックへの対処もこれからの発展に期待したいと思います。
それではまた。
この記事が気に入ったらサポートをしてみませんか?