Diffusersでは「DPM++2M SDE Karras」がうまく機能していなかったらしい

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")





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