Diffusers documentation

LEDITS++

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

and get access to the augmented documentation experience

to get started

LEDITS++

LoRA

LEDITS++ был предложен в статье LEDITS++: Limitless Image Editing using Text-to-Image Models Мануэлем Бракком, Феликсом Фридрихом, Катариной Корнмайер, Линоем Цабаном, Патриком Шрамовски, Кристьяном Керстингом и Аполинарио Пассосом.

Аннотация из статьи:

Диффузионные модели «текст в изображение» в последнее время вызывают всё больший интерес благодаря своей поразительной способности генерировать изображения высокого качества исключительно по текстовому вводу. Последующие исследования направлены на использование и применение их возможностей для реального редактирования изображений. Однако существующие методы «изображение в изображение» часто неэффективны, неточны и обладают ограниченной универсальностью. Они либо требуют длительной дообучения, либо излишне сильно отклоняются от входного изображения, и/или не поддерживают несколько одновременных правок. Для решения этих проблем мы представляем LEDITS++, эффективную, универсальную и точную технику текстового манипулирования изображениями. Новый подход к инверсии в LEDITS++ не требует настройки или оптимизации и обеспечивает результаты высокого качества за несколько шагов диффузии. Во-вторых, наша методология поддерживает несколько одновременных правок и не зависит от архитектуры модели. В-третьих, мы используем новую технику неявного маскирования, которая ограничивает изменения релевантными областями изображения. В рамках нашего исчерпывающего оценивания мы предлагаем новый бенчмарк TEdBench++. Наши результаты демонстрируют возможности LEDITS++ и его преимущества перед предыдущими методами. Страница проекта доступна по адресу https://leditsplusplus-project.static.hf.space .

Дополнительную информацию о LEDITS++ можно найти на странице проекта, а попробовать его в действии — в демо.

Из-за некоторых проблем обратной совместимости с текущей реализацией DPMSolverMultistepScheduler в diffusers данная реализация LEdits++ больше не может гарантировать идеальное инвертирование. Вероятность того, что эта проблема окажет заметное влияние на практические сценарии использования, невелика. Тем не менее мы предоставляем альтернативную реализацию, гарантирующую идеальное инвертирование, в отдельном репозитории на GitHub.

Мы предоставляем два различных конвейера, основанных на разных предобученных моделях.

LEditsPPPipelineStableDiffusion

класс diffusers.LEditsPPPipelineStableDiffusion

< >

( vae: AutoencoderKLtext_encoder: CLIPTextModeltokenizer: CLIPTokenizerunet: UNet2DConditionModelscheduler: diffusers.schedulers.scheduling_ddim.DDIMScheduler | diffusers.schedulers.scheduling_dpmsolver_multistep.DPMSolverMultistepSchedulersafety_checker: StableDiffusionSafetyCheckerfeature_extractor: CLIPImageProcessorPilrequires_safety_checker: bool = True )

Параметры

  • vae (AutoencoderKL) — Модель вариационного автоэнкодера (VAE) для кодирования изображений в латентные представления и декодирования из них.
  • text_encoder (CLIPTextModel) — Замороженный текстовый энкодер. Stable Diffusion использует текстовую часть CLIP, а именно вариант clip-vit-large-patch14.
  • tokenizer (CLIPTokenizer) — токенизатор класса CLIPTokenizer.
  • unet (UNet2DConditionModel) — условная архитектура U-Net для удаления шума из закодированных латентов изображения.
  • scheduler (DPMSolverMultistepScheduler или DDIMScheduler) — планировщик, используемый в связке с unet для удаления шума из закодированных латентов изображения. Может быть одним из DPMSolverMultistepScheduler или DDIMScheduler. Если передан любой другой планировщик, он будет автоматически заменён на DPMSolverMultistepScheduler.
  • safety_checker (StableDiffusionSafetyChecker) — Модуль классификации, оценивающий, могут ли сгенерированные изображения считаться оскорбительными или вредными. Подробности см. в карточке модели.
  • feature_extractor (CLIPImageProcessor) — Модель, извлекающая признаки из сгенерированных изображений для использования в качестве входных данных для safety_checker.

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

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

__call__

< >

