使用diffusers运行Stable Diffusion,测试不同采样器生成效果

2024-01-31 21:54:12
/
0 点赞
/
102 阅读
2024-01-31

前言

用到如下两个模型

stabilityai/stable-diffusion-xl-base-1.0
stabilityai/stable-diffusion-xl-refiner-1.0

测试不同采样器

from diffusers import DiffusionPipeline
from diffusers import (
    DDPMScheduler,
    DDIMScheduler,
    PNDMScheduler,
    LMSDiscreteScheduler,
    EulerAncestralDiscreteScheduler,
    EulerDiscreteScheduler,
    DPMSolverMultistepScheduler,
)

import torch, time, datetime, os
import hashlib


repo_id = "stabilityai/stable-diffusion-xl-base-1.0"
scheduler = DPMSolverMultistepScheduler.from_pretrained(repo_id, subfolder="scheduler")

pipe = DiffusionPipeline.from_pretrained(repo_id, scheduler=scheduler, use_safetensors=True, torch_dtype=torch.float16, variant="fp16")
# pipe = DiffusionPipeline.from_pretrained(repo_id, torch_dtype=torch.float16, use_safetensors=True, variant="fp16")
# 保存模型
# pipe.save_pretrained("models/stable-diffusion-xl-base-1.0")

pipe.to("cuda")

# if using torch < 2.0
# pipe.enable_xformers_memory_efficient_attention()

prompt = "chinese modern girl,Real photo of a girl, super high definition, super beautiful, lots of details, super good lighting, beautiful, cute, and lovely,anime"


# images = pipe(prompt=prompt).images[0]
# 保存图片
# images.save("images/stable-diffusion-xl-base-1.0.png")
today = datetime.date.today()
m = hashlib.md5()
m.update(prompt.encode("utf-8"))
prompt_hash = m.hexdigest()


save_path = f"images/{today}/{int(time.time())}_{prompt_hash[:8]}"

os.makedirs(save_path, exist_ok=True)

# 指定采样器


# 制定随机数并生成多张图片
num_inference_steps = 50
while True:
    torch.cuda.empty_cache()
    current = int(time.time())
    generator = torch.Generator("cuda").manual_seed(current)
    images = pipe(prompt=prompt, generator=generator, num_images_per_prompt=2, num_inference_steps=num_inference_steps, width=1024, height=1024).images
    for index, img in enumerate(images):
        img.save(f"{save_path}/{current}_{index}_step_{num_inference_steps}.jpg")



测试refiner


import os, time
# os.environ['CUDA_VISIBLE_DEVICES'] = '1'



from diffusers import DiffusionPipeline
import torch

# load both base & refiner
base = DiffusionPipeline.from_pretrained(
    "stabilityai/stable-diffusion-xl-base-1.0", torch_dtype=torch.float16, variant="fp16", use_safetensors=True
)
base.to("cuda")
refiner = DiffusionPipeline.from_pretrained(
    "stabilityai/stable-diffusion-xl-refiner-1.0",
    text_encoder_2=base.text_encoder_2,
    vae=base.vae,
    torch_dtype=torch.float16,
    use_safetensors=True,
    variant="fp16",
)
refiner.to("cuda")

# Define how many steps and what % of steps to be run on each experts (80/20) here
n_steps = 40
high_noise_frac = 0.8

prompt = "panda couples wearing hoodie with flowers, 4k, --chaos 60"

# monkey
for _ in range(5):
    seed = int(time.time()*1000)
    generator = torch.Generator("cuda").manual_seed(seed)
    # run both experts
    image = base(
        prompt=prompt,
        num_inference_steps=n_steps,
        denoising_end=high_noise_frac,
        generator=generator,
        output_type="latent",
        width=768,height=512,
        num_images_per_prompt=2
    ).images

    refiner_images = refiner(
        prompt=prompt,
        num_inference_steps=n_steps,
        denoising_start=high_noise_frac,
        generator=generator,
        image=image,
        width=768,height=512,
        num_images_per_prompt=2
    ).images

    for index, img in enumerate(refiner_images):
        img.save(f"data/img_{seed//1000}_{index}.jpg")
    torch.cuda.empty_cache()



    
版权属于:

那棵树看起来生气了

本文链接:

(转载时请注明本文出处及文章链接)