Generación eficiente y controlable para SDXL con adaptadores T2I

Efficient and controllable SDXL generation with T2I adapters

T2I-Adapter es un modelo eficiente de plug-and-play que proporciona orientación adicional a los modelos de texto a imagen pre-entrenados mientras se congela el tamaño original de los modelos grandes de texto a imagen. T2I-Adapter alinea el conocimiento interno en los modelos T2I con señales de control externas. Podemos entrenar varios adaptadores según diferentes condiciones y lograr efectos de control y edición ricos.

Como trabajo contemporáneo, ControlNet tiene una función similar y se utiliza ampliamente. Sin embargo, puede ser computacionalmente costoso de ejecutar. Esto se debe a que, durante cada paso de eliminación de ruido del proceso de difusión inversa, tanto ControlNet como UNet deben ejecutarse. Además, ControlNet enfatiza la importancia de copiar el codificador UNet como un modelo de control, lo que resulta en un mayor número de parámetros. Por lo tanto, la generación se ve limitada por el tamaño de ControlNet (cuanto más grande, más lento se vuelve el proceso).

Los T2I-Adapters brindan una ventaja competitiva sobre los ControlNets en este aspecto. Los T2I-Adapters son más pequeños en tamaño y, a diferencia de los ControlNets, los T2I-Adapters se ejecutan solo una vez durante todo el proceso de eliminación de ruido.

En las últimas semanas, el equipo de Diffusers y los autores de T2I-Adapter han estado colaborando para brindar soporte de T2I-Adapters para Stable Diffusion XL (SDXL) en diffusers. En esta publicación de blog, compartimos nuestros hallazgos de entrenamiento de T2I-Adapters en SDXL desde cero, algunos resultados interesantes y, por supuesto, los puntos de control de T2I-Adapter en diversas condiciones (boceto, canny, lineart, profundidad y openpose).

En comparación con las versiones anteriores de T2I-Adapter (SD-1.4/1.5), T2I-Adapter-SDXL todavía utiliza la receta original, impulsando 2.6B SDXL con un Adaptador de 79M. ¡T2I-Adapter-SDXL mantiene capacidades de control poderosas al heredar la generación de alta calidad de SDXL!

Entrenamiento de T2I-Adapter-SDXL con diffusers

Construimos nuestro script de entrenamiento en este ejemplo oficial proporcionado por diffusers.

La mayoría de los modelos de T2I-Adapter que mencionamos en esta publicación de blog se entrenaron con 3M pares de imágenes-texto de alta resolución de LAION-Aesthetics V2 con la siguiente configuración:

  • Pasos de entrenamiento: 20000-35000
  • Tamaño del lote: Paralelismo de datos con un tamaño de lote de GPU único de 16 para un tamaño de lote total de 128.
  • Tasa de aprendizaje: Tasa de aprendizaje constante de 1e-5.
  • Precisión mixta: fp16

Animamos a la comunidad a utilizar nuestros scripts para entrenar T2I-Adapters personalizados y potentes, logrando un equilibrio competitivo entre velocidad, memoria y calidad.

Uso de T2I-Adapter-SDXL en diffusers

Aquí, tomamos la condición de lineart como ejemplo para demostrar el uso de T2I-Adapter-SDXL. Para comenzar, primero instale las dependencias requeridas:

pip install -U git+https://github.com/huggingface/diffusers.git
pip install -U controlnet_aux==0.0.7 # para modelos y detectores condicionales
pip install transformers accelerate 

El proceso de generación del T2I-Adapter-SDXL consiste principalmente en los siguientes dos pasos:

  1. Las imágenes de condición se preparan primero en el formato de imagen de control adecuado.
  2. La imagen de control y la indicación se pasan al StableDiffusionXLAdapterPipeline.

Echemos un vistazo a un ejemplo sencillo utilizando el Adaptador de Lineart. Comenzamos inicializando el pipeline del T2I-Adapter para SDXL y el detector de lineart.

import torch
from controlnet_aux.lineart import LineartDetector
from diffusers import (AutoencoderKL, EulerAncestralDiscreteScheduler,
                       StableDiffusionXLAdapterPipeline, T2IAdapter)
from diffusers.utils import load_image, make_image_grid

# cargar adaptador
adapter = T2IAdapter.from_pretrained(
    "TencentARC/t2i-adapter-lineart-sdxl-1.0", torch_dtype=torch.float16, varient="fp16"
).to("cuda")

# cargar pipeline
model_id = "stabilityai/stable-diffusion-xl-base-1.0"
euler_a = EulerAncestralDiscreteScheduler.from_pretrained(
    model_id, subfolder="scheduler"
)
vae = AutoencoderKL.from_pretrained(
    "madebyollin/sdxl-vae-fp16-fix", torch_dtype=torch.float16
)
pipe = StableDiffusionXLAdapterPipeline.from_pretrained(
    model_id,
    vae=vae,
    adapter=adapter,
    scheduler=euler_a,
    torch_dtype=torch.float16,
    variant="fp16",
).to("cuda")

