前回記事「話題の画像生成AIで実写みたいな絵を作る!Stable Diffusionで「BRAV5」を使う方法」では、リアルな画像が作れるAI作画モデルの「BRAV5」が動作する環境をGoogle Colab上に構築するまでの方法を紹介しました。
今回は実際にBRAV5でどうやって思い通りの画像を作るかというところを掘り下げていきます。最終的には美女の作画に強いBRAであえておじさんを作るところまでやってみましょう。
Stable Diffusionでは文章から画像を生成することができる「text2image」という機能があります。AIで画像を生成する際はこの機能を基本として用いているのです。
ここで入力する文章を「プロンプト」といいます。このプロンプトのコツを押さえることで、思い通りの画像に仕上げていきます。
今回は実際にBRAV5でどうやって思い通りの画像を作るかというところを掘り下げていきます。最終的には美女の作画に強いBRAであえておじさんを作るところまでやってみましょう。
Stable Diffusionでは文章から画像を生成することができる「text2image」という機能があります。AIで画像を生成する際はこの機能を基本として用いているのです。
ここで入力する文章を「プロンプト」といいます。このプロンプトのコツを押さえることで、思い通りの画像に仕上げていきます。
プロンプトの基本
まずは女の子の画像を生成してみましょう。「girl」だけで生成してみます。
![](https://cdn.clipkit.co/tenants/943/item_images/images/000/013/531/large/23533255-9630-4171-a816-6e183c8b859e.png?1691367137)
では、メガネをかけた女の子を出すにはどうするか。メガネを意味する単語の「glasses」を追加して「girl , glasses」にしてみましょう。
![](https://cdn.clipkit.co/tenants/943/item_images/images/000/013/533/large/34c343ea-426b-486d-b6b5-b267f0e7c186.png?1691367163)
メガネをかけた女の子の画像を出してくれました。「A girl with glasses」と英語としてより正確にしても、逆に「girl glasses」のようにカンマがなくても、メガネをかけた女の子の画像は生成されます。
この連載の中では英語の知識があまりいらず、意味の境目がカンマでわかりやすくなるように、フレーズ(句)単位のカンマ区切りで記述していきます。
この連載の中では英語の知識があまりいらず、意味の境目がカンマでわかりやすくなるように、フレーズ(句)単位のカンマ区切りで記述していきます。
画像生成のもとになる乱数の種「シード」を固定する
上の2枚、同じ人がメガネをかけたようには見えませんよね。そこで、なるべく同じ雰囲気になるようにしてみましょう。
実は同じプロンプトを入力しても、生成する度に異なる画像が出てきます。そこで毎回同じ画像が出るようにする方法を、「シードを固定する」と呼びます。
「シード(Seed)」とは、AIが画像生成のもとになる乱数の「種」となる数値です。
シードをはじめとした設定の条件が全て同じであれば、何度ボタンを押しても同じ画像が生成されます。
このシードを固定してみましょう。シードは以下のようにしてわかります。
生成した画像をクリックします。
実は同じプロンプトを入力しても、生成する度に異なる画像が出てきます。そこで毎回同じ画像が出るようにする方法を、「シードを固定する」と呼びます。
「シード(Seed)」とは、AIが画像生成のもとになる乱数の「種」となる数値です。
シードをはじめとした設定の条件が全て同じであれば、何度ボタンを押しても同じ画像が生成されます。
このシードを固定してみましょう。シードは以下のようにしてわかります。
生成した画像をクリックします。
![](https://cdn.clipkit.co/tenants/943/item_images/images/000/013/537/large/2d58b27f-9b84-4961-8761-751f49f36ee3.png?1691367212)
そうすると、以下の場所にシード(Seed)の数値が表示されます。
![](https://cdn.clipkit.co/tenants/943/item_images/images/000/013/539/large/2aae46c6-04df-4041-9970-da3199ad4143.png?1691367236)
最初の「girl」の時のシードをコピーします。
同じシードを使うにはこの数値をコピーして、Web UIの以下の欄に貼り付けてください。
同じシードを使うにはこの数値をコピーして、Web UIの以下の欄に貼り付けてください。
![](https://cdn.clipkit.co/tenants/943/item_images/images/000/013/541/large/1d4429a0-02eb-49c9-926e-8af14a86d653.png?1691367270)
ここで「GENERATE」ボタンを押しましょう。
同じ画像が生成されるようになりましたね。
では、このシードを固定して「girl , glasses」で生成してみましょう。
同じ画像が生成されるようになりましたね。
では、このシードを固定して「girl , glasses」で生成してみましょう。
![](https://cdn.clipkit.co/tenants/943/item_images/images/000/013/543/large/876fbce6-2add-4804-a1bc-4634262d2549.png?1691367371)
先ほどのメガネ画像よりは1枚目の画像に近いですね。シードを固定して画像を生成すると、プロンプトに変化があっても似たような画像になりやすくなります。ただ、完全に同一人物になるわけではないのでご注意ください。シードを固定しても全然違う画像になることはよくあります。
出てほしくない要素を排除する「ネガティブプロンプト」
プロンプトに単語を追加していくと、特に出てほしくないものが画像に出てくることがあります。
「girl, katana」で出力してみましょう。
「girl, katana」で出力してみましょう。
![](https://cdn.clipkit.co/tenants/943/item_images/images/000/013/547/large/f6643639-1790-49f5-94da-4c68869bc220.png?1691367416)
刀の形が微妙におかしくはありますが、刀を持った女の子になりました。ただ、プロンプトにないものが出てしまっています。プロンプトでは指定しなかった着物を着てしまっているのです。
これは刀を持った人物の画像の多くが着物を着ているためと思われます。服をプロンプトで指定することで着物じゃなくすることもできますが、ここではネガティブプロンプトを使ってみましょう。
プロンプトでは画像に出したいものを記述していました。それに対して、ネガティブプロンプトは画像に出したくないものを指定するためのものなのです。
ネガティブプロンプトはWeb UIのここで記述できます。
これは刀を持った人物の画像の多くが着物を着ているためと思われます。服をプロンプトで指定することで着物じゃなくすることもできますが、ここではネガティブプロンプトを使ってみましょう。
プロンプトでは画像に出したいものを記述していました。それに対して、ネガティブプロンプトは画像に出したくないものを指定するためのものなのです。
ネガティブプロンプトはWeb UIのここで記述できます。
![](https://cdn.clipkit.co/tenants/943/item_images/images/000/013/549/large/ad1c556a-8921-4283-9c2a-b2dc254aa8de.png?1691367445)
着物は「kimono」で指定できるので、「kimono」と書いてみます。
![](https://cdn.clipkit.co/tenants/943/item_images/images/000/013/551/large/49d59f50-50e8-4c7a-82e2-2e238346c458.png?1691367475)
着ている服が着物からTシャツに変わりました。
他によくありがちなのが、生成される画像に意味不明の文字が入ることです。
これは「girl, coat, smiling, poster」で出力したものです。
他によくありがちなのが、生成される画像に意味不明の文字が入ることです。
これは「girl, coat, smiling, poster」で出力したものです。
![](https://cdn.clipkit.co/tenants/943/item_images/images/000/013/553/large/ecccdcf7-b23d-4d0d-b11d-5742b5806a93.png?1691367505)
左下に意味不明な文字が出ています。「poster」と入れたのでポスターに書かれた文字が出てきてしまったものと思われます。これもシードを固定してネガティブプロンプトに「text」と入れてみましょう。
![](https://cdn.clipkit.co/tenants/943/item_images/images/000/013/555/large/0a6c31cd-e1a8-4148-b94a-61ccb402eee1.png?1691367531)
コートの色合いや髪型まで変わってしまいましたが、画像内の文字は消えていますね。
画像に出てくる文字には「サイン」なども含まれるので、文字を消したい時は「text, signature, watermark」と入れておくとよいでしょう。
「画像を基本的に変えず、ただ文字だけ消したい」という場合も当然あると思います。この場合は「inpainting」という機能を用いると便利です。inpaintingについては今後の連載で取り上げる予定です。
画像に出てくる文字には「サイン」なども含まれるので、文字を消したい時は「text, signature, watermark」と入れておくとよいでしょう。
「画像を基本的に変えず、ただ文字だけ消したい」という場合も当然あると思います。この場合は「inpainting」という機能を用いると便利です。inpaintingについては今後の連載で取り上げる予定です。
表示されにくい要素を引っ張り出す「強調」
より服装を細かく指定するために「メガネをかけて、帽子をかぶって、着物を着て、刀をもった女の子」を作ってみましょう。プロンプトは「girl , glassses , cap, kimono, katana」です。
![](https://cdn.clipkit.co/tenants/943/item_images/images/000/013/559/large/260aafc2-cd88-4055-a2c5-66885e64fdd5.png?1691367591)
メガネと着物は出てきていますが、刀と帽子が出てきていません。このように、プロンプトに書いても画像に反映されないことはよくあることです。
こんなときに役立つのが強調です。使い方は簡単でカッコ () でくくるだけ。例えば帽子なら、(cap:1.1)のように記述することで、数値で強調度合いを調整できます。(cap:1.0)が強調なしの標準状態。(cap:1.1)だと1割強めて、(cap:0.9)では1割弱めます。弱める記述は[]で括って書くこともできます。
今回は画像に出てきていないcapとkatanaを強調するために、「girl , glassses , (cap:1.1), kimono, (katana:1.1) 」と記述してみました。
こんなときに役立つのが強調です。使い方は簡単でカッコ () でくくるだけ。例えば帽子なら、(cap:1.1)のように記述することで、数値で強調度合いを調整できます。(cap:1.0)が強調なしの標準状態。(cap:1.1)だと1割強めて、(cap:0.9)では1割弱めます。弱める記述は[]で括って書くこともできます。
今回は画像に出てきていないcapとkatanaを強調するために、「girl , glassses , (cap:1.1), kimono, (katana:1.1) 」と記述してみました。
![](https://cdn.clipkit.co/tenants/943/item_images/images/000/013/561/large/2af6827a-36b5-4b3a-95bf-9df3c2936109.png?1691367618)
ちょっと目つきが悪くなっていますが、帽子と刀が出てきました!
![](https://cdn.clipkit.co/tenants/943/users/images/000/000/063/avater_lg/80a5b1cb-bcf0-4b22-9d6c-8434907459e4.jpg?1687498343)
小泉 勝志郎
株式会社テセラクト 代表取締役社長
シニアプログラミングネットワーク代表
震災復興活動の中で海藻・アカモクをモチーフにつくったキャラクター「渚の妖精ぎばさちゃん」を運営。Appleの開発者カンファレンスに「81歳のアプリ開発者」として招待された若宮正子さんへの教育をきっかけに、高齢者向けのプログラミング教育にも力を入れ、現在はコミュニティ「シニアプログラミングネットワーク」を運営する。2023年3月「第1回AIアートグランプリ」において「渚の妖精ぎばさちゃん」をテーマにした漫画で準グランプリを受賞するなど、生成AIにも造詣が深い。