waifu diffusionとAUTOMATIC1111を使って美少女を描くコツとか

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前後くらいで使うことが多いです。

といった感じで指定しています。

Stable Diffusionで”カワイイ”を描こう!

Stable Diffusionの公開と同時に職人…というかマジックキャスターの方々が次々と素晴らしい呪文を開発してくださるので、あっという間にStable Diffusionで”カワイイ”を描くのが簡単になりつつあります。
といっても、得意なのは顔と服で、顔は呪文が当たるとバストアップショットであればほぼ崩れなくなりますが、全体のポーズだとどうしても打率が低くなりがち。
また、手先・足先はかなり厳しく、ビキニのように露出度が高い服だと、胸のラインなどもかなり微妙な感じです。
全体の雰囲気は良いのに、どこかがガッカリ…ということも多く、多数の画像を生成し、奇跡の1枚を発掘するという作業が主になってきます。

しかし、顔が崩れているけど、構図や背景との組み合わせが素晴らしい絵とかって結構あるんですよね。

・ポーズ
・衣装
・顔や指などのディティール
・背景
などのイラストの要素のうち、どれかを諦めれば結構良さげなイラストを生成してくれます。
では、お気に入りのイラストをどうやって生成するかというと…諦めた要素は描いてしまえば良いのです。

さて、この1枚ですが、構図も良く、服も可愛くて言うことなし…なのですが、両手が怪しいのと、瞳がダメですね、これ。
というわけで、手を加えて直していってみたいと思います。

使用するツールは何でも良いのですが、使い慣れたPhotoshopを使います。
また、タブレットは必須だと思います。
私は、昔買って使ってなかった、intuos CTH-680を引っ張り出してきました。
Wacomのドライバーからはデバイスが見つかりません、と文句を言われますが、OS標準ドライバで動いているので良しとします。

まずは顔ですが…

 

こいつはいけません。瞳が死んでます。
ということで、
・瞳のハイライトを入れる&ディティール描き込み
・鼻と口もついでに書き換え
してみたいと思います。

瞳を書き直してみました。
瞳の輪郭を強調し、ハイライトを入れただけのお手軽作業です。

だいぶ雰囲気が変わってきました。
あとは、顔の輪郭が気になるのと、眉毛がないので足してみましょう。

だいたいできあがってきました。
あとは、何本か細い髪の毛を描き足して、ディティールを精細にします。

とりあえず、これで完成としましょう。
コツは、1pxの細いブラシで描いていくことです。
もともと低解像度のため、太いブラシだと違和感が残ってしまいます。

あとは、こうなってしまっている手を…

こんな感じに適当に書き直して…

完成したのがこちら。
左がafter、右がbefore。
この解像度であれば、まあ、あまり違和感はないでしょう。

 

というわけで、StableDiffusionが出力した、惜しいイラストを加筆して可愛くする方法のご紹介でした。

Windows11にStable Diffusionをインストールして、二次元的な絵を作ってみる

無料公開されたStable Diffusion、至る所で話題になってますね。
私も早速Windows11環境に導入してみました。
NVIDIAのビデオカードを使っているPCがあれば、ローカル環境で動かすことが可能です。
※ビデオカードが無くても大丈夫な方法もありますが、割愛。

導入方法ですが、仮想環境を使う、anacondaをインストールして使うなどいろいろな方法がありますが、一番簡単な方法は下のリンクにある方法でした。
ZIPアーカイブをDLして解凍、あとは若干の作業で動かすことができます。
gitでの操作が必要ですが、git for Windowsをインストールして、git clone URL…でソースコード一式をDL可能ですので、複雑ではありません。

img2imgとその他全部盛りのツールをローカルで動かそう[StableDiffusion]

私のPCは以下の環境となります。

  • Core i7-12700KF
  • GeForce GTX1080(VRAM 8GB)
  • Windows11

エラーが出るときは

Promptの一部をフォルダ名にしているため、Windowsのパスの文字制限に引っかかってしまうことがあるようです。
その場合は、以下の方法で文字制限を解除できますので、お試しください。

