見出し画像

【StableDiffusion】ただのAI美少女イラストに満足できない人のためのプロンプトの考え方

はじめに

「技術はまず軍事に応用され、その次は性である。」
どこでこの言葉を聞いたのかはもう忘れましたが、聞いた時の納得感は今になっても変わっていません。実際、realisticにせよanimeにせよ、頭の中のあの子を形にしたくてAIイラストを触り始めた人は私だけではないはずです。
そして、手が崩壊したり、体が異形になったり、妖精が出てきたり、男(道具)が消えたりすることもあったが、画像生成AIの力でその目的はたしかに達成できた人も少なくないのでしょう。
しかし、基本的な欲求が満たされたら社会的な欲求を満たそうとするのが人間です。AIは私たちが指定した人物の外見、表情などを忠実に、超人的な絵の腕で表現してくれてはいますが、girlという1トークンだけのプロンプトでも、AIの力で伝統絵師が数年練習してやっと描けるような美麗なイラストが生成されます。

girlの生成結果、こういうテーストのAIイラストはよく見かけますよね。

普段よく見かけるAIイラストのほとんどはここまでシンプルではなく、red hairとか、smileとか色々指定がありますが、「girl + girlを描写する言葉」と「girl」は事実の記述という点においては同じです。私自身でも嫌いで使いたくない表現をあえて使えば、「絵としての面白みがない」ということです。

これを問題視して、AIイラストに芸術的表現を加えようとする人は既に大勢います。作画や撮影の技法に関するプロンプトをまとめる人もいれば、特定な芸風を再現するLoRAを作る人もいます。
この記事では、文系らしく、具体的な手法ではなく、考え方でAIのイラストに事実の記述以上の意味を付与する考え方を語っていきたいと思います。

t2iにおけるAIの言語理解

プロンプトをどう書くかを考えるには、AIがどうプロンプトを理解しているかを知る必要があります。

t2iはご存知の通り、textのプロンプトからimageを生成する方法です。詳細な仕組みも一応調べましたが、正直事前知識の不足が原因で理解できませんでしたが、t2iの実現のために、AIは二種類の言語理解の訓練を受けたことがわかりました。

一つは文脈から文章の一部を推測する訓練です。小学生ぐらいの子どもが解くような、空いている場所に適切な言葉を入れるやつですね。
もう一つは、キーワードとそれが対応する画像を覚える訓練です。実際は違う気がしますが、大体は子どもが図鑑などを見て消防車などの名前と見た目を結びつく訓練です。

一見シンプルですが、前者は整合性で、後者は対応性の訓練です。整合性と対応性を備えれば論理的正当性を持ちます。人間であっても、文法(整合性)と単語(対応性)を覚えれば、外国語が理解できます。

ただ、こうして言語理解を会得したAIは人間と本質の違いがあります。例えば人間に「女の子と猫」を描かせたら、普通は女の子と猫の絵になりますが、AIだと確率で「女の子と猫が合体した猫耳の女の子」になります。AIが間違えたわけではなく、「girl,cat」という組み合わせが存在しうる文脈の中でそういう解釈が存在する以上、AIは確率でそう解釈します。同じように、多義性を持つ言葉も、人間なら文脈を見て判断できますが、AIにとっては「95%意味A、5%意味B」の言葉です。要するに、AIにはとって「普通」は確率が高い可能性だけで、人間のように「特別に指定しなければ普通一択」の判断力がないです。

また、人間には言語抜きの概念を持てます。狼に育てられる人間を想像しましょう。彼は言語というものを持っていませんが、何が食べ物なのかがわかりますよね。ところが、いかにも自然に対話ができるchatGPTでさえ「次の単語やフレーズの予測」で言語を使用しています。例えchatGPTが何かの概念を説明している時でも、その概念の説明に適した次の単語を選び続けているだけで、彼が持つそれの概念を言語化にしているわけではないようです。これの違いを表現するのはとても難しいが、AIにとってのりんごは人間でいう「りんごの形をするもの」、「りんごというものが置かれそうな場所に置かれているもの」であり、断定的な「りんとそのもの」ではありません。AIがよく「それっぽいのにそれじゃないもの」を描くのはこれが原因だと思われます。

girl, in a car, いかにも車の内装っぽい要素が描かれていますが、こんな車の内装がありえません。


Prompt Bookのヒント

ところで、皆さんはOpenArtに掲載されているStableDiffusionのPromptBookを読みましたか?

ここには初心者に向けての、プロンプトを書く時の自問自答があります。
TOEIC800未満のゴミ翻訳で申し訳ございませんが、大体はこうです。

「私は写真が欲しいのか?それとも絵が欲しいのか?」
「写真だったら、それは何の写真なのか?人?動物?風景?」
「それにはどんな詳細があるのか?」
「それは明確なスタイルがあるのか?」
「それは明確な写真のタイプを持つのか?」

