Diffusers documentation
LEDITS++
LEDITS++
LEDITS++ foi proposto em LEDITS++: Limitless Image Editing using Text-to-Image Models por Manuel Brack, Felix Friedrich, Katharina Kornmeier, Linoy Tsaban, Patrick Schramowski, Kristian Kersting, Apolinário Passos.
O resumo do artigo é:
Os modelos de difusão de texto para imagem têm recebido interesse crescente recentemente, devido à sua notável capacidade de gerar imagens de alta fidelidade a partir apenas de entradas de texto. Esforços de pesquisa subsequentes visam explorar e aplicar suas capacidades à edição real de imagens. No entanto, os métodos existentes de imagem para imagem são frequentemente ineficientes, imprecisos e de versatilidade limitada. Eles exigem ajuste fino demorado, se desviam desnecessariamente e com força excessiva da imagem de entrada e/ou não oferecem suporte a múltiplas edições simultâneas. Para abordar essas questões, apresentamos o LEDITS++, uma técnica de manipulação textual de imagem eficiente, versátil e precisa. A nova abordagem de inversão do LEDITS++ não requer ajuste nem otimização e produz resultados de alta fidelidade com poucas etapas de difusão. Em segundo lugar, nossa metodologia suporta múltiplas edições simultâneas e é agnóstica em relação à arquitetura. Em terceiro lugar, utilizamos uma nova técnica de mascaramento implícito que limita as alterações às regiões relevantes da imagem. Propomos o novo benchmark TEdBench++ como parte de nossa avaliação exaustiva. Nossos resultados demonstram as capacidades do LEDITS++ e suas melhorias em relação a métodos anteriores. A página do projeto está disponível em https://leditsplusplus-project.static.hf.space .
Você pode encontrar informações adicionais sobre LEDITS++ na página do projeto e experimentá-lo em uma demonstração.
Devido a alguns problemas de compatibilidade reversa com a implementação atual de DPMSolverMultistepScheduler no diffusers, esta implementação do LEdits++ não pode mais garantir inversão perfeita. É improvável que esse problema tenha efeitos perceptíveis em casos de uso práticos. No entanto, fornecemos uma implementação alternativa que garante inversão perfeita em um repositório dedicado no GitHub.
Oferecemos dois pipelines distintos baseados em diferentes modelos pré-treinados.
LEditsPPPipelineStableDiffusion
classe 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 )
Parâmetros
- vae (AutoencoderKL) — Modelo de Variational Auto-Encoder (VAE) para codificar e decodificar imagens para e a partir de representações latentes.
- text_encoder (CLIPTextModel) — Codificador de texto congelado. O Stable Diffusion usa a parte de texto do CLIP, especificamente a variante clip-vit-large-patch14.
- tokenizer (CLIPTokenizer) — Tokenizer da classe CLIPTokenizer.
- unet (UNet2DConditionModel) — Arquitetura U-Net condicional para desruidar os latentes da imagem codificada.
- scheduler (DPMSolverMultistepScheduler ou DDIMScheduler) —
Um scheduler a ser usado em combinação com
unetpara desruidar os latentes da imagem codificada. Pode ser um dos DPMSolverMultistepScheduler ou DDIMScheduler. Se qualquer outro scheduler for passado, ele será automaticamente definido como DPMSolverMultistepScheduler. - safety_checker (
StableDiffusionSafetyChecker) — Módulo de classificação que estima se as imagens geradas podem ser consideradas ofensivas ou prejudiciais. Consulte o model card para mais detalhes. - feature_extractor (CLIPImageProcessor) —
Modelo que extrai recursos de imagens geradas para serem usados como entradas para o
safety_checker.
Pipeline para edição textual de imagens usando LEDits++ com Stable Diffusion.
Este modelo herda de DiffusionPipeline e é baseado no StableDiffusionPipeline. Consulte a documentação da superclasse para os métodos genéricos implementados para todos os pipelines (download, salvamento, execução em um dispositivo específico, etc.).
__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
Parâmetros
- negative_prompt (
stroulist[str], opcional) — O prompt ou os prompts que não devem orientar a geração da imagem. Ignorado quando não se usa orientação (ou seja, ignorado seguidance_scalefor menor que1). - generator (
torch.Generator, opcional) — Um ou uma lista de geradores do torch para tornar a geração determinística. - output_type (
str, opcional, padrão"pil") — O formato de saída da imagem gerada. Escolha entre PIL:PIL.Image.Imageounp.array. - return_dict (
bool, opcional, padrãoTrue) — Se deve ou não retornar um LEditsPPDiffusionPipelineOutput em vez de uma tupla simples. - editing_prompt (
stroulist[str], opcional) — O prompt ou os prompts para orientar a geração da imagem. A imagem é reconstruída definindoediting_prompt = None. A direção de orientação do prompt deve ser especificada viareverse_editing_direction. - editing_prompt_embeds (
torch.Tensor>, opcional) — Incorporações pré-computadas a serem usadas para orientar a geração da imagem. A direção de orientação da incorporação deve ser especificada viareverse_editing_direction. - negative_prompt_embeds (
torch.Tensor, opcional) — Embeddings de texto negativos pré-gerados. Pode ser usado para ajustar facilmente as entradas de texto (ponderação do prompt). Se não for fornecido, osnegative_prompt_embedssão gerados a partir do argumento de entradanegative_prompt. - reverse_editing_direction (
booloulist[bool], opcional, padrãoFalse) — Se o prompt correspondente emediting_promptdeve ser aumentado ou diminuído. - edit_guidance_scale (
floatoulist[float], opcional, padrão 5) — Escala de orientação para guiar a geração da imagem. Se fornecida como lista, os valores devem corresponder aediting_prompt.edit_guidance_scaleé definido comos_eda equação 12 do LEDITS++ Paper. - edit_warmup_steps (
floatoulist[float], opcional, padrão 10) — Número de etapas de difusão (para cada prompt) para as quais a orientação não será aplicada. - edit_cooldown_steps (
floatoulist[float], opcional, padrãoNone) — Número de etapas de difusão (para cada prompt) após as quais a orientação deixará de ser aplicada. - edit_threshold (
floatoulist[float], opcional, padrão 0.9) — Limiar de mascaramento da orientação. O limiar deve ser proporcional à região da imagem que é modificada. ‘edit_threshold’ é definido como ‘λ’ da equação 12 do LEDITS++ Paper. - user_mask (
torch.Tensor, opcional) — Máscara fornecida pelo usuário para um controle ainda melhor sobre o processo de edição. Isso é útil quando as máscaras implícitas do LEDITS++ não atendem às preferências do usuário. - sem_guidance (
list[torch.Tensor], opcional) — lista de vetores de orientação pré-gerados a serem aplicados na geração. O comprimento da lista deve corresponder anum_inference_steps. - use_cross_attn_mask (
bool, padrãoFalse) — Se máscaras de atenção cruzada são usadas. Máscaras de atenção cruzada são sempre usadas quando use_intersect_mask é definido como true. Máscaras de atenção cruzada são definidas como ‘M^1’ da equação 12 do artigo LEDITS++. - use_intersect_mask (
bool, padrãoTrue) — Se o termo de mascaramento é calculado como a interseção das máscaras de atenção cruzada e das máscaras derivadas da estimativa de ruído. As máscaras de atenção cruzada são definidas como ‘M^1’ e as máscaras derivadas da estimativa de ruído são definidas como ‘M^2’ da equação 12 do artigo LEDITS++. - attn_store_steps (
list[int], opcional) — Etapas para as quais os mapas de atenção são armazenados no AttentionStore. Apenas para fins de visualização. - store_averaged_over_steps (
bool, padrãoTrue) — Se os mapas de atenção para os ‘attn_store_steps’ são armazenados com média calculada sobre os passos de difusão. Se False, os mapas de atenção para cada passo são armazenados separadamente. Apenas para fins de visualização. - cross_attention_kwargs (
dict, opcional) — Um dicionário de kwargs que, se especificado, é passado aoAttentionProcessorconforme definido emself.processor. - guidance_rescale (
float, opcional, padrão 0.0) — Fator de rescale de guidance de Common Diffusion Noise Schedules and Sample Steps are Flawed. O fator de rescale de guidance deve corrigir a sobreexposição ao usar zero terminal SNR. - clip_skip (
int, opcional) — Número de camadas a serem ignoradas do CLIP ao calcular os embeddings do prompt. Um valor de 1 significa que a saída da camada pré-final será usada para calcular os embeddings do prompt. - callback_on_step_end (
Callable, opcional) — Uma função que é chamada no final de cada etapa de desruidamento durante a inferência. A função é chamada com os seguintes argumentos:callback_on_step_end(self: DiffusionPipeline, step: int, timestep: int, callback_kwargs: Dict).callback_kwargsincluirá uma lista de todos os tensores, conforme especificado porcallback_on_step_end_tensor_inputs. - callback_on_step_end_tensor_inputs (
list, opcional) — A lista de entradas de tensor para a funçãocallback_on_step_end. Os tensores especificados na lista serão passados como argumentocallback_kwargs. Você só poderá incluir variáveis listadas no atributo._callback_tensor_inputsda sua classe de pipeline.
Retorna
LEditsPPDiffusionPipelineOutput ou 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`.
A função de chamada do pipeline para edição. O método invert() deve ser chamado antes. As edições sempre serão realizadas para a(s) última(s) imagem(ns) invertida(s).
Exemplos:
>>> 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
Parâmetros
- image (
PipelineImageInput) — Entrada para a(s) imagem(ns) que serão editadas. Múltiplas imagens de entrada devem ter, por padrão, a mesma proporção de aspecto. - source_prompt (
str, padrão"") — Prompt descrevendo a imagem de entrada que será usado para orientação durante a inversão. A orientação é desativada se osource_promptfor"". - source_guidance_scale (
float, padrão3.5) — Força do guia durante a inversão. - num_inversion_steps (
int, padrão30) — Número total de etapas de inversão executadas após descartar asskipetapas iniciais. - skip (
float, padrão0.15) — Fração dos passos iniciais que será ignorada para a inversão e a geração subsequente. Valores menores resultarão em mudanças mais fortes na imagem de entrada.skipdeve estar entre0e1. - generator (
torch.Generator, opcional) — Umtorch.Generatorpara tornar a inversão determinística. - cross_attention_kwargs (
dict, opcional) — Um dicionário de kwargs que, se especificado, é passado aoAttentionProcessorconforme definido emself.processor. - clip_skip (
int, opcional) — Número de camadas a serem ignoradas do CLIP ao calcular os embeddings do prompt. Um valor de 1 significa que a saída da camada pré-final será usada para calcular os embeddings do prompt. - height (
int, opcional, padrãoNone) — A altura na imagem pré-processada. SeNone, usará oget_default_height_width()para obter a altura padrão. - width (
int, optional, defaults toNone) -- The width in preprocessed. IfNone, will use get_default_height_width()to get the default width. - resize_mode (
str, opcional, padrãodefault) — O modo de redimensionamento, pode serdefaultoufill. Sedefault, redimensiona a imagem para caber dentro da largura e altura especificadas, e pode não manter a proporção original. Sefill, redimensiona a imagem para caber dentro da largura e altura especificadas, mantendo a proporção, e então centraliza a imagem dentro das dimensões, preenchendo o espaço vazio com dados da imagem. Secrop, redimensiona a imagem para caber dentro da largura e altura especificadas, mantendo a proporção, e então centraliza a imagem dentro das dimensões, cortando o excesso. Observe que resize_modefillecropsão suportados apenas para entrada de imagem PIL. - crops_coords (
list[tuple[int, int, int, int]], opcional, padrãoNone) — As coordenadas de recorte para cada imagem no lote. SeNone, a imagem não será recortada.
Retorna
A saída conterá a(s) imagem(ns) de entrada redimensionada(s) e a(s) reconstrução(ões) correspondente(s) do VAE.
A função para o pipeline de inversão de imagem conforme descrito no LEDITS++ Paper. Se o scheduler estiver definido como DDIMScheduler, a inversão proposta por edit-friendly DPDM será realizada em vez disso.
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 )
Parâmetros
- device — (
torch.device): dispositivo torch - num_images_per_prompt (
int) — número de imagens que devem ser geradas por prompt - enable_edit_guidance (
bool) — se deve realizar alguma edição ou reconstruir a imagem de entrada - negative_prompt (
stroulist[str], opcional) — O prompt ou os prompts que não devem orientar a geração da imagem. Se não for definido, é necessário passarnegative_prompt_embedsem vez disso. Ignorado quando não se usa orientação (ou seja, ignorado seguidance_scalefor menor que1). - editing_prompt (
stroulist[str], opcional) — Prompt(s) de edição a serem codificados. Se não definido, é necessário passarediting_prompt_embedsem vez disso. - editing_prompt_embeds (
torch.Tensor, opcional) — Incorporações de texto pré-geradas. Podem ser usadas para ajustar facilmente as entradas de texto, por exemplo, ponderação de prompts. Se não forem fornecidas, as incorporações de texto serão geradas a partir do argumento de entradaprompt. - negative_prompt_embeds (
torch.Tensor, opcional) — Incorporações de texto negativas pré-geradas. Pode ser usado para ajustar facilmente as entradas de texto, por exemplo, ponderação de prompts. Se não for fornecido, negative_prompt_embeds será gerado a partir do argumento de entradanegative_prompt. - lora_scale (
float, opcional) — Uma escala LoRA que será aplicada a todas as camadas LoRA do codificador de texto, caso as camadas LoRA sejam carregadas. - clip_skip (
int, opcional) — Número de camadas a serem ignoradas do CLIP ao calcular os embeddings do prompt. Um valor de 1 significa que a saída da camada pré-final será usada para calcular os embeddings do prompt.
Codifica o prompt em estados ocultos do codificador de texto.
LEditsPPPipelineStableDiffusionXL
classe 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 )
Parâmetros
- vae (AutoencoderKL) — Modelo de Variational Auto-Encoder (VAE) para codificar e decodificar imagens para e a partir de representações latentes.
- text_encoder (CLIPTextModel) — Codificador de texto congelado. O Stable Diffusion XL usa a parte de texto do CLIP, especificamente a variante clip-vit-large-patch14.
- text_encoder_2 (CLIPTextModelWithProjection) — Segundo codificador de texto congelado. O Stable Diffusion XL usa a parte de texto e pool do CLIP, especificamente a variante laion/CLIP-ViT-bigG-14-laion2B-39B-b160k.
- tokenizer (CLIPTokenizer) — Tokenizer da classe CLIPTokenizer.
- tokenizer_2 (CLIPTokenizer) — Segundo Tokenizer da classe CLIPTokenizer.
- unet (UNet2DConditionModel) — Arquitetura U-Net condicional para desruidar os latentes da imagem codificada.
- scheduler (DPMSolverMultistepScheduler ou DDIMScheduler) —
Um scheduler a ser usado em combinação com
unetpara desruidar os latentes da imagem codificada. Pode ser um dos DPMSolverMultistepScheduler ou DDIMScheduler. Se qualquer outro scheduler for passado, ele será automaticamente definido como DPMSolverMultistepScheduler. - force_zeros_for_empty_prompt (
bool, opcional, padrão"True") — Se os embeddings do prompt negativo devem ser forçados a serem sempre definidos como 0. Veja também a configuração destabilityai/stable-diffusion-xl-base-1-0. - add_watermarker (
bool, opcional) — Se deve usar a invisible_watermark library para marcar as imagens de saída. Se não definido, o padrão será True se o pacote estiver instalado; caso contrário, nenhum watermarker será usado.
Pipeline para edição textual de imagens usando LEDits++ com Stable Diffusion XL.
Este modelo herda de DiffusionPipeline e é baseado no StableDiffusionXLPipeline. Consulte a documentação da superclasse para os métodos genéricos implementados para todos os pipelines (download, salvamento, execução em um dispositivo específico, etc.).
Além disso, o pipeline herda os seguintes métodos de carregamento:
- LoRA: LEditsPPPipelineStableDiffusionXL.load_lora_weights()
- Ckpt: loaders.FromSingleFileMixin.from_single_file()
bem como os seguintes métodos de salvamento:
- 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
Parâmetros
- denoising_end (
float, opcional) — Quando especificado, determina a fração (entre 0.0 e 1.0) do processo total de desruidamento que deve ser concluída antes de ser encerrada prematuramente de forma intencional. Como resultado, a amostra retornada ainda manterá uma quantidade substancial de ruído, conforme determinado pelos passos discretos selecionados pelo agendador. O parâmetro denoising_end deve ser idealmente utilizado quando este pipeline faz parte de uma configuração multi-pipeline de “Mixture of Denoisers”, conforme detalhado em [**Refining the Image - negative_prompt (
stroulist[str], opcional) — O prompt ou os prompts que não devem orientar a geração da imagem. Se não for definido, é necessário passarnegative_prompt_embedsem vez disso. Ignorado quando não se usa orientação (ou seja, ignorado seguidance_scalefor menor que1). - negative_prompt_2 (
stroulist[str], opcional) — O prompt ou os prompts que não devem orientar a geração da imagem a serem enviados paratokenizer_2etext_encoder_2. Se não definido,negative_prompté usado em ambos os text-encoders - negative_prompt_embeds (
torch.Tensor, opcional) — Incorporações de texto negativas pré-geradas. Pode ser usado para ajustar facilmente as entradas de texto, por exemplo, ponderação de prompts. Se não for fornecido, negative_prompt_embeds será gerado a partir do argumento de entradanegative_prompt. - negative_pooled_prompt_embeds (
torch.Tensor, opcional) — Embeddings de texto negativo pré-gerados. Pode ser usado para ajustar facilmente as entradas de texto, por exemplo, ponderação de prompt. Se não for fornecido, os pooled negative_prompt_embeds serão gerados a partir do argumento de entradanegative_prompt. - ip_adapter_image — (
PipelineImageInput, opcional): Entrada de imagem opcional para trabalhar com IP Adapters. - output_type (
str, opcional, padrão"pil") — O formato de saída da imagem gerada. Escolha entre PIL:PIL.Image.Imageounp.array. - return_dict (
bool, opcional, padrãoTrue) — Se deve ou não retornar um~pipelines.stable_diffusion_xl.StableDiffusionXLPipelineOutputem vez de uma tupla simples. - cross_attention_kwargs (
dict, opcional) — Um dicionário de kwargs que, se especificado, é passado para oAttentionProcessorconforme definido emself.processorem diffusers.models.attention_processor. - guidance_rescale (
float, opcional, padrão 0.7) — Fator de rescalonamento de orientação proposto por Common Diffusion Noise Schedules and Sample Steps are Flawedguidance_scaleé definido comoφna equação 16. de Common Diffusion Noise Schedules and Sample Steps are Flawed. O fator de rescalonamento de orientação deve corrigir a sobreexposição ao usar SNR terminal zero. - crops_coords_top_left (
tuple[int], opcional, padrão (0, 0)) —crops_coords_top_leftpode ser usado para gerar uma imagem que pareça “recortada” a partir da posiçãocrops_coords_top_leftpara baixo. Imagens favoráveis e bem centralizadas são geralmente obtidas ao definircrops_coords_top_leftcomo (0, 0). Parte do micro-condicionamento do SDXL, conforme explicado na seção 2.2 de https://huggingface.co/papers/2307.01952. - target_size (
tuple[int], opcional, padrão (1024, 1024)) — Na maioria dos casos,target_sizedeve ser definido para a altura e largura desejadas da imagem gerada. Se não for especificado, o padrão será(width, height). Parte do micro-conditioning do SDXL, conforme explicado na seção 2.2 de https://huggingface.co/papers/2307.01952. - editing_prompt (
stroulist[str], opcional) — O prompt ou os prompts para orientar a geração da imagem. A imagem é reconstruída definindoediting_prompt = None. A direção de orientação do prompt deve ser especificada viareverse_editing_direction. - editing_prompt_embeddings (
torch.Tensor, opcional) — Embeddings de texto de edição pré-gerados. Podem ser usados para ajustar facilmente as entradas de texto, por exemplo, ponderação de prompts. Se não fornecidos, editing_prompt_embeddings será gerado a partir do argumento de entradaediting_prompt. - editing_pooled_prompt_embeds (
torch.Tensor, opcional) — Embeddings de texto de edição pré-gerados. Pode ser usado para ajustar facilmente as entradas de texto, por exemplo, ponderação do prompt. Se não for fornecido, editing_prompt_embeddings será gerado a partir do argumento de entradaediting_prompt. - reverse_editing_direction (
booloulist[bool], opcional, padrãoFalse) — Se o prompt correspondente emediting_promptdeve ser aumentado ou diminuído. - edit_guidance_scale (
floatoulist[float], opcional, padrão 5) — Escala de orientação para guiar a geração da imagem. Se fornecida como lista, os valores devem corresponder aediting_prompt.edit_guidance_scaleé definido comos_eda equação 12 do LEDITS++ Paper. - edit_warmup_steps (
floatoulist[float], opcional, padrão 10) — Número de etapas de difusão (para cada prompt) para as quais a orientação não é aplicada. - edit_cooldown_steps (
floatoulist[float], opcional, padrãoNone) — Número de etapas de difusão (para cada prompt) após as quais a orientação deixa de ser aplicada. - edit_threshold (
floatoulist[float], opcional, padrão 0.9) — Limiar de mascaramento da orientação. O limiar deve ser proporcional à região da imagem que é modificada. ‘edit_threshold’ é definido como ‘λ’ da equação 12 do LEDITS++ Paper. - sem_guidance (
list[torch.Tensor], opcional) — lista de vetores de orientação pré-gerados a serem aplicados na geração. O comprimento da lista deve corresponder anum_inference_steps. - use_cross_attn_mask — Se máscaras de atenção cruzada são usadas. Máscaras de atenção cruzada são sempre usadas quando use_intersect_mask é definido como true. Máscaras de atenção cruzada são definidas como ‘M^1’ da equação 12 do artigo LEDITS++.
- use_intersect_mask — Se o termo de mascaramento é calculado como a interseção das máscaras de atenção cruzada e das máscaras derivadas da estimativa de ruído. As máscaras de atenção cruzada são definidas como ‘M^1’ e as máscaras derivadas da estimativa de ruído são definidas como ‘M^2’ da equação 12 do artigo LEDITS++.
- user_mask — Máscara fornecida pelo usuário para um controle ainda melhor sobre o processo de edição. Isso é útil quando as máscaras implícitas do LEDITS++ não atendem às preferências do usuário.
- attn_store_steps — Passos para os quais os mapas de atenção são armazenados no AttentionStore. Apenas para fins de visualização.
- store_averaged_over_steps — Se os mapas de atenção para os ‘attn_store_steps’ são armazenados com média calculada ao longo dos passos de difusão. Se False, os mapas de atenção para cada passo são armazenados separadamente. Apenas para fins de visualização.
- clip_skip (
int, opcional) — Número de camadas a serem ignoradas do CLIP ao calcular os embeddings do prompt. Um valor de 1 significa que a saída da camada pré-final será usada para calcular os embeddings do prompt. - callback_on_step_end (
Callable, opcional) — Uma função que é chamada no final de cada etapa de desruidamento durante a inferência. A função é chamada com os seguintes argumentos:callback_on_step_end(self: DiffusionPipeline, step: int, timestep: int, callback_kwargs: Dict).callback_kwargsincluirá uma lista de todos os tensores, conforme especificado porcallback_on_step_end_tensor_inputs. - callback_on_step_end_tensor_inputs (
list, opcional) — A lista de entradas de tensor para a funçãocallback_on_step_end. Os tensores especificados na lista serão passados como argumentocallback_kwargs. Você só poderá incluir variáveis listadas no atributo._callback_tensor_inputsda sua classe de pipeline.
Retorna
LEditsPPDiffusionPipelineOutput ou tuple
LEditsPPDiffusionPipelineOutput se return_dict for True, caso contrário, uma `tuple. Ao retornar uma tupla, o primeiro elemento é uma lista com as imagens geradas.
A função de chamada do pipeline para edição. O método invert() deve ser chamado antes. As edições sempre serão realizadas para a(s) última(s) imagem(ns) invertida(s).
Exemplos:
>>> 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
Parâmetros
- image (
PipelineImageInput) — Entrada para a(s) imagem(ns) que serão editadas. Múltiplas imagens de entrada devem ter, por padrão, a mesma proporção de aspecto. - source_prompt (
str, padrão"") — Prompt descrevendo a imagem de entrada que será usado para orientação durante a inversão. A orientação é desativada se osource_promptfor"". - source_guidance_scale (
float, padrão3.5) — Força do guia durante a inversão. - negative_prompt (
stroulist[str], opcional) — O prompt ou os prompts que não devem orientar a geração da imagem. Se não for definido, é necessário passarnegative_prompt_embedsem vez disso. Ignorado quando não se usa orientação (ou seja, ignorado seguidance_scalefor menor que1). - negative_prompt_2 (
stroulist[str], opcional) — O prompt ou os prompts que não devem orientar a geração da imagem a serem enviados paratokenizer_2etext_encoder_2. Se não definido,negative_prompté usado em ambos os text-encoders - num_inversion_steps (
int, padrão50) — Número total de etapas de inversão executadas após descartar asskipetapas iniciais. - skip (
float, padrão0.15) — Fração dos passos iniciais que será ignorada para a inversão e a geração subsequente. Valores menores resultarão em mudanças mais fortes na imagem de entrada.skipdeve estar entre0e1. - generator (
torch.Generator, opcional) — Umtorch.Generatorpara tornar a inversão determinística. - crops_coords_top_left (
tuple[int], opcional, padrão (0, 0)) —crops_coords_top_leftpode ser usado para gerar uma imagem que pareça “recortada” a partir da posiçãocrops_coords_top_leftpara baixo. Imagens favoráveis e bem centralizadas são geralmente obtidas ao definircrops_coords_top_leftcomo (0, 0). Parte do micro-condicionamento do SDXL, conforme explicado na seção 2.2 de https://huggingface.co/papers/2307.01952. - num_zero_noise_steps (
int, padrão3) — Número de etapas finais de difusão que não rebarulharão a imagem atual. Se nenhuma etapa for definida como zero, o SD-XL em combinação com DPMSolverMultistepScheduler produzirá artefatos de ruído. - cross_attention_kwargs (
dict, opcional) — Um dicionário de kwargs que, se especificado, é passado para oAttentionProcessorconforme definido emself.processorem diffusers.models.attention_processor.
Retorna
A saída conterá a(s) imagem(ns) de entrada redimensionada(s) e a(s) reconstrução(ões) correspondente(s) do VAE.
A função para o pipeline de inversão de imagem conforme descrito no LEDITS++ Paper. Se o scheduler estiver definido como DDIMScheduler, a inversão proposta por edit-friendly DPDM será realizada em vez disso.
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 )
Parâmetros
- device — (
torch.device): dispositivo torch - num_images_per_prompt (
int) — número de imagens que devem ser geradas por prompt - negative_prompt (
stroulist[str], opcional) — O prompt ou os prompts que não devem orientar a geração da imagem. Se não for definido, é necessário passarnegative_prompt_embedsem vez disso. - negative_prompt_2 (
stroulist[str], opcional) — O prompt ou os prompts que não devem orientar a geração da imagem a serem enviados paratokenizer_2etext_encoder_2. Se não definido,negative_prompté usado em ambos os text-encoders - negative_prompt_embeds (
torch.Tensor, opcional) — Incorporações de texto negativas pré-geradas. Pode ser usado para ajustar facilmente as entradas de texto, por exemplo, ponderação de prompts. Se não for fornecido, negative_prompt_embeds será gerado a partir do argumento de entradanegative_prompt. - negative_pooled_prompt_embeds (
torch.Tensor, opcional) — Embeddings de texto negativo pré-gerados. Pode ser usado para ajustar facilmente as entradas de texto, por exemplo, ponderação de prompt. Se não for fornecido, os pooled negative_prompt_embeds serão gerados a partir do argumento de entradanegative_prompt. - lora_scale (
float, opcional) — Uma escala LoRA que será aplicada a todas as camadas LoRA do codificador de texto, caso as camadas LoRA sejam carregadas. - clip_skip (
int, opcional) — Número de camadas a serem ignoradas do CLIP ao calcular os embeddings do prompt. Um valor de 1 significa que a saída da camada pré-final será usada para calcular os embeddings do prompt. - enable_edit_guidance (
bool) — Se deve ou não orientar em direção a um prompt de edição. - editing_prompt (
stroulist[str], opcional) — Prompt(s) de edição a serem codificados. Se não definido e ‘enable_edit_guidance’ for True, é necessário passarediting_prompt_embedsem vez disso. - editing_prompt_embeds (
torch.Tensor, opcional) — Embeddings de texto de edição pré-gerados. Podem ser usados para ajustar facilmente as entradas de texto, por exemplo, ponderação de prompt. Se não fornecidos e ‘enable_edit_guidance’ for True, editing_prompt_embeds será gerado a partir do argumento de entradaediting_prompt. - editing_pooled_prompt_embeds (
torch.Tensor, opcional) — Embeddings de texto agrupados pré-gerados para edição. Pode ser usado para ajustar facilmente as entradas de texto, por exemplo, ponderação do prompt. Se não for fornecido, os editing_pooled_prompt_embeds agrupados serão gerados a partir do argumento de entradaediting_prompt.
Codifica o prompt em estados ocultos do codificador de texto.
get_guidance_scale_embedding
< source >( w: Tensorembedding_dim: int = 512dtype: dtype = torch.float32 ) → torch.Tensor
Parâmetros
- w (
torch.Tensor) — Gera vetores de incorporação com uma escala de orientação especificada para, em seguida, enriquecer as incorporações de passo de tempo. - embedding_dim (
int, opcional, padrão 512) — Dimensão dos embeddings a serem gerados. - dtype (
torch.dtype, opcional, padrãotorch.float32) — Tipo de dados dos embeddings gerados.
Retorna
torch.Tensor
Vetores de incorporação com forma (len(w), embedding_dim).
LEditsPPDiffusionPipelineOutput
classe diffusers.pipelines.LEditsPPDiffusionPipelineOutput
< source >( images: list[PIL.Image.Image] | numpy.ndarraynsfw_content_detected: list[bool] | None )
Parâmetros
- images (
list[PIL.Image.Image]ounp.ndarray) — lista de imagens PIL desruidas de comprimentobatch_sizeou array NumPy de forma(batch_size, height, width, num_channels). - nsfw_content_detected (
list[bool]) — lista indicando se a imagem gerada correspondente contém conteúdo “não seguro para o trabalho” (nsfw) ouNonese a verificação de segurança não pôde ser realizada.
Classe de saída para pipelines de Difusão LEdits++.
LEditsPPInversionPipelineOutput
classe diffusers.pipelines.LEditsPPInversionPipelineOutput
< source >( images: list[PIL.Image.Image] | numpy.ndarrayvae_reconstruction_images: list[PIL.Image.Image] | numpy.ndarray )
Parâmetros
- input_images (
list[PIL.Image.Image]ounp.ndarray) — lista das imagens de entrada recortadas e redimensionadas como imagens PIL de comprimentobatch_sizeou array NumPy de forma(batch_size, height, width, num_channels). - vae_reconstruction_images (
list[PIL.Image.Image]ounp.ndarray) — lista de reconstruções de VAE de todas as imagens de entrada como imagens PIL de comprimentobatch_sizeou array NumPy de forma(batch_size, height, width, num_channels).
Classe de saída para pipelines de Difusão LEdits++.