見出し画像

Stable Diffusionで解像度を上げると環境によって異なる画像生成される件について

こんにちわ、エミフェズ(@emilyphase)です。Chromeだと私の名前が四角で表示されてると思いますけどお使いのPCは正常です。noteで初投稿です。
長い間この問題について調べていたのですが、自分用のメモや今までの結果をまとめたいと思って投稿しました。
長い記事ですのでまずは結論を書きます。

Stable Diffusionは512x512まではどんなグラフィックボードでもほぼ同じ画像が出ますが
576x576以上の解像度はグラフィックボードの機種によって同じ画像が出るかは変わり
高解像度になればなるほど、出力結果が変わります。
(何故なのか理由は私はわかりませんが恐らくVRAM量の影響が大きいと思います。)


私はStable Diffusionの為にゲーミングPCを購入し
その後すぐに新しいゲーミングPCを買った変わり者ですが、
旧環境から新環境に移行させた時に

”全く同じ設定にも関わらず、異なる画像が出る“こと

に気づき旧環境のSSDを丸々新環境に完全コピーし完全同一環境にしても異なる画像が出て
「画像生成AIってプログラムなんだから環境で出る画像が変わるってあるのか……?」と不思議に思い調べると以下のサイトがヒットしました。

https://economylife.net/best-gpu-for-image-ai/#toc5

今回は、手元に複数動作検証環境があるので実際に色々やってみよう!
と思ってやってみることにしました。


使用ソフトはAIイラスト界隈で一番使われててスタンダードだと思われる
Stable Diffusion WebUI(AUTOMATIC1111)を使用。

使用モデルはanything v3を検証に使いました。
(本当はもっとクリーンなモデルを使いたかったのですが、
他のモデルは高解像度になると極端にグチャグチャな絵になる+検証の為には同一モデルを使用する必要があり一番広まってるモデルはコレなので、やむを得なく検証に使用しています)

プロンプト設定類は以下の通りです。

prompt:

(one little cute girl center, loli), dynamic angle, (looking at viewer:1.2), (magnificent view), (masterpiece:1.2), (best quality, detailed CG, 8k wallpaper, shiny, clothes reflecting light, lens flare, outline), (detailed gradient eyes), (intricate gorgeous cute clothes, tulle chiffon skirt covered by thin translucent skirt:1.4)

Negative prompt:

(missing person, more than two people, only lower body:1.2), (fused hands:1.4), (inaccurate hands, poorly hands:1.2), (fused fingers:1.4), (inaccurate fingers, poorly fingers, crooked fingers, one hand with more than five digit, inaccurate legs, more than three legs, fused legs, poorly legs, fused sleeves and skirt:1.2), more than three hands, long fingers, sharp fingertip, huge thighs, (black clothes, fantasy, navel), inaccurate shoes, more than three shoes, inaccurate arms, missing arms, more than three arms, poorly face, blurred background, nsfw, lowres, bad anatomy, text, error, cropped, worst quality, low quality, normal quality, jpeg, artifacts, signature, watermark, username

Steps: 20,
Sampler: DPM++ 2M Karras,
CFG scale: 7,
Seed: 1744694513,
ENSD: 31337
Model hash: 2700c435,(anything v3)
Clip skip: 1(初期設定)


プロンプト類は全て上記設定で固定し変えるのは解像度のみで検証しました。
私のプロンプトでもよかったのですが、既にEuler等の別サンプラーでも異なる画像が出ていたのを確認していたので
他の方が構築したプロンプトでも解像度が変われは同様に異なる画像が出るのかプロンプト設定は
あいおえお えかきの(@NovelAIoekaki)さんに頂き、掲載許可をいただけました。
ご協力ありがとうございます。

anything v3をお使いの方は上記プロンプトを完全同一にしたら少なくともどんな環境でも384〜512でほぼ一緒の画像が出るはずですのでそこから解像度を変更していけば、グラボが違えば異なる画像が出るのが体験できるかと思います。

4種類の環境
VRAM5GB Quadoro P2000
VRAM6GB GTX 1060 Max-Q
VRAM8GB GTX 1070
VRAM15GB(Tesla T4) Google Colab
での384x384~640x640の結果です。

↑Applying Doggettx(xformers-off)↑
↑Applying xformers↑

xformersはオンでもオフでも画像の差はほとんどないです
(生成スピード向上とVRAM削減の観点からオンが推奨は間違いないです)

