Stable Diffusion(WebUI)を触ってみた
いつになってもGoogleは私におすすめのエロ画像・動画をお薦めしてこないと思っていたら、いつの間にか画像は生成する時代になっていた・・・。
というので画像生成ができるというStable Diffusionなるものを触ってみました。
とりあえずtext2imgのみ。
エロ画像しか生成してない権利面がわからないので画像は貼ってないです。
Stable Diffusion WebUIの導入
Stable Diffusion の導入自体はいろいろな方法があるようですが、
https://studiomasakaki.fanbox.cc/posts/5456600
こちらのサイトを参考に、ローカルにStable Diffusion WebUIを導入します。
WSLに入れようと思ったけどエラーが出たので早々に諦めました。普通にWindowsで入れました。
かなり簡単なので、グラボの面でエンジニアよりもPCオタクの方が参入ハードルが低そうです。
マシンスペック
- CPU:Corei7-1185G7 @ 3.00GHz
- メモリ:16GB
- eGPU(外付けGPU)でGeForce1050Ti 4GB
ノートPCにeGPUを使う変態構成だけど、eGPU使っている割にグラボがしょぼいという。
GeForce1050Ti は Stable Diffusion は「最低限では使えるレベル」っぽいですね。
しかしこれらのスペック以上に、正直容量が足りない。モデルを試しにダウンロードすると小さいものでも1GB以上、5GB超えるのもそれなりにあり、色々試すには結構な容量が必要。
デフォルトのモデルで作った画像
動くのかな?ってので初期から入っているモデルで、何も指定せずにgenerateしてみたんですが、指が3本で歯茎が変に見えて微笑んだ完全にホラーな画像が生成されました。
ホラーすぎて消してしまいましたよ…。
Checkpoint(モデル)の取得
上のサイトで複数のサイトが紹介されてましたが、https://civitai.com/ エロならこっちかな的にこちらを利用。
某絵師のママやんけみたいなモデルがあるような気がするが気にしない……。
公開する場合は権利面とか色々気にすべきでしょうが、個人で楽しむだけなのでそんなに気にせずダウンロードしました。
\stable-diffusion-webui\models\Stable-diffusion下に置いたら読み込めるようになります。
サイズ小さくない?画像を大きくしたい
デフォルト512* 512 で小さいんですよね。
解像度を上げればよいと安易に考えますが、設定が雑な感じだと画像にいろいろな要素を加えようとしておかしくなるらしいです。そもそもスペックが低いので768px * 768pxが限界です。
ただ他の画像とか見ていてももとの設定は 768px * 512pxとかも多いので、ここの大きさはそこまで大事じゃなさそうです。
どちらかというと、小さめで作って、DeepLearningで引き伸ばすという感じっぽいです。
引き伸ばし方で色々細かく頑張っている方は、こんな感じhttps://qiita.com/Yasu81126297/items/752df11a1e5e70c8b9fe
単に拡大だけならReal-ESRGANだけで十分です。
Stable Diffusion WebUIの機能でESRGAN等を使った画像拡大もあるのですが、これもGPUを使おうとしてメモリ不足で死にます。
ESRGANだけ別途ダウンロードして実行したら動きました(グラボを動かしている感じはしたので、オンボードのXe Graphicsほうが使われている?)
prompt
どんな画像を生成するかを指示するprompt ですが、割りと何を入れればよいかわかりません。
CheckpointのページのサンプルやDiscussionにはこれを使って作った画像を上げている人がいて、ものによってはその時のprompt等の設定値を書いている方がいます。
<(masterpiece, realistic:1.3), (extremely intricate:1.2)>, portrait of a girl, face, close up, pointy ears, dress, half-closed eyes, jewelry, sitting, strapless, strapless dress, breasts, watermark, bare shoulders, tiara, grey dress, cleavage, long hair, braid, grey hair, long eyelashes, solo, profile, solo, elf,
Negative prompt: (worst quality, low quality:1.4), (depth of field, blurry:1.2), (greyscale, monochrome:1.1), 3D face, cropped, lowres, text, jpeg artifacts, signature, watermark, username, blurry, artist name, trademark, watermark, title, multiple view, Reference sheet, curvy, plump, fat, muscular female, strabismus,
Size: 520x680, Seed: 285145899, Model: dalcefo_v3_painting3, Steps: 26, Sampler: DPM++ 2M Karras, CFG mode: Linear Up, CFG scale: 15, Clip skip: 2, Mimic mode: Linear Up, Model hash: 7107c05c1c, Mimic scale: 15, Hires upscale: 1.5, Hires upscaler: Latent (nearest-exact), CFG scale minimum: 0, Denoising strength: 0.5, Mimic scale minimum: 0, Threshold percentile: 100, Dynamic thresholding enabled: True
なので、こういう指定方法があるのか、というのがここから読み取れます。
必ずしもすべてのpromptが忠実に再現されているわけではなく、black hairってあるのにどうみても白髪の画像とかもありますね。またCheckpointによっても変わる気がしています。
上の画像の解像度を上げるまわりの部分の設定も記載されていたりするので、色々と参考になりそうです。
Sample steps
本番なら20以上、サイトによっては100とか書いてあるのもありますね。
まあでも上で見たような他の人のpromptで、step数も確認できますが30くらいが多いような気がします。
少ないと奇形が生まれたり、変な物が入ったりしますが、単純に多ければよいという感じもしないです。
多くしても奇形のままのもたまにあります。
少なめで作った魅力がなくなったりします。
Seed
Seedを固定すると同じ画像が生成されます。Seedを固定してモデルを変えたり、構図に関わらないpromptを変えても同じようなものが出力されます。
ちょいちょい画像の感じは悪くないがSeedの固定や他の設定値の保存を忘れて次のを生成してしまうことがありますが、stable-diffusion-webui\outputs\txt2img-imagesに保存されているPNG画像には設定値が入っており、PNG Infoから設定値を取得することができます。
とりあえず大量に画像を生成する
Batch countを上げると複数枚を連続で生成できます。上で書いた通り、画像からSeed値などを取り出せますから、とりあえず生成してから良さげなのを探すのも良さそうです。
GPUスペックが高ければBatch sizeを高めて複数枚並行で作れるかもしれません。
時間がかかる
いろんな設定とかにもよるのかも知れないですが、512px四方のStep20で40秒くらい
さらに解像度を上げたり、Stepを増やすと時間がかかります。色々試すにはなかなかにしんどい待ち時間です。
GPUの変更を検討する
自作PCなどグラボを変更できる環境自体がある程度特殊な気がするのがローカル実行の難しさですね。eGPUなので自分は変更が可能です。eGPUも後付できるとはいえThunderbolt3以上が必須なので、ハードルが高めな気がします。
グラボは一時期半導体不足と仮想通貨マイニングの需要などでめちゃ品不足・高騰してましたが、マイニング需要への対応などもあり、ピークに比べるとだいぶ落ち着いているようですね。
GPU周りは下記ブログが詳しく書いていそうです。
ここでもおすすめされてますし、はじめの記事のところでも使われていますが、RTX3060(12GB)あたりなら5万程度のようです。メモリも増えるので、高解像度も扱いやすくなりそうです。
https://kakaku.com/specsearch/0550/?st=2&_s=2&Sort=price_asc&DispSaleDate=on&Chip=484&RAM=12288&/
Radeonだと厳しいようですし、GeForceからコスパで見ていってもRTX3060に落ち着く感があります(さらにハイエンドならまた別ですが)
5万も出せないとなるとしんどいのもこれのしんどさですが。
これをどんどんやっていこうというよりは一度触って満足した感は出てきていますが、eGPUの筐体のほうがグラボより高い今の状況はどうかとずっと思っていたので、高騰も収まってきたしDeepLearning学習の面でも買っても良いのかなと思っています
時間が吸われる
生成に時間がかかるのと合わせて、同じ設定値でも複数生成させたり、色々なpromptを試したりで時間が無限に吸われていきます。
ご利用はほどほどに…(賢者モード)