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