1.Stable Diffusion本家サイトに掲載されているプロンプトガイドまとめ
・人工知能に良い絵を描いて貰うためには入力プロンプトを工夫する必要がある
・初心者は生のプロンプトを使いがちだがスタイルやアーティスト指定が有効
・プロンプトエンジニアリングで画像の見栄えをよりよく制御する事が可能
2.イラスト生成人工知能により良いイラストを描いて貰う方法
2023年1月追記)Stable Diffusion 2.0以降の新機能に合わせて原文が書き直されていたため、修正しました。
2023年9月追記)プロンプトをあまり意識せずともシンプルに使える「Fooocus」というツールが発表されました。本記事を読んだ後に「Fooocus:最新のイラスト生成AIを使って無料でSNS用のヘッダーを作成する方法」を読むと理解が深まり、且つより高品質な画像を簡単に生成できると思います。
以下、beta.dreamstudio.aiより「Prompt Guide」の意訳で、プロンプトの書き方の入門記事です。元記事の投稿日は不明でGravermanさんによる投稿です。
プロンプト(prompt)とは日本語圏では「イラスト生成AIにイラストを生成して貰うときに与える魔法の呪文」と呼ばれる事もありますが、直訳すると「促す物」であり、どのようなイラストを描いて貰うかを英語で与える指示の事です。
プロンプトを試行錯誤してより良いイラストを生成するための工夫をプロンプトエンジニアリングと言います。プロンプトは使用しているツールによって記法が違ってきてしまうケースもあるため、記法の違いについては付録として巻末に可能な限りまとめてあります。
Stable Diffusionはオープンソース化されて、様々なサービスが立ち上がっているため、モデルを公開してくれた本家提供元の影がやや薄くなってしまっている印象ですが、一番最初に公開した本家はstability.aiという英国に本社がある企業です。
そのstability.aiが提供しているStable Diffusionを使った人工知能による自動イラスト生成サービスがdreamstudio.ai(ベータ版)で、本稿はそのdreamstudio.aiでプロンプトガイドとして紹介されていたページの意訳です。
dreamstudio.aiは訪問すると何の説明もなしに唐突にアカウント登録ウィンドウが表示されてその無愛想さにビビるかもしれませんが、登録に関してメールアドレス以外に必要なものはなく、登録すると2ポンド分(200 generations)の使用枠が貰えます。
使用枠は最初にアカウントを作成したときの1回限りのボーナスであり、DALL·E 2のように補充されることはありませんが、1000 generationsを10ポンド(約1,642円)で購入する事ができます。
512 x 512サイズの画像を50step反復させて画像を生成すると1 generations消費との事なので、ディフォルト設定で200枚作成出来ると言う事ですね。
なお、1024 x 1024サイズを150step反復させた際は28.2 generations消費との事なので解像度を上げると消費が激しいです。
しかし、step数を増やすと細部が書き込まれるようになると言う触れ込みですが、私の経験則上で言うと、顔がぼやけている画像をstep数を増やして再生成させると、顔が綺麗になるのではなく背景がより細かく書き込まれるようになる等の見当違いの方向に行くケースが多く、50step以上増やす意味はあまり感じたことがありません。
また、シードの指定や参照画像指定、in-painting, out-paintingなども出来るようになっているので多機能です。他サイトでStable Diffusionを使って見てどうしてもいい感じのイラストが生成できない場合は登録して試してみる価値はあるかもしれません。
アイキャッチ画像はdreamstudio.aiのWebインタフェース画面
プロンプトエンジニアリングの基礎知識
AIアートの世界に初めて足を踏み入れた人は、プロンプトエンジニアリングが難しく見えるかもしれませんが、最も基本的なことは、あなたが作りたい絵を描くために言葉を使うことです。このガイドでは、基本的なプロンプトのいくつかの要素について説明し、初心者が想像通りにイラストを構築するための強固な基盤を提供します。
この文章を読み、これらの簡単なステップを適用した後、あなたは同じ労力でより良い画像を生成することができるようになるはずです。
プロンプトの要素
1. コアプロンプト
プロンプトの中心的なテーマ、主題、または人物を説明する最も簡単なやり方です。
(1)Panda
(2)A warrior with a sword
(3)Skeleton
シンプルなプロンプトの場合、核となるコアプロンプトを中心に残りのプロンプトが構築されることがよくあります。以下は 1 ~ 3 の例です。
初心者のうちは、こんなシンプルなプロンプトで済ませてしまいたくなるものです。コアプロンプト単体では、新しいDreamStudioのデフォルト設定なら比較的うまく動作することが多いですが、以前のVersionやデフォルト以外の設定では、画質が低下することがあります。
さらに、コンセプト的にはプロンプトと一致していますが、これらの画像はかなり一般的なものです。プロンプトは、もっと具体的であるべきで、その表現は直接的に画像と結びつくものです。
2. スタイル
スタイルは、プロンプトの重要な部分です。AIモデルは、要求されたスタイルを認識できない場合、通常、関連する画像で最も一般的なものをデフォルトとして使用します。
例えば、「風景(landscape)」というプロンプトがあった場合、モデルは現実的な風景や油絵のような風景をスタイルとして選択し、イラストを生成する可能性があります。
効果的なコアプロンプトと一緒によく選ばれたスタイルがあれば、完全に実現されたコンセプトを作るのに十分な場合があります。
最も良く使用されるスタイルには、以下のものがあります。
(1)Realistic(現実的な、リアルな)
(2)Oil painting(油絵)
(3)Pencil drawing(鉛筆画)
(4)Concept art(コンセプトアート)
プロンプトでスタイルを呼び出す方法はいくつかあります。
上記を例にとると、現実的なイメージをプロンプトにする方法は次のとおりです。
(1)a photo of + コアプロンプト
(2)a photograph of + コアプロンプト
(3)コアプロンプト, hyperrealistic
(4)コアプロンプト, realistic
もちろん、これらの修飾を組み合わせて、よりリアルさを追求することも可能ですが、少ない方が良い場合もあるのです。
パンダに上記のそれぞれのスタイルプロンプトを適用してみましょう。
スタイルの説明に戻ると、油絵のようなスタイルの画像が欲しい場合、プロンプトに「an oil painting of [コアプロンプト]」のような表現を追加するとうまくいきます。
この場合、額縁付の油絵が表示されることがありますが、これを解決するには、プロンプトを再実行するか、後述する「負の重み付け」を使用します。
「パンダの油絵(An oil painting of a panda)」
鉛筆画のようなイメージが欲しい場合は、コアプロンプトに「a pencil drawing of」を追加するか、プロンプトを「[コアプロンプト], pencil drawing」にするのが簡単な方法の1つです。
「パンダの鉛筆画(a pencil drawing of a panda)」
風景画(landscape art)も同様です。
「パンダの生息地を描いた風景画(A landscape painting of a panda habitat)」
3. アーティスト
作風をより具体的に、あるいはイメージをより首尾一貫したものにするために、プロンプトにアーティストの名前を使用することができます。例えば、非常に抽象的なイメージにしたい場合は、「in the style of Pablo Picasso(パブロ・ピカソのスタイルで)」または単に「Picasso(ピカソ)」と付け加えるとよいでしょう。
しかし、自分で美術史を研究することをお勧めします。あなたの心を動かす作品の要素について多くを学び、他の方法では決して出会うことができなかったかもしれない多くの素晴らしい芸術や芸術家を発見することができるでしょう。
(1)肖像画(Portrait Artists)
John Singer Sargent (ジョン・シンガー・サージェント)
Edgar Degas (エドガー・ドガ)
Paul Cézanne (ポール・セザンヌ)
Jan van Eyck (ヤン・ファン・エイク)
(2)油絵(Oil Painters)
Leonardo DaVinci (レオナルド・ダ・ヴィンチ)
Vincent Van Gogh (フィンセント・ファン・ゴッホ)
Johannes Vermeer (ヨハネス・フェルメール)
Rembrandt (レンブラント)
(3)鉛筆/ペン画 (Pencil/Pen Illustrators)
Albrecht Dürer (アルブレヒト・デューラー)
Leonardo da Vinci (レオナルド・ダ・ヴィンチ)
Michelangelo (ミケランジェロ)
Jean-Auguste-Dominique Ingres (ジャン=オーギュスト=ドミニク・アングル)
(4)風景画(Landscape Artists)
Thomas Moran (トーマス・モラン)
Claude Monet (クロード・モネ)
Alfred Bierstadt (アルバート・ビアスタット)
Frederic Edwin Church (フレデリック・エドウィン・チャーチ)
注:画家の名前を同時に2つ以上指定する事で、呼び出されたどの画家も作ったことのないような面白い見た目のアートができることがあります。
「レオナルド・ダ・ヴィンチとフレデリック・エドウィン・チャーチが描いたパンダの油絵(An oil painting of a panda by Leonardo da Vinci and Frederic Edwin Church)」
4. 仕上げの作業
仕上げとは、プロンプトに追加される要素で、本当に自分が思い描いたとおりの外観にするためのものです。これは、人によっては極端になりがちな部分です。
例えば、より芸術的な(artistic)イメージにしたい場合は、「trending on artstation」を追加します。よりリアルな光源を追加したい場合は、「Unreal Engine」を追加します。より高度なプロンプトでは、さらに複雑になりますが、それはこのガイドの範囲外です。
何を加えても良いのですが、以下に例を挙げます。
Highly detailed(高精細), surrealism(シュールレアリズム), trending on art station(アートステーションの流行), triadic color scheme(トライアディック配色), smooth(スムーズ), sharp focus(シャープフォーカス), matte(マット), elegant(エレガント), the most beautiful image ever seen(今まで見た中で最も美しい画像), illustration(イラスト), digital paint(デジタルペイント), dark(ダーク), gloomy(陰鬱), octane render(オクタンレンダー), 8k, 4k, washed colors(ウォッシュドカラー), sharp(シャープ), dramatic lighting(ドラマチックライティング), beautiful(美しい), post processing(ポストプロセス), picture of the day(今日の一枚), ambient lighting(環境照明), epic composition(叙事詩的構図)
「レオナルド・ダ・ヴィンチとフレデリック・エドウィン・チャーチによるパンダの油絵、高精細、ドラマチックなライティング(An oil painting of a panda by Leonardo da Vinci and Frederic Edwin Church, highly-detailed, dramatic lighting)」
先進的機能1 ネガティブプロンプト
DreamStudioの新機能です。
ネガティブプロンプトは、プロンプトの反対語で、ユーザーがモデルに生成してはいけないものを指示することができます。ネガティブプロンプトを使うと、しばしば、つぶれた手や多すぎる指、ピンぼけやぼやけたイメージなどの不要な効果を排除する事ができます、
DreamStudioでは、プロンプト内に | を追加し、その後に「単語」と「:-1.0」を加えるとはネガティブプロンプトと見なされます。
例えば、「| disfigured, ugly:-1.0, too many fingers:-1.0」を追加すると、「損なった, 醜い:-1.0、指が多い:-1.0」とネガティブプロンプトを設定しているため、イラスト内の指が多すぎるという問題が修正されることがあります。
先進的機能2 プロンプトの重みづけ[DreamStudioの新機能!]
DreamStudioの新機能です。
プロンプトの重みづけ(prompt weighting)を使用すると、ユーザーは、特定の色、物体、属性など、構図内の特定の要素をより多くまたはより少なくするようモデルに指示することができます。
標準的なプロンプトから始めて、プロンプトの重みづけ機能で画像全体の構成要素を増減させることで、画像合成をより自在にコントロールすることができます。
上図はDreamStudioで、同じプロンプトを「ネガティブプロンプトなし(左)」と「ネガティブプロンプトあり(右)」で並べて比較したものです。この例ではネガティブプロンプトに「tree, bush, woods, branches, green, forest:-5.0」(木、茂み、葉、緑、森)を指定し、イラスト内で植物を目立たなくするようモデルに指示しています。
重みが「1」であれば、完全な正の重みです。重みが「-1」の場合は、完全な負の重みです。プロンプトの影響力を1より弱めるには、小数を使用します。
たとえば、「A professional color photograph of a bearded man on the sidewalk, fujifilm : 1 | centered : 1(歩道にいる髭面の男のプロフェッショナルなカラー写真、富士フィルム:1 | 中央揃え : 1)」というプロンプトは、歩道にいる髭面の男ではなく、単なる中央揃えのイラストをよく産出してしまいます。
これを軽減しつつ、目的の「中央揃え」要素を保持するには、「中央揃え」プロンプトの重さを「ひげ男」プロンプトより小さくすればよいのです。これは、1より小さい小数を使用することで実現します。
「A professional color photograph of a bearded man on the sidewalk, fujifilm : 1 | centered : 0.5」
もし、「ひげ男(bearded man)」に対して「中央揃え(centered)」の比重をさらに小さくしたい場合は、さらに小さな小数点を使用することができます。「A professional color photograph of a bearded man on the sidewalk, fujifilm : 1 | centered : 0.1」
プロンプトの重み付けをオフにするには、プロンプトを || で開始します。
プロンプトの重み付けがDreamStudioによってどのように解釈されているかを確認するには、プロンプトのテキストボックスの上にあるアイコン()をクリックします。下図のようにポップアップが表示され、プロンプトが現在どのように重み付けされているかが表示されます。
結論
プロンプトエンジニアリングを使いこなすと、画像がどのように見えるかをよりよく制御することができます。正しい方法で行えば、画質と構図を大幅に改善できます。
stability.aiのスタッフより、Gravermanさん、ありがとう!
付録:WebBigDataによる追記
先進的な機能として紹介されている「ネガティブプロンプト」及び「プロンプトの重みづけ」はstability.aiが提供している有料Webサービスdreamstudio.aiを使った時の記法です。
その他のツールやWebサービスでは微妙に書き方が違う時があるので以下で解説します。
まず、昔のツールやサービスではそもそもプロンプトしかなかったです。そのため、プロンプト内の個々の単語は全て同列で同じ扱いでした。
しかし、最近のツールは「他の単語より重視して欲しい単語」、「参考程度にとどめておいて欲しい単語」もしくは逆に「取りこまないで避けて欲しい単語(ネガティブプロンプトと言います)」など単語毎に重み、つまり重要度を柔軟に指定できるようになっています。
その重要度の指定の仕方の記法が、ツールによって異なるケースがあって、混乱を招きそうなので、以下にまとめておきます。ネット上で見つけたプロンプト内に()や[]や{}等の記号が入っていたら、以下のいずれかのツールの使用が前提になっている可能性があります。
AUTOMATIC1111を使用している場合
ブラウザ上でStableDiffusionを実行できるので人気の高いAUTOMATIC1111では以下の記法で各単語の重みを指定できます。
余談ですが、AUTOMATIC1111の正式名称は「stable-diffusion-webui」というのですが、名前があまりに汎用的すぎて混乱を招くので開発者のアカウント名である「AUTOMATIC1111」で呼ばれる事の方が多いです。英語圏だと「auto」と省略される事もあります。ちなみに読み方は「オートマチックワンワンワンワン」や「オートマチックイレブンイレブン」など、これも人によってバラバラです。
(word) | wordの重みを1.1倍に増やす |
((word)) | wordの重みを1.1 x 1.1倍、つまり1.21倍に増やす |
[word] | wordの重みを1/1.1倍、つまり0.9倍に減らす |
(word:1.5) | wordの重みを1.5に増やす |
(word:0.25) | wordの重みを0.25に減らす |
\(word\) | プロンプト内で()を使いたい時は\を前に置く |
※ []を使って重みを数字で指定する事できません。(例:[word:1.5]は指定が無視される)
また、AUTOMATIC1111では、プロンプトの中で追加のニューラルネットワークを使用する事が出来ます。これらの追加ネットワークは有名どころだけでもLoRA、Textual Inversion(Embedding)など様々な種類があり、特定のキャラクターを描けるようにしたり、画風を合わせるために使用する事が出来ます。
特にEmbeddingはファイル名をプロンプト内に直接書く事で使用するので単語と見分けがつきません。もし、見たことがない単語があり、英和辞書にも存在しなかった場合、それはEmbeddingの可能性がありますのでGoogle検索等で検索してみましょう。有名どころだとネガティブプロンプト内に入れて使用する「EasyNegative」などがあります。Embeddingはmodels/embeddingsの配下にコピーし、拡張子を除く部分をプロンプト内に書く事で使用します。
LoRAはプロンプト内で<>で括られて<lora:lora_teto:1>のようにして表記されるため、比較的わかりやすいですが、実は亜種が2つ存在し、それらを使用するためには拡張機能を別途インストールが必要になるケースがあります。
更には<lora:lora_teto:1:MIDD>や<lora:lora_teto:1:1,0,0,1,0,1,0…>等の謎の文字列や連続する1と0が追加されているケースなども見かけると思いますが、それはsd-webui-lora-block-weightと言う拡張機能で更にLoRAを細かく制御しているイラストです。
ComfyUIを使用している場合
次世代版Stable DiffusionであるStable Diffusion XL(SDXL)を比較的簡単に動かす事ができるために注目を集めているComfyUIですが、ほぼAUTOMATIC1111の記法を踏襲しています。しかし、[word]で重みを減らす記法だけは対応していません。
NovelAI(NAIと省略表記される事が多いです)を使用している場合
NovelAIはStable Diffusionをベースに作成されたアニメ調のイラストが得意な人気の高いモデルです。こちらも有料サービスを展開しており、このサービス内でも記号の使い方が微妙に違います。
{word} | wordの重みを1.05倍に増やす |
{{word}} | wordの重みを1.05 x 1.05倍、つまり1.1025倍に増やす |
[word] | wordの重みを1/1.05倍、つまり0.952倍に減らす |
[[word]] | wordの重みを1/(1.05 x 1.05倍)、つまり0.9倍に減らす |
InvokeAIを使用している場合
InvokeAIでは以下の記法で各単語の重みを指定できます。
word+ | wordの重みを1.1倍に増やす。+は連続させる指定が可能 |
word- | wordの重みを1.1倍減らす。-は連続させる指定が可能 |
[word] | wordをネガティブなプロンプトとして扱う |
(word)1.2 | wordの重みを1.2倍にする。wordは()でくくって複数単語を指定する事が可能 |
その他のサービス/ツールを利用している場合
個々の単語の重みづけを指定する機能がそもそも実装されていないケースも多いです。しかし、入力してもエラーにはならないで単に無視されるだけなので有効になっていない事に中々気づけないかもしれません。
場合によっては「プロンプト」を入力する箇所と「ネガティブプロンプト」を入力する箇所がわかれており、「ネガティブプロンプト」に入力した単語に一律で負の重みづけがされる場合があります。
しかし、更に古くからあるサービスですと「ネガティブプロンプト」も実装されていないケースがあります。
プロンプトをもっと詳しく知りたい方向けの更なる参考情報
プロンプトをもう少し深く知りたい方は以下の記事なども参考にしてください。
・stable diffusionに同じ絵を描いて貰うためにはどうすれば良いか?
・DAAM:生成した画像のどの部分にプロンプトが効いているのかを可視化する
・instruct pix2pix:プロンプトだけを使ってAIでイラストの修正を行う
SDXL用のプロンプトについては「Fooocus:最新のイラスト生成AIを使って無料でSNS用のヘッダーを作成する方法」で184プロンプトを解説しています。
これからプロンプトと言う技術がどうなっていきそうかを知りたい方
プロンプトという概念はイラスト生成AIだけではなく、chatGPTなどの対話用AIでも使われています。対話用人工知能におけるプロンプトも「言葉を使ってAIから有用な出力を得ようとする工夫」と言う点では共通で、より良い回答を引き出すために言い回しや入力形式の研究が進んでいます。
両者はあまり関係がないように見えますが「AIを使ってAIを操作する手法」例えば対話用AIにイラスト生成AI用のプロンプトを作って貰う手法も研究が進んできているので、興味を持った方は以下も一読をお勧めします。
また、呪文のような複雑なプロンプトではなく文章自体の表現力をあげようと言う試みもあります。
・rich-text-to-image:イラスト生成AI向けのプロンプトをリッチテキスト形式にして表現力を向上
Stable Diffusionについてもっと詳しく知りたい方
まだ実際に動かす事が出来ていない方は「これからイラスト生成AIを始めてみたい方向けの入門記事」や「無料で最新のイラスト生成AI動かせて割と空いているWebページの一覧」を参考にしてみてください。
また、以下のページにWebbigdata内のStable Diffusion関連の記事へのリンクをまとめてあります。
3.Stable Diffusion本家サイトに掲載されているプロンプトガイド関連リンク
1)beta.dreamstudio.ai
Prompt Guide
2)twitter.com
@dailystablediff