Diffusers documentation
T2I-Adapter
T2I-Adapter
T2I-Adapter: Learning Adapters to Dig out More Controllable Ability for Text-to-Image Diffusion Models por Chong Mou, Xintao Wang, Liangbin Xie, Jian Zhang, Zhongang Qi, Ying Shan, Xiaohu Qie.
Usando os modelos pré-treinados, podemos fornecer imagens de controle (por exemplo, um mapa de profundidade) para controlar a geração de texto para imagem do Stable Diffusion, de modo que ele siga a estrutura da imagem de profundidade e preencha os detalhes.
O resumo do artigo é o seguinte:
A incrível capacidade generativa dos modelos de texto para imagem (T2I) em larga escala demonstrou um forte poder de aprendizado de estruturas complexas e semânticas significativas. No entanto, depender exclusivamente de prompts de texto não permite aproveitar plenamente o conhecimento aprendido pelo modelo, especialmente quando é necessário um controle flexível e preciso (por exemplo, de cor e estrutura). Neste artigo, nosso objetivo é “extrair” as capacidades que os modelos T2I aprenderam implicitamente e, em seguida, usá-las explicitamente para controlar a geração de forma mais granular. Especificamente, propomos aprender T2I-Adapters simples e leves para alinhar o conhecimento interno dos modelos T2I com sinais de controle externos, mantendo os modelos T2I originais congelados. Dessa forma, podemos treinar vários adaptadores de acordo com diferentes condições, alcançando efeitos ricos de controle e edição na cor e na estrutura dos resultados gerados. Além disso, os T2I-Adapters propostos possuem propriedades atraentes de valor prático, como composabilidade e capacidade de generalização. Experimentos extensos demonstram que nosso T2I-Adapter apresenta qualidade de geração promissora e uma ampla gama de aplicações.
Este modelo foi contribuído pelo colaborador da comunidade HimariO ❤️ .
StableDiffusionAdapterPipeline
classe diffusers.StableDiffusionAdapterPipeline
< source >( vae: AutoencoderKLtext_encoder: CLIPTextModeltokenizer: CLIPTokenizerunet: UNet2DConditionModeladapter: diffusers.models.adapter.T2IAdapter | diffusers.models.adapter.MultiAdapter | list[diffusers.models.adapter.T2IAdapter]scheduler: KarrasDiffusionSchedulerssafety_checker: StableDiffusionSafetyCheckerfeature_extractor: CLIPImageProcessorPilrequires_safety_checker: bool = True )
Parâmetros
- adapter (
T2IAdapterouMultiAdapteroulist[T2IAdapter]) — Fornece condicionamento adicional ao unet durante o processo de desruidamento. Se você definir múltiplos Adapter como uma lista, as saídas de cada Adapter são somadas para criar um único condicionamento adicional combinado. - adapter_weights (
list[float], opcional, padrão None) — lista de floats representando o peso que será multiplicado pela saída de cada adapter antes de somá-los. - 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 (SchedulerMixin) —
Um scheduler a ser usado em combinação com
unetpara desruidar os latentes da imagem codificada. Pode ser um de DDIMScheduler, LMSDiscreteScheduler ou PNDMScheduler. - 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 obter mais detalhes. - feature_extractor (
CLIPImageProcessor) — Modelo que extrai recursos de imagens geradas para serem usados como entradas para osafety_checker.
Pipeline para geração de texto para imagem usando Stable Diffusion aprimorado com T2I-Adapter https://huggingface.co/papers/2302.08453
Este modelo herda de DiffusionPipeline. Consulte a documentação da superclasse para os métodos genéricos que a biblioteca implementa para todos os pipelines (como download ou salvamento, execução em um dispositivo específico, etc.)
__call__
< source >( prompt: str | list[str] = Noneimage: typing.Union[torch.Tensor, PIL.Image.Image, list[PIL.Image.Image]] = Noneheight: int | None = Nonewidth: int | None = Nonenum_inference_steps: int = 50timesteps: list = Nonesigmas: list = Noneguidance_scale: float = 7.5negative_prompt: str | list[str] | None = Nonenum_images_per_prompt: int | None = 1eta: float = 0.0generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = Nonelatents: typing.Optional[torch.Tensor] = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Noneoutput_type: str | None = 'pil'return_dict: bool = Truecallback: typing.Optional[typing.Callable[[int, int, torch.Tensor], NoneType]] = Nonecallback_steps: int = 1cross_attention_kwargs: dict[str, typing.Any] | None = Noneadapter_conditioning_scale: float | list[float] = 1.0clip_skip: int | None = None ) → ~pipelines.stable_diffusion.StableDiffusionAdapterPipelineOutput or tuple
Parâmetros
- prompt (
stroulist[str], opcional) — O prompt ou os prompts para orientar a geração da imagem. Se não for definido, é necessário passarprompt_embedsem vez disso. - image (
torch.Tensor,PIL.Image.Image,list[torch.Tensor]oulist[PIL.Image.Image]oulist[list[PIL.Image.Image]]) — A condição de entrada do Adapter. O Adapter usa essa condição de entrada para gerar orientações para o Unet. Se o tipo for especificado comotorch.Tensor, ele é passado para o Adapter como está. PIL.Image.Image` também pode ser aceito como uma imagem. A imagem de controle é redimensionada automaticamente para caber na imagem de saída. - height (
int, opcional, padrão é self.unet.config.sample_size * self.vae_scale_factor) — A altura em pixels da imagem gerada. - width (
int, opcional, padrão é self.unet.config.sample_size * self.vae_scale_factor) — A largura em pixels da imagem gerada. - num_inference_steps (
int, opcional, padrão 50) — O número de etapas de desruidamento. Mais etapas de desruidamento geralmente resultam em uma imagem de maior qualidade, à custa de uma inferência mais lenta. - timesteps (
list[int], opcional) — Timesteps personalizados para usar no processo de remoção de ruído com agendadores que suportam um argumentotimestepsem seu métodoset_timesteps. Se não definido, o comportamento padrão quandonum_inference_stepsé passado será usado. Deve estar em ordem decrescente. - sigmas (
list[float], opcional) — Sigmas personalizados para usar no processo de desruidamento com agendadores que suportam um argumentosigmasem seu métodoset_timesteps. Se não definido, o comportamento padrão quandonum_inference_stepsé passado será usado. - guidance_scale (
float, opcional, padrão 7.5) — Escala de orientação definida em Classifier-Free Diffusion Guidance.guidance_scaleé definido comowda equação 2 do Imagen Paper. A escala de orientação é ativada ao definirguidance_scale > 1. Uma escala de orientação maior incentiva a geração de imagens que estão intimamente ligadas aopromptde texto, geralmente em detrimento de uma menor qualidade de imagem. - 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. 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). - num_images_per_prompt (
int, opcional, padrão 1) — O número de imagens a serem geradas por prompt. - eta (
float, opcional, padrão 0.0) — Corresponde ao parâmetro eta (η) no paper do DDIM: https://huggingface.co/papers/2010.02502. Aplica-se apenas a schedulers.DDIMScheduler, será ignorado para os demais. - generator (
torch.Generatoroulist[torch.Generator], opcional) — Um ou uma lista de geradores do torch para tornar a geração determinística. - latents (
torch.Tensor, opcional) — Latentes ruidosos pré-gerados, amostrados de uma distribuição gaussiana, a serem usados como entradas para a geração de imagens. Pode ser usado para ajustar a mesma geração com diferentes prompts. Se não for fornecido, um tensor de latentes será gerado por amostragem usando ogeneratoraleatório fornecido. - 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. - 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.StableDiffusionAdapterPipelineOutputem vez de uma tupla simples. - callback (
Callable, opcional) — Uma função que será chamada a cadacallback_stepsetapas durante a inferência. A função será chamada com os seguintes argumentos:callback(step: int, timestep: int, latents: torch.Tensor). - callback_steps (
int, opcional, padrão 1) — A frequência com que a funçãocallbackserá chamada. Se não for especificada, o callback será chamado a cada etapa. - cross_attention_kwargs (
dict, opcional) — Um dicionário de kwargs que, se especificado, é passado para oAttnProcessorconforme definido emself.processorem diffusers.models.attention_processor. - adapter_conditioning_scale (
floatoulist[float], opcional, padrão 1.0) — As saídas do adaptador são multiplicadas poradapter_conditioning_scaleantes de serem adicionadas ao residual no unet original. Se vários adaptadores forem especificados na inicialização, você pode definir a escala correspondente como uma lista. - 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.
Retorna
~pipelines.stable_diffusion.StableDiffusionAdapterPipelineOutput ou tuple
~pipelines.stable_diffusion.StableDiffusionAdapterPipelineOutput 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`.
Função invocada ao chamar o pipeline para geração.
Exemplos:
>>> from PIL import Image
>>> from diffusers.utils import load_image
>>> import torch
>>> from diffusers import StableDiffusionAdapterPipeline, T2IAdapter
>>> image = load_image(
... "https://huggingface.co/datasets/diffusers/docs-images/resolve/main/t2i-adapter/color_ref.png"
... )
>>> color_palette = image.resize((8, 8))
>>> color_palette = color_palette.resize((512, 512), resample=Image.Resampling.NEAREST)
>>> adapter = T2IAdapter.from_pretrained("TencentARC/t2iadapter_color_sd14v1", torch_dtype=torch.float16)
>>> pipe = StableDiffusionAdapterPipeline.from_pretrained(
... "CompVis/stable-diffusion-v1-4",
... adapter=adapter,
... torch_dtype=torch.float16,
... )
>>> pipe.to("cuda")
>>> out_image = pipe(
... "At night, glowing cubes in front of the beach",
... image=color_palette,
... ).images[0]enable_attention_slicing
< source >( slice_size: str | int = 'auto' )
Parâmetros
- slice_size (
strouint, opcional, padrão"auto") — Quando"auto", divide a entrada dos cabeçalhos de atenção ao meio, de modo que a atenção será calculada em duas etapas. Se"max", a quantidade máxima de memória será economizada executando apenas uma fatia por vez. Se um número for fornecido, usa tantas fatias quantoattention_head_dim // slice_size. Nesse caso,attention_head_dimdeve ser um múltiplo deslice_size.
Ativa o cálculo de atenção fatiado. Quando esta opção está ativada, o módulo de atenção divide o tensor de entrada em fatias para calcular a atenção em várias etapas. Para mais de uma cabeça de atenção, o cálculo é realizado sequencialmente em cada cabeça. Isso é útil para economizar memória em troca de uma pequena diminuição na velocidade.
> ⚠️ Não ative o fatiamento de atenção se você já estiver usando
scaled_dot_product_attention(SDPA) do PyTorch > 2.0 ou xFormers. Esses cálculos de atenção já são muito eficientes em termos de memória, então você não precisa ativar > essa função. Se você ativar o fatiamento de atenção com SDPA ou xFormers, isso pode levar a desempenhos significativamente mais lentos!
Exemplos:
>>> import torch
>>> from diffusers import StableDiffusionPipeline
>>> pipe = StableDiffusionPipeline.from_pretrained(
... "stable-diffusion-v1-5/stable-diffusion-v1-5",
... dtype=torch.float16,
... use_safetensors=True,
... )
>>> prompt = "a photo of an astronaut riding a horse on mars"
>>> pipe.enable_attention_slicing()
>>> image = pipe(prompt).images[0]Desativa o cálculo de atenção fatiado. Se enable_attention_slicing foi chamado anteriormente, a atenção é
calculada em uma única etapa.
enable_xformers_memory_efficient_attention
< source >( attention_op: typing.Optional[typing.Callable] = None )
Parâmetros
- attention_op (
Callable, opcional) — Substitui o operador padrãoNonepara uso como argumentoopda funçãomemory_efficient_attention()do xFormers.
Ative a atenção eficiente em memória do xFormers. Quando essa opção estiver ativada, você deve observar um menor uso de memória de GPU e uma possível aceleração durante a inferência. A aceleração durante o treinamento não é garantida.
> ⚠️ Quando a memória eficiente de atenção e a atenção fatiada estão ambas habilitadas, a memória eficiente de atenção tem > precedência.
Exemplos:
>>> import torch
>>> from diffusers import DiffusionPipeline
>>> from xformers.ops import MemoryEfficientAttentionFlashAttentionOp
>>> pipe = DiffusionPipeline.from_pretrained("stabilityai/stable-diffusion-2-1", dtype=torch.float16)
>>> pipe = pipe.to("cuda")
>>> pipe.enable_xformers_memory_efficient_attention(attention_op=MemoryEfficientAttentionFlashAttentionOp)
>>> # Workaround for not accepting attention shape using VAE for Flash Attention
>>> pipe.vae.enable_xformers_memory_efficient_attention(attention_op=None)Desative a atenção eficiente em memória do xFormers.
encode_prompt
< source >( promptdevicenum_images_per_promptdo_classifier_free_guidancenegative_prompt = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Nonelora_scale: float | None = Noneclip_skip: int | None = None )
Parâmetros
- prompt (
stroulist[str], opcional) — prompt a ser codificado - device — (
torch.device): dispositivo torch - num_images_per_prompt (
int) — número de imagens que devem ser geradas por prompt - do_classifier_free_guidance (
bool) — se deve usar classifier free guidance ou nã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). - 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.
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).
StableDiffusionXLAdapterPipeline
classe diffusers.StableDiffusionXLAdapterPipeline
< source >( vae: AutoencoderKLtext_encoder: CLIPTextModeltext_encoder_2: CLIPTextModelWithProjectiontokenizer: CLIPTokenizertokenizer_2: CLIPTokenizerunet: UNet2DConditionModeladapter: diffusers.models.adapter.T2IAdapter | diffusers.models.adapter.MultiAdapter | list[diffusers.models.adapter.T2IAdapter]scheduler: KarrasDiffusionSchedulersforce_zeros_for_empty_prompt: bool = Truefeature_extractor: CLIPImageProcessorPil = Noneimage_encoder: CLIPVisionModelWithProjection = None )
Parâmetros
- adapter (
T2IAdapterouMultiAdapteroulist[T2IAdapter]) — Fornece condicionamento adicional ao unet durante o processo de desruidamento. Se você definir múltiplos Adapter como uma lista, as saídas de cada Adapter são somadas para criar um único condicionamento adicional combinado. - adapter_weights (
list[float], opcional, padrão None) — lista de floats representando o peso que será multiplicado pela saída de cada adapter antes de somá-los. - 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 (SchedulerMixin) —
Um scheduler a ser usado em combinação com
unetpara desruidar os latentes da imagem codificada. Pode ser um de DDIMScheduler, LMSDiscreteScheduler ou PNDMScheduler. - 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 obter mais detalhes. - feature_extractor (
CLIPImageProcessor) — Modelo que extrai recursos de imagens geradas para serem usados como entradas para osafety_checker.
Pipeline para geração de texto para imagem usando Stable Diffusion aprimorado com T2I-Adapter https://huggingface.co/papers/2302.08453
Este modelo herda de DiffusionPipeline. Consulte a documentação da superclasse para os métodos genéricos que a biblioteca implementa para todos os pipelines (como download ou salvamento, execução em um dispositivo específico, etc.)
O pipeline também herda os seguintes métodos de carregamento:
- load_textual_inversion() para carregar embeddings de inversão textual
- para carregar arquivos
.ckptcom from_single_file() - load_lora_weights() para carregar os pesos do LoRA
- save_lora_weights() para salvar os pesos do LoRA
- load_ip_adapter() para carregar IP Adapters
__call__
< source >( prompt: str | list[str] = Noneprompt_2: str | list[str] | None = Noneimage: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]] = Noneheight: int | None = Nonewidth: int | None = Nonenum_inference_steps: int = 50timesteps: list = Nonesigmas: list = Nonedenoising_end: float | None = Noneguidance_scale: float = 5.0negative_prompt: str | list[str] | None = Nonenegative_prompt_2: str | list[str] | None = Nonenum_images_per_prompt: int | None = 1eta: float = 0.0generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = Nonelatents: typing.Optional[torch.Tensor] = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Nonepooled_prompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_pooled_prompt_embeds: typing.Optional[torch.Tensor] = Noneip_adapter_image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor], NoneType] = Noneip_adapter_image_embeds: list[torch.Tensor] | None = Noneoutput_type: str | None = 'pil'return_dict: bool = Truecallback: typing.Optional[typing.Callable[[int, int, torch.Tensor], NoneType]] = Nonecallback_steps: int = 1cross_attention_kwargs: dict[str, typing.Any] | None = Noneguidance_rescale: float = 0.0original_size: tuple[int, int] | None = Nonecrops_coords_top_left: tuple = (0, 0)target_size: tuple[int, int] | None = Nonenegative_original_size: tuple[int, int] | None = Nonenegative_crops_coords_top_left: tuple = (0, 0)negative_target_size: tuple[int, int] | None = Noneadapter_conditioning_scale: float | list[float] = 1.0adapter_conditioning_factor: float = 1.0clip_skip: int | None = None ) → ~pipelines.stable_diffusion.StableDiffusionAdapterPipelineOutput or tuple
Parâmetros
- prompt (
stroulist[str], opcional) — O prompt ou os prompts para orientar a geração da imagem. Se não for definido, é necessário passarprompt_embedsem vez disso. - prompt_2 (
stroulist[str], opcional) — O prompt ou prompts a serem enviados para otokenizer_2e otext_encoder_2. Se não definido,prompté usado em ambos os text-encoders - image (
torch.Tensor,PIL.Image.Image,list[torch.Tensor]oulist[PIL.Image.Image]oulist[list[PIL.Image.Image]]) — A condição de entrada do Adapter. O Adapter usa essa condição de entrada para gerar orientações para o Unet. Se o tipo for especificado comotorch.Tensor, ele é passado para o Adapter como está. PIL.Image.Image` também pode ser aceito como uma imagem. A imagem de controle é redimensionada automaticamente para caber na imagem de saída. - height (
int, opcional, padrão é self.unet.config.sample_size * self.vae_scale_factor) — A altura em pixels da imagem gerada. Qualquer valor abaixo de 512 pixels não funcionará bem para stabilityai/stable-diffusion-xl-base-1.0 e checkpoints que não foram especificamente ajustados para baixas resoluções. - width (
int, opcional, padrão é self.unet.config.sample_size * self.vae_scale_factor) — A largura em pixels da imagem gerada. Qualquer valor abaixo de 512 pixels não funcionará bem para stabilityai/stable-diffusion-xl-base-1.0 e checkpoints que não foram especificamente ajustados em resoluções baixas. - num_inference_steps (
int, opcional, padrão 50) — O número de etapas de desruidamento. Mais etapas de desruidamento geralmente resultam em uma imagem de maior qualidade, à custa de uma inferência mais lenta. - timesteps (
list[int], opcional) — Timesteps personalizados para usar no processo de remoção de ruído com agendadores que suportam um argumentotimestepsem seu métodoset_timesteps. Se não definido, o comportamento padrão quandonum_inference_stepsé passado será usado. Deve estar em ordem decrescente. - sigmas (
list[float], opcional) — Sigmas personalizados para usar no processo de desruidamento com agendadores que suportam um argumentosigmasem seu métodoset_timesteps. Se não definido, o comportamento padrão quandonum_inference_stepsé passado será usado. - denoising_end (
float, opcional) — Quando especificado, determina a fração (entre 0.0 e 1.0) do processo total de remoção de ruído 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 timesteps discretos selecionados pelo scheduler. O parâmetro denoising_end deve ser utilizado idealmente quando este pipeline faz parte de uma configuração multi-pipeline de “Mixture of Denoisers”, conforme detalhado em Refinamento da Saída da Imagem - guidance_scale (
float, opcional, padrão 5.0) — Escala de orientação definida em Classifier-Free Diffusion Guidance.guidance_scaleé definido comowda equação 2 do Imagen Paper. A escala de orientação é ativada ao definirguidance_scale > 1. Uma escala de orientação maior incentiva a geração de imagens que estão intimamente ligadas aopromptde texto, geralmente em detrimento de uma menor qualidade de imagem. - 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_images_per_prompt (
int, opcional, padrão 1) — O número de imagens a serem geradas por prompt. - eta (
float, opcional, padrão 0.0) — Corresponde ao parâmetro eta (η) no paper do DDIM: https://huggingface.co/papers/2010.02502. Aplica-se apenas a schedulers.DDIMScheduler, será ignorado para os demais. - generator (
torch.Generatoroulist[torch.Generator], opcional) — Um ou uma lista de geradores do torch para tornar a geração determinística. - latents (
torch.Tensor, opcional) — Latentes ruidosos pré-gerados, amostrados de uma distribuição gaussiana, a serem usados como entradas para a geração de imagens. Pode ser usado para ajustar a mesma geração com diferentes prompts. Se não for fornecido, um tensor de latentes será gerado por amostragem usando ogeneratoraleatório fornecido. - 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. - pooled_prompt_embeds (
torch.Tensor, opcional) — Embeddings de texto agrupados pré-gerados. Podem ser usados para ajustar facilmente as entradas de texto, por exemplo, ponderação de prompts. Se não fornecidos, os embeddings de texto agrupados serão gerados a partir do argumento de entradaprompt. - 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. - ip_adapter_image_embeds (
list[torch.Tensor], opcional) — Incorporações de imagem pré-geradas para IP-Adapter. Deve ser uma lista com o mesmo comprimento que o número de IP-adapters. Cada elemento deve ser um tensor de forma(batch_size, num_images, emb_dim). Deve conter a incorporação de imagem negativa sedo_classifier_free_guidanceestiver definido comoTrue. Se não for fornecido, as incorporações são calculadas a partir do argumento de entradaip_adapter_image. - 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.StableDiffusionAdapterPipelineOutputem vez de uma tupla simples. - callback (
Callable, opcional) — Uma função que será chamada a cadacallback_stepsetapas durante a inferência. A função será chamada com os seguintes argumentos:callback(step: int, timestep: int, latents: torch.Tensor). - callback_steps (
int, opcional, padrão 1) — A frequência com que a funçãocallbackserá chamada. Se não for especificada, o callback será chamado a cada etapa. - 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.0) — 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. - original_size (
tuple[int], opcional, padrão (1024, 1024)) — Seoriginal_sizenão for o mesmo quetarget_size, a imagem parecerá ter sido reduzida ou ampliada.original_sizetem como padrão(height, width)se não for especificado. Parte do micro-conditioning do SDXL, conforme explicado na seção 2.2 de https://huggingface.co/papers/2307.01952. - 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á(height, width). Parte do micro-conditioning do SDXL, conforme explicado na seção 2.2 de https://huggingface.co/papers/2307.01952. seção 2.2 de https://huggingface.co/papers/2307.01952. - negative_original_size (
tuple[int], opcional, padrão (1024, 1024)) — Para condicionar negativamente o processo de geração com base em uma resolução de imagem específica. Parte do micro-conditioning do SDXL, conforme explicado na seção 2.2 de https://huggingface.co/papers/2307.01952. Para mais informações, consulte este tópico: https://github.com/huggingface/diffusers/issues/4208. - negative_crops_coords_top_left (
tuple[int], opcional, padrão (0, 0)) — Para condicionar negativamente o processo de geração com base em coordenadas de recorte específicas. Parte do micro-condicionamento do SDXL, conforme explicado na seção 2.2 de https://huggingface.co/papers/2307.01952. Para mais informações, consulte este tópico: https://github.com/huggingface/diffusers/issues/4208. - negative_target_size (
tuple[int], opcional, padrão (1024, 1024)) — Para condicionar negativamente o processo de geração com base na resolução da imagem de destino. Deve ser o mesmo que otarget_sizena maioria dos casos. Parte do micro-condicionamento do SDXL, conforme explicado na seção 2.2 de https://huggingface.co/papers/2307.01952. Para mais informações, consulte este tópico: https://github.com/huggingface/diffusers/issues/4208. - adapter_conditioning_scale (
floatoulist[float], opcional, padrão 1.0) — As saídas do adaptador são multiplicadas poradapter_conditioning_scaleantes de serem adicionadas ao residual no unet original. Se vários adaptadores forem especificados na inicialização, você pode definir a escala correspondente como uma lista. - adapter_conditioning_factor (
float, opcional, padrão 1.0) — A fração de timesteps para a qual o adapter deve ser aplicado. Seadapter_conditioning_factorfor0.0, o adapter não é aplicado. Seadapter_conditioning_factorfor1.0, o adapter é aplicado para todos os timesteps. Seadapter_conditioning_factorfor0.5, o adapter é aplicado para metade dos timesteps. - 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.
Retorna
~pipelines.stable_diffusion.StableDiffusionAdapterPipelineOutput ou tuple
~pipelines.stable_diffusion.StableDiffusionAdapterPipelineOutput se return_dict for True, caso contrário, uma
tuple. Ao retornar uma tupla, o primeiro elemento é uma lista com as imagens geradas.
Função invocada ao chamar o pipeline para geração.
Exemplos:
>>> import torch
>>> from diffusers import T2IAdapter, StableDiffusionXLAdapterPipeline, DDPMScheduler
>>> from diffusers.utils import load_image
>>> sketch_image = load_image("https://huggingface.co/Adapter/t2iadapter/resolve/main/sketch.png").convert("L")
>>> model_id = "stabilityai/stable-diffusion-xl-base-1.0"
>>> adapter = T2IAdapter.from_pretrained(
... "Adapter/t2iadapter",
... subfolder="sketch_sdxl_1.0",
... torch_dtype=torch.float16,
... adapter_type="full_adapter_xl",
... )
>>> scheduler = DDPMScheduler.from_pretrained(model_id, subfolder="scheduler")
>>> pipe = StableDiffusionXLAdapterPipeline.from_pretrained(
... model_id, adapter=adapter, torch_dtype=torch.float16, variant="fp16", scheduler=scheduler
... ).to("cuda")
>>> generator = torch.manual_seed(42)
>>> sketch_image_out = pipe(
... prompt="a photo of a dog in real world, high quality",
... negative_prompt="extra digit, fewer digits, cropped, worst quality, low quality",
... image=sketch_image,
... generator=generator,
... guidance_scale=7.5,
... ).images[0]enable_attention_slicing
< source >( slice_size: str | int = 'auto' )
Parâmetros
- slice_size (
strouint, opcional, padrão"auto") — Quando"auto", divide a entrada dos cabeçalhos de atenção ao meio, de modo que a atenção será calculada em duas etapas. Se"max", a quantidade máxima de memória será economizada executando apenas uma fatia por vez. Se um número for fornecido, usa tantas fatias quantoattention_head_dim // slice_size. Nesse caso,attention_head_dimdeve ser um múltiplo deslice_size.
Ativa o cálculo de atenção fatiado. Quando esta opção está ativada, o módulo de atenção divide o tensor de entrada em fatias para calcular a atenção em várias etapas. Para mais de uma cabeça de atenção, o cálculo é realizado sequencialmente em cada cabeça. Isso é útil para economizar memória em troca de uma pequena diminuição na velocidade.
> ⚠️ Não ative o fatiamento de atenção se você já estiver usando
scaled_dot_product_attention(SDPA) do PyTorch > 2.0 ou xFormers. Esses cálculos de atenção já são muito eficientes em termos de memória, então você não precisa ativar > essa função. Se você ativar o fatiamento de atenção com SDPA ou xFormers, isso pode levar a desempenhos significativamente mais lentos!
Exemplos:
>>> import torch
>>> from diffusers import StableDiffusionPipeline
>>> pipe = StableDiffusionPipeline.from_pretrained(
... "stable-diffusion-v1-5/stable-diffusion-v1-5",
... dtype=torch.float16,
... use_safetensors=True,
... )
>>> prompt = "a photo of an astronaut riding a horse on mars"
>>> pipe.enable_attention_slicing()
>>> image = pipe(prompt).images[0]Desativa o cálculo de atenção fatiado. Se enable_attention_slicing foi chamado anteriormente, a atenção é
calculada em uma única etapa.
enable_xformers_memory_efficient_attention
< source >( attention_op: typing.Optional[typing.Callable] = None )
Parâmetros
- attention_op (
Callable, opcional) — Substitui o operador padrãoNonepara uso como argumentoopda funçãomemory_efficient_attention()do xFormers.
Ative a atenção eficiente em memória do xFormers. Quando essa opção estiver ativada, você deve observar um menor uso de memória de GPU e uma possível aceleração durante a inferência. A aceleração durante o treinamento não é garantida.
> ⚠️ Quando a memória eficiente de atenção e a atenção fatiada estão ambas habilitadas, a memória eficiente de atenção tem > precedência.
Exemplos:
>>> import torch
>>> from diffusers import DiffusionPipeline
>>> from xformers.ops import MemoryEfficientAttentionFlashAttentionOp
>>> pipe = DiffusionPipeline.from_pretrained("stabilityai/stable-diffusion-2-1", dtype=torch.float16)
>>> pipe = pipe.to("cuda")
>>> pipe.enable_xformers_memory_efficient_attention(attention_op=MemoryEfficientAttentionFlashAttentionOp)
>>> # Workaround for not accepting attention shape using VAE for Flash Attention
>>> pipe.vae.enable_xformers_memory_efficient_attention(attention_op=None)Desative a atenção eficiente em memória do xFormers.
encode_prompt
< source >( prompt: strprompt_2: str | None = Nonedevice: typing.Optional[torch.device] = Nonenum_images_per_prompt: int = 1do_classifier_free_guidance: bool = Truenegative_prompt: str | None = Nonenegative_prompt_2: str | None = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Nonepooled_prompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_pooled_prompt_embeds: typing.Optional[torch.Tensor] = Nonelora_scale: float | None = Noneclip_skip: int | None = None )
Parâmetros
- prompt (
stroulist[str], opcional) — prompt a ser codificado - prompt_2 (
stroulist[str], opcional) — O prompt ou prompts a serem enviados para otokenizer_2e otext_encoder_2. Se não definido,prompté usado em ambos os text-encoders - device — (
torch.device): dispositivo torch - num_images_per_prompt (
int) — número de imagens que devem ser geradas por prompt - do_classifier_free_guidance (
bool) — se deve usar classifier free guidance ou nã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 - 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. - pooled_prompt_embeds (
torch.Tensor, opcional) — Embeddings de texto agrupados pré-gerados. Podem ser usados para ajustar facilmente as entradas de texto, por exemplo, ponderação de prompts. Se não fornecidos, os embeddings de texto agrupados serão gerados a partir do argumento de entradaprompt. - 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.
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).