IF-I-XL-v1.0
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:
- Asegúrate de tener una cuenta de Hugging Face y estar iniciado sesión
- Acepta la licencia en la tarjeta del modelo de DeepFloyd/IF-I-XL-v1.0
- 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.