Stable Diffusionで真っ黒な画像が生成されるときの対応

この記事は公開から2年以上経過しています。

Mac mini(M1, 16GB, Monterey 12.6.1)上にStable Diffusionを導入してAIによる画像生成を試していたところ、呪文によっては真っ黒な画像が出力されてしまう現象に遭遇したので、その時の対応についての備忘録。

2023.8.4追記:
いつの間にかStableDiffusionのパイプラインの動作が変わりエラーが発生するようになっていたため、Stable Diffusionの Pipelineのソースコードを確認して対応方法を修正しました。


問題

Stable Diffusionで生成された画像が真っ黒になるときがある。


原因

生成される画像内に肌の露出が多い被写体があるとNSFW(Not Safe For Work=職場回覧注意)で画像が黒塗りされる。


対応

NSFW機能を無効化する。

方法1

公式な方法。

pipe = StableDiffusionPipeline.from_pretrained(
    model_id,
    # 以下のパラメータを追加
    safety_checker=None)
pipe = pipe.to(DEVICE)

pipe = StableDiffusionPipeline.from_single_file(
    model_file,
    # 以下のパラメータを追加
    load_safety_checker=False)
pipe = pipe.to(DEVICE)

方法2

外部からStableDiffusionSafetyCheckerを無理やり書き換える。

StableDiffusionPipeline.from_pretrained()StableDiffusionPipeline.from_single_file()どちらでも使用可。

pipe = StableDiffusionPipeline.xxx(...)
# パイプライン作成後に以下の行を追加
pipe.safety_checker = lambda images, **kwargs: (images, None)


参考ウェブサイトなど

以上です。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする