2022-08-23 HなStable Diffusion : https://anond.hatelabo.jp/20220823205005
前提として、Stable Diffusionでエロ画像を出そうとしてもsafety checkerという機能が入っており、センシティブな画像を出そうとすると黒塗りになる。
(Stable DiffusionのSaaSであるDream Studioはぼかしだが、多分別の技術)
https://github.com/huggingface/diffusers/releases/tag/v0.2.3
そこでGoogle Colabでちゃちゃっと環境を作り、なおかつNSFWを回避する。
- 下記のリンクでノートを開く
- 下記の箇所を書き換える
vvvvvvvvvvvvvvvvvv
from diffusers import StableDiffusionPipeline
^^^^^^^^^^^^
この一行を書き換えて自前のStable Diffusion Pipelineをクラス定義する。
をこぴってきてL157行目~159行目を消して貼り付ける。
- Google Colabの上から順番に実行する
これだけだ。だが、自分の性癖に刺さるStable Diffusionの作成は難しい。つーかマジ安定しない。waifuを探したければ、多分Stable Diffusionは合わない。hentai御用達ワードもなかなかヒットしなかったのでムズイ。
一応、redditを参考にワイが発掘したpromptを置いておく。
"full page antique lithograph of naked girl, sexual position, White background, art print, clean brush stroke, realistic highly detailed, post-processing highly detailed, rendered by octane engine, esty"
naked girlの間に年齢を指定するとガチであかんやつ。人の顔を安定して出すのに"lithograph of" はかなり使える。
"nude painting, big breasts, hot petite, long braided hair, hazel eyes, full round face, short smile, cinematic lightning, medium shot, mid-shot, cinematic wallpaper -C 13"
おっぱいの大きさに定評がある白人の女性がたくさん出てくる。顔の部位を丁寧に指定することで安定性が増すらしい。
追記
・肝心のコード改修がテキトーな説明でごめんなさい。safety checkerのメソッドをオーバーライドするのが多分1番簡単だから、ぶら下がってるコメント見てください。ありがとう!
・prompt(おまじない)は無から生まれたものではなく、当然おまじないと画像を紐付けしたデータが元になっている。汎用画像分類モデルCLIPはopenaiという別の団体が公開してるおまじないと画像のデータセットだけど、これを検索できるようにしてくれた人がいる。
なんでこんなサイトを紹介しているかって?
お気に入りのエロ画像が出てこねーのはお前のpromptが悪いからだ。それを確認できるのがこのサイトだ。
例えば中学生男子なみのムラムラしているおまえはStablediffusionでsexと入れるだろう。だが決して出てこない。
その理由はこのサイトを検索すればわかるだろう。邪魔な画像が多すぎるのだ。
同様に足をぱっかーんと開いたお姉さんを召喚してみよう。
spread her legs
spreadだっていってんだろ。なに足閉じてんだよをクロスしてんだよ。
この辺が上手くいかない理由だ。
フレーバーをいくら増やしてもこの手の問題は解決しづらい。例えば sex human でググると多分直感に反してラブドールの画像ばかりひっかかるだろう。
promptで重要なのは何を学習したか、その見えない文脈を推測することだ。そのためにはGoogle先生なみの文字センスと検索力が必要となるだろう。
ヒントは与えた。後は健闘を祈る
r/UnstableDiffusion has been banned from Reddit とのこと。
貴重な情報源が...
from diffusers import StableDiffusionPipeline
をgithubのファイルの内容そのままに置き換えても
from ...models import AutoencoderKL, UNet2DConditionModel
以下4行でエラー出るんすけど
動いた参考例
10-12行目の以下、「...」を「diffusers.」に
from ...models import AutoencoderKL, UNet2DConditionModel
from ...pipeline_utils import DiffusionPipeline
from ...schedulers import DDIMScheduler, LMSDiscreteScheduler, PNDMScheduler
13行目の以下、先頭に#でコメントアウト
from .safety_checker import StableDiffusionSafetyChecker
24行目の以下、先頭に#でコメントアウト
safety_checker: StableDiffusionSafetyChecker,
35行目の以下、先頭に#でコメントアウト
safety_checker=safety_checker,
164行目の以下を
return {"sample": image, "nsfw_content_detected": has_nsfw_concept}
以下にする
return {"sample": image}
mainブランチのままのリンクだとそのうち行がずれると思うので今のcommit idのリンクを張った方が良いのでは
元増田とは別の書き方を参考までに。
https://note.com/npaka/n/ndd549d2ce556
基本的にこの記事と同じ方法。
from diffusers import StableDiffusionPipeline
pipe = StableDiffusionPipeline.from_pretrained("CompVis/stable-diffusion-v1-4", use_auth_token=YOUR_TOKEN) pipe.to("cuda")
def dummy_checker(images, **kwargs): return images, False pipe.safety_checker = dummy_checker
下の2行を追加するだけ。これでも動いた。
これ優秀やね。元増田のやつよりお手軽。
あとせっかくだからサムネイルを並べて表示するコードを紹介しとこう。
import matplotlib.pyplot as plt
num_inference_steps = 10 # Number of denoising steps guidance_scale = 7.5 # Scale for classifier-free guidance batch_size = 1
def show_images(images, figsize=(20,10), columns = 5): plt.figure(figsize=figsize) for i, image in enumerate(images): plt.subplot(len(images) / columns + 1, columns, i + 1) plt.imshow(image)
#入力文字 ここに好きな禁則文字をいれてください prompt = ["hatena anonymous diary"]
height = 512 # default height of Stable Diffusion width = 512 # default width of Stable Diffusion
seedId = 1
images = [] for i in range(5): generator = torch.manual_seed(seedId + i) print(seedId + i) image = run(prompt,generator,height,width,num_inference_steps,guidance_scale,batch_size) images.append(image)
show_images(images)
一番上にあった
https://zenn.dev/hellohazime/articles/8ae3e6ccd698d3
これの通りにやったんだが
なんでサンプルにある
🍆とgenerator = torch.manual_seed(4)でエロ画像がでるのかさっぱりわからん
実は 🍆と torch.manual_seed(3) で出てきた緑のコレもエロ画像なんか?
なんなの🍆
追記 🍑と generator = torch.manual_seed(4)とかmanual_seed(1) もエロ画像だったが
この考えでいくと🍌もエロくないの納得いかん
それともtorch.manual_seed の数字 変えてくと🍌もエロ画像に変わったりするのか?
そして
🍆+torch.manual_seed(4)
と
🍑+torch.manual_seed(4)
が同じ構図の性別違いだったんだが、これ seedで構図決まるの? 教えてエロい人
そして👓ではエロ画像出ないの納得いかない!!
pornhubから使えそうなタイトル文をそのままコピペしてpromptにいれて
この一気に生成できるコードで確かめるとめっちゃ捗る「Naughty Japanese School Girls Vol. 18 」とか入れるとめっちゃエロ画像しか出てこない
ただ、これだとどのSEEDがどの画像なのかわからんのでSEEDを画像の上に表示したいんだがやり方がわからん、たすけて
def my_safety_checker(images, clip_input):
return images, False
pipe.safety_checker = my_safety_checker