[Stable Diffusion]今流行のFlat LoRAを使ってAI絵のディティールを上げてみる

しばらくブログの更新をほったらかしにしていますが、忙しいのもありますがAI絵生成で遊んでいる、というのもあり…。
最近使ってみたLoRAのFlatとLitが凄い便利だったので、記事にまとめてみました。

今回の被検体はこちら

今回被検体になってもらう女の子はこちらになります。

Promptはシンプルに、以下で設定しています。

1girl,(solo),gothic lolita maid costume,cute pose,in antique coffee shop
Negative prompt: EasyNegative,badhandv4
Steps: 50, Sampler: DPM++ SDE Karras, CFG scale: 6.5, Seed: 16777216, Size: 768x1024, Model hash: 0e7a229ed3, Model: breakdomain_M1808, Clip skip: 2

このままでも十分に可愛いですね。
基本的なPromptは変えずに、いろいろいじってみましょう。

LoRA「Flat」を試す

Flatはその名の通り塗りを平面的にするのですが、マイナス数値を指定すると、逆に凹凸が増してディティールアップに繋がるという使い方が出来ます。
LoRAの強度をマイナスにする発想、凄いですねぇ…。

<lora:flat2:-0.6>

おお、凄い、一気にディティールが上がりましたよ。
このLoRA、便利ですが強度をどれくらいにするかは絵柄と相談です。
だいたい-0.4~0.6くらいが良さそうな感じです。

FlatにはFlatとFlat2の2つがあり、元絵に対する影響も異なります。

<lora:flat:-0.6>

こちらはFlatを使った場合のサンプル。
元絵の雰囲気はこちらの方が残っている気がします。
個人的にはどちらも甲乙付け難し、なのでいろいろ切り替えて使ってみたりしています。

<lora:flat:-0.3><lora:flat2:-0.3>

だったら両方重ねて使ってみてしまえ、って試したのがこちら。
あんまり意味なさそうだなぁ…。

LoRA「Lit」を試す

Litは、写真で言う「ハイキー」(露出オーバー)な絵にするLoRAです。

<lora:lit:0.6>

一気に明るくなりました。
光量が増えているためか、店内の照明器具の数が増えています。

<lora:lit:0.8>

0.8まで上げるとさらに明るくなり、白飛びが凄いですが、これはこれでありだなぁ。
店内のレイアウトも変化してますね。
背景には光量にあわせていろいろ影響ありますが、キャラクターはそれほどではありません。
割と便利に使えるLoRAだと思います。

ちなみに、ネガティブ指定も出来ます。

<lora:lit:-0.6>

光量が減って夜のイメージになりました。
ただ、Litをネガティブ指定すると解像度が落ちる副作用があり、HiRes fixあるいはi2iでのアップスケーリングが必須だと思います。
細かいディティールをFlat:-0.5で追加しつつ、HiRes fixで1.5倍にスケールアップしてみました。

<lora:lit:-0.6><lora:flat:-0.5>

主線の太さとボケは気になりますが、だいぶ良くなったのでは無いでしょうか。

というわけで、簡単にLoRAのFlatとLitの使い方説明でした。
ディティールアップといえばControlNetのTileも話題ですが、こちらは使い方が若干面倒なので、あまり使っていません。
生成済みの絵に加筆する際は便利ですが、t2iで自動生成する時には向きませんからね…。
なので、もっぱらLoRAばかり使っています。

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が出力した、惜しいイラストを加筆して可愛くする方法のご紹介でした。