アットロードサイドblog
2023/05/07

Stable Diffusionを4GB GPUで高解像画像生成!!

Stable Diffusionを4GB GPUで高解像画像生成!!

最新のStable Diffusionが4GB以上のGPUであれば動くようなので、GTX1630(4GB)搭載のPCにインストールして画像を生成してみました!
当初、小さな画像しか作れずエラー多発状態から、基準サイズの「512x512px」生成の安定化、更にアップスケールで「8,192x8,192px」の高解像画像の生成に成功。
以下、4GBのグラボを使用したステーブルディフュージョンの高画質化レビューです。

【マシンスペック】

■ Windows11
■ ストレージ:SSD 240GB
■ CPU:i7-9700 3GHz/32GB
■ GPU:GeForce GTX1630(4GB)
■ NVIDIA Studioドライバー:バージョン531.61

【インストールプログラム】

AUTOMATIC1111 / stable-diffusion-webui

ネットで色々な情報が出でいますが、こちらの仕様(Automatic Installation on Windows)通りにインストールすれば問題ありません。
一度、ネット上の古い情報でインストールしたら動きませんでした(;・∀・)
※インストール画面で、Pythonは「Add Python 3.10 to PATH」にチェック。Gitは「Use Windows' default console window」にチェックしないと後で手間取ります。

追記:Installation on Windows 10/11 with NVidia-GPUs using release packageのインストール方法なら、PythonやGitを個別インストール作業無しで、簡単にステーブルディフュージョンが利用できます。

【Stable Diffusionモデルファイル】

■ モデル:ChilloutMix
■ LoRA:Japanese-doll-likeness V1_v15

【先ず、初期状態で使ってみた!】

巷の"4GBは使えない"とのクチコミを検証するために初期状態からステップを踏んで試してみました。
そもそもGTX1630でStable Diffusionを動かそうなんて発想をしている人はいないと思うけどwww

インストール後、早速GPUの利用率が限界で生成エラーが多発!!
※(参考)ChilloutMixより軽い2GB位のモデルファイルなら、エラー発生率は低減しました。

とりあえず「Upcast cross attention layer to float32」をオンに変更。

ステーブルディフュージョンアプリの設定画面

4GBのVRAM(GPUメモリ)は、3.8GBあたりまで利用率が上がるとエラーが発生しやすくなります。

長辺を512px以下、短辺はその半分位で設定すればなんとか出力できる感じですね。

↓240x512pxの場合、被写体が小さいと綺麗に解像しません。
アップなら普通に綺麗! いや、可愛い(;・∀・)

ステーブルディフュージョン「chilloutmix」モデルから生成した画像ステーブルディフュージョン「chilloutmix」モデルから生成した画像ステーブルディフュージョン「chilloutmix」モデルから生成した画像

↓長辺を512pxを超える画像を生成させる場合は、Hires.fixで1.5倍位にして、仕上がり288x584px程度までならエラーは出ません。

ステーブルディフュージョンでHires.fix機能(アップスケール)の設定例

先日から有料プランのGoogle ColabでStable Diffusionを使っているので、こんな小さな画像は数秒で生成されるのが普通です。
しかし私のPCでは、1枚生成に1分以上かかります(;・∀・)
特にイライラとかは無く、逆にこの待ち時間がどのような写真が出来上がるのか?ロマンを感じますね。

ステーブルディフュージョン Hires.fix機能(倍率1.5倍/ステップ20)の横288px縦584px画像生成例ステーブルディフュージョン Hires.fix機能(倍率1.5倍/ステップ24)の横288px縦584px画像生成例ステーブルディフュージョン Hires.fix機能(倍率1.5倍/ステップ28)の横288px縦584px画像生成例ステーブルディフュージョン Hires.fix機能(倍率1.5倍/ステップ32)の横288px縦584px画像生成例

↓Hires.fixでどの位まで拡大できるのかの実験。

4GB GPUパソコンによるステーブルディフュージョンでHires.fix機能(倍率2倍)を利用して生成した横448px縦1,024pxの設定画面

GPU(VRAM)は3.8GB前後を使うので、別のソフトを開いたり、ブラウザでネット閲覧する程度でも、すぐに生成中断のエラーが発生します。
低スペックPCで最新のステーブルディフュージョンを使っても、恐らくこの辺の使用環境によってエラー発生率が左右されるので、ネットクチコミも様々な見解なのでしょうね。
セキュリティソフトはOFFにして、不要なソフトも全て閉じた状態でCPUもGPUも余計な負荷をかけない作戦で実施。

4GB GPUパソコンによるステーブルディフュージョンでHires.fix機能(倍率2倍)を利用して生成した横448px縦1,024pxの画像例

448x1,024px位まで拡大できました。

多発するエラーメッセージに修正アドバイスが書かれているので、以下、それを実行して検証してみます。


【バッチファイルを修正してGPU負荷を下げる】

エラーメッセージの修正アドバイスに従い、ユーザーカスタマイズ用バッチファイル(webui-user.bat)の「COMMANDLINE_ARGS」行の修正と新規で「PYTORCH_CUDA_ALLOC_CONF」を以下の通り追記しました。
(ファイルの場所:stable-diffusion-webui > webui-user.bat)

set COMMANDLINE_ARGS=--lowvram --always-batch-cond-uncond --no-half --disable-nan-check
set PYTORCH_CUDA_ALLOC_CONF=garbage_collection_threshold:0.6, max_split_size_mb:128

コマンドを一つずつ追加・削除しながら生成を繰り返し、最終形としてこのような記述で落ち着きました。
結果、アップスケール無しでも「1,024x1,024px」の画像サイズが生成!時間は1枚13分位。
基準サイズの「512x512px」は、step20で1分55秒前後。