おそらく誰しもプロンプトを書く時に自問自答をしているのでしょう。
しかし、これを読んだ時、私は自分が今まで「写真と絵のどちらが欲しいのか」を意識したことが一度もなかったことに気づきました。アニメ風のモデルを使えばそれが当然絵になるし、リアル風のモデルを使えば写真みたいな生成結果になります。StableDiffusionと検索すれば出てくる多くのチュートリアルも、写真を生成したければこれらのモデルをダウンロードするように言っています。

girl,

実際プロンプトに入れて生成してみても、アニメ風のモデルなので人間の私は両方をイラストとして認識していますが、前節で語ったAIの言語理解を思い出して欲しいです。人間にとって「どのみちイラストじゃないか」でも、そのプロンプトはAIにとっては「illustration(photo)みたいなものを生成しなさい」であり、ちゃんと違うのです。

それがどう違うのかはAIのみぞ知るといったところですが、AIにとってそれがイラストとして描いたのか写真として描いたのかは、結構大事なことかもしれません。

girl, simple background

simple backgroundを加えると、両方似たようなイラストを生成していますが、よく見るとillustrationのほうは思い切り下半身を描いていないのに、photoのほうは下半身が映っていないのです。もしかしたら、AIは「写真なら下半身は当然存在するはずだけど、絵なら別に上半身だけでもいいだろう、絵だし」と考えたのかもしれません。それに、photoのほうが若干リアルな絵柄になっているのも明らかですね。

このことから言えることは様々でしょう。「同じプロンプトに対して人間とAIの認識が違う」、「プロンプトの組み合わせで変化が生じる」…私が一番感じたのは、「物は試し」ですね…

絵の外も考えよう

モデルと関係なく、AIにとってイラストと写真が違うように、本の表紙にあるイラストとラノベの中のイラストも当然違うし、有名なイラストレーターが描いたイラストとpixivでランキングに入るイラストだって違うはずです。

よくあるチュートリアルと実際多くの方が書いているプロンプトは、絵の中に何の要素があるのか、これらの要素がどう相互作用しているのかぐらいで、そもそもAIは何を描かせているのかをはっきりさせていないのです。

私によく「どうしても女の子同士がイチャイチャしている様子が見たい」という発作があるので、そういう時は勿論「multiple girls, (yuri:1.5)」で生成すればいいのですが、人に見せたい「作品」として何かを生成したい時には、それがどういう作品なのかを考えないといけません。もっと正しく言えば、「それがどういう媒体にありそうな作品か」、「何と関連が持ちそうな作品か」をAIに教えないといけないのです。

しかし、実際人間のクリエイターが何かを描く時も「私は今から何のタイプの作品を描くのか」から考え始めるわけではありません。あるクリエイターはまず「創作百合を描きたいな」となんとなく考えるのでしょう。そしてどのような百合シチュエーションが最も尊いのかを思案することになり、頭の中で女の子の見た目や甘酸っぱいセリフを生成し始めるはずです。それらが確定されて始めて、短編マンガにすべきか、四コマにすべきか、はたまた一枚絵にすべきかを考えるのでしょう。

プロンプトでも同じだと思います。まずは画像の中を考えて、それに適切な媒体を考えます。当然ながら、目的がAIイラストのであれば、illustrationになるのですが、少し手を加えれば結果が変わります。例えばこういう見た目の女の子たちがこうやってイチャイチャしているという設定が変わらなくても、それがtwitterにアップされている#創作百合なのか、DLsiteに販売されているイラスト集の一枚なのかによって違うのはなんとなくわかるのでしょう。もちろんtwitterとDLsiteの文化感覚をAIに理解できるものと期待するのは無理な話ですが、「あの有名な作者が描いたような」、「このサイトでトレンドになりそうな」という曖昧な表現を入れるだけでも、AIは頑張ってそれを解釈してくれるので、実際全くあの作者の作品に見えなくても、変化があれば当たりなので、「物は試し」です。

また、どうせモデルによって「イラスト」しか生成できないので、何かのillustrationとして指定しなくても全く問題がありません。むしろ明らかに筋違う指定をすればするほど面白いことになるのです。

a photo, taken by Ludwig van Beethoven, of 1 girl,

あのベートーヴェンがこのような写真を撮るわけがありませんが、なんとなくAIが「ベートーヴェンが撮る写真って何よ、まああの時代だから、黄色がかかった古い感じかな..有名人だから自分のサインを入れてそうだな」と考えた感が生成結果に出ていますよね。

作品として形を固めよう

どのような作品を指定するだけなら、それはフィルターで加工することや特定のLoRAを入れることと大して変わりません。指定によっては全く変化がわからない場合もよくあります。なので、どのような作品を確定したあとは、そういう作品を自分で作っている状況をイメージして、どのような要素がありそうなのか、どのように表現すればいいだろうか、などを想像して、作品を形作っていく必要があります。

といっても、最初に被写体の外見や動き、背景などは既に決まっているので、ここで指定すべき内容は作画技法、エフェクト、作品全体の雰囲気などメタ的な付加要素もしくは修飾語です。

