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.
- Cómo crear el Chatbot LLaMa 2 con Gradio y Hugging Face en Free Colab.
- Esta investigación de IA revoluciona el diseño del modulador Mach-Zehnder de silicio a través del aprendizaje profundo y algoritmos evolutivos
- Tiempo 100 IA ¿Los más influyentes?
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:
- Las imágenes de condición se preparan primero en el formato de imagen de control adecuado.
- 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.
-
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.
-
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 queadapter_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!
Was this article helpful?
93 out of 132 found this helpful
Related articles
- Python Enumerate() Simplifica el bucle con contadores
- Conoce a CityDreamer Un modelo generativo compositivo para ciudades 3D ilimitadas
- Comprendiendo el sesgo algorítmico Tipos, causas y estudios de casos
- El nacimiento de la Ciencia de Datos La primera prueba de hipótesis de la historia e ideas sobre Python
- Quantización de Tensores La Historia No Contada
- ¿Pueden los Transformers aprender a estrategizar?
- Transformando la investigación en Catalyst Conoce a CatBERTa, un modelo de IA basado en Transformers diseñado para la predicción de energía utilizando entradas de texto