2024年2月1日追記
この問題はDiffusers v0.26.0以降修正されています。はじめに
タイトルにある通りです。たしかにノイズが多いなとの印象はありましたが、そんなもんだと思っていました。その都度GFPGANやRefinerを使ってノイズ除去を行ってきました。一時的な解決方法として「k-diffusion」を使えば良いようです。最近SDXL用に「StableDiffusionXLKDiffusionPipeline」が公開されました。従来の方法と比較してみます。比較結果
「fudukiMix v2.0」を使って比較してみました。左が従来通り右が「StableDiffusionXLKDiffusionPipeline」を使った場合
全然違いますね。
Pythonスクリプト
従来の方法
from diffusers import AutoPipelineForText2Image, DPMSolverMultistepScheduler import torch pipe = AutoPipelineForText2Image.from_pretrained( "model/fudukiMix_v20", torch_dtype=torch.float16, variant="fp16" ) pipe.scheduler = DPMSolverMultistepScheduler.from_config( pipe.scheduler.config, algorithm_type="sde-dpmsolver++", use_karras_sigmas=True ) pipe.to("cuda") prompt = "japanese woman, close-up, natural lighting, wavy hair, forehead, dark brown eyes, from side, downward slanting eyes, pouty, white sweater, dyanmic posing, see-through curtain, bright room" n_prompt = "cleavage, illustration, 3d, 2d, painting, cartoons, sketch, watercolor, monotone, kimono, crossed eyes, strabismus" generator = torch.manual_seed(10000) image = pipe( prompt=prompt, negative_prompt=n_prompt, generator=generator, num_inference_steps = 35, width=896, height=1152 ).images[0] image.save("normal.png")
「StableDiffusionXLKDiffusionPipeline」を使った場合
「k-diffusion」のインストールが必要です。pip install k-diffusion
from diffusers import StableDiffusionXLKDiffusionPipeline import torch pipe = StableDiffusionXLKDiffusionPipeline.from_pretrained( "model/fudukiMix_v20", torch_dtype=torch.float16, variant="fp16" ) pipe.set_scheduler("sample_dpmpp_2m_sde") pipe.to("cuda") prompt = "japanese woman, close-up, natural lighting, wavy hair, forehead, dark brown eyes, from side, downward slanting eyes, pouty, white sweater, dyanmic posing, see-through curtain, bright room" n_prompt = "cleavage, illustration, 3d, 2d, painting, cartoons, sketch, watercolor, monotone, kimono, crossed eyes, strabismus" generator = torch.manual_seed(10000) image = pipe( prompt=prompt, negative_prompt=n_prompt, generator=generator, num_inference_steps = 35, width=896, height=1152, use_karras_sigmas=True ).images[0] image.save("kdiffusion.png")