IF-I-M-v1.0

DeepFloyd
Texto a imagen

DeepFloyd-IF es un modelo de difusión en cascada triple 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 de 6.66 en el conjunto de datos COCO.

Como usar

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

Antes de que puedas usar IF, necesitas aceptar sus condiciones de uso. Para hacerlo:

Asegúrate de tener una cuenta de Hugging Face y estar logueado. Acepta la licencia en la tarjeta del modelo de DeepFloyd/IF-I-M-v1.0. Inicia sesión localmente. Instala huggingface_hub

pip install huggingface_hub --upgrade

Ejecuta la función de inicio de sesión en una consola de Python

from huggingface_hub import login
login()

E ingresa tu token de acceso de Hugging Face Hub.

A continuación, instala diffusers y dependencias:

pip install diffusers accelerate transformers safetensors sentencepiece

Y ahora podemos ejecutar el modelo localmente. De forma predeterminada, diffusers hace uso de la descarga del modelo a la CPU para ejecutar todo el pipeline IF con tan solo 14 GB de VRAM.

Si estás usando torch>=2.0.0, asegúrate de eliminar todas las funciones enable_xformers_memory_efficient_attention().

Cargar todas las etapas y descargar a CPU

from diffusers import DiffusionPipeline
from diffusers.utils import pt_to_pil
import torch

# stage 1
stage_1 = DiffusionPipeline.from_pretrained("DeepFloyd/IF-I-M-v1.0", variant="fp16", torch_dtype=torch.float16)
stage_1.enable_xformers_memory_efficient_attention() # eliminar línea si torch.__version__ >= 2.0.0
stage_1.enable_model_cpu_offload()

# stage 2
stage_2 = DiffusionPipeline.from_pretrained(
"DeepFloyd/IF-II-M-v1.0", text_encoder=None, variant="fp16", torch_dtype=torch.float16
)
stage_2.enable_xformers_memory_efficient_attention() # eliminar línea si 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() # eliminar línea si torch.__version__ >= 2.0.0
stage_3.enable_model_cpu_offload()

# Recuperar incrustaciones de texto

prompt = 'una foto de un canguro con una sudadera naranja y gafas de sol azules frente a la torre Eiffel con un cartel que dice "very deep learning"'

# incrustaciones de texto
prompt_embeds, negative_embeds = stage_1.encode_prompt(prompt)

# Ejecutar etapa 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")

# Ejecutar etapa 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")

# Ejecutar etapa 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, por favor consulta la documentación de Diffusers:

🚀 Optimización para el tiempo de inferencia ⚙️ Optimización para baja memoria durante la inferencia

Para obtener información más detallada sobre cómo usar IF, consulta la publicación del blog de IF y la documentación 📖.

Los scripts de dreambooth de diffusers también soportan el ajuste fino de 🎨 IF. Con un ajuste fino 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
Tres módulos de difusión en cascada que generan imágenes de resoluciones crecientes: 64x64, 256x256 y 1024x1024
Uso de un codificador de texto basado en el transformador T5 para extraer incrustaciones de texto
Arquitectura UNet mejorada con atención cruzada y agrupación de atención
Optimizado para ejecutarse en GPUs con tan solo 14 GB de VRAM

Casos de uso

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