みなさんは、Stable Diffusionを用いて画像生成をする際、黒色などの塗りつぶし画像が出来た事はないでしょうか?
以下は、画像生成サイト『SeaArt.AI』にて生成された塗りつぶし画像の例です。(Stable Diffusionでは、黒背景での塗りつぶしになります。)
Stable Diffusionにおいて、黒塗りされてしまう原因として考えられるのは、
- 閲覧注意画像の検知
- SD Upscaleなどの高解像度指定
などがあります。今回は、Stable Diffusionの設定自体を変更してこれらに対処する方法をお伝えします。
また、以下の記事では1の閲覧注意画像(NSFW)の検知を簡単に回避する方法を紹介していますので、こちらもご参考にしてください。
Stable Diffusionで黒い画像が生成されてしまう時の対処法
前段で黒い画像が生成される原因として、
①閲覧注意画像の検知
②SD Upscaleなどの高解像度指定
を挙げました。
それぞれについて、Stable Diffusionの設定を変えて対処していきましょう。
対処法①:画像チェック機能を無効化する
こちらは、”画像チェック機能無効化法”として海外掲示板のRedditでも既に共有されています。
以下に、”画像チェック機能無効化法”の手順を紹介します。
手順1:「scripts」フォルダ内の「txt2img.py」をバックアップ。
手順2:「txt2img.py」をエディタで開き、『x_checked_image, has_nsfw_concept = check_safety(x_samples_ddim)』の行を探す。(通常は309行目)
手順3:先ほど見つけた行を、『x_checked_image = x_samples_ddim』 に書き換える。
手順1では、今回の変更を元に戻したい場合やコードを間違えて変更してしまった際に、初期化できるようバックアップを取っています。
手順2,3では、閲覧注意画像かどうかをチェックする仕組みを無効化しています。
また、閲覧注意画像モデルのロードを無効化する場合は、以下の3行を削除しましょう。(通常は26~28行目)
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の一部は閲覧注意画像チェック機能が無効化された状態で配布されている場合もあるようですので、あまり黒い画像が生成されたことがない方は、対応不要と思います。
対処法②:VAEの処理を変更する
こちらは、以下の手順で黒い画像を発生させる確率を下げることが可能です。
手順1:「webui-user.bat」をバックアップ。
手順2:「webui-user.bat」をエディタで開き、『set COMMANDLINE_ARGS=』を探す。
手順3:先ほど見つけた文を『set COMMANDLINE_ARGS=–no-half-vae』に書き換える。
手順1では、今回の変更を元に戻したい場合やコードを間違えて変更してしまった際に、初期化できるようバックアップを取っています。
手順2,3では、ビデオメモリ使用量は増大するが黒い画像発生率を低減させるようにしています。
まとめ
それでは、これまでの要点をまとめます。
- 黒い画像が生成される原因として、①閲覧注意画像の検知、②SD Upscaleなどの高解像度指定などがある。
- ①、②に対してファイルの文章を書き換えることで対策が可能
いかがだったでしょうか。①の対策によって生成可能となったセクシーな画像を、SNSなどに掲載する場合は、黒線(いわゆる海苔)と言われる黒い線などを活用して、コンプライアンス違反にならないよう充分注意してください。
- Stable Diffusionのプロンプトの見本が知りたい
- 画像生成が思ったようにできない
- 色々なプロンプトを探したい