Diffusers documentation

ControlNetUnion

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.42.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

ControlNetUnion

LoRA

ControlNetUnionModel — это реализация ControlNet для Stable Diffusion XL.

Модель ControlNet была представлена в ControlNetPlus пользователем xinsir6. Она поддерживает несколько входных условий без увеличения вычислительных затрат.

Мы разработали новую архитектуру, которая поддерживает более 10 типов управления в условной генерации изображений из текста и способна создавать изображения высокого разрешения, визуально сопоставимые с результатами midjourney. Сеть основана на исходной архитектуре ControlNet; мы предлагаем два новых модуля: 1. Расширение исходного ControlNet для поддержки различных условий изображения с использованием одних и тех же параметров сети. 2. Поддержка ввода нескольких условий без увеличения вычислительной нагрузки, что особенно важно для дизайнеров, желающих детально редактировать изображение. Различные условия используют один и тот же энкодер условий, без добавления дополнительных вычислений или параметров.

StableDiffusionXLControlNetUnionPipeline

класс diffusers.StableDiffusionXLControlNetUnionPipeline

< >

( vae: AutoencoderKLtext_encoder: CLIPTextModeltext_encoder_2: CLIPTextModelWithProjectiontokenizer: CLIPTokenizertokenizer_2: CLIPTokenizerunet: UNet2DConditionModelcontrolnet: 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.MultiControlNetUnionModelscheduler: KarrasDiffusionSchedulersforce_zeros_for_empty_prompt: bool = Trueadd_watermarker: bool | None = Nonefeature_extractor: CLIPImageProcessorPil = Noneimage_encoder: CLIPVisionModelWithProjection = None )

