Buckets:
ControlNetUnion
ControlNetUnionModel es una implementación de ControlNet para Stable Diffusion XL.
El modelo ControlNet se introdujo en ControlNetPlus por xinsir6. Admite múltiples entradas de condicionamiento sin aumentar la computación.
Diseñamos una nueva arquitectura que puede soportar más de 10 tipos de control en la generación de imágenes a partir de texto condicional y que puede generar imágenes de alta resolución visualmente comparables con midjourney. La red se basa en la arquitectura original de ControlNet; proponemos dos nuevos módulos para: 1 Extender la ControlNet original para soportar diferentes condiciones de imagen usando el mismo parámetro de red. 2 Soportar la entrada de múltiples condiciones sin aumentar el offload de cómputo, lo cual es especialmente importante para los diseñadores que desean editar la imagen en detalle; las diferentes condiciones usan el mismo codificador de condición, sin añadir cálculos ni parámetros adicionales.
StableDiffusionXLControlNetUnionPipeline[[diffusers.StableDiffusionXLControlNetUnionPipeline]]
diffusers.StableDiffusionXLControlNetUnionPipeline[[diffusers.StableDiffusionXLControlNetUnionPipeline]]
diffusers.StableDiffusionXLControlNetUnionPipeline(vae: AutoencoderKL, text_encoder: CLIPTextModel, text_encoder_2: CLIPTextModelWithProjection, tokenizer: CLIPTokenizer, tokenizer_2: CLIPTokenizer, unet: UNet2DConditionModel, controlnet: diffusers.models.controlnets.controlnet_union.ControlNetUnionModel | list[diffusers.models.controlnets.controlnet_union.ControlNetUnionModel] | tuple[diffusers.models.controlnets.controlnet_union.ControlNetUnionModel] | diffusers.models.controlnets.multicontrolnet_union.MultiControlNetUnionModel, scheduler: KarrasDiffusionSchedulers, force_zeros_for_empty_prompt: bool = True, add_watermarker: bool | None = None, feature_extractor: CLIPImageProcessorPil = None, image_encoder: CLIPVisionModelWithProjection = None)
Parámetros:
vae (AutoencoderKL) : Modelo de Variational Auto-Encoder (VAE) para codificar y decodificar imágenes hacia y desde representaciones latentes.
text_encoder (CLIPTextModel) : Codificador de texto congelado (clip-vit-large-patch14).
text_encoder_2 (CLIPTextModelWithProjection) : Segundo codificador de texto congelado (laion/CLIP-ViT-bigG-14-laion2B-39B-b160k).
tokenizer (CLIPTokenizer) : Un CLIPTokenizer para tokenizar texto.
tokenizer_2 (CLIPTokenizer) : Un CLIPTokenizer para tokenizar texto.
unet (UNet2DConditionModel) : Un UNet2DConditionModel para desruidar los latentes de imagen codificados.
controlnet (ControlNetUnionModel) : Provides additional conditioning to the unet` during the denoising process.
scheduler (SchedulerMixin) : Un scheduler para usar en combinación con unet para desruidar los latentes de la imagen codificada. Puede ser uno de DDIMScheduler, LMSDiscreteScheduler o PNDMScheduler.
force_zeros_for_empty_prompt (bool, opcional, valor predeterminado "True") : Si las incrustaciones del prompt negativo deben establecerse siempre en 0. Consulte también la configuración de stabilityai/stable-diffusion-xl-base-1-0.
add_watermarker (bool, opcional) : Si se debe usar la biblioteca invisible_watermark para aplicar marcas de agua a las imágenes de salida. Si no se define, el valor predeterminado es True si el paquete está instalado; de lo contrario, no se utiliza ninguna marca de agua.
Pipeline para la generación de imágenes a partir de texto usando Stable Diffusion XL con guía de ControlNet.
Este modelo hereda de DiffusionPipeline. Consulta la documentación de la clase superior para los métodos genéricos implementados en todas las tuberías (descarga, guardado, ejecución en un dispositivo específico, etc.).
El pipeline también hereda los siguientes métodos de carga:
- load_textual_inversion() para cargar incrustaciones de inversión textual
- load_lora_weights() para cargar los pesos de LoRA
- save_lora_weights() para guardar los pesos de LoRA
- from_single_file() para la carga de archivos
.ckpt - load_ip_adapter() para cargar IP Adapters
call[[diffusers.StableDiffusionXLControlNetUnionPipeline.call]]
__call__(prompt: str | list[str] = None, prompt_2: str | list[str] | None = None, control_image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor], list[typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]]]] = None, height: int | None = None, width: int | None = None, num_inference_steps: int = 50, timesteps: list[int] = None, sigmas: list[float] = None, denoising_end: float | None = None, guidance_scale: float = 5.0, negative_prompt: str | list[str] | None = None, negative_prompt_2: str | list[str] | None = None, num_images_per_prompt: int | None = 1, eta: float = 0.0, generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = None, latents: typing.Optional[torch.Tensor] = None, prompt_embeds: typing.Optional[torch.Tensor] = None, negative_prompt_embeds: typing.Optional[torch.Tensor] = None, pooled_prompt_embeds: typing.Optional[torch.Tensor] = None, negative_pooled_prompt_embeds: typing.Optional[torch.Tensor] = None, ip_adapter_image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor], NoneType] = None, ip_adapter_image_embeds: list[torch.Tensor] | None = None, output_type: str | None = 'pil', return_dict: bool = True, cross_attention_kwargs: dict[str, typing.Any] | None = None, controlnet_conditioning_scale: float | list[float] = 1.0, guess_mode: bool = False, control_guidance_start: float | list[float] = 0.0, control_guidance_end: float | list[float] = 1.0, control_mode: int | list[int] | list[list[int]] | None = None, original_size: tuple[int, int] = None, crops_coords_top_left: tuple[int, int] = (0, 0), target_size: tuple[int, int] = None, negative_original_size: tuple[int, int] | None = None, negative_crops_coords_top_left: tuple[int, int] = (0, 0), negative_target_size: tuple[int, int] | None = None, clip_skip: int | None = None, callback_on_step_end: typing.Union[typing.Callable[[int, int], NoneType], diffusers.callbacks.PipelineCallback, diffusers.callbacks.MultiPipelineCallbacks, NoneType] = None, callback_on_step_end_tensor_inputs: list[str] = ['latents'])
Parámetros:
prompt (str o list[str], opcional) : El prompt o los prompts para guiar la generación de imágenes. Si no se define, debe pasar prompt_embeds.
prompt_2 (str o list[str], opcional) : El prompt o los prompts que se enviarán a tokenizer_2 y text_encoder_2. Si no se define, se utiliza prompt en ambos text-encoders.
control_image (PipelineImageInput o list[PipelineImageInput], opcional) : La condición de entrada de ControlNet para proporcionar orientación a la unet durante la generación. Si el tipo se especifica como torch.Tensor, se pasa a ControlNet tal cual. También se puede aceptar PIL.Image.Image como imagen. Las dimensiones de la imagen de salida son, por defecto, las dimensiones de image. Si se pasan la altura y/o el ancho, image se redimensiona en consecuencia. Si se especifican varios ControlNets en init, las imágenes deben pasarse como una lista para que cada elemento de la lista pueda agruparse correctamente como entrada para un único ControlNet.
height (int, opcional, valor predeterminado self.unet.config.sample_size * self.vae_scale_factor) : La altura en píxeles de la imagen generada. Cualquier valor inferior a 512 píxeles no funcionará bien con stabilityai/stable-diffusion-xl-base-1.0 ni con puntos de control que no estén específicamente afinados en resoluciones bajas.
width (int, opcional, valor predeterminado self.unet.config.sample_size * self.vae_scale_factor) : El ancho en píxeles de la imagen generada. Cualquier valor inferior a 512 píxeles no funcionará bien con stabilityai/stable-diffusion-xl-base-1.0 ni con puntos de control que no estén específicamente afinados en resoluciones bajas.
num_inference_steps (int, opcional, valor predeterminado 50) : El número de pasos de desruido. Más pasos de desruido suelen conducir a una imagen de mayor calidad a costa de una inferencia más lenta.
timesteps (list[int], opcional) : Pasos de tiempo personalizados para usar en el proceso de desruido con programadores que admiten un argumento timesteps en su método set_timesteps. Si no se define, se usará el comportamiento predeterminado cuando se pase num_inference_steps. Debe estar en orden descendente.
sigmas (list[float], opcional) : Sigmas personalizados para usar en el proceso de desruido con programadores que admiten un argumento sigmas en su método set_timesteps. Si no se define, se usará el comportamiento predeterminado cuando se pase num_inference_steps.
denoising_end (float, opcional) : Cuando se especifica, determina la fracción (entre 0.0 y 1.0) del proceso total de desruido que debe completarse antes de que se termine prematuramente de forma intencional. Como resultado, la muestra devuelta aún conservará una cantidad sustancial de ruido, tal como lo determinan los pasos discretos seleccionados por el programador. El parámetro denoising_end debería utilizarse idealmente cuando esta pipeline forma parte de una configuración multipipeline de "Mixture of Denoisers", como se detalla en Refining the Image Output
guidance_scale (float, opcional, valor predeterminado 5.0) : Un valor más alto de la escala de guía anima al modelo a generar imágenes estrechamente vinculadas al prompt de texto a costa de una menor calidad de imagen. La escala de guía se habilita cuando guidance_scale > 1.
negative_prompt (str o list[str], opcional) : El prompt o los prompts para guiar lo que no debe incluirse en la generación de la imagen. Si no se define, debe pasar negative_prompt_embeds en su lugar. Se ignora cuando no se usa guía (guidance_scale < 1).
negative_prompt_2 (str o list[str], opcional) : El prompt o los prompts para guiar lo que no debe incluirse en la generación de la imagen. Esto se envía a tokenizer_2 y text_encoder_2. Si no está definido, se utiliza negative_prompt en ambos text-encoders.
num_images_per_prompt (int, opcional, valor predeterminado 1) : El número de imágenes a generar por indicación.
eta (float, opcional, valor predeterminado 0.0) : Corresponde al parámetro eta (η) del artículo DDIM. Solo se aplica al DDIMScheduler y se ignora en otros programadores.
generator (torch.Generator o list[torch.Generator], opcional) : Un torch.Generator para hacer la generación determinista.
latents (torch.Tensor, opcional) : Latentes ruidosos pregenerados muestreados de una distribución gaussiana, que se utilizarán como entradas para la generación de imágenes. Se pueden usar para ajustar la misma generación con diferentes prompts. Si no se proporciona, se genera un tensor de latentes mediante muestreo usando el generator aleatorio suministrado.
prompt_embeds (torch.Tensor, opcional) : Incrustaciones de texto pregeneradas. Se pueden usar para ajustar fácilmente las entradas de texto (ponderación del prompt). Si no se proporcionan, las incrustaciones de texto se generan a partir del argumento de entrada prompt.
negative_prompt_embeds (torch.Tensor, opcional) : Embeddings de texto negativos pregenerados. Se pueden usar para ajustar fácilmente las entradas de texto (ponderación del prompt). Si no se proporcionan, negative_prompt_embeds se generan a partir del argumento de entrada negative_prompt.
pooled_prompt_embeds (torch.Tensor, opcional) : Embeddings de texto agrupados pregenerados. Se pueden utilizar para ajustar fácilmente las entradas de texto (ponderación del prompt). Si no se proporcionan, los embeddings de texto agrupados se generan a partir del argumento de entrada prompt.
negative_pooled_prompt_embeds (torch.Tensor, opcional) : Embeddings de texto negativo ya generados. Se pueden usar para ajustar fácilmente las entradas de texto (ponderación de prompts). Si no se proporcionan, los negative_prompt_embeds se generan a partir del argumento de entrada negative_prompt.
ip_adapter_image : (PipelineImageInput, opcional): Entrada de imagen opcional para trabajar con IP Adapters.
ip_adapter_image_embeds (list[torch.Tensor], opcional) : Incrustaciones de imagen pregeneradas para IP-Adapter. Debe ser una lista de la misma longitud que el número de IP-adapters. Cada elemento debe ser un tensor de forma (batch_size, num_images, emb_dim). Debe contener la incrustación de imagen negativa si do_classifier_free_guidance está establecido en True. Si no se proporciona, las incrustaciones se calculan a partir del argumento de entrada ip_adapter_image.
output_type (str, opcional, por defecto "pil") : El formato de salida de la imagen generada. Elija entre PIL.Image o np.array.
return_dict (bool, opcional, valor predeterminado True) : Indica si se debe devolver un StableDiffusionPipelineOutput en lugar de una tupla simple.
cross_attention_kwargs (dict, opcional) : Un diccionario de kwargs que, si se especifica, se pasa al AttentionProcessor tal como se define en self.processor.
controlnet_conditioning_scale (float o list[float], opcional, valor predeterminado 1.0) : Las salidas del ControlNet se multiplican por controlnet_conditioning_scale antes de sumarse al residual en el unet original. Si se especifican varios ControlNets en init, puedes establecer la escala correspondiente como una lista.
guess_mode (bool, opcional, valor predeterminado False) : El codificador de ControlNet intenta reconocer el contenido de la imagen de entrada incluso si eliminas todos los prompts. Se recomienda un valor de guidance_scale entre 3.0 y 5.0.
control_guidance_start (float o list[float], opcional, valor predeterminado 0.0) : El porcentaje de pasos totales en el que ControlNet comienza a aplicarse.
control_guidance_end (float o list[float], opcional, valor predeterminado 1.0) : El porcentaje de pasos totales en el que ControlNet deja de aplicarse.
control_mode (int or list[int] or list[list[int]], *optional*) : The control condition types for the ControlNet. See the ControlNet's model card forinformation on the available control modes. If multiple ControlNets are specified in init`, control_mode should be a list where each ControlNet should have its corresponding control mode list. Should reflect the order of conditions in control_image.
original_size (tuple[int], opcional, valor predeterminado (1024, 1024)) : Si original_size no es igual a target_size, la imagen parecerá haber sido reescalada hacia abajo o hacia arriba. original_size tiene como valor predeterminado (height, width) si no se especifica. Parte del micro-condicionamiento de SDXL, tal como se explica en la sección 2.2 de https://huggingface.co/papers/2307.01952.
crops_coords_top_left (tuple[int], opcional, valor predeterminado (0, 0)) : crops_coords_top_left se puede utilizar para generar una imagen que parezca "recortada" desde la posición crops_coords_top_left hacia abajo. Generalmente, se logran imágenes favorables y bien centradas estableciendo crops_coords_top_left en (0, 0). Forma parte del micro-condicionamiento de SDXL, tal como se explica en la sección 2.2 de https://huggingface.co/papers/2307.01952.
target_size (tuple[int], opcional, valor predeterminado (1024, 1024)) : En la mayoría de los casos, target_size debe establecerse en la altura y el ancho deseados de la imagen generada. Si no se especifica, el valor predeterminado será (height, width). Forma parte del micro-condicionamiento de SDXL, tal como se explica en la sección 2.2 de https://huggingface.co/papers/2307.01952.
negative_original_size (tuple[int], opcional, valor predeterminado (1024, 1024)) : Para condicionar negativamente el proceso de generación en función de una resolución de imagen específica. Forma parte del micro-condicionamiento de SDXL, tal como se explica en la sección 2.2 de https://huggingface.co/papers/2307.01952. Para obtener más información, consulte este hilo de problemas: https://github.com/huggingface/diffusers/issues/4208.
negative_crops_coords_top_left (tuple[int], opcional, valor predeterminado (0, 0)) : Para condicionar negativamente el proceso de generación en función de unas coordenadas de recorte específicas. Forma parte del micro-condicionamiento de SDXL, tal como se explica en la sección 2.2 de https://huggingface.co/papers/2307.01952. Para obtener más información, consulte este hilo de problemas: https://github.com/huggingface/diffusers/issues/4208.
negative_target_size (tuple[int], opcional, valor predeterminado (1024, 1024)) : Para condicionar negativamente el proceso de generación en función de la resolución de imagen objetivo. Debe ser igual que target_size en la mayoría de los casos. Forma parte del micro-condicionamiento de SDXL, tal como se explica en la sección 2.2 de https://huggingface.co/papers/2307.01952. Para obtener más información, consulte este hilo de problemas: https://github.com/huggingface/diffusers/issues/4208.
clip_skip (int, opcional) : Número de capas que se omitirán de CLIP al calcular los embeddings del prompt. Un valor de 1 significa que se utilizará la salida de la capa previa a la final para calcular los embeddings del prompt.
callback_on_step_end (Callable, PipelineCallback, MultiPipelineCallbacks, opcional) : una función o una subclase de PipelineCallback o MultiPipelineCallbacks que se llama al final de cada paso de denoising durante la inferencia, con los siguientes argumentos: callback_on_step_end(self: DiffusionPipeline, step: int, timestep: int, callback_kwargs: Dict). callback_kwargs incluirá una lista de todos los tensores especificados por callback_on_step_end_tensor_inputs.
callback_on_step_end_tensor_inputs (list, opcional) : La lista de entradas de tensor para la función callback_on_step_end. Los tensores especificados en la lista se pasarán como argumento callback_kwargs. Solo podrá incluir variables enumeradas en el atributo ._callback_tensor_inputs de su clase de pipeline.
Devuelve: StableDiffusionPipelineOutput o tuple
Si return_dict es True, se devuelve StableDiffusionPipelineOutput; en caso contrario, se devuelve una tuple que contiene las imágenes de salida.
La función de llamada para el pipeline de generación.
Ejemplos:
>>> # !pip install controlnet_aux
>>> from controlnet_aux import LineartAnimeDetector
>>> from diffusers import StableDiffusionXLControlNetUnionPipeline, ControlNetUnionModel, AutoencoderKL
>>> from diffusers.utils import load_image
>>> import torch
>>> prompt = "A cat"
>>> # download an image
>>> image = load_image(
... "https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main/kandinsky/cat.png"
... ).resize((1024, 1024))
>>> # initialize the models and pipeline
>>> controlnet = ControlNetUnionModel.from_pretrained(
... "xinsir/controlnet-union-sdxl-1.0", torch_dtype=torch.float16
... )
>>> vae = AutoencoderKL.from_pretrained("madebyollin/sdxl-vae-fp16-fix", torch_dtype=torch.float16)
>>> pipe = StableDiffusionXLControlNetUnionPipeline.from_pretrained(
... "stabilityai/stable-diffusion-xl-base-1.0",
... controlnet=controlnet,
... vae=vae,
... torch_dtype=torch.float16,
... variant="fp16",
... )
>>> pipe.enable_model_cpu_offload()
>>> # prepare image
>>> processor = LineartAnimeDetector.from_pretrained("lllyasviel/Annotators")
>>> controlnet_img = processor(image, output_type="pil")
>>> # generate image
>>> image = pipe(prompt, control_image=[controlnet_img], control_mode=[3], height=1024, width=1024).images[0]
encode_prompt[[diffusers.StableDiffusionXLControlNetUnionPipeline.encode_prompt]]
encode_prompt(prompt: str, prompt_2: str | None = None, device: typing.Optional[torch.device] = None, num_images_per_prompt: int = 1, do_classifier_free_guidance: bool = True, negative_prompt: str | None = None, negative_prompt_2: str | None = None, prompt_embeds: typing.Optional[torch.Tensor] = None, negative_prompt_embeds: typing.Optional[torch.Tensor] = None, pooled_prompt_embeds: typing.Optional[torch.Tensor] = None, negative_pooled_prompt_embeds: typing.Optional[torch.Tensor] = None, lora_scale: float | None = None, clip_skip: int | None = None)
Parámetros:
prompt (str o list[str], opcional) : prompt a codificar
prompt_2 (str o list[str], opcional) : El prompt o los prompts que se enviarán al tokenizer_2 y al text_encoder_2. Si no se define, se utiliza prompt en ambos text-encoders
device : (torch.device): dispositivo de torch
num_images_per_prompt (int) : número de imágenes que deben generarse por prompt
do_classifier_free_guidance (bool) : si se debe usar o no la guía libre de clasificador
negative_prompt (str o list[str], opcional) : El prompt o prompts que no deben guiar la generación de la imagen. Si no se define, se debe pasar negative_prompt_embeds en su lugar. Se ignora cuando no se usa guía (es decir, se ignora si guidance_scale es menor que 1).
negative_prompt_2 (str o list[str], opcional) : El prompt o los prompts que no deben guiar la generación de la imagen y que se enviarán a tokenizer_2 y text_encoder_2. Si no se define, negative_prompt se utiliza en ambos text-encoders
prompt_embeds (torch.Tensor, opcional) : Embeddings de texto pregenerados. Se pueden usar para ajustar fácilmente las entradas de texto, p. ej. ponderación de prompts. Si no se proporcionan, los embeddings de texto se generarán a partir del argumento de entrada prompt.
negative_prompt_embeds (torch.Tensor, opcional) : Embeddings de texto negativos pregenerados. Se pueden utilizar para ajustar fácilmente las entradas de texto, p. ej. el ponderado de prompts. Si no se proporcionan, negative_prompt_embeds se generará a partir del argumento de entrada negative_prompt.
pooled_prompt_embeds (torch.Tensor, opcional) : Embeddings de texto agrupados pregenerados. Se pueden utilizar para ajustar fácilmente las entradas de texto, p. ej. el ponderado de prompts. Si no se proporcionan, los embeddings de texto agrupados se generarán a partir del argumento de entrada prompt.
negative_pooled_prompt_embeds (torch.Tensor, opcional) : Embeddings de texto negativo agrupados pregenerados. Se pueden utilizar para ajustar fácilmente las entradas de texto, p. ej. el ponderado de prompts. Si no se proporcionan, los pooled negative_prompt_embeds se generarán a partir del argumento de entrada negative_prompt.
lora_scale (float, opcional) : Una escala lora que se aplicará a todas las capas LoRA del codificador de texto si se cargan capas LoRA.
clip_skip (int, opcional) : Número de capas que se omitirán de CLIP al calcular los embeddings del prompt. Un valor de 1 significa que se utilizará la salida de la capa previa a la final para calcular los embeddings del prompt.
Codifica el prompt en estados ocultos del codificador de texto.
get_guidance_scale_embedding[[diffusers.StableDiffusionXLControlNetUnionPipeline.get_guidance_scale_embedding]]
get_guidance_scale_embedding(w: Tensor, embedding_dim: int = 512, dtype: dtype = torch.float32)
Parámetros:
w (torch.Tensor) : Genera vectores de incrustación con una escala de guía especificada para enriquecer posteriormente las incrustaciones de paso temporal.
embedding_dim (int, opcional, valor predeterminado 512) : Dimensión de las incrustaciones a generar.
dtype (torch.dtype, opcional, valor predeterminado torch.float32) : Tipo de datos de los embeddings generados.
Devuelve: torch.Tensor
Vectores de incrustación con forma (len(w), embedding_dim).
StableDiffusionXLControlNetUnionImg2ImgPipeline[[diffusers.StableDiffusionXLControlNetUnionImg2ImgPipeline]]
diffusers.StableDiffusionXLControlNetUnionImg2ImgPipeline[[diffusers.StableDiffusionXLControlNetUnionImg2ImgPipeline]]
diffusers.StableDiffusionXLControlNetUnionImg2ImgPipeline(vae: AutoencoderKL, text_encoder: CLIPTextModel, text_encoder_2: CLIPTextModelWithProjection, tokenizer: CLIPTokenizer, tokenizer_2: CLIPTokenizer, unet: UNet2DConditionModel, controlnet: diffusers.models.controlnets.controlnet_union.ControlNetUnionModel | list[diffusers.models.controlnets.controlnet_union.ControlNetUnionModel] | tuple[diffusers.models.controlnets.controlnet_union.ControlNetUnionModel] | diffusers.models.controlnets.multicontrolnet_union.MultiControlNetUnionModel, scheduler: KarrasDiffusionSchedulers, requires_aesthetics_score: bool = False, force_zeros_for_empty_prompt: bool = True, add_watermarker: bool | None = None, feature_extractor: CLIPImageProcessorPil = None, image_encoder: CLIPVisionModelWithProjection = None)
Parámetros:
vae (AutoencoderKL) : Modelo de Variational Auto-Encoder (VAE) para codificar y decodificar imágenes hacia y desde representaciones latentes.
text_encoder (CLIPTextModel) : Codificador de texto congelado. Stable Diffusion utiliza la parte de texto de CLIP, específicamente la variante clip-vit-large-patch14.
text_encoder_2 ( CLIPTextModelWithProjection) : Segundo codificador de texto congelado. Stable Diffusion XL utiliza la parte de texto y pool de CLIP, específicamente la variante laion/CLIP-ViT-bigG-14-laion2B-39B-b160k.
tokenizer (CLIPTokenizer) : Tokenizador de la clase CLIPTokenizer.
tokenizer_2 (CLIPTokenizer) : Segundo Tokenizer de la clase CLIPTokenizer.
unet (UNet2DConditionModel) : Arquitectura de U-Net condicional para desruidar los latentes de imagen codificados.
controlnet (ControlNetUnionModel) : Proporciona una condición adicional al unet durante el proceso de desruido.
scheduler (SchedulerMixin) : Un scheduler para usar en combinación con unet para desruidar los latentes de la imagen codificada. Puede ser uno de DDIMScheduler, LMSDiscreteScheduler o PNDMScheduler.
requires_aesthetics_score (bool, opcional, valor predeterminado "False") : Indica si el unet requiere que se pase una condición aesthetic_score durante la inferencia. Consulte también la configuración de stabilityai/stable-diffusion-xl-refiner-1-0.
force_zeros_for_empty_prompt (bool, opcional, valor predeterminado "True") : Si las incrustaciones del prompt negativo deben forzarse a establecerse siempre en 0. Consulte también la configuración de stabilityai/stable-diffusion-xl-base-1-0.
add_watermarker (bool, opcional) : Si se debe usar la invisible_watermark library para aplicar marcas de agua a las imágenes de salida. Si no se define, el valor predeterminado será True si el paquete está instalado; de lo contrario, no se usará ninguna marca de agua.
feature_extractor (CLIPImageProcessor) : Un CLIPImageProcessor para extraer características de las imágenes generadas; se utiliza como entrada para el safety_checker.
Pipeline para la generación de imagen a imagen usando Stable Diffusion XL con guía de ControlNet.
Este modelo hereda de DiffusionPipeline. Consulta la documentación de la clase superior para los métodos genéricos que la biblioteca implementa para todos los pipelines (como la descarga o el guardado, la ejecución en un dispositivo específico, etc.)
El pipeline también hereda los siguientes métodos de carga:
- load_textual_inversion() para cargar incrustaciones de inversión textual
- load_lora_weights() para cargar los pesos de LoRA
- save_lora_weights() para guardar los pesos de LoRA
- load_ip_adapter() para cargar IP Adapters
call[[diffusers.StableDiffusionXLControlNetUnionImg2ImgPipeline.call]]
__call__(prompt: str | list[str] = None, prompt_2: str | list[str] | None = None, image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]] = None, control_image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor], list[typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]]]] = None, height: int | None = None, width: int | None = None, strength: float = 0.8, num_inference_steps: int = 50, guidance_scale: float = 5.0, negative_prompt: str | list[str] | None = None, negative_prompt_2: str | list[str] | None = None, num_images_per_prompt: int | None = 1, eta: float = 0.0, generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = None, latents: typing.Optional[torch.Tensor] = None, prompt_embeds: typing.Optional[torch.Tensor] = None, negative_prompt_embeds: typing.Optional[torch.Tensor] = None, pooled_prompt_embeds: typing.Optional[torch.Tensor] = None, negative_pooled_prompt_embeds: typing.Optional[torch.Tensor] = None, ip_adapter_image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor], NoneType] = None, ip_adapter_image_embeds: list[torch.Tensor] | None = None, output_type: str | None = 'pil', return_dict: bool = True, cross_attention_kwargs: dict[str, typing.Any] | None = None, controlnet_conditioning_scale: float | list[float] = 0.8, guess_mode: bool = False, control_guidance_start: float | list[float] = 0.0, control_guidance_end: float | list[float] = 1.0, control_mode: int | list[int] | list[list[int]] | None = None, original_size: tuple[int, int] = None, crops_coords_top_left: tuple[int, int] = (0, 0), target_size: tuple[int, int] = None, negative_original_size: tuple[int, int] | None = None, negative_crops_coords_top_left: tuple[int, int] = (0, 0), negative_target_size: tuple[int, int] | None = None, aesthetic_score: float = 6.0, negative_aesthetic_score: float = 2.5, clip_skip: int | None = None, callback_on_step_end: typing.Union[typing.Callable[[int, int], NoneType], diffusers.callbacks.PipelineCallback, diffusers.callbacks.MultiPipelineCallbacks, NoneType] = None, callback_on_step_end_tensor_inputs: list[str] = ['latents'], **kwargs)
Parámetros:
prompt (str o list[str], opcional) : El prompt o los prompts para guiar la generación de la imagen. Si no se define, se debe pasar prompt_embeds en su lugar.
prompt_2 (str o list[str], opcional) : El prompt o los prompts que se enviarán al tokenizer_2 y al text_encoder_2. Si no se define, se utiliza prompt en ambos text-encoders
image (torch.Tensor, PIL.Image.Image, np.ndarray, list[torch.Tensor], list[PIL.Image.Image], list[np.ndarray], : list[list[torch.Tensor]], list[list[np.ndarray]] o list[list[PIL.Image.Image]]): La imagen inicial se utilizará como punto de partida para el proceso de generación de imágenes. También puede aceptar latentes de imagen como image; si se pasan latentes directamente, no se codificarán de nuevo.
control_image (PipelineImageInput o list[PipelineImageInput], opcional) : La condición de entrada de ControlNet para proporcionar orientación a la unet durante la generación. Si el tipo se especifica como torch.Tensor, se pasa a ControlNet tal cual. También se puede aceptar PIL.Image.Image como imagen. Las dimensiones de la imagen de salida son, por defecto, las dimensiones de image. Si se pasan la altura y/o el ancho, image se redimensiona en consecuencia. Si se especifican varios ControlNets en init, las imágenes deben pasarse como una lista para que cada elemento de la lista pueda agruparse correctamente como entrada para un único ControlNet.
height (int, opcional, por defecto el tamaño de control_image) : La altura en píxeles de la imagen generada. Cualquier valor inferior a 512 píxeles no funcionará bien con stabilityai/stable-diffusion-xl-base-1.0 ni con puntos de control que no estén específicamente afinados en resoluciones bajas.
width (int, opcional, por defecto el tamaño de control_image) : El ancho en píxeles de la imagen generada. Cualquier valor inferior a 512 píxeles no funcionará bien con stabilityai/stable-diffusion-xl-base-1.0 ni con puntos de control que no estén específicamente afinados en resoluciones bajas.
strength (float, opcional, valor predeterminado 0.8) : Indica el grado en que se transforma la image de referencia. Debe estar entre 0 y 1. image se utiliza como punto de partida y se añade más ruido a medida que aumenta el strength. El número de pasos de desruido depende de la cantidad de ruido añadido inicialmente. Cuando strength es 1, el ruido añadido es máximo y el proceso de desruido se ejecuta durante el número completo de iteraciones especificado en num_inference_steps. Un valor de 1 ignora esencialmente image.
num_inference_steps (int, opcional, valor predeterminado 50) : El número de pasos de desruido. Más pasos de desruido suelen conducir a una imagen de mayor calidad a costa de una inferencia más lenta.
guidance_scale (float, opcional, valor predeterminado 7.5) : Escala de orientación definida en Classifier-Free Diffusion Guidance. guidance_scale se define como w de la ecuación 2. de Imagen Paper. La escala de orientación se habilita estableciendo guidance_scale > 1. Una escala de orientación más alta fomenta la generación de imágenes estrechamente vinculadas al prompt de texto, generalmente a costa de una menor calidad de imagen.
negative_prompt (str o list[str], opcional) : El prompt o prompts que no deben guiar la generación de la imagen. Si no se define, se debe pasar negative_prompt_embeds en su lugar. Se ignora cuando no se usa guía (es decir, se ignora si guidance_scale es menor que 1).
negative_prompt_2 (str o list[str], opcional) : El prompt o los prompts que no deben guiar la generación de la imagen y que se enviarán a tokenizer_2 y text_encoder_2. Si no se define, negative_prompt se utiliza en ambos text-encoders
num_images_per_prompt (int, opcional, valor predeterminado 1) : El número de imágenes a generar por indicación.
eta (float, opcional, valor predeterminado 0.0) : Corresponde al parámetro eta (η) en el artículo de DDIM: https://huggingface.co/papers/2010.02502. Solo se aplica a schedulers.DDIMScheduler, se ignorará en los demás.
generator (torch.Generator o list[torch.Generator], opcional) : Uno o una lista de generadores de torch para hacer la generación determinista.
latents (torch.Tensor, opcional) : Latentes ruidosos pregenerados, muestreados de una distribución gaussiana, que se utilizarán como entradas para la generación de imágenes. Se pueden usar para ajustar la misma generación con diferentes prompts. Si no se proporcionan, se generará un tensor de latentes mediante muestreo usando el generator aleatorio suministrado.
prompt_embeds (torch.Tensor, opcional) : Embeddings de texto pregenerados. Se pueden usar para ajustar fácilmente las entradas de texto, p. ej. ponderación de prompts. Si no se proporcionan, los embeddings de texto se generarán a partir del argumento de entrada prompt.
negative_prompt_embeds (torch.Tensor, opcional) : Embeddings de texto negativos pregenerados. Se pueden utilizar para ajustar fácilmente las entradas de texto, p. ej. el ponderado de prompts. Si no se proporcionan, negative_prompt_embeds se generará a partir del argumento de entrada negative_prompt.
pooled_prompt_embeds (torch.Tensor, opcional) : Embeddings de texto agrupados pregenerados. Se pueden utilizar para ajustar fácilmente las entradas de texto, p. ej. el ponderado de prompts. Si no se proporcionan, los embeddings de texto agrupados se generarán a partir del argumento de entrada prompt.
negative_pooled_prompt_embeds (torch.Tensor, opcional) : Embeddings de texto negativo agrupados pregenerados. Se pueden utilizar para ajustar fácilmente las entradas de texto, p. ej. el ponderado de prompts. Si no se proporcionan, los pooled negative_prompt_embeds se generarán a partir del argumento de entrada negative_prompt.
ip_adapter_image : (PipelineImageInput, opcional): Entrada de imagen opcional para trabajar con IP Adapters.
ip_adapter_image_embeds (list[torch.Tensor], opcional) : Incrustaciones de imagen pregeneradas para IP-Adapter. Debe ser una lista de la misma longitud que el número de IP-adapters. Cada elemento debe ser un tensor de forma (batch_size, num_images, emb_dim). Debe contener la incrustación de imagen negativa si do_classifier_free_guidance está establecido en True. Si no se proporciona, las incrustaciones se calculan a partir del argumento de entrada ip_adapter_image.
output_type (str, opcional, por defecto "pil") : El formato de salida de la imagen generada. Elija entre PIL: PIL.Image.Image o np.array.
return_dict (bool, opcional, valor predeterminado True) : Indica si se debe devolver un StableDiffusionPipelineOutput en lugar de una tupla simple.
cross_attention_kwargs (dict, opcional) : Un diccionario de kwargs que, si se especifica, se pasa al AttentionProcessor tal como se define bajo self.processor en diffusers.models.attention_processor.
controlnet_conditioning_scale (float o list[float], opcional, valor predeterminado 1.0) : Las salidas del ControlNet se multiplican por controlnet_conditioning_scale antes de sumarse al residual en el unet original. Si se especifican varios ControlNets en init, puedes establecer la escala correspondiente como una lista.
guess_mode (bool, opcional, valor predeterminado False) : En este modo, el codificador de ControlNet intentará reconocer el contenido de la imagen de entrada incluso si eliminas todos los prompts. Se recomienda un guidance_scale entre 3.0 y 5.0.
control_guidance_start (float o list[float], opcional, valor predeterminado 0.0) : El porcentaje de pasos totales en el que ControlNet comienza a aplicarse.
control_guidance_end (float o list[float], opcional, valor predeterminado 1.0) : El porcentaje de pasos totales en el que ControlNet deja de aplicarse.
control_mode (int or list[int] or list[list[int]], *optional*) : The control condition types for the ControlNet. See the ControlNet's model card forinformation on the available control modes. If multiple ControlNets are specified in init`, control_mode should be a list where each ControlNet should have its corresponding control mode list. Should reflect the order of conditions in control_image
original_size (tuple[int], opcional, valor predeterminado (1024, 1024)) : Si original_size no es igual a target_size, la imagen parecerá haber sido reescalada hacia abajo o hacia arriba. original_size tiene como valor predeterminado (height, width) si no se especifica. Parte del micro-condicionamiento de SDXL, tal como se explica en la sección 2.2 de https://huggingface.co/papers/2307.01952.
crops_coords_top_left (tuple[int], opcional, valor predeterminado (0, 0)) : crops_coords_top_left se puede utilizar para generar una imagen que parezca "recortada" desde la posición crops_coords_top_left hacia abajo. Generalmente, se logran imágenes favorables y bien centradas estableciendo crops_coords_top_left en (0, 0). Forma parte del micro-condicionamiento de SDXL, tal como se explica en la sección 2.2 de https://huggingface.co/papers/2307.01952.
target_size (tuple[int], opcional, valor predeterminado (1024, 1024)) : En la mayoría de los casos, target_size debe establecerse en la altura y el ancho deseados de la imagen generada. Si no se especifica, el valor predeterminado será (height, width). Forma parte del micro-condicionamiento de SDXL, tal como se explica en la sección 2.2 de https://huggingface.co/papers/2307.01952.
negative_original_size (tuple[int], opcional, valor predeterminado (1024, 1024)) : Para condicionar negativamente el proceso de generación en función de una resolución de imagen específica. Forma parte del micro-condicionamiento de SDXL, tal como se explica en la sección 2.2 de https://huggingface.co/papers/2307.01952. Para obtener más información, consulte este hilo de problemas: https://github.com/huggingface/diffusers/issues/4208.
negative_crops_coords_top_left (tuple[int], opcional, valor predeterminado (0, 0)) : Para condicionar negativamente el proceso de generación en función de unas coordenadas de recorte específicas. Forma parte del micro-condicionamiento de SDXL, tal como se explica en la sección 2.2 de https://huggingface.co/papers/2307.01952. Para obtener más información, consulte este hilo de problemas: https://github.com/huggingface/diffusers/issues/4208.
negative_target_size (tuple[int], opcional, valor predeterminado (1024, 1024)) : Para condicionar negativamente el proceso de generación en función de la resolución de imagen objetivo. Debe ser igual que target_size en la mayoría de los casos. Forma parte del micro-condicionamiento de SDXL, tal como se explica en la sección 2.2 de https://huggingface.co/papers/2307.01952. Para obtener más información, consulte este hilo de problemas: https://github.com/huggingface/diffusers/issues/4208.
aesthetic_score (float, opcional, valor predeterminado 6.0) : Se utiliza para simular una puntuación estética de la imagen generada influyendo en la condición de texto positiva. Forma parte del micro-condicionamiento de SDXL, tal como se explica en la sección 2.2 de https://huggingface.co/papers/2307.01952.
negative_aesthetic_score (float, opcional, valor predeterminado 2.5) : Parte del micro-condicionamiento de SDXL, tal como se explica en la sección 2.2 de https://huggingface.co/papers/2307.01952. Puede utilizarse para simular una puntuación estética de la imagen generada influyendo en la condición de texto negativo.
clip_skip (int, opcional) : Número de capas que se omitirán de CLIP al calcular los embeddings del prompt. Un valor de 1 significa que se utilizará la salida de la capa previa a la final para calcular los embeddings del prompt.
callback_on_step_end (Callable, PipelineCallback, MultiPipelineCallbacks, opcional) : una función o una subclase de PipelineCallback o MultiPipelineCallbacks que se llama al final de cada paso de denoising durante la inferencia, con los siguientes argumentos: callback_on_step_end(self: DiffusionPipeline, step: int, timestep: int, callback_kwargs: Dict). callback_kwargs incluirá una lista de todos los tensores especificados por callback_on_step_end_tensor_inputs.
callback_on_step_end_tensor_inputs (list, opcional) : La lista de entradas de tensor para la función callback_on_step_end. Los tensores especificados en la lista se pasarán como argumento callback_kwargs. Solo podrá incluir variables enumeradas en el atributo ._callback_tensor_inputs de su clase de pipeline.
Devuelve: StableDiffusionPipelineOutput o tuple
StableDiffusionPipelineOutput si return_dict es True, de lo contrario una tuple que contiene las imágenes de salida.
Función invocada al llamar a la pipeline para la generación.
Ejemplos:
# !pip install controlnet_aux
from diffusers import (
StableDiffusionXLControlNetUnionImg2ImgPipeline,
ControlNetUnionModel,
AutoencoderKL,
)
from diffusers.utils import load_image
import torch
from PIL import Image
import numpy as np
prompt = "A cat"
# download an image
image = load_image(
"https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main/kandinsky/cat.png"
)
# initialize the models and pipeline
controlnet = ControlNetUnionModel.from_pretrained(
"brad-twinkl/controlnet-union-sdxl-1.0-promax", torch_dtype=torch.float16
)
vae = AutoencoderKL.from_pretrained("madebyollin/sdxl-vae-fp16-fix", torch_dtype=torch.float16)
pipe = StableDiffusionXLControlNetUnionImg2ImgPipeline.from_pretrained(
"stabilityai/stable-diffusion-xl-base-1.0",
controlnet=controlnet,
vae=vae,
torch_dtype=torch.float16,
variant="fp16",
).to("cuda")
# `enable_model_cpu_offload` is not recommended due to multiple generations
height = image.height
width = image.width
ratio = np.sqrt(1024.0 * 1024.0 / (width * height))
# 3 * 3 upscale correspond to 16 * 3 multiply, 2 * 2 correspond to 16 * 2 multiply and so on.
scale_image_factor = 3
base_factor = 16
factor = scale_image_factor * base_factor
W, H = int(width * ratio) // factor * factor, int(height * ratio) // factor * factor
image = image.resize((W, H))
target_width = W // scale_image_factor
target_height = H // scale_image_factor
images = []
crops_coords_list = [
(0, 0),
(0, width // 2),
(height // 2, 0),
(width // 2, height // 2),
0,
0,
0,
0,
0,
]
for i in range(scale_image_factor):
for j in range(scale_image_factor):
left = j * target_width
top = i * target_height
right = left + target_width
bottom = top + target_height
cropped_image = image.crop((left, top, right, bottom))
cropped_image = cropped_image.resize((W, H))
images.append(cropped_image)
# set ControlNetUnion input
result_images = []
for sub_img, crops_coords in zip(images, crops_coords_list):
new_width, new_height = W, H
out = pipe(
prompt=[prompt] * 1,
image=sub_img,
control_image=[sub_img],
control_mode=[6],
width=new_width,
height=new_height,
num_inference_steps=30,
crops_coords_top_left=(W, H),
target_size=(W, H),
original_size=(W * 2, H * 2),
)
result_images.append(out.images[0])
new_im = Image.new("RGB", (new_width * scale_image_factor, new_height * scale_image_factor))
new_im.paste(result_images[0], (0, 0))
new_im.paste(result_images[1], (new_width, 0))
new_im.paste(result_images[2], (new_width * 2, 0))
new_im.paste(result_images[3], (0, new_height))
new_im.paste(result_images[4], (new_width, new_height))
new_im.paste(result_images[5], (new_width * 2, new_height))
new_im.paste(result_images[6], (0, new_height * 2))
new_im.paste(result_images[7], (new_width, new_height * 2))
new_im.paste(result_images[8], (new_width * 2, new_height * 2))
encode_prompt[[diffusers.StableDiffusionXLControlNetUnionImg2ImgPipeline.encode_prompt]]
encode_prompt(prompt: str, prompt_2: str | None = None, device: typing.Optional[torch.device] = None, num_images_per_prompt: int = 1, do_classifier_free_guidance: bool = True, negative_prompt: str | None = None, negative_prompt_2: str | None = None, prompt_embeds: typing.Optional[torch.Tensor] = None, negative_prompt_embeds: typing.Optional[torch.Tensor] = None, pooled_prompt_embeds: typing.Optional[torch.Tensor] = None, negative_pooled_prompt_embeds: typing.Optional[torch.Tensor] = None, lora_scale: float | None = None, clip_skip: int | None = None)
Parámetros:
prompt (str o list[str], opcional) : prompt a codificar
prompt_2 (str o list[str], opcional) : El prompt o los prompts que se enviarán al tokenizer_2 y al text_encoder_2. Si no se define, se utiliza prompt en ambos text-encoders
device : (torch.device): dispositivo de torch
num_images_per_prompt (int) : número de imágenes que deben generarse por prompt
do_classifier_free_guidance (bool) : si se debe usar o no la guía libre de clasificador
negative_prompt (str o list[str], opcional) : El prompt o prompts que no deben guiar la generación de la imagen. Si no se define, se debe pasar negative_prompt_embeds en su lugar. Se ignora cuando no se usa guía (es decir, se ignora si guidance_scale es menor que 1).
negative_prompt_2 (str o list[str], opcional) : El prompt o los prompts que no deben guiar la generación de la imagen y que se enviarán a tokenizer_2 y text_encoder_2. Si no se define, negative_prompt se utiliza en ambos text-encoders
prompt_embeds (torch.Tensor, opcional) : Embeddings de texto pregenerados. Se pueden usar para ajustar fácilmente las entradas de texto, p. ej. ponderación de prompts. Si no se proporcionan, los embeddings de texto se generarán a partir del argumento de entrada prompt.
negative_prompt_embeds (torch.Tensor, opcional) : Embeddings de texto negativos pregenerados. Se pueden utilizar para ajustar fácilmente las entradas de texto, p. ej. el ponderado de prompts. Si no se proporcionan, negative_prompt_embeds se generará a partir del argumento de entrada negative_prompt.
pooled_prompt_embeds (torch.Tensor, opcional) : Embeddings de texto agrupados pregenerados. Se pueden utilizar para ajustar fácilmente las entradas de texto, p. ej. el ponderado de prompts. Si no se proporcionan, los embeddings de texto agrupados se generarán a partir del argumento de entrada prompt.
negative_pooled_prompt_embeds (torch.Tensor, opcional) : Embeddings de texto negativo agrupados pregenerados. Se pueden utilizar para ajustar fácilmente las entradas de texto, p. ej. el ponderado de prompts. Si no se proporcionan, los pooled negative_prompt_embeds se generarán a partir del argumento de entrada negative_prompt.
lora_scale (float, opcional) : Una escala lora que se aplicará a todas las capas LoRA del codificador de texto si se cargan capas LoRA.
clip_skip (int, opcional) : Número de capas que se omitirán de CLIP al calcular los embeddings del prompt. Un valor de 1 significa que se utilizará la salida de la capa previa a la final para calcular los embeddings del prompt.
Codifica el prompt en estados ocultos del codificador de texto.
StableDiffusionXLControlNetUnionInpaintPipeline[[diffusers.StableDiffusionXLControlNetUnionInpaintPipeline]]
diffusers.StableDiffusionXLControlNetUnionInpaintPipeline[[diffusers.StableDiffusionXLControlNetUnionInpaintPipeline]]
diffusers.StableDiffusionXLControlNetUnionInpaintPipeline(vae: AutoencoderKL, text_encoder: CLIPTextModel, text_encoder_2: CLIPTextModelWithProjection, tokenizer: CLIPTokenizer, tokenizer_2: CLIPTokenizer, unet: UNet2DConditionModel, controlnet: diffusers.models.controlnets.controlnet_union.ControlNetUnionModel | list[diffusers.models.controlnets.controlnet_union.ControlNetUnionModel] | tuple[diffusers.models.controlnets.controlnet_union.ControlNetUnionModel] | diffusers.models.controlnets.multicontrolnet_union.MultiControlNetUnionModel, scheduler: KarrasDiffusionSchedulers, requires_aesthetics_score: bool = False, force_zeros_for_empty_prompt: bool = True, add_watermarker: bool | None = None, feature_extractor: transformers.models.clip.image_processing_pil_clip.CLIPImageProcessorPil | None = None, image_encoder: transformers.models.clip.modeling_clip.CLIPVisionModelWithProjection | None = None)
Parámetros:
vae (AutoencoderKL) : Modelo de Variational Auto-Encoder (VAE) para codificar y decodificar imágenes hacia y desde representaciones latentes.
text_encoder (CLIPTextModel) : Codificador de texto congelado. Stable Diffusion XL utiliza la parte de texto de CLIP, específicamente la variante clip-vit-large-patch14.
text_encoder_2 ( CLIPTextModelWithProjection) : Segundo codificador de texto congelado. Stable Diffusion XL utiliza la parte de texto y pool de CLIP, específicamente la variante laion/CLIP-ViT-bigG-14-laion2B-39B-b160k.
tokenizer (CLIPTokenizer) : Tokenizador de la clase CLIPTokenizer.
tokenizer_2 (CLIPTokenizer) : Segundo Tokenizer de la clase CLIPTokenizer.
unet (UNet2DConditionModel) : Arquitectura de U-Net condicional para desruidar los latentes de imagen codificados.
scheduler (SchedulerMixin) : Un scheduler para usar en combinación con unet para desruidar los latentes de la imagen codificada. Puede ser uno de DDIMScheduler, LMSDiscreteScheduler o PNDMScheduler.
Pipeline para la generación de imágenes a partir de texto usando Stable Diffusion XL.
Este modelo hereda de DiffusionPipeline. Consulta la documentación de la clase superior para los métodos genéricos que la biblioteca implementa para todos los pipelines (como la descarga o el guardado, la ejecución en un dispositivo específico, etc.)
El pipeline también hereda los siguientes métodos de carga:
- load_textual_inversion() para cargar incrustaciones de inversión textual
- load_lora_weights() para cargar los pesos de LoRA
- save_lora_weights() para guardar los pesos de LoRA
- from_single_file() para la carga de archivos
.ckpt - load_ip_adapter() para cargar IP Adapters
call[[diffusers.StableDiffusionXLControlNetUnionInpaintPipeline.call]]
__call__(prompt: str | list[str] = None, prompt_2: str | list[str] | None = None, image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]] = None, mask_image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]] = None, control_image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor], list[typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]]]] = None, height: int | None = None, width: int | None = None, padding_mask_crop: int | None = None, strength: float = 0.9999, num_inference_steps: int = 50, denoising_start: float | None = None, denoising_end: float | None = None, guidance_scale: float = 5.0, negative_prompt: str | list[str] | None = None, negative_prompt_2: str | list[str] | None = None, num_images_per_prompt: int | None = 1, eta: float = 0.0, generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = None, latents: typing.Optional[torch.Tensor] = None, prompt_embeds: typing.Optional[torch.Tensor] = None, negative_prompt_embeds: typing.Optional[torch.Tensor] = None, ip_adapter_image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor], NoneType] = None, ip_adapter_image_embeds: list[torch.Tensor] | None = None, pooled_prompt_embeds: typing.Optional[torch.Tensor] = None, negative_pooled_prompt_embeds: typing.Optional[torch.Tensor] = None, output_type: str | None = 'pil', return_dict: bool = True, cross_attention_kwargs: dict[str, typing.Any] | None = None, controlnet_conditioning_scale: float | list[float] = 1.0, guess_mode: bool = False, control_guidance_start: float | list[float] = 0.0, control_guidance_end: float | list[float] = 1.0, control_mode: int | list[int] | list[list[int]] | None = None, guidance_rescale: float = 0.0, original_size: tuple[int, int] = None, crops_coords_top_left: tuple[int, int] = (0, 0), target_size: tuple[int, int] = None, aesthetic_score: float = 6.0, negative_aesthetic_score: float = 2.5, clip_skip: int | None = None, callback_on_step_end: typing.Union[typing.Callable[[int, int], NoneType], diffusers.callbacks.PipelineCallback, diffusers.callbacks.MultiPipelineCallbacks, NoneType] = None, callback_on_step_end_tensor_inputs: list[str] = ['latents'], **kwargs)
Parámetros:
prompt (str o list[str], opcional) : El prompt o los prompts para guiar la generación de la imagen. Si no se define, se debe pasar prompt_embeds en su lugar.
prompt_2 (str o list[str], opcional) : El prompt o los prompts que se enviarán al tokenizer_2 y al text_encoder_2. Si no se define, se utiliza prompt en ambos text-encoders
image (PIL.Image.Image) : Image, o tensor que representa un lote de imágenes que se someterán a inpainting, es decir, partes de la imagen se enmascararán con mask_image y se repintarán según prompt.
mask_image (PIL.Image.Image) : Image, o tensor que representa un lote de imágenes, para enmascarar image. Los píxeles blancos de la máscara se repintarán, mientras que los píxeles negros se conservarán. Si mask_image es una imagen PIL, se convertirá a un solo canal (luminancia) antes de su uso. Si es un tensor, debe contener un solo canal de color (L) en lugar de 3, por lo que la forma esperada sería (B, H, W, 1).
control_image (PipelineImageInput o list[PipelineImageInput], opcional) : La condición de entrada de ControlNet para proporcionar orientación a la unet durante la generación. Si el tipo se especifica como torch.Tensor, se pasa a ControlNet tal cual. También se puede aceptar PIL.Image.Image como imagen. Las dimensiones de la imagen de salida son, por defecto, las dimensiones de image. Si se pasan la altura y/o el ancho, image se redimensiona en consecuencia. Si se especifican varios ControlNets en init, las imágenes deben pasarse como una lista para que cada elemento de la lista pueda agruparse correctamente como entrada para un único ControlNet.
height (int, opcional, por defecto self.unet.config.sample_size * self.vae_scale_factor) : La altura en píxeles de la imagen generada.
width (int, opcional, por defecto self.unet.config.sample_size * self.vae_scale_factor) : El ancho en píxeles de la imagen generada.
padding_mask_crop (int, opcional, valor predeterminado None) : El tamaño del margen en el recorte que se aplicará a la imagen y la máscara. Si es None, no se aplica ningún recorte a la imagen y a mask_image. Si padding_mask_crop no es None, primero se buscará una región rectangular con la misma relación de aspecto que la imagen y que contenga toda el área enmascarada, y luego se expandirá esa área en función de padding_mask_crop. A continuación, la imagen y mask_image se recortarán según el área expandida antes de redimensionarlas al tamaño original de la imagen para el inpainting. Esto es útil cuando el área enmascarada es pequeña mientras que la imagen es grande y contiene información irrelevante para el inpainting, como el fondo.
strength (float, opcional, valor predeterminado 0.9999) : Conceptualmente, indica cuánto se debe transformar la parte enmascarada de la image de referencia. Debe estar entre 0 y 1. Se utilizará image como punto de partida, añadiendo más ruido a medida que aumenta el strength. El número de pasos de desruido depende de la cantidad de ruido añadido inicialmente. Cuando strength es 1, el ruido añadido será máximo y el proceso de desruido se ejecutará durante el número completo de iteraciones especificado en num_inference_steps. Por lo tanto, un valor de 1 ignora esencialmente la parte enmascarada de la image de referencia. Tenga en cuenta que, en el caso de que denoising_start se declare como un entero, se ignorará el valor de strength.
num_inference_steps (int, opcional, valor predeterminado 50) : El número de pasos de desruido. Más pasos de desruido suelen conducir a una imagen de mayor calidad a costa de una inferencia más lenta.
denoising_start (float, opcional) : Cuando se especifica, indica la fracción (entre 0.0 y 1.0) del proceso total de desruido que se omitirá antes de iniciarlo. En consecuencia, se omite la parte inicial del proceso de desruido y se asume que la image pasada es una imagen parcialmente desruidada. Tenga en cuenta que, cuando se especifica esto, la strength se ignorará. El parámetro denoising_start resulta especialmente beneficioso cuando este pipeline se integra en una configuración multipipeline de "Mixture of Denoisers", tal como se detalla en Refining the Image Output.
denoising_end (float, opcional) : Cuando se especifica, determina la fracción (entre 0.0 y 1.0) del proceso total de desruido que debe completarse antes de que se termine prematuramente de forma intencional. Como resultado, la muestra devuelta aún conservará una cantidad sustancial de ruido (aprox. se necesitan los últimos 20% de los pasos de tiempo) y debe desrudiarse mediante un pipeline sucesor que tenga denoising_start establecido en 0.8 para que solo desruidice el 20% final del programador. El parámetro denoising_end debería utilizarse idealmente cuando este pipeline forma parte de una configuración multipipeline de "Mixture of Denoisers", como se detalla en Refining the Image Output.
guidance_scale (float, opcional, valor predeterminado 7.5) : Escala de orientación definida en Classifier-Free Diffusion Guidance. guidance_scale se define como w de la ecuación 2. de Imagen Paper. La escala de orientación se habilita estableciendo guidance_scale > 1. Una escala de orientación más alta fomenta la generación de imágenes estrechamente vinculadas al prompt de texto, generalmente a costa de una menor calidad de imagen.
negative_prompt (str o list[str], opcional) : El prompt o prompts que no deben guiar la generación de la imagen. Si no se define, se debe pasar negative_prompt_embeds en su lugar. Se ignora cuando no se usa guía (es decir, se ignora si guidance_scale es menor que 1).
negative_prompt_2 (str o list[str], opcional) : El prompt o los prompts que no deben guiar la generación de la imagen y que se enviarán a tokenizer_2 y text_encoder_2. Si no se define, negative_prompt se utiliza en ambos text-encoders
prompt_embeds (torch.Tensor, opcional) : Embeddings de texto pregenerados. Se pueden usar para ajustar fácilmente las entradas de texto, p. ej. ponderación de prompts. Si no se proporcionan, los embeddings de texto se generarán a partir del argumento de entrada prompt.
negative_prompt_embeds (torch.Tensor, opcional) : Embeddings de texto negativos pregenerados. Se pueden utilizar para ajustar fácilmente las entradas de texto, p. ej. el ponderado de prompts. Si no se proporcionan, negative_prompt_embeds se generará a partir del argumento de entrada negative_prompt.
ip_adapter_image : (PipelineImageInput, opcional): Entrada de imagen opcional para trabajar con IP Adapters.
ip_adapter_image_embeds (list[torch.Tensor], opcional) : Incrustaciones de imagen pregeneradas para IP-Adapter. Debe ser una lista de la misma longitud que el número de IP-adapters. Cada elemento debe ser un tensor de forma (batch_size, num_images, emb_dim). Debe contener la incrustación de imagen negativa si do_classifier_free_guidance está establecido en True. Si no se proporciona, las incrustaciones se calculan a partir del argumento de entrada ip_adapter_image.
pooled_prompt_embeds (torch.Tensor, opcional) : Embeddings de texto agrupados pregenerados. Se pueden utilizar para ajustar fácilmente las entradas de texto, p. ej. el ponderado de prompts. Si no se proporcionan, los embeddings de texto agrupados se generarán a partir del argumento de entrada prompt.
negative_pooled_prompt_embeds (torch.Tensor, opcional) : Embeddings de texto negativo agrupados pregenerados. Se pueden utilizar para ajustar fácilmente las entradas de texto, p. ej. el ponderado de prompts. Si no se proporcionan, los pooled negative_prompt_embeds se generarán a partir del argumento de entrada negative_prompt.
num_images_per_prompt (int, opcional, valor predeterminado 1) : El número de imágenes a generar por indicación.
eta (float, opcional, valor predeterminado 0.0) : Corresponde al parámetro eta (η) en el artículo de DDIM: https://huggingface.co/papers/2010.02502. Solo se aplica a schedulers.DDIMScheduler, se ignorará en los demás.
generator (torch.Generator, opcional) : Uno o una lista de generadores de torch para hacer la generación determinista.
latents (torch.Tensor, opcional) : Latentes ruidosos pregenerados, muestreados de una distribución gaussiana, que se utilizarán como entradas para la generación de imágenes. Se pueden usar para ajustar la misma generación con diferentes prompts. Si no se proporcionan, se generará un tensor de latentes mediante muestreo usando el generator aleatorio suministrado.
output_type (str, opcional, por defecto "pil") : El formato de salida de la imagen generada. Elija entre PIL: PIL.Image.Image o np.array.
return_dict (bool, opcional, valor predeterminado True) : Indica si se debe devolver un StableDiffusionPipelineOutput en lugar de una tupla simple.
cross_attention_kwargs (dict, opcional) : Un diccionario de kwargs que, si se especifica, se pasa al AttentionProcessor tal como se define bajo self.processor en diffusers.models.attention_processor.
controlnet_conditioning_scale (float o list[float], opcional, valor predeterminado 1.0) : Las salidas del ControlNet se multiplican por controlnet_conditioning_scale antes de sumarse al residual en el unet original. Si se especifican varios ControlNets en init, puedes establecer la escala correspondiente como una lista.
guess_mode (bool, opcional, valor predeterminado False) : El codificador de ControlNet intenta reconocer el contenido de la imagen de entrada incluso si eliminas todos los prompts. Se recomienda un valor de guidance_scale entre 3.0 y 5.0.
control_guidance_start (float o list[float], opcional, valor predeterminado 0.0) : El porcentaje de pasos totales en el que ControlNet comienza a aplicarse.
control_guidance_end (float o list[float], opcional, valor predeterminado 1.0) : El porcentaje de pasos totales en el que ControlNet deja de aplicarse.
control_mode (int or list[int] or list[list[int]], *optional*) : The control condition types for the ControlNet. See the ControlNet's model card forinformation on the available control modes. If multiple ControlNets are specified in init`, control_mode should be a list where each ControlNet should have its corresponding control mode list. Should reflect the order of conditions in control_image.
guidance_rescale (float, opcional, valor predeterminado 0.0) : Factor de reescalado de la guía desde Common Diffusion Noise Schedules and Sample Steps are Flawed.
original_size (tuple[int], opcional, valor predeterminado (1024, 1024)) : Si original_size no es igual a target_size, la imagen parecerá haber sido reescalada hacia abajo o hacia arriba. original_size tiene como valor predeterminado (width, height) si no se especifica. Parte del micro-condicionamiento de SDXL, tal como se explica en la sección 2.2 de https://huggingface.co/papers/2307.01952.
crops_coords_top_left (tuple[int], opcional, valor predeterminado (0, 0)) : crops_coords_top_left se puede utilizar para generar una imagen que parezca "recortada" desde la posición crops_coords_top_left hacia abajo. Generalmente, se logran imágenes favorables y bien centradas estableciendo crops_coords_top_left en (0, 0). Forma parte del micro-condicionamiento de SDXL, tal como se explica en la sección 2.2 de https://huggingface.co/papers/2307.01952.
target_size (tuple[int], opcional, valor predeterminado (1024, 1024)) : En la mayoría de los casos, target_size debe establecerse en la altura y el ancho deseados de la imagen generada. Si no se especifica, el valor predeterminado será (width, height). Forma parte del micro-condicionamiento de SDXL, tal como se explica en la sección 2.2 de https://huggingface.co/papers/2307.01952.
aesthetic_score (float, opcional, valor predeterminado 6.0) : Se utiliza para simular una puntuación estética de la imagen generada influyendo en la condición de texto positiva. Forma parte del micro-condicionamiento de SDXL, tal como se explica en la sección 2.2 de https://huggingface.co/papers/2307.01952.
negative_aesthetic_score (float, opcional, valor predeterminado 2.5) : Parte del micro-condicionamiento de SDXL, tal como se explica en la sección 2.2 de https://huggingface.co/papers/2307.01952. Puede utilizarse para simular una puntuación estética de la imagen generada influyendo en la condición de texto negativo.
clip_skip (int, opcional) : Número de capas que se omitirán de CLIP al calcular los embeddings del prompt. Un valor de 1 significa que se utilizará la salida de la capa previa a la final para calcular los embeddings del prompt.
callback_on_step_end (Callable, PipelineCallback, MultiPipelineCallbacks, opcional) : una función o una subclase de PipelineCallback o MultiPipelineCallbacks que se llama al final de cada paso de denoising durante la inferencia, con los siguientes argumentos: callback_on_step_end(self: DiffusionPipeline, step: int, timestep: int, callback_kwargs: Dict). callback_kwargs incluirá una lista de todos los tensores especificados por callback_on_step_end_tensor_inputs.
callback_on_step_end_tensor_inputs (list, opcional) : La lista de entradas de tensor para la función callback_on_step_end. Los tensores especificados en la lista se pasarán como argumento callback_kwargs. Solo podrá incluir variables enumeradas en el atributo ._callback_tensor_inputs de su clase de pipeline.
Devuelve: ~pipelines.stable_diffusion.StableDiffusionXLPipelineOutput o tuple
~pipelines.stable_diffusion.StableDiffusionXLPipelineOutput si return_dict es True, de lo contrario una tuple. tuple. Al devolver una tuple, el primer elemento es una lista con las imágenes generadas.
Función invocada al llamar a la pipeline para la generación.
Ejemplos:
from diffusers import StableDiffusionXLControlNetUnionInpaintPipeline, ControlNetUnionModel, AutoencoderKL
from diffusers.utils import load_image
import torch
import numpy as np
from PIL import Image
prompt = "A cat"
# download an image
image = load_image(
"https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main/in_paint/overture-creations-5sI6fQgYIuo.png"
).resize((1024, 1024))
mask = load_image(
"https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main/in_paint/overture-creations-5sI6fQgYIuo_mask.png"
).resize((1024, 1024))
# initialize the models and pipeline
controlnet = ControlNetUnionModel.from_pretrained(
"brad-twinkl/controlnet-union-sdxl-1.0-promax", torch_dtype=torch.float16
)
vae = AutoencoderKL.from_pretrained("madebyollin/sdxl-vae-fp16-fix", torch_dtype=torch.float16)
pipe = StableDiffusionXLControlNetUnionInpaintPipeline.from_pretrained(
"stabilityai/stable-diffusion-xl-base-1.0",
controlnet=controlnet,
vae=vae,
torch_dtype=torch.float16,
variant="fp16",
)
pipe.enable_model_cpu_offload()
controlnet_img = image.copy()
controlnet_img_np = np.array(controlnet_img)
mask_np = np.array(mask)
controlnet_img_np[mask_np > 0] = 0
controlnet_img = Image.fromarray(controlnet_img_np)
# generate image
image = pipe(prompt, image=image, mask_image=mask, control_image=[controlnet_img], control_mode=[7]).images[0]
image.save("inpaint.png")
encode_prompt[[diffusers.StableDiffusionXLControlNetUnionInpaintPipeline.encode_prompt]]
encode_prompt(prompt: str, prompt_2: str | None = None, device: typing.Optional[torch.device] = None, num_images_per_prompt: int = 1, do_classifier_free_guidance: bool = True, negative_prompt: str | None = None, negative_prompt_2: str | None = None, prompt_embeds: typing.Optional[torch.Tensor] = None, negative_prompt_embeds: typing.Optional[torch.Tensor] = None, pooled_prompt_embeds: typing.Optional[torch.Tensor] = None, negative_pooled_prompt_embeds: typing.Optional[torch.Tensor] = None, lora_scale: float | None = None, clip_skip: int | None = None)
Parámetros:
prompt (str o list[str], opcional) : prompt a codificar
prompt_2 (str o list[str], opcional) : El prompt o los prompts que se enviarán al tokenizer_2 y al text_encoder_2. Si no se define, se utiliza prompt en ambos text-encoders
device : (torch.device): dispositivo de torch
num_images_per_prompt (int) : número de imágenes que deben generarse por prompt
do_classifier_free_guidance (bool) : si se debe usar o no la guía libre de clasificador
negative_prompt (str o list[str], opcional) : El prompt o prompts que no deben guiar la generación de la imagen. Si no se define, se debe pasar negative_prompt_embeds en su lugar. Se ignora cuando no se usa guía (es decir, se ignora si guidance_scale es menor que 1).
negative_prompt_2 (str o list[str], opcional) : El prompt o los prompts que no deben guiar la generación de la imagen y que se enviarán a tokenizer_2 y text_encoder_2. Si no se define, negative_prompt se utiliza en ambos text-encoders
prompt_embeds (torch.Tensor, opcional) : Embeddings de texto pregenerados. Se pueden usar para ajustar fácilmente las entradas de texto, p. ej. ponderación de prompts. Si no se proporcionan, los embeddings de texto se generarán a partir del argumento de entrada prompt.
negative_prompt_embeds (torch.Tensor, opcional) : Embeddings de texto negativos pregenerados. Se pueden utilizar para ajustar fácilmente las entradas de texto, p. ej. el ponderado de prompts. Si no se proporcionan, negative_prompt_embeds se generará a partir del argumento de entrada negative_prompt.
pooled_prompt_embeds (torch.Tensor, opcional) : Embeddings de texto agrupados pregenerados. Se pueden utilizar para ajustar fácilmente las entradas de texto, p. ej. el ponderado de prompts. Si no se proporcionan, los embeddings de texto agrupados se generarán a partir del argumento de entrada prompt.
negative_pooled_prompt_embeds (torch.Tensor, opcional) : Embeddings de texto negativo agrupados pregenerados. Se pueden utilizar para ajustar fácilmente las entradas de texto, p. ej. el ponderado de prompts. Si no se proporcionan, los pooled negative_prompt_embeds se generarán a partir del argumento de entrada negative_prompt.
lora_scale (float, opcional) : Una escala lora que se aplicará a todas las capas LoRA del codificador de texto si se cargan capas LoRA.
clip_skip (int, opcional) : Número de capas que se omitirán de CLIP al calcular los embeddings del prompt. Un valor de 1 significa que se utilizará la salida de la capa previa a la final para calcular los embeddings del prompt.
Codifica el prompt en estados ocultos del codificador de texto.
Xet Storage Details
- Size:
- 84.4 kB
- Xet hash:
- f53b3b985f9a3ddd1a9155fbc4c7f70f4414d4f6b4277208fe9096b28b22ae3c
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.