VRAM5GB Quadoro P2000が576x576から早速、多少構図変化し640x640では完全に別な女の子になってしまっています。
VRAM6GB GTX 1060 Max-Qは576x576は少しだけ構図変化し640x640は金髪の女の子は一緒ですが構図が変わっています。

一方、VRAM8GB GTX1070とGoogle Colabはほぼ同じ画像が出力されています。

解像度をさらに上げてみます

↑Applying Doggettx(xformers-off)↑
↑Applying xformers↑

全ての画像が独自の世界観になってしまっているので
一番下のGoogle Colabを基準に考え、検証すると
VRAM5GB Quadoro P2000とVRAM6GB GTX 1060 Max-Qは1024x1024だと人の顔がかなり小さくなり人が消えかけています。
他のAIモデルでは解像度を上げていくと人物が消える傾向が強いのですが
VRAMが少ない環境だとそれが極端に出てしまうのか、顔も変形してきています。
意外と健闘しているのがVRAM8GB GTX1070で704x704から少しの構図変化、768x768では構図はほぼ変わらず髪の毛の色が主に変わるという独自の世界が見れました、イメチェンでもしたかったのかな?
ただ832x832からはVRAM8GB GTX1070も全く異なる画像になり始め、これ以降の解像度は4種で一致する画像は一枚も出てこなくなりました。
なんとも不思議な話ですよね。画像生成AIに意思でも宿ってるんでしょうか…?

"画像生成AIはプロンプト設定類がわかれば誰でも同じ絵が出せる"
と思われがちですが、この結果を見る限りそうではなく
"その生成した本人(環境)でしか同じ絵は再現できない"ので
本当に世界に一つだけの絵が生成出来ちゃってます。

最初に紹介したサイトによると
"3000番代は全て結果が一致している"
とのことですが、私は同様環境が用意できないので事実はわかりませんが
検証の結果、VRAMの多いGTX1070が一番Google Colabに近い画像が出せた(640x640までは一致した)ので
これからStable Diffusion用のパソコンを用意しようと思っている方は
Geforceで性能よりもVRAM量を重視して購入したほうが良い
(12GB以上あると自身で学習させて独自モデルも作ることができる為)
と私も思います。

最後に、Stable Diffusion WebUI(AUTOMATIC1111)はCPUのみ(グラボ不要)でも動作が可能でそちらも検証してみました。

512x512で1Steps進むのにCore i3-1115G4で約27秒も掛かるけど 一応動くには動く。

CPUだけで動作している図
一応 PCがあれば誰でもAIイラストは作れたりします

webui-user.batをメモ帳で開き
set COMMANDLINE_ARGS=--skip-torch-cuda-test --precision full --no-half
を追加で動作可能
--deepdanbooru --gradio-img2img-tool=color-sketch も使える
--xformersはCPUでは使えない
CPU動作で解像度変化で結果が異なるのかも検証してみました。

CPUで検証した結果は384x384~640x640で全て完全同一の画像(少しの欠損もなく)出ました。

CPU版とGeforce(グラボ)版同士だと全く異なる画像ですが、同じCPU版ならCPUの種類、Hz、コア数に関係なく同じ画像が出ました。

今回の検証はこれで終わりますが、また何かあったら更新や新しい記事を書くかもしれません。
ありがとうございました~

追記1
Stable DiffusionにHighres.fix(高解像度補助)
(最初に512x512の画像を生成してその後スケールアップする2ステップを踏むことで構図を変えずにディテールを改善させる機能)
という機能があるのでそれはどうなってくか検証後日検証の記事を作りたいと思ます。
2022年12月18日追記1についての記事を公開しました。


追記2
有志の方がA4000マシン(16GB)で検証していただき私の載せた832x832まではほぼ一致し
1024x1024は一致しなかったとTwitterで報告いただきました。
本当にありがとうございます!
Highres.fixの検証の後に追加解像度の記事を書く予定です。
→この件について追記です、
・WebUIで2023年1月にKarrasとHighres.fix大きく仕様変更が入り、過去の設定をオンにして完全同一にしても同じ画像が出ない場合がある
・WebUIの他にもNMKD Stable Diffusion GUIと言うクライアントを使用している人も多くWebUIと設定を完全同一にしても同じ画像が出ない
と言う事があり、
同じ画像が出ないならこの検証の意味がほとんどなくなってしまい更新は未定になりました。

すみません。

この記事が気に入ったらサポートをしてみませんか?