Параметры

  • vae (AutoencoderKL) — модель вариационного автоэнкодера (VAE) для кодирования изображений в латентные представления и декодирования из них.
  • text_encoder (CLIPTextModel) — Замороженный текстовый энкодер (clip-vit-large-patch14).
  • text_encoder_2 (CLIPTextModelWithProjection) — Второй замороженный текстовый энкодер (laion/CLIP-ViT-bigG-14-laion2B-39B-b160k).
  • tokenizer (CLIPTokenizer) — CLIPTokenizer для токенизации текста.
  • tokenizer_2 (CLIPTokenizer) — CLIPTokenizer для токенизации текста.
  • unet (UNet2DConditionModel) — UNet2DConditionModel для удаления шума из закодированных латентов изображения.
  • controlnet (ControlNetUnionModel) -- Provides additional conditioning to the unet` during the denoising process.
  • scheduler (SchedulerMixin) — планировщик, используемый в связке с unet для удаления шума из закодированных латентов изображения. Может быть одним из DDIMScheduler, LMSDiscreteScheduler или PNDMScheduler.
  • force_zeros_for_empty_prompt (bool, необязательный, по умолчанию "True") — Определяет, следует ли всегда устанавливать эмбеддинги негативного промпта в 0. См. также конфигурацию stabilityai/stable-diffusion-xl-base-1-0.
  • add_watermarker (bool, необязательный) — Использовать ли библиотеку invisible_watermark для наложения водяного знака на выходные изображения. Если не указано, по умолчанию устанавливается в True, если пакет установлен; в противном случае водяной знак не используется.

Пайплайн для генерации изображений по тексту с использованием Stable Diffusion XL и направлением через ControlNet.

Эта модель наследуется от DiffusionPipeline. Общую документацию по методам, реализованным для всех пайплайнов (загрузка, сохранение, запуск на конкретном устройстве и т. д.), см. в документации родительского класса.

Пайплайн также наследует следующие методы загрузки:

__call__

< >

( prompt: str | list[str] = Noneprompt_2: str | list[str] | None = Nonecontrol_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]]]] = Noneheight: int | None = Nonewidth: int | None = Nonenum_inference_steps: int = 50timesteps: list = Nonesigmas: list = Nonedenoising_end: float | None = Noneguidance_scale: float = 5.0negative_prompt: str | list[str] | None = Nonenegative_prompt_2: str | list[str] | None = Nonenum_images_per_prompt: int | None = 1eta: float = 0.0generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = Nonelatents: typing.Optional[torch.Tensor] = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Nonepooled_prompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_pooled_prompt_embeds: typing.Optional[torch.Tensor] = Noneip_adapter_image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor], NoneType] = Noneip_adapter_image_embeds: list[torch.Tensor] | None = Noneoutput_type: str | None = 'pil'return_dict: bool = Truecross_attention_kwargs: dict[str, typing.Any] | None = Nonecontrolnet_conditioning_scale: float | list[float] = 1.0guess_mode: bool = Falsecontrol_guidance_start: float | list[float] = 0.0control_guidance_end: float | list[float] = 1.0control_mode: int | list[int] | list[list[int]] | None = Noneoriginal_size: tuple = Nonecrops_coords_top_left: tuple = (0, 0)target_size: tuple = Nonenegative_original_size: tuple[int, int] | None = Nonenegative_crops_coords_top_left: tuple = (0, 0)negative_target_size: tuple[int, int] | None = Noneclip_skip: int | None = Nonecallback_on_step_end: typing.Union[typing.Callable[[int, int], NoneType], diffusers.callbacks.PipelineCallback, diffusers.callbacks.MultiPipelineCallbacks, NoneType] = Nonecallback_on_step_end_tensor_inputs: list = ['latents'] ) → StableDiffusionPipelineOutput or tuple

Параметры

  • prompt (str или list[str], необязательный) — Промпт или промпты для управления генерацией изображения. Если не задан, необходимо передать prompt_embeds.
  • prompt_2 (str или list[str], необязательный) — Промпт или промпты, которые будут переданы в tokenizer_2 и text_encoder_2. Если не задан, в обоих text-encoders используется prompt.
  • control_image (PipelineImageInput или list[PipelineImageInput], необязательный) — Условие входа ControlNet, задающее направление для unet при генерации. Если тип указан как torch.Tensor, он передаётся в ControlNet без изменений. Также допускается изображение в формате PIL.Image.Image. Размеры выходного изображения по умолчанию совпадают с размерами image. Если переданы height и/или width, image масштабируется соответственно. Если в init указано несколько ControlNet, изображения необходимо передавать в виде списка, чтобы каждый элемент списка мог быть корректно сгруппирован в батч для входа в один ControlNet.
  • height (int, необязательный, по умолчанию self.unet.config.sample_size * self.vae_scale_factor) — Высота генерируемого изображения в пикселях. Значения ниже 512 пикселей будут работать некорректно для stabilityai/stable-diffusion-xl-base-1.0 и контрольных точек, которые не были специально дообучены на низких разрешениях.
  • width (int, необязательный, по умолчанию self.unet.config.sample_size * self.vae_scale_factor) — Ширина генерируемого изображения в пикселях. Значения менее 512 пикселей будут работать некорректно для stabilityai/stable-diffusion-xl-base-1.0 и контрольных точек, которые не были специально дообучены на низких разрешениях.
  • num_inference_steps (int, необязательный, по умолчанию 50) — Количество шагов денойзинга. Как правило, большее число шагов денойзинга приводит к изображению более высокого качества, но за счёт более медленного вывода.
  • timesteps (list[int], необязательный) — Пользовательские шаги для процесса удаления шума в планировщиках, поддерживающих аргумент timesteps в методе set_timesteps. Если не задан, будет использоваться поведение по умолчанию при передаче num_inference_steps. Значения должны быть в порядке убывания.
  • sigmas (list[float], необязательный) — Пользовательские сигмы для процесса удаления шума в планировщиках, поддерживающих аргумент sigmas в их методе set_timesteps. Если не задано, будет использоваться поведение по умолчанию при передаче num_inference_steps.
  • denoising_end (float, необязательный) — Если указано, определяет долю (от 0.0 до 1.0) общего процесса денойзинга, которая должна быть завершена до его намеренного преждевременного прекращения. В результате возвращаемый образец будет по-прежнему содержать значительное количество шума, определяемое дискретными временными шагами, выбранными планировщиком. Параметр denoising_end следует использовать в тех случаях, когда данный конвейер является частью многоконвейерной конфигурации «Mixture of Denoisers», как описано в Уточнение выходного изображения
  • guidance_scale (float, необязательный, по умолчанию 5.0) — Более высокое значение guidance scale побуждает модель генерировать изображения, тесно связанные с текстовым prompt, ценой снижения качества изображения. Guidance scale включается, когда guidance_scale > 1.
  • negative_prompt (str or list[str], необязательный) — Промпт или промпты, определяющие, что не должно присутствовать в генерируемом изображении. Если не задан, необходимо передать negative_prompt_embeds. Игнорируется, если не используется направляющий сигнал (guidance_scale < 1).
  • negative_prompt_2 (str or list[str], необязательный) — Промпт или промпты, определяющие, что следует исключить из генерируемого изображения. Передаётся в tokenizer_2 и text_encoder_2. Если не задан, в обоих текстовых кодировщиках используется negative_prompt.
  • num_images_per_prompt (int, необязательный, по умолчанию 1) — Количество изображений, генерируемых для каждого промпта.
  • eta (float, необязательный, по умолчанию 0.0) — Соответствует параметру eta (η) из статьи DDIM. Применяется только к DDIMScheduler и игнорируется другими планировщиками.
  • generator (torch.Generator или list[torch.Generator], необязательный) — torch.Generator для обеспечения детерминированности генерации.
  • latents (torch.Tensor, необязательный) — Предварительно сгенерированные зашумленные латенты, выбранные из гауссова распределения, которые используются в качестве входных данных для генерации изображений. Можно использовать, чтобы корректировать одну и ту же генерацию с разными промптами. Если не задано, тензор латентов генерируется путём выборки с использованием переданного случайного generator.
  • prompt_embeds (torch.Tensor, необязательный) — Предварительно сгенерированные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных (взвешивание промпта). Если не задано, текстовые эмбеддинги генерируются из входного аргумента prompt.
  • negative_prompt_embeds (torch.Tensor, необязательный) — Предварительно сгенерированные эмбеддинги отрицательного текста. Можно использовать для простой настройки текстовых входных данных (взвешивание промпта). Если не задано, negative_prompt_embeds генерируются из входного аргумента negative_prompt.
  • pooled_prompt_embeds (torch.Tensor, необязательный) — Предварительно сгенерированные пул-эмбеддинги текста. Можно использовать для простой настройки текстовых входных данных (взвешивание промпта). Если не передано, пул-эмбеддинги текста генерируются из аргумента prompt.
  • negative_pooled_prompt_embeds (torch.Tensor, необязательный) — Предварительно сгенерированные отрицательные пул-эмбеддинги текста. Можно использовать для простой настройки текстовых входных данных (взвешивание промпта). Если не передано, пул-эмбеддинги negative_prompt_embeds генерируются из входного аргумента negative_prompt.
  • ip_adapter_image — (PipelineImageInput, необязательный): Необязательное входное изображение для работы с IP-адаптерами.
  • ip_adapter_image_embeds (list[torch.Tensor], необязательный) — Предварительно сгенерированные эмбеддинги изображений для IP-Adapter. Должен представлять собой список, длина которого равна количеству IP-адаптеров. Каждый элемент должен быть тензором формы (batch_size, num_images, emb_dim). Если do_classifier_free_guidance установлен в True, должен содержать отрицательный эмбеддинг изображения. Если не указан, эмбеддинги вычисляются из входного аргумента ip_adapter_image.
  • output_type (str, необязательный, по умолчанию "pil") — Формат вывода сгенерированного изображения. Выберите между PIL.Image и np.array.
  • return_dict (bool, необязательный, по умолчанию True) — Определяет, следует ли возвращать StableDiffusionPipelineOutput вместо обычного кортежа.
  • cross_attention_kwargs (dict, необязательный) — Словарь kwargs, который при указании передается в AttentionProcessor, определенный в self.processor.
  • controlnet_conditioning_scale (float или list[float], необязательный, по умолчанию 1.0) — Выходы ControlNet умножаются на controlnet_conditioning_scale перед добавлением к остаточному соединению в исходном unet. Если в init указано несколько ControlNet, соответствующий масштаб можно задать в виде списка.
  • guess_mode (bool, необязательный, по умолчанию False) — Кодер ControlNet пытается распознать содержимое входного изображения, даже если вы удалите все промпты. Рекомендуется значение guidance_scale в диапазоне от 3.0 до 5.0.
  • control_guidance_start (float или list[float], необязательный, по умолчанию 0.0) — Доля от общего числа шагов, с которой ControlNet начинает применяться.
  • control_guidance_end (float или list[float], необязательный, по умолчанию 1.0) — Доля от общего числа шагов, на которой ControlNet прекращает применяться.
  • 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], необязательный, по умолчанию (1024, 1024)) — Если original_size не совпадает с target_size, изображение будет выглядеть как уменьшенное или увеличенное. По умолчанию original_size равно (height, width), если не указано иное. Является частью микроусловий SDXL, как описано в разделе 2.2 https://huggingface.co/papers/2307.01952.
  • crops_coords_top_left (tuple[int], необязательный, по умолчанию (0, 0)) — crops_coords_top_left можно использовать для генерации изображения, которое выглядит как «обрезанное» из позиции crops_coords_top_left вниз. Как правило, хорошо центрированные изображения получаются при установке crops_coords_top_left в (0, 0). Является частью микроусловий SDXL, описанных в разделе 2.2 статьи https://huggingface.co/papers/2307.01952.
  • target_size (tuple[int], необязательный, по умолчанию (1024, 1024)) — В большинстве случаев target_size следует устанавливать в желаемую высоту и ширину генерируемого изображения. Если значение не указано, по умолчанию будет использовано (height, width). Является частью микроусловий SDXL, как описано в разделе 2.2 статьи https://huggingface.co/papers/2307.01952.
  • negative_original_size (tuple[int], необязательный, по умолчанию (1024, 1024)) — Используется для негативного обусловливания процесса генерации на основе конкретного разрешения изображения. Является частью микро-условливания SDXL, описанного в разделе 2.2 статьи https://huggingface.co/papers/2307.01952. Для получения дополнительной информации см. этот тред: https://github.com/huggingface/diffusers/issues/4208.
  • negative_crops_coords_top_left (tuple[int], необязательный, по умолчанию (0, 0)) — Позволяет негативно обусловить процесс генерации на основе конкретных координат кадрирования. Является частью микро-условливания SDXL, описанной в разделе 2.2 статьи https://huggingface.co/papers/2307.01952. Для получения дополнительной информации см. этот тред: https://github.com/huggingface/diffusers/issues/4208.
  • negative_target_size (tuple[int], необязательный, по умолчанию (1024, 1024)) — Используется для негативного условия процесса генерации на основе целего разрешения изображения. В большинстве случаев должен совпадать с target_size. Является частью микроусловий SDXL, описанных в разделе 2.2 статьи https://huggingface.co/papers/2307.01952. Для получения дополнительной информации см. этот тред: https://github.com/huggingface/diffusers/issues/4208.
  • clip_skip (int, необязательный) — Количество слоев CLIP, которые пропускаются при вычислении эмбеддингов промпта. Значение 1 означает, что для вычисления эмбеддингов промпта будет использоваться выход предпоследнего слоя.
  • callback_on_step_end (Callable, PipelineCallback, MultiPipelineCallbacks, необязательный) — функция или подкласс PipelineCallback или MultiPipelineCallbacks, вызываемая в конце каждого шага денойзинга во время инференса. Аргументы: callback_on_step_end(self: DiffusionPipeline, step: int, timestep: int, callback_kwargs: Dict). callback_kwargs будет содержать список всех тензоров, указанных в callback_on_step_end_tensor_inputs.
  • callback_on_step_end_tensor_inputs (list, необязательный) — Список тензорных входных данных для функции callback_on_step_end. Тензоры, указанные в списке, будут переданы в качестве аргумента callback_kwargs. Вы сможете включать только переменные, перечисленные в атрибуте ._callback_tensor_inputs вашего класса пайплайна.

Возвращает

StableDiffusionPipelineOutput или tuple

Если return_dict равно True, возвращается StableDiffusionPipelineOutput, в противном случае возвращается tuple, содержащий выходные изображения.

Функция вызова конвейера для генерации.

Примеры:

>>> # !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

< >

( prompt: strprompt_2: str | None = Nonedevice: typing.Optional[torch.device] = Nonenum_images_per_prompt: int = 1do_classifier_free_guidance: bool = Truenegative_prompt: str | None = Nonenegative_prompt_2: str | None = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Nonepooled_prompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_pooled_prompt_embeds: typing.Optional[torch.Tensor] = Nonelora_scale: float | None = Noneclip_skip: int | None = None )

Параметры

  • prompt (str или list[str], необязательный) — промпт для кодирования
  • prompt_2 (str или list[str], необязательный) — Промпт или промпты, которые передаются в tokenizer_2 и text_encoder_2. Если не задан, в обоих text-encoders используется prompt
  • device — (torch.device): устройство torch
  • num_images_per_prompt (int) — количество изображений, которые должны быть сгенерированы для каждого промпта
  • do_classifier_free_guidance (bool) — использовать ли classifier free guidance
  • negative_prompt (str or list[str], необязательный) — Промпт или промпты, которые не должны направлять генерацию изображения. Если не задан, необходимо передать negative_prompt_embeds. Игнорируется, если не используется направляющее поле (то есть игнорируется, если guidance_scale меньше 1).
  • negative_prompt_2 (str или list[str], необязательный) — Промпт или промпты, которые не должны направлять генерацию изображения, передаваемые в tokenizer_2 и text_encoder_2. Если не задан, в обоих текстовых кодировщиках используется negative_prompt
  • prompt_embeds (torch.Tensor, необязательный) — Предварительно сгенерированные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных, например, для взвешивания промпта. Если не передано, текстовые эмбеддинги будут сгенерированы из входного аргумента prompt.
  • negative_prompt_embeds (torch.Tensor, необязательный) — Предварительно сгенерированные отрицательные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных, например для взвешивания промпта. Если не передано, negative_prompt_embeds будет сгенерировано из входного аргумента negative_prompt.
  • pooled_prompt_embeds (torch.Tensor, необязательный) — Предварительно сгенерированные пул-эмбеддинги текста. Можно использовать для простой настройки текстовых входных данных, например для взвешивания промпта. Если не предоставлено, пул-эмбеддинги текста будут сгенерированы из входного аргумента prompt.
  • negative_pooled_prompt_embeds (torch.Tensor, необязательный) — Предварительно сгенерированные отрицательные пул-эмбеддинги текста. Можно использовать для простой настройки текстовых входных данных, например для взвешивания промпта. Если не передано, пул-эмбеддинги negative_prompt_embeds будут сгенерированы из входного аргумента negative_prompt.
  • lora_scale (float, необязательный) — Масштаб LoRA, который будет применён ко всем слоям LoRA текстового кодировщика, если слои LoRA загружены.
  • clip_skip (int, необязательный) — Количество слоев CLIP, которые пропускаются при вычислении эмбеддингов промпта. Значение 1 означает, что для вычисления эмбеддингов промпта будет использоваться выход предпоследнего слоя.

Кодирует промпт в скрытые состояния текстового энкодера.

get_guidance_scale_embedding

< >

( w: Tensorembedding_dim: int = 512dtype: dtype = torch.float32 ) → torch.Tensor

Параметры

  • w (torch.Tensor) — Генерирует векторы эмбеддингов с заданным масштабом руководства (guidance scale) для последующего обогащения эмбеддингов временных шагов (timestep embeddings).
  • embedding_dim (int, необязательный, по умолчанию 512) — Размерность генерируемых эмбеддингов.
  • dtype (torch.dtype, необязательный, по умолчанию torch.float32) — Тип данных для генерируемых эмбеддингов.

Возвращает

torch.Tensor

Векторы встраиваний с формой (len(w), embedding_dim).

См. https://github.com/google-research/vdm/blob/dc27b98a554f65cdc654b800da5aa1846545d41b/model_vdm.py#L298

StableDiffusionXLControlNetUnionImg2ImgPipeline

класс diffusers.StableDiffusionXLControlNetUnionImg2ImgPipeline

< >

( vae: AutoencoderKLtext_encoder: CLIPTextModeltext_encoder_2: CLIPTextModelWithProjectiontokenizer: CLIPTokenizertokenizer_2: CLIPTokenizerunet: UNet2DConditionModelcontrolnet: 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.MultiControlNetUnionModelscheduler: KarrasDiffusionSchedulersrequires_aesthetics_score: bool = Falseforce_zeros_for_empty_prompt: bool = Trueadd_watermarker: bool | None = Nonefeature_extractor: CLIPImageProcessorPil = Noneimage_encoder: CLIPVisionModelWithProjection = None )

Параметры

  • vae (AutoencoderKL) — Модель вариационного автоэнкодера (VAE) для кодирования изображений в латентные представления и декодирования из них.
  • text_encoder (CLIPTextModel) — Замороженный текстовый энкодер. Stable Diffusion использует текстовую часть CLIP, а именно вариант clip-vit-large-patch14.
  • text_encoder_2 ( CLIPTextModelWithProjection) — Второй замороженный текстовый энкодер. Stable Diffusion XL использует текстовую и пул-часть CLIP, а именно вариант laion/CLIP-ViT-bigG-14-laion2B-39B-b160k.
  • tokenizer (CLIPTokenizer) — токенизатор класса CLIPTokenizer.
  • tokenizer_2 (CLIPTokenizer) — Второй токенизатор класса CLIPTokenizer.
  • unet (UNet2DConditionModel) — условная архитектура U-Net для удаления шума из закодированных латентов изображения.
  • controlnet (ControlNetUnionModel) — Обеспечивает дополнительное условие для unet в процессе денойзинга.
  • scheduler (SchedulerMixin) — планировщик, используемый в связке с unet для удаления шума из закодированных латентов изображения. Может быть одним из DDIMScheduler, LMSDiscreteScheduler или PNDMScheduler.
  • requires_aesthetics_score (bool, необязательный, по умолчанию "False") — Указывает, требуется ли для unet передача условия aesthetic_score во время инференса. См. также конфигурацию stabilityai/stable-diffusion-xl-refiner-1-0.
  • force_zeros_for_empty_prompt (bool, необязательный, по умолчанию "True") — Определяет, следует ли всегда принудительно устанавливать эмбеддинги негативного промпта в 0. См. также конфигурацию stabilityai/stable-diffusion-xl-base-1-0.
  • add_watermarker (bool, необязательный) — Определяет, следует ли использовать библиотеку invisible_watermark для нанесения водяного знака на выходные изображения. Если значение не задано, по умолчанию используется True, если пакет установлен, в противном случае водяной знак не применяется.
  • feature_extractor (CLIPImageProcessor) — CLIPImageProcessor для извлечения признаков из сгенерированных изображений; используется как вход для safety_checker.

Пайплайн для генерации изображений по изображению с использованием Stable Diffusion XL и управления через ControlNet.

Эта модель наследуется от DiffusionPipeline. См. документацию родительского класса для общих методов, которые библиотека реализует для всех пайплайнов (например, загрузка или сохранение, запуск на конкретном устройстве и т. д.)

Пайплайн также наследует следующие методы загрузки:

__call__

< >

( prompt: str | list[str] = Noneprompt_2: str | list[str] | None = Noneimage: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]] = Nonecontrol_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]]]] = Noneheight: int | None = Nonewidth: int | None = Nonestrength: float = 0.8num_inference_steps: int = 50guidance_scale: float = 5.0negative_prompt: str | list[str] | None = Nonenegative_prompt_2: str | list[str] | None = Nonenum_images_per_prompt: int | None = 1eta: float = 0.0generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = Nonelatents: typing.Optional[torch.Tensor] = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Nonepooled_prompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_pooled_prompt_embeds: typing.Optional[torch.Tensor] = Noneip_adapter_image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor], NoneType] = Noneip_adapter_image_embeds: list[torch.Tensor] | None = Noneoutput_type: str | None = 'pil'return_dict: bool = Truecross_attention_kwargs: dict[str, typing.Any] | None = Nonecontrolnet_conditioning_scale: float | list[float] = 0.8guess_mode: bool = Falsecontrol_guidance_start: float | list[float] = 0.0control_guidance_end: float | list[float] = 1.0control_mode: int | list[int] | list[list[int]] | None = Noneoriginal_size: tuple = Nonecrops_coords_top_left: tuple = (0, 0)target_size: tuple = Nonenegative_original_size: tuple[int, int] | None = Nonenegative_crops_coords_top_left: tuple = (0, 0)negative_target_size: tuple[int, int] | None = Noneaesthetic_score: float = 6.0negative_aesthetic_score: float = 2.5clip_skip: int | None = Nonecallback_on_step_end: typing.Union[typing.Callable[[int, int], NoneType], diffusers.callbacks.PipelineCallback, diffusers.callbacks.MultiPipelineCallbacks, NoneType] = Nonecallback_on_step_end_tensor_inputs: list = ['latents']**kwargs ) → StableDiffusionPipelineOutput or tuple

Параметры

  • prompt (str или list[str], необязательный) — Промпт или промпты для управления генерацией изображения. Если не задан, необходимо передать prompt_embeds вместо него.
  • prompt_2 (str или list[str], необязательный) — Промпт или промпты, которые передаются в tokenizer_2 и text_encoder_2. Если не задан, в обоих text-encoders используется prompt
  • 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]] или list[list[PIL.Image.Image]]): Исходное изображение будет использоваться как отправная точка для процесса генерации изображений. Также можно передавать латенты изображений в качестве image; при прямой передаче латентов они не будут кодироваться повторно.
  • control_image (PipelineImageInput или list[PipelineImageInput], необязательный) — Условие входа ControlNet, задающее направление для unet при генерации. Если тип указан как torch.Tensor, он передаётся в ControlNet без изменений. Также допускается изображение в формате PIL.Image.Image. Размеры выходного изображения по умолчанию совпадают с размерами image. Если переданы height и/или width, image масштабируется соответственно. Если в init указано несколько ControlNet, изображения необходимо передавать в виде списка, чтобы каждый элемент списка мог быть корректно сгруппирован в батч для входа в один ControlNet.
  • height (int, необязательный, по умолчанию — размер control_image) — Высота генерируемого изображения в пикселях. Значения ниже 512 пикселей будут работать некорректно для stabilityai/stable-diffusion-xl-base-1.0 и контрольных точек, которые не были специально дообучены на низких разрешениях.
  • width (int, необязательный, по умолчанию — размер control_image) — Ширина генерируемого изображения в пикселях. Значения менее 512 пикселей будут работать некорректно для stabilityai/stable-diffusion-xl-base-1.0 и контрольных точек, которые не были специально дообучены на низких разрешениях.
  • strength (float, необязательный, по умолчанию 0.8) — Определяет степень трансформации исходного image. Значение должно находиться в диапазоне от 0 до 1. image используется как стартовая точка, и чем выше strength, тем больше шума добавляется. Количество шагов денойзинга зависит от количества шума, добавленного изначально. Когда strength равно 1, добавляется максимальное количество шума, и процесс денойзинга выполняется в течение полного числа итераций, указанного в num_inference_steps. Значение 1 по сути игнорирует image.
  • num_inference_steps (int, необязательный, по умолчанию 50) — Количество шагов денойзинга. Как правило, большее число шагов денойзинга приводит к изображению более высокого качества, но за счёт более медленного вывода.
  • guidance_scale (float, необязательный, по умолчанию 7.5) — Масштаб руководства, как определено в Classifier-Free Diffusion Guidance. guidance_scale определяется как w из уравнения 2 статьи Imagen Paper. Масштаб руководства включается при установке guidance_scale > 1. Более высокий масштаб руководства способствует генерации изображений, тесно связанных с текстом prompt, обычно за счёт снижения качества изображения.
  • negative_prompt (str or list[str], необязательный) — Промпт или промпты, которые не должны направлять генерацию изображения. Если не задан, необходимо передать negative_prompt_embeds. Игнорируется, если не используется направляющее поле (то есть игнорируется, если guidance_scale меньше 1).
  • negative_prompt_2 (str или list[str], необязательный) — Промпт или промпты, которые не должны направлять генерацию изображения, передаваемые в tokenizer_2 и text_encoder_2. Если не задан, в обоих текстовых кодировщиках используется negative_prompt
  • num_images_per_prompt (int, необязательный, по умолчанию 1) — Количество изображений, генерируемых для каждого промпта.
  • eta (float, необязательный, по умолчанию 0.0) — Соответствует параметру eta (η) в статье DDIM: https://huggingface.co/papers/2010.02502. Применяется только к schedulers.DDIMScheduler, для остальных игнорируется.
  • generator (torch.Generator или list[torch.Generator], необязательный) — Один или список генераторов torch для обеспечения детерминированности генерации.
  • latents (torch.Tensor, необязательный) — Предварительно сгенерированные зашумлённые латенты, выбранные из гауссова распределения, которые используются в качестве входных данных для генерации изображений. Позволяет корректировать один и тот же процесс генерации с помощью различных промптов. Если не заданы, тензор латентов будет сгенерирован путём выборки с использованием переданного случайного generator.
  • prompt_embeds (torch.Tensor, необязательный) — Предварительно сгенерированные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных, например, для взвешивания промпта. Если не передано, текстовые эмбеддинги будут сгенерированы из входного аргумента prompt.
  • negative_prompt_embeds (torch.Tensor, необязательный) — Предварительно сгенерированные отрицательные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных, например для взвешивания промпта. Если не передано, negative_prompt_embeds будет сгенерировано из входного аргумента negative_prompt.
  • pooled_prompt_embeds (torch.Tensor, необязательный) — Предварительно сгенерированные пул-эмбеддинги текста. Можно использовать для простой настройки текстовых входных данных, например для взвешивания промпта. Если не предоставлено, пул-эмбеддинги текста будут сгенерированы из входного аргумента prompt.
  • negative_pooled_prompt_embeds (torch.Tensor, необязательный) — Предварительно сгенерированные отрицательные пул-эмбеддинги текста. Можно использовать для простой настройки текстовых входных данных, например для взвешивания промпта. Если не передано, пул-эмбеддинги negative_prompt_embeds будут сгенерированы из входного аргумента negative_prompt.
  • ip_adapter_image — (PipelineImageInput, необязательный): Необязательное входное изображение для работы с IP-адаптерами.
  • ip_adapter_image_embeds (list[torch.Tensor], необязательный) — Предварительно сгенерированные эмбеддинги изображений для IP-Adapter. Должен представлять собой список, длина которого равна количеству IP-адаптеров. Каждый элемент должен быть тензором формы (batch_size, num_images, emb_dim). Если do_classifier_free_guidance установлен в True, должен содержать отрицательный эмбеддинг изображения. Если не указан, эмбеддинги вычисляются из входного аргумента ip_adapter_image.
  • output_type (str, необязательный, по умолчанию "pil") — Формат вывода сгенерированного изображения. Выберите один из вариантов: PIL: PIL.Image.Image или np.array.
  • return_dict (bool, необязательный, по умолчанию True) — Определяет, следует ли возвращать StableDiffusionPipelineOutput вместо обычного кортежа.
  • cross_attention_kwargs (dict, необязательный) — Словарь kwargs, который при указании передается в AttentionProcessor, определенный в self.processor в модуле diffusers.models.attention_processor.
  • controlnet_conditioning_scale (float или list[float], необязательный, по умолчанию 1.0) — Выходы ControlNet умножаются на controlnet_conditioning_scale перед добавлением к остаточному соединению в исходном unet. Если в init указано несколько ControlNet, соответствующий масштаб можно задать в виде списка.
  • guess_mode (bool, необязательный, по умолчанию False) — В этом режиме энкодер ControlNet будет стараться распознать содержимое входного изображения даже в том случае, если вы удалите все промпты. Рекомендуется значение guidance_scale от 3.0 до 5.0.
  • control_guidance_start (float или list[float], необязательный, по умолчанию 0.0) — Доля от общего числа шагов, с которой ControlNet начинает применяться.
  • control_guidance_end (float или list[float], необязательный, по умолчанию 1.0) — Доля от общего числа шагов, на которой ControlNet прекращает применяться.
  • 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], необязательный, по умолчанию (1024, 1024)) — Если original_size не совпадает с target_size, изображение будет выглядеть как уменьшенное или увеличенное. По умолчанию original_size равно (height, width), если не указано иное. Является частью микроусловий SDXL, как описано в разделе 2.2 https://huggingface.co/papers/2307.01952.
  • crops_coords_top_left (tuple[int], необязательный, по умолчанию (0, 0)) — crops_coords_top_left можно использовать для генерации изображения, которое выглядит как «обрезанное» из позиции crops_coords_top_left вниз. Как правило, хорошо центрированные изображения получаются при установке crops_coords_top_left в (0, 0). Является частью микроусловий SDXL, описанных в разделе 2.2 статьи https://huggingface.co/papers/2307.01952.
  • target_size (tuple[int], необязательный, по умолчанию (1024, 1024)) — В большинстве случаев target_size следует устанавливать в желаемую высоту и ширину генерируемого изображения. Если значение не указано, по умолчанию будет использовано (height, width). Является частью микроусловий SDXL, как описано в разделе 2.2 статьи https://huggingface.co/papers/2307.01952.
  • negative_original_size (tuple[int], необязательный, по умолчанию (1024, 1024)) — Используется для негативного обусловливания процесса генерации на основе конкретного разрешения изображения. Является частью микро-условливания SDXL, описанного в разделе 2.2 статьи https://huggingface.co/papers/2307.01952. Для получения дополнительной информации см. этот тред: https://github.com/huggingface/diffusers/issues/4208.
  • negative_crops_coords_top_left (tuple[int], необязательный, по умолчанию (0, 0)) — Позволяет негативно обусловить процесс генерации на основе конкретных координат кадрирования. Является частью микро-условливания SDXL, описанной в разделе 2.2 статьи https://huggingface.co/papers/2307.01952. Для получения дополнительной информации см. этот тред: https://github.com/huggingface/diffusers/issues/4208.
  • negative_target_size (tuple[int], необязательный, по умолчанию (1024, 1024)) — Используется для негативного условия процесса генерации на основе целего разрешения изображения. В большинстве случаев должен совпадать с target_size. Является частью микроусловий SDXL, описанных в разделе 2.2 статьи https://huggingface.co/papers/2307.01952. Для получения дополнительной информации см. этот тред: https://github.com/huggingface/diffusers/issues/4208.
  • aesthetic_score (float, необязательный, по умолчанию 6.0) — Используется для имитации эстетической оценки сгенерированного изображения путём влияния на положительное текстовое условие. Является частью микроусловий SDXL, описанных в разделе 2.2 статьи https://huggingface.co/papers/2307.01952.
  • negative_aesthetic_score (float, необязательный, по умолчанию 2.5) — Часть микроусловий SDXL, описанная в разделе 2.2 статьи https://huggingface.co/papers/2307.01952. Может использоваться для симуляции эстетической оценки сгенерированного изображения за счет влияния на отрицательное текстовое условие.
  • clip_skip (int, необязательный) — Количество слоев CLIP, которые пропускаются при вычислении эмбеддингов промпта. Значение 1 означает, что для вычисления эмбеддингов промпта будет использоваться выход предпоследнего слоя.
  • callback_on_step_end (Callable, PipelineCallback, MultiPipelineCallbacks, необязательный) — функция или подкласс PipelineCallback или MultiPipelineCallbacks, вызываемая в конце каждого шага денойзинга во время инференса. Аргументы: callback_on_step_end(self: DiffusionPipeline, step: int, timestep: int, callback_kwargs: Dict). callback_kwargs будет содержать список всех тензоров, указанных в callback_on_step_end_tensor_inputs.
  • callback_on_step_end_tensor_inputs (list, необязательный) — Список тензорных входных данных для функции callback_on_step_end. Тензоры, указанные в списке, будут переданы в качестве аргумента callback_kwargs. Вы сможете включать только переменные, перечисленные в атрибуте ._callback_tensor_inputs вашего класса пайплайна.

Возвращает

StableDiffusionPipelineOutput или tuple

StableDiffusionPipelineOutput, если return_dict равно True, иначе tuple с выходными изображениями.

Функция, вызываемая при обращении к конвейеру для генерации.

Примеры:

# !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

< >

( prompt: strprompt_2: str | None = Nonedevice: typing.Optional[torch.device] = Nonenum_images_per_prompt: int = 1do_classifier_free_guidance: bool = Truenegative_prompt: str | None = Nonenegative_prompt_2: str | None = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Nonepooled_prompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_pooled_prompt_embeds: typing.Optional[torch.Tensor] = Nonelora_scale: float | None = Noneclip_skip: int | None = None )

Параметры

  • prompt (str или list[str], необязательный) — промпт для кодирования
  • prompt_2 (str или list[str], необязательный) — Промпт или промпты, которые передаются в tokenizer_2 и text_encoder_2. Если не задан, в обоих text-encoders используется prompt
  • device — (torch.device): устройство torch
  • num_images_per_prompt (int) — количество изображений, которые должны быть сгенерированы для каждого промпта
  • do_classifier_free_guidance (bool) — использовать ли classifier free guidance
  • negative_prompt (str or list[str], необязательный) — Промпт или промпты, которые не должны направлять генерацию изображения. Если не задан, необходимо передать negative_prompt_embeds. Игнорируется, если не используется направляющее поле (то есть игнорируется, если guidance_scale меньше 1).
  • negative_prompt_2 (str или list[str], необязательный) — Промпт или промпты, которые не должны направлять генерацию изображения, передаваемые в tokenizer_2 и text_encoder_2. Если не задан, в обоих текстовых кодировщиках используется negative_prompt
  • prompt_embeds (torch.Tensor, необязательный) — Предварительно сгенерированные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных, например, для взвешивания промпта. Если не передано, текстовые эмбеддинги будут сгенерированы из входного аргумента prompt.
  • negative_prompt_embeds (torch.Tensor, необязательный) — Предварительно сгенерированные отрицательные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных, например для взвешивания промпта. Если не передано, negative_prompt_embeds будет сгенерировано из входного аргумента negative_prompt.
  • pooled_prompt_embeds (torch.Tensor, необязательный) — Предварительно сгенерированные пул-эмбеддинги текста. Можно использовать для простой настройки текстовых входных данных, например для взвешивания промпта. Если не предоставлено, пул-эмбеддинги текста будут сгенерированы из входного аргумента prompt.
  • negative_pooled_prompt_embeds (torch.Tensor, необязательный) — Предварительно сгенерированные отрицательные пул-эмбеддинги текста. Можно использовать для простой настройки текстовых входных данных, например для взвешивания промпта. Если не передано, пул-эмбеддинги negative_prompt_embeds будут сгенерированы из входного аргумента negative_prompt.
  • lora_scale (float, необязательный) — Масштаб LoRA, который будет применён ко всем слоям LoRA текстового кодировщика, если слои LoRA загружены.
  • clip_skip (int, необязательный) — Количество слоев CLIP, которые пропускаются при вычислении эмбеддингов промпта. Значение 1 означает, что для вычисления эмбеддингов промпта будет использоваться выход предпоследнего слоя.

Кодирует промпт в скрытые состояния текстового энкодера.

StableDiffusionXLControlNetUnionInpaintPipeline

класс diffusers.StableDiffusionXLControlNetUnionInpaintPipeline

< >

( vae: AutoencoderKLtext_encoder: CLIPTextModeltext_encoder_2: CLIPTextModelWithProjectiontokenizer: CLIPTokenizertokenizer_2: CLIPTokenizerunet: UNet2DConditionModelcontrolnet: 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.MultiControlNetUnionModelscheduler: KarrasDiffusionSchedulersrequires_aesthetics_score: bool = Falseforce_zeros_for_empty_prompt: bool = Trueadd_watermarker: bool | None = Nonefeature_extractor: transformers.models.clip.image_processing_pil_clip.CLIPImageProcessorPil | None = Noneimage_encoder: transformers.models.clip.modeling_clip.CLIPVisionModelWithProjection | None = None )

Параметры

  • vae (AutoencoderKL) — Модель вариационного автоэнкодера (VAE) для кодирования изображений в латентные представления и декодирования из них.
  • text_encoder (CLIPTextModel) — Замороженный текстовый энкодер. Stable Diffusion XL использует текстовую часть CLIP, а именно вариант clip-vit-large-patch14.
  • text_encoder_2 ( CLIPTextModelWithProjection) — Второй замороженный текстовый энкодер. Stable Diffusion XL использует текстовую и пул-часть CLIP, а именно вариант laion/CLIP-ViT-bigG-14-laion2B-39B-b160k.
  • tokenizer (CLIPTokenizer) — токенизатор класса CLIPTokenizer.
  • tokenizer_2 (CLIPTokenizer) — Второй токенизатор класса CLIPTokenizer.
  • unet (UNet2DConditionModel) — условная архитектура U-Net для удаления шума из закодированных латентов изображения.
  • scheduler (SchedulerMixin) — планировщик, используемый в связке с unet для удаления шума из закодированных латентов изображения. Может быть одним из DDIMScheduler, LMSDiscreteScheduler или PNDMScheduler.

Пайплайн для генерации изображений по тексту с использованием Stable Diffusion XL.

Эта модель наследуется от DiffusionPipeline. См. документацию родительского класса для общих методов, которые библиотека реализует для всех пайплайнов (например, загрузка или сохранение, запуск на конкретном устройстве и т. д.)

Пайплайн также наследует следующие методы загрузки:

__call__

< >

( prompt: str | list[str] = Noneprompt_2: str | list[str] | None = Noneimage: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]] = Nonemask_image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]] = Nonecontrol_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]]]] = Noneheight: int | None = Nonewidth: int | None = Nonepadding_mask_crop: int | None = Nonestrength: float = 0.9999num_inference_steps: int = 50denoising_start: float | None = Nonedenoising_end: float | None = Noneguidance_scale: float = 5.0negative_prompt: str | list[str] | None = Nonenegative_prompt_2: str | list[str] | None = Nonenum_images_per_prompt: int | None = 1eta: float = 0.0generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = Nonelatents: typing.Optional[torch.Tensor] = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Noneip_adapter_image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor], NoneType] = Noneip_adapter_image_embeds: list[torch.Tensor] | None = Nonepooled_prompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_pooled_prompt_embeds: typing.Optional[torch.Tensor] = Noneoutput_type: str | None = 'pil'return_dict: bool = Truecross_attention_kwargs: dict[str, typing.Any] | None = Nonecontrolnet_conditioning_scale: float | list[float] = 1.0guess_mode: bool = Falsecontrol_guidance_start: float | list[float] = 0.0control_guidance_end: float | list[float] = 1.0control_mode: int | list[int] | list[list[int]] | None = Noneguidance_rescale: float = 0.0original_size: tuple = Nonecrops_coords_top_left: tuple = (0, 0)target_size: tuple = Noneaesthetic_score: float = 6.0negative_aesthetic_score: float = 2.5clip_skip: int | None = Nonecallback_on_step_end: typing.Union[typing.Callable[[int, int], NoneType], diffusers.callbacks.PipelineCallback, diffusers.callbacks.MultiPipelineCallbacks, NoneType] = Nonecallback_on_step_end_tensor_inputs: list = ['latents']**kwargs ) → ~pipelines.stable_diffusion.StableDiffusionXLPipelineOutput or tuple

Параметры

  • prompt (str или list[str], необязательный) — Промпт или промпты для управления генерацией изображения. Если не задан, необходимо передать prompt_embeds вместо него.
  • prompt_2 (str или list[str], необязательный) — Промпт или промпты, которые передаются в tokenizer_2 и text_encoder_2. Если не задан, в обоих text-encoders используется prompt
  • image (PIL.Image.Image) — Image или тензор, представляющий пакет изображений, которые будут подвергнуты инпейнтингу, т. е. части изображения будут замаскированы с помощью mask_image и перерисованы в соответствии с prompt.
  • mask_image (PIL.Image.Image) — Image или тензор, представляющий пакет изображений, для маскирования image. Белые пиксели в маске будут перерисованы, а чёрные — сохранены. Если mask_image — это изображение PIL, оно будет преобразовано в одноцветный (яркостной) канал перед использованием. Если это тензор, он должен содержать один цветовой канал (L) вместо трёх, поэтому ожидаемая форма — (B, H, W, 1).
  • control_image (PipelineImageInput или list[PipelineImageInput], необязательный) — Условие входа ControlNet, задающее направление для unet при генерации. Если тип указан как torch.Tensor, он передаётся в ControlNet без изменений. Также допускается изображение в формате PIL.Image.Image. Размеры выходного изображения по умолчанию совпадают с размерами image. Если переданы height и/или width, image масштабируется соответственно. Если в init указано несколько ControlNet, изображения необходимо передавать в виде списка, чтобы каждый элемент списка мог быть корректно сгруппирован в батч для входа в один ControlNet.
  • height (int, необязательный, по умолчанию self.unet.config.sample_size * self.vae_scale_factor) — Высота генерируемого изображения в пикселях.
  • width (int, необязательный, по умолчанию self.unet.config.sample_size * self.vae_scale_factor) — Ширина генерируемого изображения в пикселях.
  • padding_mask_crop (int, необязательный, по умолчанию None) — Размер поля, которое добавляется при обрезке изображения и маски. Если None, обрезка не применяется к изображению и mask_image. Если padding_mask_crop не равно None, сначала находится прямоугольная область с тем же соотношением сторон, что и у изображения, содержащая всю замаскированную область, а затем эта область расширяется на величину padding_mask_crop. После этого изображение и mask_image обрезаются по расширенной области перед масштабированием до исходного размера изображения для inpainting. Это полезно, когда замаскированная область мала, а изображение велико и содержит информацию, не относящуюся к inpainting, например фон.
  • strength (float, необязательный, по умолчанию 0.9999) — Концептуально указывает, насколько сильно трансформировать замаскированную часть исходного image. Значение должно находиться в диапазоне от 0 до 1. image используется как отправная точка, при этом чем больше strength, тем больше шума добавляется к изображению. Количество шагов денойзинга зависит от количества шума, добавленного в начале. Когда strength равно 1, добавляется максимальное количество шума, и процесс денойзинга выполняется в течение полного числа итераций, указанного в num_inference_steps. Таким образом, значение 1 фактически игнорирует замаскированную часть исходного image. Обратите внимание, что если denoising_start объявлено как целое число, значение strength будет проигнорировано.
  • num_inference_steps (int, необязательный, по умолчанию 50) — Количество шагов денойзинга. Как правило, большее число шагов денойзинга приводит к изображению более высокого качества, но за счёт более медленного вывода.
  • denoising_start (float, необязательный) — Если указано, обозначает долю (от 0.0 до 1.0) общего процесса денойзинга, которая пропускается перед его началом. В результате начальная часть процесса денойзинга игнорируется, и предполагается, что переданное image является частично денойзным изображением. Обратите внимание, что при указании этого параметра strength игнорируется. Параметр denoising_start особенно полезен при интеграции этого пайплайна в многопайплайновую конфигурацию «Mixture of Denoisers», описанную в Уточнение вывода изображения.
  • denoising_end (float, необязательный) — Если указано, определяет долю (от 0.0 до 1.0) общего процесса денойзинга, которая должна быть завершена до его намеренного преждевременного прекращения. В результате возвращаемый образец будет по-прежнему содержать значительное количество шума (примерно последние 20% шагов по-прежнему нужны) и должен быть денойзирован последующим пайплайном, у которого denoising_start установлен в 0.8, чтобы он денойзировал только последние 20% планировщика. Параметр denoising_end следует использовать в идеале, когда этот пайплайн является частью многопайплайновой конфигурации «Mixture of Denoisers», как описано в Уточнение вывода изображения.
  • guidance_scale (float, необязательный, по умолчанию 7.5) — Масштаб руководства, как определено в Classifier-Free Diffusion Guidance. guidance_scale определяется как w из уравнения 2 статьи Imagen Paper. Масштаб руководства включается при установке guidance_scale > 1. Более высокий масштаб руководства способствует генерации изображений, тесно связанных с текстом prompt, обычно за счёт снижения качества изображения.
  • negative_prompt (str or list[str], необязательный) — Промпт или промпты, которые не должны направлять генерацию изображения. Если не задан, необходимо передать negative_prompt_embeds. Игнорируется, если не используется направляющее поле (то есть игнорируется, если guidance_scale меньше 1).
  • negative_prompt_2 (str или list[str], необязательный) — Промпт или промпты, которые не должны направлять генерацию изображения, передаваемые в tokenizer_2 и text_encoder_2. Если не задан, в обоих текстовых кодировщиках используется negative_prompt
  • prompt_embeds (torch.Tensor, необязательный) — Предварительно сгенерированные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных, например, для взвешивания промпта. Если не передано, текстовые эмбеддинги будут сгенерированы из входного аргумента prompt.
  • negative_prompt_embeds (torch.Tensor, необязательный) — Предварительно сгенерированные отрицательные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных, например для взвешивания промпта. Если не передано, negative_prompt_embeds будет сгенерировано из входного аргумента negative_prompt.
  • ip_adapter_image — (PipelineImageInput, необязательный): Необязательное входное изображение для работы с IP-адаптерами.
  • ip_adapter_image_embeds (list[torch.Tensor], необязательный) — Предварительно сгенерированные эмбеддинги изображений для IP-Adapter. Должен представлять собой список, длина которого равна количеству IP-адаптеров. Каждый элемент должен быть тензором формы (batch_size, num_images, emb_dim). Если do_classifier_free_guidance установлен в True, должен содержать отрицательный эмбеддинг изображения. Если не указан, эмбеддинги вычисляются из входного аргумента ip_adapter_image.
  • pooled_prompt_embeds (torch.Tensor, необязательный) — Предварительно сгенерированные пул-эмбеддинги текста. Можно использовать для простой настройки текстовых входных данных, например для взвешивания промпта. Если не предоставлено, пул-эмбеддинги текста будут сгенерированы из входного аргумента prompt.
  • negative_pooled_prompt_embeds (torch.Tensor, необязательный) — Предварительно сгенерированные отрицательные пул-эмбеддинги текста. Можно использовать для простой настройки текстовых входных данных, например для взвешивания промпта. Если не передано, пул-эмбеддинги negative_prompt_embeds будут сгенерированы из входного аргумента negative_prompt.
  • num_images_per_prompt (int, необязательный, по умолчанию 1) — Количество изображений, генерируемых для каждого промпта.
  • eta (float, необязательный, по умолчанию 0.0) — Соответствует параметру eta (η) в статье DDIM: https://huggingface.co/papers/2010.02502. Применяется только к schedulers.DDIMScheduler, для остальных игнорируется.
  • generator (torch.Generator, необязательный) — Один или список генераторов torch для обеспечения детерминированности генерации.
  • latents (torch.Tensor, необязательный) — Предварительно сгенерированные зашумлённые латенты, выбранные из гауссова распределения, которые используются в качестве входных данных для генерации изображений. Позволяет корректировать один и тот же процесс генерации с помощью различных промптов. Если не заданы, тензор латентов будет сгенерирован путём выборки с использованием переданного случайного generator.
  • output_type (str, необязательный, по умолчанию "pil") — Формат вывода сгенерированного изображения. Выберите один из вариантов: PIL: PIL.Image.Image или np.array.
  • return_dict (bool, необязательный, по умолчанию True) — Определяет, следует ли возвращать StableDiffusionPipelineOutput вместо обычного кортежа.
  • cross_attention_kwargs (dict, необязательный) — Словарь kwargs, который при указании передается в AttentionProcessor, определенный в self.processor в модуле diffusers.models.attention_processor.
  • controlnet_conditioning_scale (float или list[float], необязательный, по умолчанию 1.0) — Выходы ControlNet умножаются на controlnet_conditioning_scale перед добавлением к остаточному соединению в исходном unet. Если в init указано несколько ControlNet, соответствующий масштаб можно задать в виде списка.
  • guess_mode (bool, необязательный, по умолчанию False) — Кодер ControlNet пытается распознать содержимое входного изображения, даже если вы удалите все промпты. Рекомендуется значение guidance_scale в диапазоне от 3.0 до 5.0.
  • control_guidance_start (float или list[float], необязательный, по умолчанию 0.0) — Доля от общего числа шагов, с которой ControlNet начинает применяться.
  • control_guidance_end (float или list[float], необязательный, по умолчанию 1.0) — Доля от общего числа шагов, на которой ControlNet прекращает применяться.
  • 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, optional, defaults to 0.0) — Guidance rescale factor from Common Diffusion Noise Schedules and Sample Steps are Flawed.
  • original_size (tuple[int], необязательный, по умолчанию (1024, 1024)) — Если original_size не совпадает с target_size, изображение будет выглядеть как уменьшенное или увеличенное. По умолчанию original_size равно (width, height), если не указано иное. Является частью микроусловий SDXL, как описано в разделе 2.2 https://huggingface.co/papers/2307.01952.
  • crops_coords_top_left (tuple[int], необязательный, по умолчанию (0, 0)) — crops_coords_top_left можно использовать для генерации изображения, которое выглядит как «обрезанное» из позиции crops_coords_top_left вниз. Как правило, хорошо центрированные изображения получаются при установке crops_coords_top_left в (0, 0). Является частью микроусловий SDXL, описанных в разделе 2.2 статьи https://huggingface.co/papers/2307.01952.
  • target_size (tuple[int], необязательный, по умолчанию (1024, 1024)) — В большинстве случаев target_size следует устанавливать в желаемую высоту и ширину генерируемого изображения. Если значение не указано, по умолчанию будет использовано (width, height). Является частью микроусловий SDXL, как описано в разделе 2.2 статьи https://huggingface.co/papers/2307.01952.
  • aesthetic_score (float, необязательный, по умолчанию 6.0) — Используется для имитации эстетической оценки сгенерированного изображения путём влияния на положительное текстовое условие. Является частью микроусловий SDXL, описанных в разделе 2.2 статьи https://huggingface.co/papers/2307.01952.
  • negative_aesthetic_score (float, необязательный, по умолчанию 2.5) — Часть микроусловий SDXL, описанная в разделе 2.2 статьи https://huggingface.co/papers/2307.01952. Может использоваться для симуляции эстетической оценки сгенерированного изображения за счет влияния на отрицательное текстовое условие.
  • clip_skip (int, необязательный) — Количество слоев CLIP, которые пропускаются при вычислении эмбеддингов промпта. Значение 1 означает, что для вычисления эмбеддингов промпта будет использоваться выход предпоследнего слоя.
  • callback_on_step_end (Callable, PipelineCallback, MultiPipelineCallbacks, необязательный) — функция или подкласс PipelineCallback или MultiPipelineCallbacks, вызываемая в конце каждого шага денойзинга во время инференса. Аргументы: callback_on_step_end(self: DiffusionPipeline, step: int, timestep: int, callback_kwargs: Dict). callback_kwargs будет содержать список всех тензоров, указанных в callback_on_step_end_tensor_inputs.
  • callback_on_step_end_tensor_inputs (list, необязательный) — Список тензорных входных данных для функции callback_on_step_end. Тензоры, указанные в списке, будут переданы в качестве аргумента callback_kwargs. Вы сможете включать только переменные, перечисленные в атрибуте ._callback_tensor_inputs вашего класса пайплайна.

Возвращает

~pipelines.stable_diffusion.StableDiffusionXLPipelineOutput или tuple

~pipelines.stable_diffusion.StableDiffusionXLPipelineOutput, если return_dict равно True, иначе tuple. tuple. При возврате кортежа первым элементом является список с сгенерированными изображениями.

Функция, вызываемая при обращении к конвейеру для генерации.

Примеры:

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

< >

( prompt: strprompt_2: str | None = Nonedevice: typing.Optional[torch.device] = Nonenum_images_per_prompt: int = 1do_classifier_free_guidance: bool = Truenegative_prompt: str | None = Nonenegative_prompt_2: str | None = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Nonepooled_prompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_pooled_prompt_embeds: typing.Optional[torch.Tensor] = Nonelora_scale: float | None = Noneclip_skip: int | None = None )

Параметры

  • prompt (str или list[str], необязательный) — промпт для кодирования
  • prompt_2 (str или list[str], необязательный) — Промпт или промпты, которые передаются в tokenizer_2 и text_encoder_2. Если не задан, в обоих text-encoders используется prompt
  • device — (torch.device): устройство torch
  • num_images_per_prompt (int) — количество изображений, которые должны быть сгенерированы для каждого промпта
  • do_classifier_free_guidance (bool) — использовать ли classifier free guidance
  • negative_prompt (str or list[str], необязательный) — Промпт или промпты, которые не должны направлять генерацию изображения. Если не задан, необходимо передать negative_prompt_embeds. Игнорируется, если не используется направляющее поле (то есть игнорируется, если guidance_scale меньше 1).
  • negative_prompt_2 (str или list[str], необязательный) — Промпт или промпты, которые не должны направлять генерацию изображения, передаваемые в tokenizer_2 и text_encoder_2. Если не задан, в обоих текстовых кодировщиках используется negative_prompt
  • prompt_embeds (torch.Tensor, необязательный) — Предварительно сгенерированные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных, например, для взвешивания промпта. Если не передано, текстовые эмбеддинги будут сгенерированы из входного аргумента prompt.
  • negative_prompt_embeds (torch.Tensor, необязательный) — Предварительно сгенерированные отрицательные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных, например для взвешивания промпта. Если не передано, negative_prompt_embeds будет сгенерировано из входного аргумента negative_prompt.
  • pooled_prompt_embeds (torch.Tensor, необязательный) — Предварительно сгенерированные пул-эмбеддинги текста. Можно использовать для простой настройки текстовых входных данных, например для взвешивания промпта. Если не предоставлено, пул-эмбеддинги текста будут сгенерированы из входного аргумента prompt.
  • negative_pooled_prompt_embeds (torch.Tensor, необязательный) — Предварительно сгенерированные отрицательные пул-эмбеддинги текста. Можно использовать для простой настройки текстовых входных данных, например для взвешивания промпта. Если не передано, пул-эмбеддинги negative_prompt_embeds будут сгенерированы из входного аргумента negative_prompt.
  • lora_scale (float, необязательный) — Масштаб LoRA, который будет применён ко всем слоям LoRA текстового кодировщика, если слои LoRA загружены.
  • clip_skip (int, необязательный) — Количество слоев CLIP, которые пропускаются при вычислении эмбеддингов промпта. Значение 1 означает, что для вычисления эмбеддингов промпта будет использоваться выход предпоследнего слоя.

Кодирует промпт в скрытые состояния текстового энкодера.

Update on GitHub