【Windows】パスの260文字制限の解除方法

テキスト(Prompt)で絵を描いてみる

Stable Diffusionですが、絵を描くのに2つの方法があります。

txt2img:Promptと呼ばれるテキストを元に絵を生成する
img2img:元になる絵にPromptのテキストを適用し絵を生成する

サンプルを元に、見ていきたいと思います。

まずは、Promptと呼ばれるテキストで絵を描いてみましょう。
Promptは慣れが必要ですが、以下のサイトを見つつ、気に入った絵を出力するPromptを元に、テキストを入れ替えてみるのがいいと思います。

Lexica

とりあえず、生成した結果を見ていきましょう。
使用したPromptは以下となります。

A princess with silver hair and black gothic lolita dress, fairy tale style background, a beautiful half body illustration, top lighting, perfect shadow, soft painting, reduce saturation, leaning towards watercolor, art by hidari and krenz cushart and wenjun lin and akihiko yoshida,highly detailed, elaborate, digital painting hyper quality

上記で、どのような絵が生成されるかというと…

すげえですな…。
ちなみに、Promptでどんな指定をしているかというと、

A princess →女性キャラクタ。girlでもいいけど、princessの方が好印象な場合が多いっぽい
with silver hair →髪の毛の色指定
and black gothic lolita dress, →服装指定
fairy tale style background, →背景指定。妖精っぽい感じ。なので、たまに羽根が付いている絵が。
a beautiful half body illustration, →上半身を中心としたイラスト
top lighting, →照明指定
perfect shadow, →影生成指定
soft painting, reduce saturation, →画質指定
leaning towards watercolor, →色味指定
art by hidari and krenz cushart and wenjun lin and akihiko yoshida, →絵師などを指定すると絵柄が寄る
highly detailed, elaborate, digital painting hyper quality →画質指定

といった感じです。

Promptの指定については、以下のサイトが参考になります。

AI画像生成ツール「Stable Diffusion」のコツまとめ(text2image)
Deepl(英語翻訳用)

ちなみに、Stable Diffusionは正方形で学習しているようで、作成する寸法も正方形が一番精度が高いようです。

画像を元に絵を描いてみる

指示用のラフ絵を元にイラストを生成している記事は多数ありますので、ちょっと方向を変えて、自作のイラストを別のテイストにできるか実験してみました。
指示用のラフから好みの絵を作成する方法は、下のサイトがわかりやすいです。

Stable Diffusionのimg2imgで好みの絵を作成するまでの過程

ラフの線画を加工してみる

20年以上前に描いたイラストがあるので、引っ張り出してみることに。
テストで使ったのは、以下の画像になります。

さて、こいつを元に適当にPromptを設定して生成してみると…

おおお…手書きのタッチまで再現されてますよ!すげえ!
しかも、オリジナルより可愛くなってきる気もする…!!
服の一部が髪の毛になったり、腕が怪しいことになっていたりしますが、それにしても凄いですね。

着色したラフ画を加工してみる

お次は、ラフに着色したこいつを。

コツは、Classifier Free Guidance Scale (how strongly the image should follow the prompt)を強く設定するとペン入れしたような絵柄になり、低く設定するとラフスケッチの線画がそのまま生きた状態になります。
さて、この絵にもPromptを設定して生成してみると…

なんと…一部怪しくなってるパーツもありますが、レースやヘッドドレスの細かさが半端ない!
ちなみに、カチューシャではなく花のヘッドドレスになっているのは、Promptにflower bloomingを指定している影響と思われます。
適当に手を抜いて描いたフリルがすごい細かくなってるし、ストッキングの質感がまた素晴らしい…。
いやあ、楽しい。

20年以上前のイラストでも、AI処理すれば今時っぽくなるものですなぁ…。

ポーズ人形をイラストに変換してみる

お次の実験は、こちら。

イラストを描く際の強い味方、ポーズ人形。
これをimg2imgで、一気にイラストにしてみたいと思います。

