stabilityai/stable-diffusion-xl-base-1.0
SDXL consiste en un conjunto de expertos en canalización para la difusión latente: en un primer paso, se utiliza el modelo base para generar latentes (ruidosos), que luego se procesan con un modelo de refinamiento especializado en los pasos finales de eliminación de ruido. Tenga en cuenta que el modelo base puede ser utilizado como módulo independiente. Alternativamente, podemos usar una canalización de dos etapas de la siguiente manera: primero, se utiliza el modelo base para generar latentes del tamaño de salida deseado. En el segundo paso, utilizamos un modelo de alta resolución especializado y aplicamos una técnica llamada SDEdit (también conocida como 'img2img') a los latentes generados en el primer paso, utilizando el mismo aviso. Esta técnica es ligeramente más lenta que la primera, ya que requiere más evaluaciones de función. El código fuente está disponible en https://github.com/Stability-AI/generative-models.
Como usar
from diffusers import DiffusionPipeline
import torch
pipe = DiffusionPipeline.from_pretrained("stabilityai/stable-diffusion-xl-base-1.0", torch_dtype=torch.float16, use_safetensors=True, variant="fp16")
pipe.to("cuda")
# si se usa torch < 2.0
# pipe.enable_xformers_memory_efficient_attention()
prompt = "Un astronauta montando un caballo verde"
images = pipe(prompt=prompt).images[0]
# Para utilizar la canalización completa base + refinador como un conjunto de expertos, puede ejecutar:
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")
n_steps = 40
high_noise_frac = 0.8
prompt = "Un majestuoso león saltando desde una gran piedra en la noche"
image = base(
prompt=prompt,
num_inference_steps=n_steps,
denoising_end=high_noise_frac,
output_type="latent",
).images
image = refiner(
prompt=prompt,
num_inference_steps=n_steps,
denoising_start=high_noise_frac,
image=image,
).images[0]
# Si está utilizando torch >= 2.0, puede mejorar la velocidad de inferencia en un 20-30% con torch.compile:
pipe.unet = torch.compile(pipe.unet, mode="reduce-overhead", fullgraph=True)
# Si está limitado por la VRAM de la GPU, puede habilitar la descarga de CPU llamando a pipe.enable_model_cpu_offload:
pipe.enable_model_cpu_offload()
Funcionalidades
- Modelo generativo de texto a imagen basado en difusión
- Utiliza dos codificadores de texto fijos y preentrenados (OpenCLIP-ViT/G y CLIP-ViT/L)
- Optimización con Diffusers y Optimum para mejorar el rendimiento
- Funcionalidades de inferencia en tiempo real
- Compatible con OpenVINO y ONNX Runtime
Casos de uso
- Generación de obras de arte y su uso en procesos de diseño y otros procesos artísticos
- Aplicaciones en herramientas educativas o creativas
- Investigación sobre modelos generativos
- Despliegue seguro de modelos con el potencial de generar contenido dañino
- Sondeo y comprensión de las limitaciones y sesgos de los modelos generativos