YOSO (YOSO-LoRA) - You Only Sample Once
Luo-Yihong
Texto a imagen
YOSO fue propuesto en el documento "You Only Sample Once: Taming One-Step Text-to-Image Synthesis by Self-Cooperative Diffusion GANs" por Yihong Luo, Xiaolong Chen, Xinghua Qu y Jing Tang. Este modelo se centra en sintetizar imágenes a partir de texto utilizando Diffusion GANs cooperativos.
Como usar
import torch
from diffusers import DiffusionPipeline, LCMScheduler
# Inferencia de un solo paso
pipeline = DiffusionPipeline.from_pretrained("runwayml/stable-diffusion-v1-5", torch_dtype=torch.float16)
pipeline = pipeline.to('cuda')
pipeline.scheduler = LCMScheduler.from_config(pipeline.scheduler.config)
pipeline.load_lora_weights('Luo-Yihong/yoso_sd1.5_lora')
generator = torch.manual_seed(318)
steps = 1
bs = 1
latents = ... # Tal vez algunos códigos latentes de imágenes reales o generación de SD
latent_mean = latent.mean(dim=0)
init_latent = latent_mean.repeat(bs, 1, 1, 1) + latents.std() * torch.randn_like(latents)
noise = torch.randn([bs, 4, 64, 64])
input_latent = pipeline.scheduler.add_noise(init_latent, noise, T)
imgs = pipeline(
prompt="A photo of a dog",
num_inference_steps=steps,
num_images_per_prompt=1,
generator=generator,
guidance_scale=1.5,
latents=input_latent,
)[0]
# Inferencia simple sin inicialización informativa
pipeline = DiffusionPipeline.from_pretrained("runwayml/stable-diffusion-v1-5", torch_dtype=torch.float16)
pipeline = pipeline.to('cuda')
pipeline.scheduler = LCMScheduler.from_config(pipeline.scheduler.config)
pipeline.load_lora_weights('Luo-Yihong/yoso_sd1.5_lora')
generator = torch.manual_seed(318)
steps = 1
imgs = pipeline(
prompt="A photo of a corgi in forest, highly detailed, 8k, XT3.",
num_inference_steps=1,
num_images_per_prompt=1,
generator=generator,
guidance_scale=1.,
)[0]
# Inferencia de dos pasos
pipeline = DiffusionPipeline.from_pretrained("stablediffusionapi/realistic-vision-v51", torch_dtype=torch.float16)
pipeline = pipeline.to('cuda')
pipeline.scheduler = LCMScheduler.from_config(pipeline.scheduler.config)
pipeline.load_lora_weights('Luo-Yihong/yoso_sd1.5_lora')
generator = torch.manual_seed(318)
steps = 2
imgs= pipeline(
prompt="A photo of a man, XT3",
num_inference_steps=steps,
num_images_per_prompt=1,
generator=generator,
guidance_scale=1.5,
)[0]
# Uso con nuevos modelos base y solucionadores avanzados
from diffusers import DPMSolverMultistepScheduler
pipeline = DiffusionPipeline.from_pretrained("stablediffusionapi/realistic-vision-v51", torch_dtype=torch.float16)
pipeline = pipeline.to('cuda')
pipeline.load_lora_weights('Luo-Yihong/yoso_sd1.5_lora')
pipeline.scheduler = DPMSolverMultistepScheduler.from_pretrained("runwayml/stable-diffusion-v1-5", subfolder="scheduler")
generator = torch.manual_seed(323)
steps = 2
imgs= pipeline(
prompt="A photo of a girl, XT3",
num_inference_steps=steps,
num_images_per_prompt=1,
generator=generator,
guidance_scale=1.5,
)[0]
# Prueba con diferentes solucionadores
img_list = []
for age in [2, 20, 30, 50, 60, 80]:
imgs = pipeline(
prompt=f"A photo of a cute girl, {age} yr old, XT3",
num_inference_steps=steps,
num_images_per_prompt=1,
generator=generator,
guidance_scale=1.1,
)[0]
img_list.append(imgs[0])
make_image_grid(img_list, rows=1, cols=len(img_list))
Funcionalidades
- Inferencia de un solo paso
- Inferencia de dos pasos
- Compatible con SD v1.5
- Capacidad para usar avanzados solucionadores ODE
- Capacidad para mejorar la calidad de la muestra ajustando los pasos de inferencia
Casos de uso
- Crear imágenes a partir de descripciones de texto
- Generar imágenes con individuos de diferentes edades
- Mejorar la calidad de las imágenes generadas combinando diversos solucionadores