( negative_prompt: str | list[str] | None = Nonegenerator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = Noneoutput_type: str | None = 'pil'return_dict: bool = Trueediting_prompt: str | list[str] | None = Noneediting_prompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Nonereverse_editing_direction: bool | list[bool] | None = Falseedit_guidance_scale: float | list[float] | None = 5edit_warmup_steps: int | list[int] | None = 0edit_cooldown_steps: int | list[int] | None = Noneedit_threshold: float | list[float] | None = 0.9user_mask: typing.Optional[torch.Tensor] = Nonesem_guidance: list[torch.Tensor] | None = Noneuse_cross_attn_mask: bool = Falseuse_intersect_mask: bool = Trueattn_store_steps: list[int] | None = []store_averaged_over_steps: bool = Truecross_attention_kwargs: dict[str, typing.Any] | None = Noneguidance_rescale: float = 0.0clip_skip: int | None = Nonecallback_on_step_end: typing.Optional[typing.Callable[[int, int], NoneType]] = Nonecallback_on_step_end_tensor_inputs: list[str] = ['latents']**kwargs ) → LEditsPPDiffusionPipelineOutput or tuple

Параметры

  • negative_prompt (str или list[str], необязательный) — Промпт или промпты, которые не должны направлять генерацию изображения. Игнорируется, если не используется направляющее влияние (то есть игнорируется, если guidance_scale меньше 1).
  • generator (torch.Generator, необязательный) — Один или список генераторов torch для обеспечения детерминированности генерации.
  • output_type (str, необязательный, по умолчанию "pil") — Формат вывода сгенерированного изображения. Выберите один из вариантов: PIL: PIL.Image.Image или np.array.
  • return_dict (bool, необязательный, по умолчанию True) — Определяет, следует ли возвращать LEditsPPDiffusionPipelineOutput вместо обычного кортежа.
  • editing_prompt (str или list[str], необязательный) — Промпт или промпты для управления генерацией изображения. Изображение восстанавливается при установке editing_prompt = None. Направление управления промптом должно быть указано через reverse_editing_direction.
  • editing_prompt_embeds (torch.Tensor>, необязательный) — Предварительно вычисленные эмбеддинги для управления генерацией изображения. Направление управления эмбеддингом должно указываться через reverse_editing_direction.
  • negative_prompt_embeds (torch.Tensor, необязательный) — Предварительно сгенерированные эмбеддинги отрицательного текста. Можно использовать для простой настройки текстовых входных данных (взвешивание промпта). Если не задано, negative_prompt_embeds генерируются из входного аргумента negative_prompt.
  • reverse_editing_direction (bool or list[bool], необязательный, по умолчанию False) — Определяет, следует ли увеличивать или уменьшать соответствующий промпт в editing_prompt.
  • edit_guidance_scale (float или list[float], необязательный, по умолчанию 5) — Масштаб руководства для управления генерацией изображения. Если передано в виде списка, значения должны соответствовать editing_prompt. edit_guidance_scale определяется как s_e из уравнения 12 в статье LEDITS++.
  • edit_warmup_steps (float или list[float], необязательный, по умолчанию 10) — Количество шагов диффузии (для каждого запроса), для которых направляющее поле не применяется.
  • edit_cooldown_steps (float или list[float], необязательный, по умолчанию None) — Количество шагов диффузии (для каждого запроса), после которых направляющее поле (guidance) больше не применяется.
  • edit_threshold (float или list[float], необязательный, по умолчанию 0.9) — Порог маскирования для guidance. Порог должен быть пропорционален области изображения, которая изменяется. ‘edit_threshold’ определяется как ‘λ’ в уравнении 12 статьи LEDITS++ Paper.
  • user_mask (torch.Tensor, необязательный) — Маска, заданная пользователем, для более точного контроля над процессом редактирования. Это полезно, когда неявные маски LEDITS++ не соответствуют предпочтениям пользователя.
  • sem_guidance (list[torch.Tensor], необязательный) — список заранее сгенерированных векторов guidance, применяемых при генерации. Длина списка должна соответствовать num_inference_steps.
  • use_cross_attn_mask (bool, по умолчанию False) — Используются ли маски кросс-внимания. Маски кросс-внимания всегда используются, если use_intersect_mask установлено в true. Маски кросс-внимания определяются как ‘M^1’ из уравнения 12 статьи LEDITS++.
  • use_intersect_mask (bool, по умолчанию True) — Определяет, вычисляется ли маскирующий член как пересечение масок кросс-внимания и масок, полученных из оценки шума. Маски кросс-внимания определяются как ‘M^1’, а маски, полученные из оценки шума, — как ‘M^2’ в уравнении 12 статьи LEDITS++.
  • attn_store_steps (list[int], необязательный) — Шаги, для которых карты внимания сохраняются в AttentionStore. Только для целей визуализации.
  • store_averaged_over_steps (bool, по умолчанию True) — Определяет, сохраняются ли карты внимания для ‘attn_store_steps’ в усреднённом виде по шагам диффузии. Если значение равно False, карты внимания для каждого шага сохраняются отдельно. Используется только для целей визуализации.
  • cross_attention_kwargs (dict, необязательный) — Словарь kwargs, который при указании передается в AttentionProcessor, определенный в self.processor.
  • guidance_rescale (float, необязательный, по умолчанию 0.0) — Коэффициент rescale guidance из статьи Common Diffusion Noise Schedules and Sample Steps are Flawed. Коэффициент rescale guidance должен исправлять переэкспозицию при использовании нулевого терминального SNR.
  • clip_skip (int, необязательный) — Количество слоев CLIP, которые пропускаются при вычислении эмбеддингов промпта. Значение 1 означает, что для вычисления эмбеддингов промпта будет использоваться выход предпоследнего слоя.
  • callback_on_step_end (Callable, необязательный) — Функция, вызываемая в конце каждого шага денойзинга во время инференса. Функция вызывается со следующими аргументами: 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 вашего класса пайплайна.

