IF-I-XL-v1.0

DeepFloyd
Texto a imagen

DeepFloyd-IF es un modelo de difusión en cascada de texto a imagen basado en píxeles que puede generar imágenes con un nuevo estado del arte para el fotorrealismo y la comprensión del lenguaje. El resultado es un modelo altamente eficiente que supera a los modelos de última generación actuales, logrando una puntuación FID-30K sin entrenamiento previo de 6.66 en el conjunto de datos COCO.

Como usar

IF está integrado con la librería 🤗 Hugging Face 🧨 diffusers, que está optimizada para ejecutarse en GPUs con tan solo 14 GB de VRAM.

Antes de poder usar IF, debes aceptar sus condiciones de uso. Para hacerlo:

  1. Asegúrate de tener una cuenta de Hugging Face y estar iniciado sesión
  2. Acepta la licencia en la tarjeta del modelo de DeepFloyd/IF-I-XL-v1.0
  3. Asegúrate de iniciar sesión localmente. Instala huggingface_hub
pip install huggingface_hub --upgrade

Ejecuta la función de inicio de sesión en un shell de Python

from huggingface_hub import login

login()

e introduce tu token de acceso a Hugging Face Hub.

A continuación instalamos diffusers y dependencias:

pip install diffusers accelerate transformers safetensors sentencepiece

Y ahora podemos ejecutar el modelo localmente. Por defecto, diffusers hace uso de la descarga del modelo a CPU para ejecutar toda la canalización IF con tan solo 14 GB de VRAM. Si estás utilizando torch>=2.0.0, asegúrate de eliminar todas las funciones enable_xformers_memory_efficient_attention().

Load all stages and offload to CPU
from diffusers import DiffusionPipeline
from diffusers.utils import pt_to_pil
import torch

# stage 1
stage_1 = DiffusionPipeline.from_pretrained("DeepFloyd/IF-I-XL-v1.0", variant="fp16", torch_dtype=torch.float16)
stage_1.enable_xformers_memory_efficient_attention() # remove line if torch.__version__ >= 2.0.0
stage_1.enable_model_cpu_offload()

# stage 2
stage_2 = DiffusionPipeline.from_pretrained(
"DeepFloyd/IF-II-L-v1.0", text_encoder=None, variant="fp16", torch_dtype=torch.float16
)
stage_2.enable_xformers_memory_efficient_attention() # remove line if torch.__version__ >= 2.0.0
stage_2.enable_model_cpu_offload()

# stage 3
safety_modules = {"feature_extractor": stage_1.feature_extractor, "safety_checker": stage_1.safety_checker, "watermarker": stage_1.watermarker}
stage_3 = DiffusionPipeline.from_pretrained("stabilityai/stable-diffusion-x4-upscaler", **safety_modules, torch_dtype=torch.float16)
stage_3.enable_xformers_memory_efficient_attention() # remove line if torch.__version__ >= 2.0.0
stage_3.enable_model_cpu_offload()

Retrieve Text Embeddings

prompt = 'a photo of a kangaroo wearing an orange hoodie and blue sunglasses standing in front of the Eiffel Tower holding a sign that says "very deep learning"'

# text embeds
prompt_embeds, negative_embeds = stage_1.encode_prompt(prompt)

Run stage 1
generator = torch.manual_seed(0)

image = stage_1(prompt_embeds=prompt_embeds, negative_prompt_embeds=negative_embeds, generator=generator, output_type="pt").images
pt_to_pil(image)[0].save("./if_stage_I.png")

Run stage 2

image = stage_2(
image=image, prompt_embeds=prompt_embeds, negative_prompt_embeds=negative_embeds, generator=generator, output_type="pt").images
pt_to_pil(image)[0].save("./if_stage_II.png")

Run stage 3

image = stage_3(prompt=prompt, image=image, generator=generator, noise_level=100).images
image[0].save("./if_stage_III.png")

Hay múltiples maneras de acelerar el tiempo de inferencia y reducir aún más el consumo de memoria con diffusers. Para hacerlo, consulta los documentos de Diffusers:

  • Optimización para el tiempo de inferencia
  • Optimización para baja memoria durante la inferencia

Para más información detallada sobre cómo usar IF, consulta la publicación del blog de IF y la documentación 📖. Los scripts de diffusers dreambooth también soportan la afinación 🎨 de IF. Con afinación eficiente de parámetros, puedes agregar nuevos conceptos a IF con una sola GPU y ~28 GB de VRAM.

Funcionalidades

Modelo de difusión en cascada de texto a imagen basado en píxeles
Modular compuesto por un modo de texto congelado y tres módulos de difusión en cascada de píxeles
Genera imágenes de resolución creciente: 64x64, 256x256 y 1024x1024
Utiliza un codificador de texto congelado basado en el transformador T5 para extraer incrustaciones de texto
Arquitectura UNet mejorada con atención cruzada y agrupamiento de atención
Puntuación FID-30K de 6.66 en el conjunto de datos COCO

Casos de uso

Generación de imágenes artísticas y uso en procesos de diseño y otros procesos artísticos.
Despliegue seguro de modelos que tienen el potencial de generar contenido dañino.
Exploración y comprensión de las limitaciones y sesgos de los modelos generativos.
Aplicaciones en herramientas educativas o creativas.
Investigación en modelos generativos.