# cargar detector de lineart
line_detector = LineartDetector.from_pretrained("lllyasviel/Annotators").to("cuda")

Luego, carga una imagen para detectar el arte lineal:

url = "https://huggingface.co/Adapter/t2iadapter/resolve/main/figs_SDXLV1.0/org_lin.jpg"
image = load_image(url)
image = line_detector(image, detect_resolution=384, image_resolution=1024)

Luego generamos:

prompt = "Rugido de dragón de hielo, foto 4k"
negative_prompt = "anime, dibujo animado, gráfico, texto, pintura, crayón, grafito, abstracto, glitch, deformado, mutado, feo, desfigurado"
gen_images = pipe(
    prompt=prompt,
    negative_prompt=negative_prompt,
    image=image,
    num_inference_steps=30,
    adapter_conditioning_scale=0.8,
    guidance_scale=7.5,
).images[0]
gen_images.save("out_lin.png")

Hay dos argumentos importantes para entender que te ayudan a controlar la cantidad de condicionamiento.

  1. adapter_conditioning_scale

    Este argumento controla cuánta influencia debe tener el condicionamiento en la entrada. Valores altos significan un mayor efecto de condicionamiento y viceversa.

  2. adapter_conditioning_factor

    Este argumento controla cuántos pasos de generación inicial deben tener el condicionamiento aplicado. El valor debe establecerse entre 0-1 (el valor predeterminado es 1). El valor de adapter_conditioning_factor=1 significa que el adaptador debe aplicarse a todos los pasos de tiempo, mientras que adapter_conditioning_factor=0.5 significa que solo se aplicará durante el primer 50% de los pasos.

Para más detalles, te invitamos a consultar la documentación oficial.

Prueba la Demo

Puedes probar fácilmente T2I-Adapter-SDXL en este espacio o en el playground incrustado a continuación:

Más Resultados

A continuación, presentamos resultados obtenidos mediante el uso de diferentes tipos de condiciones. También complementamos los resultados con enlaces a sus puntos de control preentrenados correspondientes. Sus tarjetas de modelo contienen más detalles sobre cómo se entrenaron, junto con ejemplos de uso.

Guiado por Arte Lineal

Modelo de TencentARC/t2i-adapter-lineart-sdxl-1.0

Guiado por Boceto

Modelo de TencentARC/t2i-adapter-sketch-sdxl-1.0

Guiado por Canny

Modelo de TencentARC/t2i-adapter-canny-sdxl-1.0

Guiado por Profundidad

Modelos guiados por profundidad de TencentARC/t2i-adapter-depth-midas-sdxl-1.0 y TencentARC/t2i-adapter-depth-zoe-sdxl-1.0 respectivamente

Guiado por OpenPose

Modelo de TencentARC/t2i-adapter-openpose-sdxl-1.0


Agradecimientos: Un agradecimiento inmenso a William Berman por ayudarnos a entrenar los modelos y compartir sus conocimientos.

We will continue to update Zepes; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more

Inteligencia Artificial

Samet honrado con el Premio ACM SIGSPATIAL al Impacto de por Vida

Hanan Samet fue honrado con el Premio Inaugural al Impacto de toda la Vida de ACM's Special Interest Group on Spatial...

Inteligencia Artificial

Esta investigación de IA presenta Point-Bind un modelo de multimodalidad 3D que alinea nubes de puntos con imágenes 2D, lenguaje, audio y video

En el actual panorama tecnológico, la visión 3D ha emergido como una estrella en ascenso, capturando el foco de atenc...

Inteligencia Artificial

Falta de representación de nativos americanos en roles tecnológicos en Estados Unidos'.

Un informe encontró que los estudiantes nativos americanos siguen estando subrepresentados en los cursos de ciencias ...

Inteligencia Artificial

Los satélites más antiguos de observación de la Tierra de NOAA obtienen 'vida prolongada

La Administración Nacional Oceánica y Atmosférica utilizará un sistema basado en la nube para extender la vida de los...

Inteligencia Artificial

Decodificación anticipada un algoritmo de decodificación paralela para acelerar la inferencia de LLM

Aunque los modelos de lenguaje grandes (LLM) como GPT-4 y LLaMA están reimaginando rápidamente las aplicaciones moder...

Inteligencia Artificial

Las características de IA SaaS se encuentran con aplicaciones sin fosos

Varias empresas de SaaS han anunciado recientemente características de IA generativa, lo cual representa una amenaza ...