stable diffusionが公開されてから1ヶ月で、waifu diffusionやTrinArtなど、美少女生成に重点を置いたモデルが登場し、当初はpython環境を自前でインストールする必要があったStable diffusionも、AUTOMATIC1111やNMKD GUIの登場によって、簡単に環境が構築できるようになりました。 しかし、環境はできてもその後美少女イラストが生成できるか、というとPromptを作るのにもコツがいりますし、生成された結果を見つつ、どのように修正していくかは使う方のセンスによるところも大きいです。 私なりの使い方について、簡単にメモしてみたいと思います。
私の環境について 生成をスムーズに行うため、VRAM24GBの、GeForce RTX 3090を使用しています。 とにかくVRAMとGPUコアに負荷がかかるので、冷却は最優先です。 玄人志向の4ファンモデルに、さらにVRAM冷却用に2つのファンを追加して使っていますが、常時80℃くらいになります。
RTX3090ですが、後継モデルのRTX 4090がまもなく登場することもあり、かなり安価になっていますので、お買い得になってきたと思います。 とはいえ15万円は超えますので、なかなか手が出せる金額ではありません。 StableDiffusionはVRAMの容量が重要ですので、オススメは12GBのGeForce RTX 3060でしょうか。
VRAMの容量がどのように影響してくるかというと、生成可能な画像サイズに関係します。 標準である512×512ピクセル程度であれば、4~6GBのVRAMでも大丈夫だと思いますが、1280×960といった大解像度になると、VRAMが18GBくらい必要になってきます。 以前はVRAMが足りないと処理が実行できませんでしたが、AUTOMATIC1111などの最近のビルドでは、VRAMが少なくても動作するようになっています。 ただし、VRAMが足りないと一部処理がカットされてしまうようなので、やはりVRAMの容量はできるだけ多く確保しておきたいところです。
では、早速美少女を作る方法に移りたいと思います。 なお、ここではmodelはwaifudiffusionを使っています。 waifuduffusionは下記URLの「Original PyTorch Model Download Link」からダウンロード可能です。
https://huggingface.co/hakurei/waifu-diffusion
ダウンロードしたckptファイルを、model.ckptにリネームし、AUTOMATIC1111であれば\cache\models\model.ckptに設置すれば利用可能になります。
1,参考になるpromptを探す 自力でpromptを作るよりも、良さそうなものを探すのが早いです。 以下のサイトが便利です。
https://lexica.art/
ただ、このサイトはStableDiffusionのmodelで生成されているサンプルになりますので、WaifuDiffusionで出力するとかなり雰囲気が変わるので注意です。
「kawaii」と入力して検索すると、大量のカワイイ画像が表示されます。
この中から、好みの絵を探してみてください。 今回は、これを使ってみたいと思います。
promptですが、以下の通りです。
nekopara fantastically detailed eyes modern anime style art cute vibrant detailed ears cat girl neko dress portrait shinkai makoto Studio ghibli Sakimichan Stanley Artgerm Lau Rossdraws James Jean Marc Simonetti elegant highly detailed digital painting artstation pixiv
2,promptの文字数をチェックする StableDiffusionのtxt2imgは、文字から画像を生成する仕組みですが、文字(Prompt、呪文)には長さ制限があります。 文字列をトークンというものに分解して処理するのですが、トークンの上限は75となっていて、75を超えるものについてはバッサリと切り捨てられます。 公開されているPromptにはトークンが100を超えるものもありますが、意味がありませんので、75に収まるように整えます。
トークンをチェックするのに便利なのが、OpenAI APIというサイトです。
https://beta.openai.com/tokenizer
試しに、先ほどのPromptをチェックしてみましょう。
トークン数は60と出ました。 このサイト、便利なのですが厳密にはstablediffusionのトークンの計算方法と少し違っていて、私が使っている経験則では、OpenAI APIのトークン数が85くらいまではStablediffusionで有効になります。 ですので、このサイトを使う場合は、85を目安として、warningが出たら対応する、というスタンスが良いかと思います。 トークンに余裕がある=服装、ポーズ、ライティングなどに細かい指定が追加できる、ということです。 ちなみに、このサイトで計算されたトークン数ですが、stablediffusionの処理とはイコールではないようで、75を超えていても正常に処理されることもあります。 トークン制限を超えた場合、画像生成後にエラーが表示されるので確認してみてください。 下のメッセージでは、27トークンがオーバーしている状態になっています。
3,まずはそのまま生成テストしてみる どのような画像が生成されるか、テストしてみます。 テストする際の注意点としては、samplingを上げてしまうと処理に時間がかかるので、20~30程度で様子見する、ということと、最終的に出力したい解像度を設定しておく、という2点です。 解像度が変わると同じseedでもまったく違う絵になってしまいますので、たとえば512×640ピクセルなど、出力するサイズをあらかじめ決めておきます。 VRAMに余裕がある場合は、768×1280ピクセルくらいあってもよいかと思います。
高解像度(目安として、長辺が700ピクセル以上)で出力する場合、人物が分離してしまう傾向があります。 これを回避するのがAUTOMATIC1111に備わっているHighres.fixです。 Highres.fixは便利な機能ですが、一度低解像度で生成したものをベースに再度描画をかけますので、処理が重くなることと、低解像度のベースで良い!という絵ができたとしても、一度リセットされて再描画されるので、思ったような絵が得られにくい、というデメリットもあります。 とはいえ、人物が分離してしまうのを回避できるメリットは大きいので、高解像度の出力を行う際には、常に有効にしておきましょう。
samplingを20にして、5枚出力してみました。 seedはランダムにしています。 画像サイズは、縦512px、横768pxにします。 縦が700pxを超えているので、Highres.fixを有効に子、Denoising strengthは0.7にしました。 Denoising strengthについては、以下のツイートを参考にしてください。https://twitter.com/tkaz2009/status/1572155308621074437
なにかよくわからない生物が映り込んでいる画像もありますね…。 さすがWaifuDiffusion、可愛いイラストが生成されています。 なお、ファイル名の5桁の後ろにある数字はシードと呼ばれるもので、この数字を指定すれば、どの環境でも同じ画像が生成されます。 今回生成した画像は、一番左側のものだと
nekopara fantastically detailed eyes modern anime style art cute vibrant detailed ears cat girl neko dress portrait shinkai makoto Studio ghibli Sakimichan Stanley Artgerm Lau Rossdraws James Jean Marc Simonetti elegant highly detailed digital painting artstation pixiv Steps: 20, Sampler: Euler a, CFG scale: 7, Seed: 2124894256, Size: 512×768, Model hash: 8ec5cb0e, Denoising strength: 0.7
となります。
4,要素を足したり引いたりして、好みの画像に近づける それなりに可愛い画像が生成されましたので、好みの画像に近づけていきましょう。 ここでは ・よりイラストっぽく ・目元ぱっちり、もっと可愛く ・髪の毛はウェーブがかったショートカット ・制服っぽい服装 にしてみたいと思います。
イラストっぽくするため、頭にa illustration of kawaii girlを追加します。 顔についてはいろいろなpromptがありますが、 elegant eyelashes:まつげ blush:頬を赤くする あたりを指定し、服装はschool uniform(制服)を指定してみましょう。 髪型はwavy short hairとします。
promptをいじる際は、先ほどのOpenAI APIでトークン数をチェックすると良いです。 いろいろ追加したので、96に増えてしまいましたね。 ですので、不要な部分を削除していきます。 なお、間にカンマが入っていますが、可読性が悪すぎるために、読みやすくするために追加しています。
だいぶいろいろ変わりました。 トークン数も85以内に収まっていますので、これで試してみましょう。
a illustration of kawaii girl in school uniform,from nekopara style, fantastically detailed eyes,elegant eyelashes,blush,wavy short hair,modern anime style,cute vibrant detailed ears,cat girl,portrait,by shinkai makoto Studio ghibli Sakimichan Stanley Artgerm Lau Rossdraws ,elegant,pixiv
実際に試す場合は、上のpromptをコピペしてください。
一気に雰囲気変わりましたね。 最初に指定した、「a illustration of kawaii girl 」がかなり強く効いています。 これ、便利な語ではあるのですが、作風がある程度縛られますので、その点は注意です。
とりあえず5枚出力してみましたが、一番右の、シードが3854870818が良さそうです。
この絵をもっと高精細にしてみましょう。
このように、画像のシード値を指定し、samplingを100にして、1枚生成してみます。 サンプリングを上げると、精細さが増しますが、何度も描画を繰り返すため、上の絵の乖離が大きくなることもあります。
うう…可愛くない。 構図も逆になってしまいました。 そこで、CFG scaleの値を上げることにします。 このCFG scale、値を上げるとよりpromptに忠実になります。 また、CFG scaleが低いとラフ絵のようなタッチになり、高いとペン入れした精細なものになります。 これは絵柄との相性なので、どちらが良いというものではなく、好みでしょう。 今回は、CFG scaleを12にして再生成してみたいと思います。
おお、一気に可愛くなりましたね。 猫耳の位置も良いですが、ショートヘアから耳も見えているのが残念なところです。
このように、samplingとCFG scaleだけでもかなり印象が変わる上に、Highres.fixを使っている場合、Denoising strengthの値によってもだいぶ変わってきます。 今までの経験から言うと、
sampling prompt確認の場合は20~30で生成、気に入ったpromptができたら100で生成。 100以上は時間もかかるので使うことは少ないです。
CFG scale ラフスケッチのような粗めの塗りが良ければ6~7程度の低い値を指定、CGのような高精細さが欲しい場合は12程度。 あまり高くすると破綻する場合が多いので、実質上限20弱くらい? よく使うのは12くらいです。
Denoising strength 値を大きくすると、補正は効くものの、初回生成時のイメージとはまったく別物になってしまうことも。 デフォルト値の0.7だと強い気がするので、0.6前後くらいで使うことが多いです。
といった感じで指定しています。