この記事は内容の古くなったアーカイブ記事です。特に理由がなければ、こちらのアップデート版をお読みください。

こんにちは、スタジオ真榊です。こちらの記事では、画像生成(text2image)の基本であるプロンプト作成術について、熟達するまでに必要な知識をまとめたいと思います。プロンプトから画像が生成される仕組みやネガティブプロンプトの使い方といった基本部分から、特殊なプロンプト記法、有用なオススメ拡張機能まで、プロンプトを組むことに関わるさまざまな事項について網羅的に紹介していきます。

具体的なタグの一覧については、こちらの「プロンプト超辞典」をご参照ください。

はじめに ~プロンプトはなぜ「効く」のか~

画像生成を始めたばかりのときは「このタグはよく効くけど、このタグは効かないな」と感じる場面が多いのではないでしょうか。例えば、「looking at viewer」はだいたい効くのに「looking away」としてもときどきこっちを見てしまうとか、「hatsune miku」は出るのにこのキャラは出ないとか。これはユーザーのプロンプト指示が悪いわけではなく、その使用しているモデルがどういったデータセットで学習したかが強く影響しています。

例えば学習データの構成上、カメラ目線の女性キャラクターイラストの方が目線を外しているイラストよりも圧倒的に多かった場合、そのモデルは何も指示しなくても女の子をカメラ目線で生成しがちです。「1girl」とタグ付けされた教師画像の多くに「looking at viewer」というタグがついてくるため、「女の子は普通こちらを見てくるものなんだな」とAIが思い込んでいるようなイメージです。AIは被写体がどういう存在か、生き物なのかすら理解しておらず、潜在空間というおもしろ空間上のベクトルによって「概念」だけを学習している宇宙人のような存在なのです。

画像生成モデルはtext2imageモデルと呼ばれるように、画像だけで学習しているのではなく「テキストと画像の組み合わせ」によって学習しています。そのモデルの製作者によるデータセットの構成とタギング(教師画像にそれぞれどういう説明文をつけたか)によって、ユーザーがどう指示すると通じるかが変化することを念頭に、この記事を読み始めていただけるとよいでしょう。

プロンプト記法の基本

まずはプロンプトの基礎である「記法」について見ていきましょう。プロンプトには「ポジティブプロンプト(PP)」と「ネガティブプロンプト(NP)」があり、各モデルが学習したテキスト様式に従ってPPに入力したものが生成されます。逆に、NPに入れたテキストはできるだけ生成結果に反映されないような力が働きます。この二つの組み合わせによって生成画像をコントロールするのがプロンプトの基本です。

NovelAIのプロンプト(PP)と除外したい要素(NP)欄

      ▲NovelAIのプロンプト(PP)と除外したい要素(NP)欄

NovelAIやローカル用StableDiffusionモデルの場合、danbooruタグ(通称:danbooru語)と呼ばれる様式で学習されているため、「1girl」や「looking at viewer」といったタグをカンマ「,」で区切って、重要視してほしい順に箇条書きで並べていくのが基本です。例えば「1girl,solo,standing,smile,school uniform,sky,sea,masterpiece」といった具合ですね。

自然言語でも学習しているモデルであれば、「A girl in a school uniform is standing with a smile. Background is the sky and the sea.」のように、自然な文章でもちゃんと認識してくれます(▽下図)。mid journeyやniji journeyなどはこのタイプです。

プロンプト記法の基本:図版1

初心者向けのコツは、まず「必須要素:これが抜け落ちたらその時点で生成失敗になるタグ」を最初に書くこと。続いて、「メイン要素:被写体は何人でどんな構図か、どんな見た目の誰がどこで何をしているか、どんな画風か、背景はどんなものか」を指定し、次に「サブ要素:なくてもよいけどキャンバス内に描かれていると嬉しいもの」をそれぞれ単語で列挙。最後に「クォリティタグ」と呼ばれる、イラストの品質に関するものを入れるやり方がオススメです。

例

【必須要素】制服を着て赤いめがねを掛けたポニーテールの女の子1人のイラストをぜったい生成したい

 → 1girl,solo,red glasses,school uniform,ponytail,

【メイン要素】笑顔で立っている上半身のイラスト。目は紫、髪は黒、赤いリボン。背景は海と空。スカートはプリーツタイプ(※これを入れることで腹部から上だけのイラストになりにくくなる)

 → smile,standing,upper body,purple eyes,black hair,red ribbon,sky,sea,pleated skirt,

【サブ要素】日差しや雲、スクールバッグが描かれていると嬉しい。

 → sunshine,school bag,cloud,

【クォリティ】品質を高めたい、スケッチ風にしたい

 → masterpiece, best quality, very aesthetic, absurdres, sketch

【完成プロンプトと生成例】

1girl,solo,red glasses,school uniform,ponytail,smile,standing,upper body,purple eyes,black hair,red ribbon,sky,sea,pleated skirt,sunshine,school bag,cloud,masterpiece, best quality, very aesthetic, absurdres, sketch

例:図版1

<効かないタグがあったら>

