Diffusers documentation
Stable Diffusion 2
Stable Diffusion 2
Stable Diffusion 2 é um modelo de latent diffusion de texto para imagem construído sobre o trabalho do original Stable Diffusion, e foi liderado por Robin Rombach e Katherine Crowson da Stability AI e LAION.
O lançamento do Stable Diffusion 2.0 inclui modelos robustos de texto para imagem treinados usando um novo codificador de texto (OpenCLIP), desenvolvido pela LAION com o apoio da Stability AI, o que melhora significativamente a qualidade das imagens geradas em comparação com as versões anteriores V1. Os modelos de texto para imagem deste lançamento podem gerar imagens com resoluções padrão de 512x512 pixels e 768x768 pixels. Esses modelos são treinados em um subconjunto estético do conjunto de dados LAION-5B criado pela equipe DeepFloyd da Stability AI, que é então filtrado para remover conteúdo adulto usando o filtro NSFW da LAION.
Para mais detalhes sobre como o Stable Diffusion 2 funciona e como ele difere do Stable Diffusion original, consulte o post de anúncio oficial.
A arquitetura do Stable Diffusion 2 é mais ou menos idêntica ao modelo original Stable Diffusion, então consulte a documentação da API dele para saber como usar o Stable Diffusion 2. Recomendamos usar o DPMSolverMultistepScheduler, pois ele oferece um bom equilíbrio entre velocidade e qualidade e pode ser executado com apenas 20 etapas.
O Stable Diffusion 2 está disponível para tarefas como texto-para-imagem, inpainting, super-resolução e profundidade-para-imagem:
| Tarefa | Repositório |
|---|---|
| texto-para-imagem (512x512) | stabilityai/stable-diffusion-2-base |
| texto-para-imagem (768x768) | stabilityai/stable-diffusion-2 |
| inpainting | stabilityai/stable-diffusion-2-inpainting |
| super-resolução | stable-diffusion-x4-upscaler |
| depth-to-image | stabilityai/stable-diffusion-2-depth |
Aqui estão alguns exemplos de como usar o Stable Diffusion 2 para cada tarefa:
Certifique-se de conferir a seção Dicas do Stable Diffusion para aprender como explorar o equilíbrio entre a velocidade e a qualidade do agendador, e como reutilizar os componentes do pipeline de forma eficiente!
Se você estiver interessado em usar um dos checkpoints oficiais para uma tarefa, explore as organizações CompVis e Stability AI no Hub!
Texto para imagem
from diffusers import DiffusionPipeline, DPMSolverMultistepScheduler
import torch
repo_id = "stabilityai/stable-diffusion-2-base"
pipe = DiffusionPipeline.from_pretrained(repo_id, dtype=torch.float16, variant="fp16")
pipe.scheduler = DPMSolverMultistepScheduler.from_config(pipe.scheduler.config)
pipe = pipe.to("cuda") # or "mps", "xpu", "cpu"
prompt = "High quality photo of an astronaut riding a horse in space"
image = pipe(prompt, num_inference_steps=25).images[0]
imageInpainting
import torch
from diffusers import DiffusionPipeline, DPMSolverMultistepScheduler
from diffusers.utils import load_image, make_image_grid
img_url = "https://raw.githubusercontent.com/CompVis/latent-diffusion/main/data/inpainting_examples/overture-creations-5sI6fQgYIuo.png"
mask_url = "https://raw.githubusercontent.com/CompVis/latent-diffusion/main/data/inpainting_examples/overture-creations-5sI6fQgYIuo_mask.png"
init_image = load_image(img_url).resize((512, 512))
mask_image = load_image(mask_url).resize((512, 512))
repo_id = "stabilityai/stable-diffusion-2-inpainting"
pipe = DiffusionPipeline.from_pretrained(repo_id, dtype=torch.float16, variant="fp16")
pipe.scheduler = DPMSolverMultistepScheduler.from_config(pipe.scheduler.config)
pipe = pipe.to("cuda") # or "mps", "xpu", "cpu"
prompt = "Face of a yellow cat, high resolution, sitting on a park bench"
image = pipe(prompt=prompt, image=init_image, mask_image=mask_image, num_inference_steps=25).images[0]
make_image_grid([init_image, mask_image, image], rows=1, cols=3)Super-resolução
from diffusers import StableDiffusionUpscalePipeline
from diffusers.utils import load_image, make_image_grid
import torch
# load model and scheduler
model_id = "stabilityai/stable-diffusion-x4-upscaler"
pipeline = StableDiffusionUpscalePipeline.from_pretrained(model_id, dtype=torch.float16)
pipeline = pipeline.to("cuda") # or "mps", "xpu", "cpu"
# let's download an image
url = "https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main/sd2-upscale/low_res_cat.png"
low_res_img = load_image(url)
low_res_img = low_res_img.resize((128, 128))
prompt = "a white cat"
upscaled_image = pipeline(prompt=prompt, image=low_res_img).images[0]
make_image_grid([low_res_img.resize((512, 512)), upscaled_image.resize((512, 512))], rows=1, cols=2)Profundidade para imagem
import torch
from diffusers import StableDiffusionDepth2ImgPipeline
from diffusers.utils import load_image, make_image_grid
pipe = StableDiffusionDepth2ImgPipeline.from_pretrained(
"stabilityai/stable-diffusion-2-depth",
dtype=torch.float16,
).to("cuda") # or "mps", "xpu", "cpu"
url = "http://images.cocodataset.org/val2017/000000039769.jpg"
init_image = load_image(url)
prompt = "two tigers"
negative_prompt = "bad, deformed, ugly, bad anotomy"
image = pipe(prompt=prompt, image=init_image, negative_prompt=negative_prompt, strength=0.7).images[0]
make_image_grid([init_image, image], rows=1, cols=2)