「Stable DiffusionのNSFWフィルターに引っかかってしまう・・・」
「Potential NSFW contentというメッセージが出て、黒い画像が作成される・・・」
このような場合には、この記事の内容が参考になります。
この記事では、Stable DiffusionのNSFWフィルターをスマートに回避する方法を解説しています。
本記事の内容
- NSFWフィルターに引っかかった場合
- NSFWフィルターをスマートに回避する方法
それでは、上記に沿って解説していきます。
NSFWフィルターに引っかかった場合
NSFWについては、次の記事で解説しています。
Stable DiffusionでNSFWフィルターに引っかかった場合、次のような結果となります。
コンソールには、次のように表示されます。
このメッセージが示すのは、エラーというわけではありません。
Potential NSFW content was detected in one or more images. A black image will be returned instead. Try again with a different prompt and/or seed.
そして、作成される画像は次のように真っ黒な画像です。
この結果を回避するための方法を上記の記事で紹介しています。
ただ、その方法はかなり強引です。
もともと、強引な方法とは承知でした。
ある程度の副作用は仕方がないとしていました。
しかし、このたびスマートな回避方法を見つけました。
その方法について、以下で説明します。
以上、NSFWフィルターに引っかかった場合を説明しました。
次は、NSFWフィルターをスマートに回避する方法を説明します。
NSFWフィルターをスマートに回避する方法
NSFWフィルターをスマートに回避してみましょう。
ここでの検証を試すためには、Stable Diffusionが動くことが前提となります。
まずは、NSFWフィルターにわざと引っかかってみましょう。
次のようなコードでフィルターに引っかかるはずです。
import torch from diffusers import StableDiffusionPipeline from torch import autocast MODEL_ID = "CompVis/stable-diffusion-v1-4" DEVICE = "cuda" YOUR_TOKEN = "コピーしたアクセストークン" pipe = StableDiffusionPipeline.from_pretrained(MODEL_ID, revision="fp16", torch_dtype=torch.float16, use_auth_token=YOUR_TOKEN) pipe.to(DEVICE) prompt = "NSFWなワード" with autocast(DEVICE): image = pipe(prompt, guidance_scale=7.5)["sample"][0] image.save("test.png")
NSFWなワードは、各自で適当に記入してください。
prompt = "NSFWなワード"
次の記事で紹介しているサイトには、NSFWなワードで溢れています。
無事(?)にNSFWフィルターに引っかかったら、次のようにコードを変更しましょう。
prompt = "NSFWなワード" # ====ここから==== def null_safety(images, **kwargs): return images, False pipe.safety_checker = null_safety # ====ここまで==== with autocast(DEVICE): image = pipe(prompt, guidance_scale=7.5)["sample"][0] image.save("test.png")
変更したら、コードを実行します。
どうでしょうか?
「Potential NSFW content ~」というメッセージが表示されないようになっています。
そして、NSFWな画像が作成されているはずです。
以上、NSFWフィルターをスマートに回避する方法を説明しました。