Diffusers documentation

LEDITS++

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