GPUの負荷(VRAM3.8→3.4GB程度に低減)が下がり、一方でCPUの使用率が少し上がりました。

PC負荷状況

4月にアップデートされたNVIDIA Studioドライバーも良い仕事をしているのかもしれません!

512px Hires.fix2倍 ⇒ 1024px1024px生成画像

Aは、512pxをHires.fix2倍にして1,024pxで生成した画像。
Bは、アップスケール無しで生成した1,024px画像。
※サムネイルをクリックすると実寸の1,024px画像が表示されます。

1,024px等の大きなサイズ設定した画像はプロンプトが的確に反映されないみたいなので、基準の512pxを意識する必要があるようです。
また、512pxを含む512x1,024px等は上手くプロンプトが反映されますね。

上のB画像(1,024px)をSend to extrasで8倍(8,192x8,192px)に挑戦↓

1,024x1,024px画像をSend to extrasで8倍に設定

生成時間12分12秒。みごとに成功!!
CPUの使用率が上がり(23%位から50%超)、GPUもファンがビィィ~~ンと音を立ててフル回転してPCが壊れないか心配になりました(;・∀・)

私的には、8千pxクラスの画像は用途がありませんが、映像や印刷系の業界の人には会社の個人PCでもステーブルディフュージョンを手軽に使えることが分かる検証結果だと思います。

それぞれのアップスケール方法から生成した画像を実寸のまま一部切り取った画像がこちら↓

512⇒Extras8倍 4,096px画像から実寸切り抜き512⇒Hires.fix:2倍 1024 ⇒ Extras:4倍 4,096px画像から実寸切り抜き512⇒Hires.fix:2倍 1024 ⇒ Extras:8倍 8,192px画像から実寸切り抜き1024⇒Extras8倍 8,192px画像から実寸切り抜き

Extrasでアップスケールするときに登録する画像の解像度が大きいほど仕上がりも綺麗です。
左から2番目の「512⇒Hires.fix:2倍 1024 ⇒ Extras:4倍(仕上がり4,096px)」は、1番目の「512⇒Extras8倍(仕上がり4,096px)」と比較するとディテールがはっきり解像していますね。


★img2imgでミカンちゃんを生成

ステーブルディフュージョンの「img2img」設定画面

img2imgで生成したミカンちゃんimg2imgで生成したミカンちゃんimg2imgで生成したミカンちゃん

設定値「CFG Scale:5」「Denoising strength:0.7」「Sampling steps:多めの方が良好」で、5歳位若いそっくりなミカンちゃんが生成されました(;・∀・)
都民の森で撮った写真に写り込む緑が同じ比率と同じような構図で再現されていて、恐るべし生成AI。

↓髪型までそっくりで草

img2imgで生成したミカンちゃんimg2imgで生成したミカンちゃん

Stable Diffusionによって、ミカンちゃんが永遠の女子校生を得られることになりましたwww


【まとめ】

1枚の画像生成に2分~15分等の時間がかかるものの、4GBのグラフィックボードでも十分に解像する画像を生成することが確認できました。
512px基本サイズの生成時間(2分弱)をどう判断するかによって評価が分かれるところでしょうね。私は特にストレスは感じないので、これで満足です。
ブログやSNSに掲載する1,000px位の画像作りならエラーを気にすることもなく、画像生成中にブログの文章入力やPhotoshop作業を平行できます。

尚、インストール作業においては、プログラムの配布時に指定されている仕様に気を付けることが重要です。
また、生成エラーが出たときは、エラーメッセージの指示に従うことが一番早い解決方法でした←エラー毎にメッセージ内容が変わります。

昨今、対話型AIの話題で持ち切りですが、画像生成AIしかり、このような雇用に影響を与えるような新しいテクノロジーは、社会の生存競争からふるい落とされないために企業も個人でも積極的に触れておく必要があると感じますね。


【番外編:ショートカット】

ステーブルディフュージョンを起動のたびにインストールフォルダを開いてバッチファイルをダブルクリックするのもアレなので、デスクトップにショートカットを付けました。
アイコンのデザインがWindowsの標準アイコンなので、あまりカッコ良くありませんね。
そんな時は、プロンプトに「Stable Diffusion, logo,app,square button,」と入力してstep50位に設定し、ステーブルディフュージョンに作ってもらいます。
生成された画像は、手作業で48pxに縮小してicoファイル化。

★ショートカットアイコン画像の変更方法は↓
『ショートカットアイコンを右クリック>オプション>プロパティ>ショートカットタブ>アイコンの変更>参照>(画像を選択したらOK、適用)』

↓1個目のアイコンは、stabled diffusionのロゴを流用した手作りで、2、3個目がプロンプトから生成したデザインです。
stabled diffusion ショートカットアイコン ロゴマーク版 stabled diffusionで作ったショートカットアイコン stabled diffusionで作ったショートカットアイコン


【私のStable Diffusionお気に入りの活用方法!】

現場で撮影した風景写真をControlNetで「canny」又は「lineart」モデルを使って写真風景の地形を維持したまま、思い描く画に変更させる使い方がお気に入りてす。
快晴の朝焼けに雲海が広がるような自然風景に出合えるチャンスは滅多にありません。
生成AIなら実在する風景ならではの印象深い写真を簡単に作ることができます↓

実地撮影写真をControlNetで空気感を変える

こちらの写真は、訪れたことのある人ならすぐに分かる東京都最高峰の雲取山からの風景です。


4GBのGPUだとControlNetの設定値確定までの微調整に時間がかかるため、Google ColabのハイスペックGPUでサクサク動かした方がよいかもしれません。

★山歩きで実地撮影した写真からStable Diffusionで仕上げた壁紙を作ってみました » 壁紙


PAGETOP