Возвращает

LEditsPPDiffusionPipelineOutput или tuple

LEditsPPDiffusionPipelineOutput if return_dict is True, otherwise a tuple. When returning a tuple, the first element is a list with the generated images, and the second element is a list of bools denoting whether the corresponding generated image likely represents "not-safe-for-work" (nsfw) content, according to the safety_checker`.

Функция вызова конвейера для редактирования. Метод invert() должен быть вызван заранее. Редактирование всегда выполняется для последнего инвертированного изображения (изображений).

Примеры:

>>> import torch

>>> from diffusers import LEditsPPPipelineStableDiffusion
>>> from diffusers.utils import load_image

>>> pipe = LEditsPPPipelineStableDiffusion.from_pretrained(
...     "stable-diffusion-v1-5/stable-diffusion-v1-5", variant="fp16", torch_dtype=torch.float16
... )
>>> pipe.vae.enable_tiling()
>>> pipe = pipe.to("cuda")

>>> img_url = "https://www.aiml.informatik.tu-darmstadt.de/people/mbrack/cherry_blossom.png"
>>> image = load_image(img_url).resize((512, 512))

>>> _ = pipe.invert(image=image, num_inversion_steps=50, skip=0.1)

>>> edited_image = pipe(
...     editing_prompt=["cherry blossom"], edit_guidance_scale=10.0, edit_threshold=0.75
... ).images[0]

invert

< >

( image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]]source_prompt: str = ''source_guidance_scale: float = 3.5num_inversion_steps: int = 30skip: float = 0.15generator: typing.Optional[torch.Generator] = Nonecross_attention_kwargs: dict[str, typing.Any] | None = Noneclip_skip: int | None = Noneheight: int | None = Nonewidth: int | None = Noneresize_mode: str | None = 'default'crops_coords: tuple[int, int, int, int] | None = None ) → LEditsPPInversionPipelineOutput

Параметры

  • image (PipelineImageInput) — Входные данные для изображений, которые подлежат редактированию. Несколько входных изображений должны иметь одинаковое соотношение сторон по умолчанию.
  • source_prompt (str, по умолчанию "") — Промпт, описывающий входное изображение, который будет использоваться для управления процессом инверсии. Управление отключается, если source_prompt равно "".
  • source_guidance_scale (float, по умолчанию 3.5) — Сила направленного управления (guidance) при инверсии.
  • num_inversion_steps (int, по умолчанию 30) — Общее количество выполняемых шагов инверсии после отбрасывания начальных skip шагов.
  • skip (float, по умолчанию 0.15) — Доля начальных шагов, которая игнорируется при инверсии и последующей генерации. Меньшие значения приводят к более сильным изменениям входного изображения. skip должен находиться в диапазоне от 0 до 1.
  • generator (torch.Generator, необязательный) — torch.Generator для обеспечения детерминированности инверсии.
  • cross_attention_kwargs (dict, необязательный) — Словарь kwargs, который при указании передается в AttentionProcessor, определенный в self.processor.
  • clip_skip (int, необязательный) — Количество слоев CLIP, которые пропускаются при вычислении эмбеддингов промпта. Значение 1 означает, что для вычисления эмбеддингов промпта будет использоваться выход предпоследнего слоя.
  • height (int, необязательный, по умолчанию None) — Высота в предобработанном изображении. Если None, будет использована get_default_height_width() для получения значения по умолчанию.
  • width (int, optional, defaults to None) -- The width in preprocessed. If None, will use get_default_height_width() to get the default width.
  • resize_mode (str, необязательный, по умолчанию default) — Режим масштабирования, может принимать значение default или fill. Если указано default, изображение будет масштабировано так, чтобы поместиться в заданные ширину и высоту, при этом исходное соотношение сторон может не сохраняться. Если указано fill, изображение будет масштабировано так, чтобы поместиться в заданные ширину и высоту с сохранением соотношения сторон, а затем центрировано в пределах этих размеров, при этом пустые области заполняются данными из изображения. Если указано crop, изображение будет масштабировано так, чтобы поместиться в заданные ширину и высоту с сохранением соотношения сторон, а затем центрировано в пределах этих размеров, при этом избыточные части будут обрезаны. Обратите внимание, что значения resize_mode fill и crop поддерживаются только для входных изображений в формате PIL.
  • crops_coords (list[tuple[int, int, int, int]], необязательный, по умолчанию None) — Координаты обрезки для каждого изображения в батче. Если None, изображение не будет обрезано.

Возвращает

LEditsPPInversionPipelineOutput

В выводе будут содержаться входное изображение (изображения) с изменённым размером и соответствующие реконструкции VAE.

Функция для пайплайна инверсии изображений, описанная в статье LEDITS++. Если планировщик установлен в DDIMScheduler, вместо этого будет выполнена инверсия, предложенная в edit-friendly DPDM.

encode_prompt

< >

( devicenum_images_per_promptenable_edit_guidancenegative_prompt = Noneediting_prompt = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Noneediting_prompt_embeds: typing.Optional[torch.Tensor] = Nonelora_scale: float | None = Noneclip_skip: int | None = None )

Параметры

  • device — (torch.device): устройство torch
  • num_images_per_prompt (int) — количество изображений, которые должны быть сгенерированы для каждого промпта
  • enable_edit_guidance (bool) — выполнять редактирование или вместо этого реконструировать входное изображение
  • negative_prompt (str or list[str], необязательный) — Промпт или промпты, которые не должны направлять генерацию изображения. Если не задан, необходимо передать negative_prompt_embeds. Игнорируется, если не используется направляющее поле (то есть игнорируется, если guidance_scale меньше 1).
  • editing_prompt (str или list[str], необязательный) — Промпт(ы) для редактирования, подлежащие кодированию. Если не задан, необходимо передать editing_prompt_embeds.
  • editing_prompt_embeds (torch.Tensor, необязательный) — Предварительно сгенерированные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных, например, для взвешивания промпта. Если не задано, текстовые эмбеддинги будут сгенерированы из входного аргумента prompt.
  • negative_prompt_embeds (torch.Tensor, необязательный) — Предварительно сгенерированные отрицательные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных, например для взвешивания промпта. Если не передано, negative_prompt_embeds будет сгенерировано из входного аргумента negative_prompt.
  • lora_scale (float, необязательный) — Масштаб LoRA, который будет применён ко всем слоям LoRA текстового кодировщика, если слои LoRA загружены.
  • clip_skip (int, необязательный) — Количество слоев CLIP, которые пропускаются при вычислении эмбеддингов промпта. Значение 1 означает, что для вычисления эмбеддингов промпта будет использоваться выход предпоследнего слоя.

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

LEditsPPPipelineStableDiffusionXL

класс diffusers.LEditsPPPipelineStableDiffusionXL

< >

( vae: AutoencoderKLtext_encoder: CLIPTextModeltext_encoder_2: CLIPTextModelWithProjectiontokenizer: CLIPTokenizertokenizer_2: CLIPTokenizerunet: UNet2DConditionModelscheduler: diffusers.schedulers.scheduling_dpmsolver_multistep.DPMSolverMultistepScheduler | diffusers.schedulers.scheduling_ddim.DDIMSchedulerimage_encoder: CLIPVisionModelWithProjection = Nonefeature_extractor: CLIPImageProcessorPil = Noneforce_zeros_for_empty_prompt: bool = Trueadd_watermarker: bool | 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 (DPMSolverMultistepScheduler или DDIMScheduler) — планировщик, используемый в связке с unet для удаления шума из закодированных латентов изображения. Может быть одним из DPMSolverMultistepScheduler или DDIMScheduler. Если передан любой другой планировщик, он будет автоматически заменён на DPMSolverMultistepScheduler.
  • force_zeros_for_empty_prompt (bool, необязательный, по умолчанию "True") — Определяет, следует ли всегда принудительно устанавливать эмбеддинги негативного промпта в 0. См. также конфигурацию stabilityai/stable-diffusion-xl-base-1-0.
  • add_watermarker (bool, необязательный) — Определяет, следует ли использовать библиотеку invisible_watermark для нанесения водяного знака на выходные изображения. Если значение не задано, по умолчанию используется True, если пакет установлен, в противном случае водяной знак не применяется.

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

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

Кроме того, конвейер наследует следующие методы загрузки:

а также следующие методы сохранения:

  • LoRA: loaders.StableDiffusionXLPipeline.save_lora_weights

__call__

< >

( denoising_end: float | None = Nonenegative_prompt: str | list[str] | None = Nonenegative_prompt_2: str | list[str] | None = Nonenegative_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] = Noneoutput_type: str | None = 'pil'return_dict: bool = Truecross_attention_kwargs: dict[str, typing.Any] | None = Noneguidance_rescale: float = 0.0crops_coords_top_left: tuple[int, int] = (0, 0)target_size: tuple[int, int] | None = Noneediting_prompt: str | list[str] | None = Noneediting_prompt_embeddings: typing.Optional[torch.Tensor] = Noneediting_pooled_prompt_embeds: typing.Optional[torch.Tensor] = Nonereverse_editing_direction: bool | list[bool] | None = Falseedit_guidance_scale: float | list[float] | None = 5edit_warmup_steps: int | list[int] | None = 0edit_cooldown_steps: int | list[int] | None = Noneedit_threshold: float | list[float] | None = 0.9sem_guidance: list[torch.Tensor] | None = Noneuse_cross_attn_mask: bool = Falseuse_intersect_mask: bool = Falseuser_mask: typing.Optional[torch.Tensor] = Noneattn_store_steps: list[int] | None = []store_averaged_over_steps: bool = Trueclip_skip: int | None = Nonecallback_on_step_end: typing.Optional[typing.Callable[[int, int], NoneType]] = Nonecallback_on_step_end_tensor_inputs: list[str] = ['latents']**kwargs ) → LEditsPPDiffusionPipelineOutput or tuple

Параметры

  • denoising_end (float, optional) — When specified, determines the fraction (between 0.0 and 1.0) of the total denoising process to be completed before it is intentionally prematurely terminated. As a result, the returned sample will still retain a substantial amount of noise as determined by the discrete timesteps selected by the scheduler. The denoising_end parameter should ideally be utilized when this pipeline forms a part of a “Mixture of Denoisers” multi-pipeline setup, as elaborated in [**Refining the Image
  • 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
  • negative_prompt_embeds (torch.Tensor, необязательный) — Предварительно сгенерированные отрицательные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных, например для взвешивания промпта. Если не передано, negative_prompt_embeds будет сгенерировано из входного аргумента negative_prompt.
  • negative_pooled_prompt_embeds (torch.Tensor, необязательный) — Предварительно сгенерированные отрицательные пул-эмбеддинги текста. Можно использовать для простой настройки текстовых входных данных, например для взвешивания промпта. Если не передано, пул-эмбеддинги negative_prompt_embeds будут сгенерированы из входного аргумента negative_prompt.
  • ip_adapter_image — (PipelineImageInput, необязательный): Необязательное входное изображение для работы с IP-адаптерами.
  • output_type (str, необязательный, по умолчанию "pil") — Формат вывода сгенерированного изображения. Выберите один из вариантов: PIL: PIL.Image.Image или np.array.
  • return_dict (bool, необязательный, по умолчанию True) — Определяет, следует ли возвращать объект ~pipelines.stable_diffusion_xl.StableDiffusionXLPipelineOutput вместо простого кортежа.
  • cross_attention_kwargs (dict, необязательный) — Словарь kwargs, который при указании передается в AttentionProcessor, определенный в self.processor в модуле diffusers.models.attention_processor.
  • guidance_rescale (float, optional, defaults to 0.7) — Guidance rescale factor proposed by Common Diffusion Noise Schedules and Sample Steps are Flawed guidance_scale is defined as φ in equation 16. of Common Diffusion Noise Schedules and Sample Steps are Flawed. Guidance rescale factor should fix overexposure when using zero terminal SNR.
  • 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.
  • editing_prompt (str или list[str], необязательный) — Промпт или промпты для управления генерацией изображения. Изображение восстанавливается при установке editing_prompt = None. Направление управления промптом должно быть указано через reverse_editing_direction.
  • editing_prompt_embeddings (torch.Tensor, необязательный) — Предварительно сгенерированные эмбеддинги текста для редактирования. Можно использовать для простой настройки текстовых входных данных, например для взвешивания промпта. Если не указано, editing_prompt_embeddings будет сгенерирован из входного аргумента editing_prompt.
  • editing_pooled_prompt_embeds (torch.Tensor, необязательный) — Предварительно сгенерированные пул-эмбеддинги текста для редактирования. Можно использовать для простой настройки текстовых входных данных, например для взвешивания промпта. Если не передан, editing_prompt_embeddings будет сгенерирован из входного аргумента editing_prompt.
  • reverse_editing_direction (bool or list[bool], необязательный, по умолчанию False) — Определяет, следует ли увеличивать или уменьшать соответствующий промпт в editing_prompt.
  • edit_guidance_scale (float или list[float], необязательный, по умолчанию 5) — Масштаб руководства для управления генерацией изображения. Если передано в виде списка, значения должны соответствовать editing_prompt. edit_guidance_scale определяется как s_e из уравнения 12 в статье LEDITS++.
  • edit_warmup_steps (float или list[float], необязательный, по умолчанию 10) — Количество шагов диффузии (для каждого запроса), для которых не применяется управление.
  • edit_cooldown_steps (float или list[float], необязательный, по умолчанию None) — Количество шагов диффузии (для каждого запроса), после которых направляющее поле (guidance) больше не применяется.
  • edit_threshold (float или list[float], необязательный, по умолчанию 0.9) — Порог маскирования для guidance. Порог должен быть пропорционален области изображения, которая изменяется. ‘edit_threshold’ определяется как ‘λ’ в уравнении 12 статьи LEDITS++ Paper.
  • sem_guidance (list[torch.Tensor], необязательный) — список заранее сгенерированных векторов guidance, применяемых при генерации. Длина списка должна соответствовать num_inference_steps.
  • use_cross_attn_mask — Используются ли маски кросс-внимания. Маски кросс-внимания всегда используются, когда use_intersect_mask установлено в true. Маски кросс-внимания определяются как ‘M^1’ из уравнения 12 статьи LEDITS++.
  • use_intersect_mask — Определяет, вычисляется ли маскирующий член как пересечение масок кросс-внимания и масок, полученных из оценки шума. Маски кросс-внимания определяются как ‘M^1’, а маски, полученные из оценки шума, — как ‘M^2’ в уравнении 12 статьи LEDITS++.
  • user_mask — Маска, заданная пользователем, для более точного контроля над процессом редактирования. Это полезно, когда неявные маски LEDITS++ не соответствуют предпочтениям пользователя.
  • attn_store_steps — Шаги, для которых карты внимания сохраняются в AttentionStore. Только для целей визуализации.
  • store_averaged_over_steps — Определяет, сохраняются ли карты внимания для ‘attn_store_steps’ в усреднённом виде по шагам диффузии. Если значение равно False, карты внимания для каждого шага сохраняются отдельно. Используется только для целей визуализации.
  • clip_skip (int, необязательный) — Количество слоев CLIP, которые пропускаются при вычислении эмбеддингов промпта. Значение 1 означает, что для вычисления эмбеддингов промпта будет использоваться выход предпоследнего слоя.
  • callback_on_step_end (Callable, необязательный) — Функция, вызываемая в конце каждого шага денойзинга во время инференса. Функция вызывается со следующими аргументами: 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 вашего класса пайплайна.

Возвращает

LEditsPPDiffusionPipelineOutput или tuple

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

Функция вызова конвейера для редактирования. Метод invert() должен быть вызван заранее. Редактирование всегда выполняется для последнего инвертированного изображения (изображений).

Примеры:

>>> import torch

>>> from diffusers import LEditsPPPipelineStableDiffusionXL
>>> from diffusers.utils import load_image

>>> pipe = LEditsPPPipelineStableDiffusionXL.from_pretrained(
...     "stabilityai/stable-diffusion-xl-base-1.0", variant="fp16", torch_dtype=torch.float16
... )
>>> pipe.vae.enable_tiling()
>>> pipe = pipe.to("cuda")

>>> img_url = "https://www.aiml.informatik.tu-darmstadt.de/people/mbrack/tennis.jpg"
>>> image = load_image(img_url).resize((1024, 1024))

>>> _ = pipe.invert(image=image, num_inversion_steps=50, skip=0.2)

>>> edited_image = pipe(
...     editing_prompt=["tennis ball", "tomato"],
...     reverse_editing_direction=[True, False],
...     edit_guidance_scale=[5.0, 10.0],
...     edit_threshold=[0.9, 0.85],
... ).images[0]

invert

< >

( image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]]source_prompt: str = ''source_guidance_scale = 3.5negative_prompt: str = Nonenegative_prompt_2: str = Nonenum_inversion_steps: int = 50skip: float = 0.15generator: typing.Optional[torch.Generator] = Nonecrops_coords_top_left: tuple[int, int] = (0, 0)num_zero_noise_steps: int = 3cross_attention_kwargs: dict[str, typing.Any] | None = Noneheight: int | None = Nonewidth: int | None = Noneresize_mode: str | None = 'default'crops_coords: tuple[int, int, int, int] | None = None ) → LEditsPPInversionPipelineOutput

Параметры

  • image (PipelineImageInput) — Входные данные для изображений, которые подлежат редактированию. Несколько входных изображений должны иметь одинаковое соотношение сторон по умолчанию.
  • source_prompt (str, по умолчанию "") — Промпт, описывающий входное изображение, который будет использоваться для управления процессом инверсии. Управление отключается, если source_prompt равно "".
  • source_guidance_scale (float, по умолчанию 3.5) — Сила направленного управления (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
  • num_inversion_steps (int, по умолчанию 50) — Общее количество выполняемых шагов инверсии после отбрасывания начальных skip шагов.
  • skip (float, по умолчанию 0.15) — Доля начальных шагов, которая игнорируется при инверсии и последующей генерации. Меньшие значения приводят к более сильным изменениям входного изображения. skip должен находиться в диапазоне от 0 до 1.
  • generator (torch.Generator, необязательный) — torch.Generator для обеспечения детерминированности инверсии.
  • 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.
  • num_zero_noise_steps (int, по умолчанию 3) — Количество последних шагов диффузии, на которых текущее изображение не будет подвергаться повторному шумлению. Если не задать шаги с нулевым шумом, SD-XL в сочетании с DPMSolverMultistepScheduler будет создавать артефакты шума.
  • cross_attention_kwargs (dict, необязательный) — Словарь kwargs, который при указании передается в AttentionProcessor, определенный в self.processor в модуле diffusers.models.attention_processor.

Возвращает

LEditsPPInversionPipelineOutput

В выводе будут содержаться входное изображение (изображения) с изменённым размером и соответствующие реконструкции VAE.

Функция для пайплайна инверсии изображений, описанная в статье LEDITS++. Если планировщик установлен в DDIMScheduler, вместо этого будет выполнена инверсия, предложенная в edit-friendly DPDM.

encode_prompt

< >

( device: typing.Optional[torch.device] = Nonenum_images_per_prompt: int = 1negative_prompt: str | None = Nonenegative_prompt_2: str | None = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_pooled_prompt_embeds: typing.Optional[torch.Tensor] = Nonelora_scale: float | None = Noneclip_skip: int | None = Noneenable_edit_guidance: bool = Trueediting_prompt: str | None = Noneediting_prompt_embeds: typing.Optional[torch.Tensor] = Noneediting_pooled_prompt_embeds: typing.Optional[torch.Tensor] = None )

Параметры

  • device — (torch.device): устройство torch
  • num_images_per_prompt (int) — количество изображений, которые должны быть сгенерированы для каждого промпта
  • negative_prompt (str или list[str], необязательный) — Промпт или промпты, которые не должны направлять генерацию изображения. Если не задан, необходимо передать negative_prompt_embeds вместо него.
  • negative_prompt_2 (str или list[str], необязательный) — Промпт или промпты, которые не должны направлять генерацию изображения, передаваемые в tokenizer_2 и text_encoder_2. Если не задан, в обоих текстовых кодировщиках используется negative_prompt
  • negative_prompt_embeds (torch.Tensor, необязательный) — Предварительно сгенерированные отрицательные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных, например для взвешивания промпта. Если не передано, negative_prompt_embeds будет сгенерировано из входного аргумента negative_prompt.
  • negative_pooled_prompt_embeds (torch.Tensor, необязательный) — Предварительно сгенерированные отрицательные пул-эмбеддинги текста. Можно использовать для простой настройки текстовых входных данных, например для взвешивания промпта. Если не передано, пул-эмбеддинги negative_prompt_embeds будут сгенерированы из входного аргумента negative_prompt.
  • lora_scale (float, необязательный) — Масштаб LoRA, который будет применён ко всем слоям LoRA текстового кодировщика, если слои LoRA загружены.
  • clip_skip (int, необязательный) — Количество слоев CLIP, которые пропускаются при вычислении эмбеддингов промпта. Значение 1 означает, что для вычисления эмбеддингов промпта будет использоваться выход предпоследнего слоя.
  • enable_edit_guidance (bool) — Указывает, следует ли направлять процесс в сторону промпта редактирования.
  • editing_prompt (str или list[str], необязательный) — Промпт(ы) для редактирования, подлежащие кодированию. Если не задан и ‘enable_edit_guidance’ равен True, необходимо передать editing_prompt_embeds вместо него.
  • editing_prompt_embeds (torch.Tensor, необязательный) — Предварительно сгенерированные эмбеддинги текста для редактирования. Можно использовать для простой настройки текстовых входных данных, например для взвешивания промпта. Если не указано и ‘enable_edit_guidance’ равно True, editing_prompt_embeds будет сгенерирован из входного аргумента editing_prompt.
  • editing_pooled_prompt_embeds (torch.Tensor, необязательный) — Предварительно сгенерированные объединённые текстовые эмбеддинги для редактирования. Можно использовать для простой настройки текстовых входных данных, например для взвешивания промпта. Если не задан, объединённые editing_pooled_prompt_embeds будут сгенерированы из входного аргумента editing_prompt.

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

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

LEditsPPDiffusionPipelineOutput

класс diffusers.pipelines.LEditsPPDiffusionPipelineOutput

< >

( images: list[PIL.Image.Image] | numpy.ndarraynsfw_content_detected: list[bool] | None )

Параметры

  • images (list[PIL.Image.Image] или np.ndarray) — список денойзированных изображений PIL длиной batch_size или массив NumPy формы (batch_size, height, width, num_channels).
  • nsfw_content_detected (list[bool]) — список, указывающий, содержит ли соответствующее сгенерированное изображение контент, непригодный для рабочего места (nsfw), или None, если проверка безопасности не могла быть выполнена.

Класс вывода для пайплайнов диффузии LEdits++.

LEditsPPInversionPipelineOutput

класс diffusers.pipelines.LEditsPPInversionPipelineOutput

< >

( images: list[PIL.Image.Image] | numpy.ndarrayvae_reconstruction_images: list[PIL.Image.Image] | numpy.ndarray )

Параметры

  • input_images (list[PIL.Image.Image] или np.ndarray) — список обрезанных и изменённых по размеру входных изображений в формате PIL длиной batch_size или массив NumPy формы (batch_size, height, width, num_channels).
  • vae_reconstruction_images (list[PIL.Image.Image] или np.ndarray) — список реконструкций VAE для всех входных изображений в формате PIL длиной batch_size или массив NumPy формы (batch_size, height, width, num_channels).

Класс вывода для пайплайнов диффузии LEdits++.

Update on GitHub