これは…!
ポーズ人形を用意しておき、好きなポーズにして写真を撮って、Stable Diffusionで処理するだけで、いろんなイラストが出力されてしまうとは…恐るべし。
しかも、衣装もいろんなバリエーションがあって面白いですね。
このあたりはPromptを設定するといろいろいじれそうです。
しかし…一番左側のイラストとか、AIが一発生成したとは思えないレベルです。
腕のポーズが異なっているのは、Denoising Strengthを強めに設定したことで、元のポーズ人形と比べて自由度があるためです。
Denoising Strengthを弱め(0.4とか)に設定すると、同一ポーズの画像のみが生成されます。

なお、生成した際のPromptですが、最初に説明しているサイトで紹介されているものを使うと、画像と同じフォルダにyamlファイルが生成され、その中にテキストとして記録されていますので、後から同じ設定で画像を生成する際に便利です。

それにしても、Stable Diffusion、恐るべし…!


Prompt指定個人的メモ

メモっておかないと忘れるので…。

アニメ風にするか、3D風にするかは服装によっても異なってくる

たとえば、服装の指定のみ変更したPromptで生成した以下2枚ですが、かなり雰囲気が異なります。

かなり極端な画像を抽出していますが、左は「white silk Ruffled apron, white silk Ruffled Skirts,
black Maid Clothes, black Ruffled Headdresses, Knee-Length Long black Skirts」、右は「silver hair and black gothic lolita dress」を指定して生成したもの。
おそらくですが、Maid Clothesを入れると、いわゆる“メイドさん”のイラストが多く、よりアニメ絵に引っ張られるような気がします。
あとは、服装を指定する語が多すぎて、後ろのほう(60語を超えたあたり?)は無視された結果かもしれませんが…。

出力サイズを大きくするならRealESRGANを使おう

VRAM8GBの環境では、576×576px程度の出力が限界です。
画像を引き伸ばすのであれば、Upscale images using RealESRGANにチェックを入れると、大きめの解像度の画像が出力されます。
その際、Save individual imagesにチェックが入っているとオリジナルサイズも出力されてしまうので、こちらのチェックは外しておきましょう。
※RealESRGANは別途インストールが必要です。

Stable Diffusionを使うには、最低VRAM8GBは欲しい

Stable Diffusionを使うには、NVIDIAのビデオカードがほぼ必須なのは、最初に説明したとおりです。
これは、AIの処理にNVIDIAのビデオカードの機能を使っているためで、ATIのビデオカードでは残念ながら動作不可となります。
私はGeForce GTX1080でStable Diffusionを使っていますが、8GBのビデオメモリだと512×512pxの画像を出力するのでほぼギリギリです。

出力処理中のGPUリソースですが、ビデオメモリがほぼ100%使っているのがわかります。
VRAM容量をオーバーするとエラーを出して止まってしまいます。
Stable Diffusionを使い倒すのであれば、できれば12GBのビデオメモリを搭載したビデオカードが欲しいところです。



いろいろなテイストの絵を描かせてみる

今まで生成したイラストのうち、気に入っているものをご紹介。
主に、LexicaやTwitterなどで公開されている呪文を軸に、ワードの入れ替え、追加を行って生成しています。

どれも同一Prompt。2枚目は、顎が角張っていたので修正しています。
両方とも同じPromptから。有名なアーティストの方のTwitter IDが指定されているので、変更することで絵柄を変えられそうです。
顔を整える部分は応用が利きそう。

同じPromptで、横長にしてみたのがこちら。

絵柄の安定っぷりが恐ろしい…
アーティスト指定は絵柄が安定する反面、そのまんまの部分があるので、AIに描かせるという点では卑怯かもしれません。

1枚目は、顔と腕に加筆してますが、かなり気に入っている1枚です。
生成Promptとseedは保存してあるので、解像度あげて生成してみますか。
ちなみに、縦横比を変えると、全く別物の画像になってしまうので要注意です。

もう少し、アニメ塗りっぽくしてみたのがこちら。
フリルがなんともたまりません。