さて、こちらの画像、よく見ると下半分の2枚はいずれも赤い眼鏡が生成されていないことがわかります。これは「red glasses」があまり強く印象付けられているタグではないことを示しています(逆に言うと、このモデルは"1girlと言えば眼鏡がない女の子"と印象付けて覚えているとも言える)。「sketch」の効果もやや弱めで、よく見るとざかざかした線にはなっているのですが、もっとしっかりスケッチ風にしたいときもありますね。

こういう場合は、後述する「タグを強調する」手法で解決できます。

<除去したい要素があったら>

プロンプト欄のすぐ下にあるネガティブプロンプト欄には、生成されてほしくない要素を入力します。例えば、スーツ(suit)というタグにはシャツやネクタイが強く印象付けられているので、suitと入れるだけでそれらがセットで出てくることが多いですが、suitをPPに、necktieをNPに入れるとネクタイなしのスーツを出しやすくなります。

同じように、ショートヘアにしたい場合はlong hairと入れればよいですし、高品質な画像にしたければlow qualityと入れても効果があります。

初期はたくさん低劣な画像を示すタグをNPに並べる風潮がありましたが、最近流通しているモデルはあまりこうしたネガティブプロンプトを必要としないモデルが多いです。モデル配布者はたいていオススメのネガティブプロンプトを公開しているので、よく説明を読んで参考にしましょう。

<プロンプトは"語順"も重要>

プロンプトには反映されやすい「強いもの」と「弱いもの」があり、前の方に書いたものほど反映されやすいので、欠けてはいけない重要要素は前の方に、ニーズの低いものや品質関連のものは後ろの方に置くと良いとされています。自然言語表記だと重要な単語が後ろのほうに行くことがあるので注意。DeepL翻訳でざっくり英文化して放り込んでもたいてい理解してくれますし、スペルが間違っていても意外と通じます。

「初音ミケ(hatsune mike)」さん。わざとスペルミスするテクニックもある

 ▲「初音ミケ(hatsune mike)」さん。わざとスペルミスするテクニックもある

注意したいのは、モデルが学習していない要素は生成できないということ。たとえば、「モナリザ」や「初音ミク」は教師データに豊富に含まれているので生成できますが、モデルが学習していない最新アニメのキャラクターは再現することができません。どうしても生成したい場合はLoRAなどの「追加学習」をする必要があります。

つまづきポイント①「AIが指示を誤解する」

プロンプトの書き方によっては、AIが誤解してしまうことがあります。こちらは、さきほどのred ribbonを「red hair ribbon」に変えて生成した例。

つまづきポイント①「AIが指示を誤解する」:図版1

「red hair ribbon」というタグが「red hair + ribbon」と理解され、その手前の「black hair」と合わせて判断された結果、黒と赤の髪の女の子が生成されてしまっていますね。

<カンマや否定語を妄信しない>

カンマやスペースは完全にタグ同士を引き離してくれるわけではないので、特に色に関する概念は混じりがち(色移り、色汚染などと呼ばれます)。同じ理由で「cowboy shot」(太ももから上が移っている構図)を入れたらカウボーイ衣装の女の子が出たとか、鉛筆画風を意味する「graphite(\medium)」と指示したら女の子が鉛筆を持ってしまった…ということもあるあるです。

「no humans(無人)」「small breasts(控えめな胸)」「no shoes」というタグは一応効きますが、タグの中に「humans(人)」「breasts(胸)」「shoes(靴)」という、タグの指定と逆の意味のタグが入っているので、効きが悪くなる現象が起こります。

まずは頭の中で理想の画像を想像し、「どうすればそれに近い画像が出るか」、同時に「どうすれば見当違いな画像生成を防げるか」の両面から考えていくのが上手なプロンプトの考え方。さきほどの例で言えば、「red hair ribbon」をどうしても通したいなら「red hair」をネガティブに入れたり、「red ribbon」や「red bow(ヘアリボン)」を使いましょう。

つまづきポイント②「思った構図にならない」

キャラの全身像を出したくて「full body」と指示しているのに、なぜか全身が描かれないことがあります。プロンプトの効きには強弱があるため、効きの弱いタグは無視されがち。そういうときは、考えを逆転させてみましょう。描いて欲しい絵を頭の中で想像して、それを抽象的ではなく、部分ごとの被写体を具体的にタグにしてみると良いです。

例えば、キャラクターの全身を描いてほしいのに脚が見切れてしまうのなら、抽象的に「全身(full body)」と指示するだけではなく、「skirt」「socks」「shoes」「feet」といった下半身に関するタグを多く入れてみるのがオススメ。背景があまり描き込まれないようなら、「detailed background(詳細な背景)」と強調するだけでなく、「beautiful blue sky」「detailed cloud」「summer」「road」「sun flower」などと、思い浮かんだイメージを基に、具体的なワードをどんどん並べてみるのがよいでしょう。「指示された被写体を忠実に描いたら、結果的に望んだ構図にならざるを得ない」ような指示が理想です。

※もちろん、プロンプトだけで完全に構図を支配することは不可能ですので、細かなポーズや位置を完璧に再現したい場合は素直にControlnetを使いましょう!

つまづきポイント③「正しいタグが分からない」

