Diffusers documentation
LEDITS++
LEDITS++
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
< source >( 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__
< source >( 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 (
boolorlist[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
< source >( 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 toNone) -- The width in preprocessed. IfNone, will use get_default_height_width()to get the default width. - resize_mode (
str, необязательный, по умолчаниюdefault) — Режим масштабирования, может принимать значениеdefaultилиfill. Если указаноdefault, изображение будет масштабировано так, чтобы поместиться в заданные ширину и высоту, при этом исходное соотношение сторон может не сохраняться. Если указаноfill, изображение будет масштабировано так, чтобы поместиться в заданные ширину и высоту с сохранением соотношения сторон, а затем центрировано в пределах этих размеров, при этом пустые области заполняются данными из изображения. Если указаноcrop, изображение будет масштабировано так, чтобы поместиться в заданные ширину и высоту с сохранением соотношения сторон, а затем центрировано в пределах этих размеров, при этом избыточные части будут обрезаны. Обратите внимание, что значения resize_modefillиcropподдерживаются только для входных изображений в формате PIL. - crops_coords (
list[tuple[int, int, int, int]], необязательный, по умолчаниюNone) — Координаты обрезки для каждого изображения в батче. ЕслиNone, изображение не будет обрезано.
Возвращает
В выводе будут содержаться входное изображение (изображения) с изменённым размером и соответствующие реконструкции VAE.
Функция для пайплайна инверсии изображений, описанная в статье LEDITS++. Если планировщик установлен в DDIMScheduler, вместо этого будет выполнена инверсия, предложенная в edit-friendly DPDM.
encode_prompt
< source >( 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 (
strorlist[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
< source >( 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: LEditsPPPipelineStableDiffusionXL.load_lora_weights()
- Чекпоинт: loaders.FromSingleFileMixin.from_single_file()
а также следующие методы сохранения:
- LoRA:
loaders.StableDiffusionXLPipeline.save_lora_weights
__call__
< source >( 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 (
strorlist[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 Flawedguidance_scaleis 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 (
boolorlist[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
< source >( 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 (
strorlist[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.
Возвращает
В выводе будут содержаться входное изображение (изображения) с изменённым размером и соответствующие реконструкции VAE.
Функция для пайплайна инверсии изображений, описанная в статье LEDITS++. Если планировщик установлен в DDIMScheduler, вместо этого будет выполнена инверсия, предложенная в edit-friendly DPDM.
encode_prompt
< source >( 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
< source >( 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).
LEditsPPDiffusionPipelineOutput
класс diffusers.pipelines.LEditsPPDiffusionPipelineOutput
< source >( 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
< source >( 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++.