実際の生成を例にしてみましょう。というわけで、夏なので、スプライトのCM的な何かの中でイチャイチャする女の子の画像を生成したいと思います。まずは作品の形式と被写体の内容を定めて、以下のプロンプトになります。

a designed art, ad of Sprite(drink), 2girls, loli, yuri

この状態で生成してみると、

創作百合は細くて幼い女の子が多いイメージなので、loliタグを入れました。

可愛いですが、スプライトの広告なら、こんな配色のはずがありませんよね。そりゃ、水しぶきが飛び散り、氷とレモンがぶつかるのは当然ながら、ストリートアートのような反抗的な表現も要りますよね。あとは座ってドリンクを飲むよりも、躍動感のあるポーズが望ましいでしょう。

というわけで、私の英語力で書ける範囲でスプライトのCMにありそうな要素を追加しました。

a designed art, ad of Sprite(drink), imagining graphic , Abstract design, unreal, pro illustration, illusion, passion, (2girls, loli, yuri:1.4), (water splash, ice) ,bold composition, simple background, light blue background, (bright colors:1.1), impact, vivid, dynamic angle, excited, lemon object, lens flare, <lora:flat2:1>

勿論トークンは一つずつ追加したのですが、ここまで追加してやっと思い描いたスプライトCMに近づいてきました。方向性としては写真のようなリアリティのある背景を排除して、炭酸飲料CMにありがちな「ゲーミング感」を求めてみました。ただ、flatのLoRAをいれたにもかかわらず、「写真感」が強く残っているので、ガチャしながら考えましょう。

a designed art, ad of Sprite(drink), imagining graphic , Abstract design, unreal, pro illustration, illusion, passion, (2girls, loli, yuri:1.4), (water splash, ice) ,bold composition, flat background, light blue background, (bright colors:1.1), impact, vivid, dynamic angle, excited, lemon object, lens flare,

こういうふうに特に意味もなくsimple backgroundをflat backgroundに変えてみたり…構図は結構好みのものが出たが、まだまだ求めていたテーストではありません。

a designed art, ad of Sprite(drink), imagining graphic , Abstract design, unreal, pro illustration, illusion, sharp_shape, passion, (2girls, loli, yuri:1.3), full body, water splash, ice,bold composition, high contrast, flat background, light blue background, (bright colors:1.1), impact, vivid, dynamic angle, excited, lemon object, lens flare,

sharp_shapeとhigh contrastを入れることで、対比が強い配色と鋭利な形を持つ「水しぶきだったもの」を表現できました。ここまで来ると「ゲーミング感」はもう十分ではないでしょうか。ただこの配色だとスプライトのCM感がありませんよね…

a designed art, ad of Sprite(drink), imagining graphic , Abstract design, unreal, pro illustration, illusion, sharp_shape, passion, (2girls, loli, yuri:1.3), full body, water splash, ice,bold composition, high contrast, flat background, light blue background, (bright colors:1.1), impact, vivid, dynamic angle, excited, lemon object, lens flare,

ガチャするとレモンが出てきてスプライトらしさが戻ってきました。ここで「黒多くない?」と感じたので、カラーを調整したいと思います。

a designed art, ad of Sprite(drink), imagining graphic , Abstract design, unreal, pro illustration, illusion, sharp_shape, passion, (2girls, loli, yuri:1.3), full body, blue, yellow, green, white, water splash, ice,bold composition, high contrast, flat background, light blue background, (bright colors:1.1), impact, vivid, dynamic angle, excited, lemon object, lens flare,

はい、雑にblue, yellow, green, whiteをいれてみました。しっかり黒が減って、鮮明な色でポップな感じになってきました。ここまで来ると、私としてはもう修正作業に入っていいと思います。修正は今回のテーマとは関係がないので、このまま終わりましょう。正直ガチャで疲れました..

いかがでしょうか、今回は完全に自力で書いたので、英語力の限界を痛いほど感じました。「スプライトのCMを記述する時に使いそうな形容詞」をchatGPTに聞けばきっともっと素晴らしい単語が返ってくるのでしょう。

終わりに

長々と語ってきましたが、以下のステップにまとめられると思います。

1.AIイラストの題材、生成したい内容を決める。
2.AIは「〇〇」を描けない、「〇〇に近い何か」を描くことを意識する。
3.それをどういう作品として表現するのかを決める。
4.作品のタイプに合いそうなトークンをどんどん入れる。
5.変化と改善したい部分を観察して、トークンを調整しながら生成する。

当然ながら、これが正解ではありません。むしろ時間がかかるし、書いたプロンプトの可読性が終わっているし…デメリットだらけです。それでもありふれた事実を記述しただけのAIイラストと一味違うAIイラストが生成できるのは確かなので、プロンプトに悩んでいたら、こういう考え方で書いてみてもよいのではないかと思います。


この記事が気に入ったらサポートをしてみませんか?