Stable Diffusionで画像が黒塗りになってしまう場合の対処法

Stable Diffusionには、成人向けの表現やセクシーな描写を含む画像を黒塗りするセーフティフィルターが組み込まれています。

セクシーな画像以外でもまれに反応してしまう場合がありますが、このセーフティフィルターを無効にする方法がRedditなどの海外掲示板で共有されているようです。

今回PROMPTYでは、生成された画像が黒塗りになってしまう場合の対処法を紹介します。

Google Colabで黒塗りの画像が生成されてしまう場合の対処法

Google Colabを使用してStable Diffusionに「セクシーな女性」というフレーズを入力した際には、「閲覧注意画像を検知したため、該当画像は黒塗り処理されました」という通知が表示され、セクシーな女性の画像が真っ黒になってしまいます。

Stable Diffusionは画像生成後に閲覧注意画像かどうかをチェックする仕組みが備わっています。

したがって、「画像チェック機能」を書き換えることで、問題なく閲覧注意画像を生成できるようになります。使用するにはGitHubリポジトリからStable Diffusionをクローンしているユーザーが対象です。

手順は以下の通りです。

ステップ1
まず、「scripts」フォルダ内にある「txt2img.py」をバックアップします。

ステップ2
「txt2img.py」をエディタで開き、通常は309行目にある以下の行を探します。

x_checked_image, has_nsfw_concept = check_safety(x_samples_ddim)

ステップ3
上記で見つけた行をインデントを保ったまま以下のように書き換えます。

x_checked_image = x_samples_ddim

これで閲覧注意画像チェック機能が無効化されます。さらに、閲覧注意画像モデルのロードも無効化したい場合は、「txt2img.py」の26〜28行目にある以下の3行を削除しますが、Google Colabなどのオンライン環境で使用する場合はアカウントが削除される可能性があるため注意が必要です。

safety_model_id = "CompVis/stable-diffusion-safety-checker"
safety_feature_extractor = AutoFeatureExtractor.from_pretrained(safety_model_id)
safety_checker = StableDiffusionSafetyChecker.from_pretrained(safety_model_id)

なお、Stable Diffusionの一般公開後、デスクトップアプリやスマートフォンアプリが活発に開発されており、一部は閲覧注意画像チェック機能が無効化された状態で配布されている場合があります。

AUTOMATIC1111で黒塗りの画像が生成されてしまう場合の対処法

AUTOMATIC1111版のStable Diffusion WebUIを使用して、SDアップスケールなどで高解像度指定して画像を生成する際に、部分的に黒くなったり全部が黒画像になる場合があります。

このエラーは下記の方法で解決する場合があります。

webui-user.batファイルを、テキストエディターで開き、

「set COMMANDLINE_ARGS=」の後に、「 –no-half-vae」を追加します。

修正前

set COMMANDLINE_ARGS=

修正後

set COMMANDLINE_ARGS=--no-half-vae

これで解決する場合があります。

~Stable Diffusionで素早く画像生成するには~

Stable Diffusionの画像生成スピードや画像サイズは、グラフィックボード(GPU)の性能によって大きく変わります。

このため、より効率的かつ快適な画像生成を望むユーザーにとって、最適なグラフィックボードの選択が重要となります。

推論処理やLoRAなどの追加学習処理といった大量の計算を効率よく行うためには、12GB以上のVRAMを持つグラフィックボードを選ぶことを強くおすすめします。

2GBや4GBのVRAMを持つグラフィックボードでは、学習プロセスや高解像度の画像生成に支障が出る可能性が高いです。

コスパを重視する方は、RTX 3060を選ぶと良いでしょう。このグラフィックボードを使えば、Stable Diffusionの画像生成機能を最大限に活用することが可能となります。