プロンプトに慣れないうちはもちろん、ある程度慣れてきても「あの概念、なんてタグを使えばいいんだ?」と悩んでしまうことはよくあります。例えば両手でハートマークを作るポーズは、何と指示したら良いでしょうか。「make heart with fingers」?「heart shape hands」?

困ったときは「danbooruタグ」を探してみましょう。現在流通しているイラスト調の画像生成モデルの多くは、「daanbooru」という海外のイラストタギングサイトで使われている英語のタグを使って学習しています。つまり、適当な英文テキストで指示するよりも、danbooruタグと同じ表記で指示したほうが理解しやすく、画像の再現度も高くなる傾向にあります。例えば、金髪のキャラを出したいなら「gold hair」よりも「blonde hair」、こっちを見て欲しいなら「look me」などではなく「looking at viewer」といった具合です。

こちらのリンク先でDanbooruタグを検索することができます。さきほどの「手でハートマーク」を調べたいので、heartと打ち込んでみると、「ハートの形の瞳孔」や「ハート型の髪飾り」などに混じって「heart hands」があることがわかります。

つまづきポイント③「正しいタグが分からない」:図版1

横に「13k」とあるのは、danbooruに登録されている画像のうち約13000枚もの画像にこのタグが付けられているということですので、比較的メジャーなタグと言えるでしょう。学習モデルによってどんな画像を教師データにしているか、ペアになっているテキストデータがどんな表記かは異なるものの、多くの画像につけられているメジャーなタグほどAIが再現しやすい傾向にあるのは確か。逆に、滅多に使われないようなマニアックなタグを入れても、期待通りの画像はなかなか生成できないはずです。

また、img2img画面にある段ボールのボタン(📦:DeepBooru解析)を使うことで、ある画像から予測されるdanbooruタグを検出することができます。やり方は簡単で、タグ検出したい画像をimg2img画面で読み込んで「📦」ボタンをクリックするだけ。少し待つと、ポジティブプロンプト欄に予測されるタグが自動で表示されます。

つまづきポイント③「正しいタグが分からない」:図版2

これは、セーター姿の女の子の画像を放り込んで解析した結果。以下のようなタグが一気に検出されました。

1girl, arm support, bangs, bench, black hair, black legwear, blue eyes, breasts, bush, cable knit, closed mouth, day, dress, eyebrows visible through hair, flower, forest, garden, grass, grey sweater, large breasts, long hair, long sleeves, looking at viewer, nature, outdoors, plant, ribbed sweater, sitting, sky, smile, solo, sweater, sweater dress, thighhighs, tree, turtleneck, turtleneck sweater, white sweater

つまづきポイント③「正しいタグが分からない」:図版3

セーターに関するタグが複数出ているので、そのまま生成に使うというより、この中からお目当てのタグをピックアップして本番生成に使うイメージでしょうか。もちろんAI画像でなくても検出できるので、「こういう概念をどうプロンプトで表現したらいいのか!」と悩んだらこの方法でも解決することが可能です。

danbooruタグについて触れたので、ここで少し脱線。タグ選びに有用な拡張機能を二つご紹介します。

タグのオートコンプリート機能を導入しよう

初心者ほど早めに入れておきたいのが、タグを自動で補ってくれる拡張機能「Booru tag autocompletion」です。

【インストール方法】

拡張機能(Extensions)タブを開く→Available タブを開く→"Load from:" をクリック→リストの中から「Booru tag autocompletion」を探して、右端のインストールをクリック→WebUIを再読込、でインストールできます。

タグのオートコンプリート機能を導入しよう:図版1

インストールに成功していれば、プロンプトを打ち込むとこのようにタグの候補が自動表示されます。上下キーで選んでENTERキーを押すか、クリックすることでプロンプト欄に反映されます(たまに読み込みにタイムラグが生じることがある模様)。学習した画像が多いタグほど上に表示されるので、例えば視線に関する主要タグを探したいときは「look」と打ち込んでみると良いでしょう。

【予備知識① WildcardやLoRAも呼び出せる!】

プロンプト欄に「__」 (ダブルアンダースコア) を打ち込むと、登録してあるWildcardを直接呼び出すことができます。LoRAやLyCORIS、embeddingsを呼び出したい場合は「<」と打ち込んだ後、呼び出したいものの頭文字を打ち込めば自動で候補が表示されます。例えばFLAT2 LoRAを呼び出したければ「<fl」と打ち込めばOK。

【予備知識② Chant(詠唱)って何?】

画像生成のたびに、(masterpiece, best quality, high quality, highres, ultra-detailed)といったクォリティタグの連打をよく使うという人は多いでしょう。オートコンプリートを使って、こうした定番の呪文を一発呼び出しすることもできます。「<」もしくは「<c:」もしくは「<chant:」と打ち込めばOKで、拡張機能の「tags」フォルダ内にあるjsonファイルを参照して、該当するタグ群を一発出しできます。いわゆる「うちの子」を召還する基本プロンプトを何度も過去の生成画像から引っ張ってきている方は、この際Chantとして登録しておくと早いですよ。

詳しいやり方は公式の説明をご覧下さい。