Diffusers documentation
T2I-Adapter
T2I-Adapter
T2I-Adapter : Learning Adapters to Dig out More Controllable Ability for Text-to-Image Diffusion Models par Chong Mou, Xintao Wang, Liangbin Xie, Jian Zhang, Zhongang Qi, Ying Shan, Xiaohu Qie.
En utilisant les modèles pré-entraînés, nous pouvons fournir des images de contrôle (par exemple, une carte de profondeur) pour piloter la génération d’images à partir de texte de Stable Diffusion, afin qu’elle suive la structure de l’image de profondeur et comble les détails.
L’abstract de l’article est le suivant :
La capacité générative remarquable des modèles texte-vers-image (T2I) à grande échelle a démontré une forte puissance d’apprentissage des structures complexes et des sémantiques significatives. Cependant, s’appuyer uniquement sur des prompts textuels ne permet pas d’exploiter pleinement les connaissances acquises par le modèle, en particulier lorsqu’un contrôle flexible et précis (par exemple, la couleur et la structure) est nécessaire. Dans cet article, nous visons à « extraire » les capacités que les modèles T2I ont implicitement apprises, puis à les utiliser explicitement pour contrôler la génération de manière plus granulaire. Plus précisément, nous proposons d’apprendre des T2I-Adapters simples et légers pour aligner les connaissances internes des modèles T2I avec des signaux de contrôle externes, tout en gelant les grands modèles T2I d’origine. De cette manière, nous pouvons entraîner divers adaptateurs selon différentes conditions, obtenant ainsi des effets de contrôle et d’édition riches sur la couleur et la structure des résultats générés. De plus, les T2I-Adapters proposés possèdent des propriétés attrayantes d’une valeur pratique, telles que la composabilité et la capacité de généralisation. Des expériences étendues démontrent que notre T2I-Adapter offre une qualité de génération prometteuse et un large éventail d’applications.
Ce modèle a été contribué par le contributeur de la communauté 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 )
Paramètres
- adapter (
T2IAdapterouMultiAdapteroulist[T2IAdapter]) — Fournit un conditionnement supplémentaire à l'unet pendant le processus de débruitage. Si vous définissez plusieurs Adapter sous forme de liste, les sorties de chaque Adapter sont additionnées pour créer un conditionnement supplémentaire combiné. - adapter_weights (
list[float], facultatif, valeur par défaut None) — liste de flottants représentant le poids qui sera multiplié à la sortie de chaque adaptateur avant de les additionner. - vae (AutoencoderKL) — Modèle de Variational Auto-Encoder (VAE) pour encoder et décoder des images vers et depuis des représentations latentes.
- text_encoder (
CLIPTextModel) — Encodeur de texte figé. Stable Diffusion utilise la partie texte de CLIP, plus précisément la variante clip-vit-large-patch14. - tokenizer (
CLIPTokenizer) — Tokeniseur de la classe CLIPTokenizer. - unet (UNet2DConditionModel) — Architecture U-Net conditionnelle pour le débruitage des latents d'image encodés.
- scheduler (SchedulerMixin) —
Un planificateur à utiliser en combinaison avec
unetpour débruyer les latents de l'image encodée. Peut être l'un des DDIMScheduler, LMSDiscreteScheduler ou PNDMScheduler. - safety_checker (
StableDiffusionSafetyChecker) — Module de classification qui estime si les images générées pourraient être considérées comme offensives ou nuisibles. Veuillez consulter la fiche modèle pour plus de détails. - feature_extractor (
CLIPImageProcessor) — Modèle qui extrait les caractéristiques des images générées afin de les utiliser en entrées pour lesafety_checker.
Pipeline de génération d'images à partir de texte utilisant Stable Diffusion, enrichi avec T2I-Adapter https://huggingface.co/papers/2302.08453
Ce modèle hérite de DiffusionPipeline. Consultez la documentation de la classe parente pour les méthodes génériques que la bibliothèque implémente pour tous les pipelines (tels que le téléchargement ou l'enregistrement, l'exécution sur un appareil particulier, 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
Paramètres
- prompt (
stroulist[str], facultatif) — Le prompt ou les prompts pour guider la génération d’image. S’il n’est pas défini, il faut passerprompt_embedsà la place. - image (
torch.Tensor,PIL.Image.Image,list[torch.Tensor]oulist[PIL.Image.Image]oulist[list[PIL.Image.Image]]) — Condition d’entrée de l’Adapter. L’Adapter utilise cette condition d’entrée pour générer des directives pour l’Unet. Si le type est spécifié commetorch.Tensor, il est transmis à l’Adapter tel quel. PIL.Image.Image` peut également être accepté en tant qu’image. L’image de contrôle est redimensionnée automatiquement pour correspondre à l’image de sortie. - height (
int, facultatif, par défaut self.unet.config.sample_size * self.vae_scale_factor) — La hauteur en pixels de l’image générée. - width (
int, facultatif, par défaut self.unet.config.sample_size * self.vae_scale_factor) — La largeur en pixels de l'image générée. - num_inference_steps (
int, facultatif, valeur par défaut 50) — Le nombre d'étapes de débruitage. Un plus grand nombre d'étapes de débruitage conduit généralement à une image de meilleure qualité, au prix d'une inférence plus lente. - timesteps (
list[int], facultatif) — Timesteps personnalisés à utiliser pour le processus de débruitage avec les planificateurs qui prennent en charge un argumenttimestepsdans leur méthodeset_timesteps. S'il n'est pas défini, le comportement par défaut lorsquenum_inference_stepsest passé sera utilisé. Doit être dans l'ordre décroissant. - sigmas (
list[float], facultatif) — Sigmas personnalisés à utiliser pour le processus de débruitage avec les planificateurs qui prennent en charge un argumentsigmasdans leur méthodeset_timesteps. S'il n'est pas défini, le comportement par défaut lorsquenum_inference_stepsest passé sera utilisé. - guidance_scale (
float, facultatif, valeur par défaut 7,5) — Échelle de guidage telle que définie dans Classifier-Free Diffusion Guidance.guidance_scaleest défini commewde l’équation 2 de Imagen Paper. L’échelle de guidage est activée en définissantguidance_scale > 1. Une échelle de guidage plus élevée encourage la génération d’images étroitement liées auprompttexte, généralement au détriment de la qualité de l’image. - negative_prompt (
stroulist[str], facultatif) — Le ou les prompts à ne pas utiliser pour guider la génération d’image. S’il n’est pas défini, il faut passernegative_prompt_embedsà la place. S’il n’est pas défini, il faut passernegative_prompt_embedsà la place. Ignoré lorsque le guidage n’est pas utilisé (c’est-à-dire ignoré siguidance_scaleest inférieur à1). - num_images_per_prompt (
int, facultatif, valeur par défaut 1) — Le nombre d'images à générer par invite. - eta (
float, facultatif, valeur par défaut 0.0) — Correspond au paramètre eta (η) du papier DDIM : https://huggingface.co/papers/2010.02502. Ne s'applique qu'à schedulers.DDIMScheduler, sera ignoré pour les autres. - generator (
torch.Generatoroulist[torch.Generator], facultatif) — Un ou une liste de générateurs torch pour rendre la génération déterministe. - latents (
torch.Tensor, facultatif) — Latents bruités pré-générés, échantillonnés à partir d’une distribution gaussienne, à utiliser comme entrées pour la génération d’images. Peut être utilisé pour ajuster la même génération avec des prompts différents. S’il n’est pas fourni, un tenseur de latents sera généré par échantillonnage à l’aide dugeneratoraléatoire fourni. - prompt_embeds (
torch.Tensor, facultatif) — Embeddings de texte pré-générés. Peut être utilisé pour ajuster facilement les entrées de texte, par ex. le pondération des prompts. S'il n'est pas fourni, les embeddings de texte seront générés à partir de l'argument d'entréeprompt. - negative_prompt_embeds (
torch.Tensor, facultatif) — Embeddings de texte négatifs pré-générés. Peut être utilisé pour ajuster facilement les entrées de texte, par ex. le pondération des prompts. S'il n'est pas fourni, negative_prompt_embeds sera généré à partir de l'argument d'entréenegative_prompt. - output_type (
str, facultatif, par défaut"pil") — Le format de sortie de l'image générée. Choisissez entre PIL :PIL.Image.Imageounp.array. - return_dict (
bool, facultatif, par défautTrue) — Indique s'il faut retourner un~pipelines.stable_diffusion.StableDiffusionAdapterPipelineOutputplutôt qu'un simple tuple. - callback (
Callable, facultatif) — Une fonction qui sera appelée toutes lescallback_stepsétapes pendant l'inférence. La fonction sera appelée avec les arguments suivants :callback(step: int, timestep: int, latents: torch.Tensor). - callback_steps (
int, facultatif, valeur par défaut 1) — La fréquence à laquelle la fonctioncallbackest appelée. Si non spécifié, le callback est appelé à chaque étape. - cross_attention_kwargs (
dict, facultatif) — Un dictionnaire de kwargs qui, s'il est spécifié, est transmis à l'AttnProcessordéfini sousself.processordans diffusers.models.attention_processor. - adapter_conditioning_scale (
floatoulist[float], facultatif, valeur par défaut 1.0) — Les sorties de l’adaptateur sont multipliées paradapter_conditioning_scaleavant d’être ajoutées au résidu dans l’unet d’origine. Si plusieurs adaptateurs sont spécifiés à l’initialisation, vous pouvez définir l’échelle correspondante sous forme de liste. - clip_skip (
int, facultatif) — Nombre de couches à ignorer dans CLIP lors du calcul des embeddings de l'invite. Une valeur de 1 signifie que la sortie de la couche pré-finale sera utilisée pour calculer les embeddings de l'invite.
Retourne
~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`.
Fonction appelée lors de l'appel du pipeline pour la génération.
Exemples :
>>> 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' )
Paramètres
- slice_size (
strouint, facultatif, par défaut"auto") — Lorsque la valeur est"auto", l’entrée des têtes d’attention est divisée par deux, de sorte que l’attention est calculée en deux étapes. Si la valeur est"max", la quantité maximale de mémoire est économisée en n’exécutant qu’une seule tranche à la fois. Si un nombre est fourni, le nombre de tranches utilisé estattention_head_dim // slice_size. Dans ce cas,attention_head_dimdoit être un multiple deslice_size.
Active le calcul de l'attention par tranches. Lorsque cette option est activée, le module d'attention divise le tenseur d'entrée en tranches pour calculer l'attention en plusieurs étapes. Pour plus d'une tête d'attention, le calcul est effectué séquentiellement sur chaque tête. Cela est utile pour économiser de la mémoire au prix d'une légère diminution de la vitesse.
> ⚠️ N’activez pas le découpage de l’attention si vous utilisez déjà
scaled_dot_product_attention(SDPA) depuis PyTorch > 2.0 ou xFormers. Ces calculs d’attention sont déjà très économes en mémoire, vous n’avez donc pas besoin d’activer > cette fonction. Si vous activez le découpage de l’attention avec SDPA ou xFormers, cela peut entraîner de fortes baisses de performances !
Exemples :
>>> 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]Désactive le calcul de l'attention par tranches. Si enable_attention_slicing a été appelé précédemment, l'attention est
calculée en une seule étape.
enable_xformers_memory_efficient_attention
< source >( attention_op: typing.Optional[typing.Callable] = None )
Paramètres
- attention_op (
Callable, facultatif) — Remplace l'opérateur par défautNonepour être utilisé comme argumentopde la fonctionmemory_efficient_attention()de xFormers.
Activer l’attention efficace en mémoire de xFormers. Lorsque cette option est activée, vous devriez observer une réduction de l’utilisation de la mémoire GPU et une accélération potentielle lors de l’inférence. L’accélération lors de l’entraînement n’est pas garantie.
> ⚠️ Lorsque l'attention efficace en mémoire et l'attention par tranches sont toutes deux activées, l'attention efficace en mémoire a la > priorité.
Exemples :
>>> 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)Désactiver l'attention efficace en mémoire de 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 )
Paramètres
- prompt (
stroulist[str], facultatif) — prompt à encoder - device — (
torch.device) : torch device - num_images_per_prompt (
int) — nombre d'images à générer par invite - do_classifier_free_guidance (
bool) — indique s'il faut utiliser le classifier free guidance ou non - negative_prompt (
stroulist[str], facultatif) — Le ou les prompts à ne pas utiliser pour guider la génération d’image. S’il n’est pas défini, il faut passernegative_prompt_embedsà la place. Ignoré lorsque le guidage n’est pas utilisé (c’est-à-dire ignoré siguidance_scaleest inférieur à1). - prompt_embeds (
torch.Tensor, facultatif) — Embeddings de texte pré-générés. Peut être utilisé pour ajuster facilement les entrées de texte, par ex. le pondération des prompts. S'il n'est pas fourni, les embeddings de texte seront générés à partir de l'argument d'entréeprompt. - negative_prompt_embeds (
torch.Tensor, facultatif) — Embeddings de texte négatifs pré-générés. Peut être utilisé pour ajuster facilement les entrées de texte, par ex. le pondération des prompts. S'il n'est pas fourni, negative_prompt_embeds sera généré à partir de l'argument d'entréenegative_prompt. - lora_scale (
float, facultatif) — Un facteur d’échelle LoRA qui sera appliqué à toutes les couches LoRA de l’encodeur de texte si des couches LoRA sont chargées. - clip_skip (
int, facultatif) — Nombre de couches à ignorer dans CLIP lors du calcul des embeddings de l'invite. Une valeur de 1 signifie que la sortie de la couche pré-finale sera utilisée pour calculer les embeddings de l'invite.
Encode le prompt dans les états cachés de l'encodeur de texte.
get_guidance_scale_embedding
< source >( w: Tensorembedding_dim: int = 512dtype: dtype = torch.float32 ) → torch.Tensor
Paramètres
- w (
torch.Tensor) — Génère des vecteurs d’incorporation avec une échelle de guidage spécifiée afin d’enrichir ensuite les incorporations de pas de temps. - embedding_dim (
int, facultatif, par défaut 512) — Dimension des embeddings à générer. - dtype (
torch.dtype, facultatif, par défauttorch.float32) — Type de données des embeddings générés.
Retourne
torch.Tensor
Vecteurs d'embedding de forme (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 )
Paramètres
- adapter (
T2IAdapterouMultiAdapteroulist[T2IAdapter]) — Fournit un conditionnement supplémentaire à l'unet pendant le processus de débruitage. Si vous définissez plusieurs Adapter sous forme de liste, les sorties de chaque Adapter sont additionnées pour créer un conditionnement supplémentaire combiné. - adapter_weights (
list[float], facultatif, valeur par défaut None) — liste de flottants représentant le poids qui sera multiplié à la sortie de chaque adaptateur avant de les additionner. - vae (AutoencoderKL) — Modèle de Variational Auto-Encoder (VAE) pour encoder et décoder des images vers et depuis des représentations latentes.
- text_encoder (
CLIPTextModel) — Encodeur de texte figé. Stable Diffusion utilise la partie texte de CLIP, plus précisément la variante clip-vit-large-patch14. - tokenizer (
CLIPTokenizer) — Tokeniseur de la classe CLIPTokenizer. - unet (UNet2DConditionModel) — Architecture U-Net conditionnelle pour le débruitage des latents d'image encodés.
- scheduler (SchedulerMixin) —
Un planificateur à utiliser en combinaison avec
unetpour débruyer les latents de l'image encodée. Peut être l'un des DDIMScheduler, LMSDiscreteScheduler ou PNDMScheduler. - safety_checker (
StableDiffusionSafetyChecker) — Module de classification qui estime si les images générées pourraient être considérées comme offensives ou nuisibles. Veuillez consulter la fiche modèle pour plus de détails. - feature_extractor (
CLIPImageProcessor) — Modèle qui extrait les caractéristiques des images générées afin de les utiliser en entrées pour lesafety_checker.
Pipeline de génération d'images à partir de texte utilisant Stable Diffusion, enrichi avec T2I-Adapter https://huggingface.co/papers/2302.08453
Ce modèle hérite de DiffusionPipeline. Consultez la documentation de la classe parente pour les méthodes génériques que la bibliothèque implémente pour tous les pipelines (tels que le téléchargement ou l'enregistrement, l'exécution sur un appareil particulier, etc.)
Le pipeline hérite également des méthodes de chargement suivantes :
- load_textual_inversion() pour charger les embeddings d'inversion textuelle
- from_single_file() pour charger des fichiers
.ckpt - load_lora_weights() pour charger les poids LoRA
- save_lora_weights() pour enregistrer les poids LoRA
- load_ip_adapter() pour charger des 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
Paramètres
- prompt (
stroulist[str], facultatif) — Le prompt ou les prompts pour guider la génération d’image. S’il n’est pas défini, il faut passerprompt_embedsà la place. - prompt_2 (
stroulist[str], facultatif) — Le prompt ou les prompts à envoyer autokenizer_2et autext_encoder_2. S'il n'est pas défini,promptest utilisé dans les deux text-encoders - image (
torch.Tensor,PIL.Image.Image,list[torch.Tensor]oulist[PIL.Image.Image]oulist[list[PIL.Image.Image]]) — Condition d’entrée de l’Adapter. L’Adapter utilise cette condition d’entrée pour générer des directives pour l’Unet. Si le type est spécifié commetorch.Tensor, il est transmis à l’Adapter tel quel. PIL.Image.Image` peut également être accepté en tant qu’image. L’image de contrôle est redimensionnée automatiquement pour correspondre à l’image de sortie. - height (
int, facultatif, par défaut self.unet.config.sample_size * self.vae_scale_factor) — La hauteur en pixels de l’image générée. Toute valeur inférieure à 512 pixels ne fonctionnera pas bien avec stabilityai/stable-diffusion-xl-base-1.0 et les points de contrôle qui ne sont pas spécifiquement affinés sur de faibles résolutions. - width (
int, facultatif, par défaut self.unet.config.sample_size * self.vae_scale_factor) — La largeur en pixels de l’image générée. Toute valeur inférieure à 512 pixels ne fonctionnera pas correctement avec stabilityai/stable-diffusion-xl-base-1.0 et les points de contrôle qui ne sont pas spécifiquement affinés sur de faibles résolutions. - num_inference_steps (
int, facultatif, valeur par défaut 50) — Le nombre d'étapes de débruitage. Un plus grand nombre d'étapes de débruitage conduit généralement à une image de meilleure qualité, au prix d'une inférence plus lente. - timesteps (
list[int], facultatif) — Timesteps personnalisés à utiliser pour le processus de débruitage avec les planificateurs qui prennent en charge un argumenttimestepsdans leur méthodeset_timesteps. S'il n'est pas défini, le comportement par défaut lorsquenum_inference_stepsest passé sera utilisé. Doit être dans l'ordre décroissant. - sigmas (
list[float], facultatif) — Sigmas personnalisés à utiliser pour le processus de débruitage avec les planificateurs qui prennent en charge un argumentsigmasdans leur méthodeset_timesteps. S'il n'est pas défini, le comportement par défaut lorsquenum_inference_stepsest passé sera utilisé. - denoising_end (
float, facultatif) — Lorsqu’il est spécifié, détermine la fraction (entre 0.0 et 1.0) du processus total de débruitage qui doit être achevée avant qu’il ne soit volontairement interrompu prématurément. En conséquence, l’échantillon retourné conservera encore une quantité substantielle de bruit, telle que déterminée par les pas de temps discrets sélectionnés par le planificateur. Le paramètre denoising_end devrait idéalement être utilisé lorsque ce pipeline fait partie d’une configuration multi-pipelines « Mixture of Denoisers », comme expliqué dans Refining the Image Output - guidance_scale (
float, facultatif, valeur par défaut 5.0) — Échelle de guidage telle que définie dans Classifier-Free Diffusion Guidance.guidance_scaleest défini commewde l’équation 2. de Imagen Paper. L’échelle de guidage est activée en définissantguidance_scale > 1. Une échelle de guidage plus élevée encourage la génération d’images étroitement liées auprompttexte, généralement au détriment de la qualité de l’image. - negative_prompt (
stroulist[str], facultatif) — Le ou les prompts à ne pas utiliser pour guider la génération d’image. S’il n’est pas défini, il faut passernegative_prompt_embedsà la place. Ignoré lorsque le guidage n’est pas utilisé (c’est-à-dire ignoré siguidance_scaleest inférieur à1). - negative_prompt_2 (
stroulist[str], facultatif) — Le prompt ou les prompts à ne pas utiliser pour guider la génération d’image, à envoyer àtokenizer_2ettext_encoder_2. S’il n’est pas défini,negative_promptest utilisé dans les deux text-encoders - num_images_per_prompt (
int, facultatif, valeur par défaut 1) — Le nombre d'images à générer par invite. - eta (
float, facultatif, valeur par défaut 0.0) — Correspond au paramètre eta (η) du papier DDIM : https://huggingface.co/papers/2010.02502. Ne s'applique qu'à schedulers.DDIMScheduler, sera ignoré pour les autres. - generator (
torch.Generatoroulist[torch.Generator], facultatif) — Un ou une liste de générateurs torch pour rendre la génération déterministe. - latents (
torch.Tensor, facultatif) — Latents bruités pré-générés, échantillonnés à partir d’une distribution gaussienne, à utiliser comme entrées pour la génération d’images. Peut être utilisé pour ajuster la même génération avec des prompts différents. S’il n’est pas fourni, un tenseur de latents sera généré par échantillonnage à l’aide dugeneratoraléatoire fourni. - prompt_embeds (
torch.Tensor, facultatif) — Embeddings de texte pré-générés. Peut être utilisé pour ajuster facilement les entrées de texte, par ex. le pondération des prompts. S'il n'est pas fourni, les embeddings de texte seront générés à partir de l'argument d'entréeprompt. - negative_prompt_embeds (
torch.Tensor, facultatif) — Embeddings de texte négatifs pré-générés. Peut être utilisé pour ajuster facilement les entrées de texte, par ex. le pondération des prompts. S'il n'est pas fourni, negative_prompt_embeds sera généré à partir de l'argument d'entréenegative_prompt. - pooled_prompt_embeds (
torch.Tensor, facultatif) — Embeddings de texte pré-poolés pré-générés. Peut être utilisé pour ajuster facilement les entrées de texte, par ex. le pondération des prompts. S'il n'est pas fourni, les embeddings de texte pré-poolés seront générés à partir de l'argument d'entréeprompt. - negative_pooled_prompt_embeds (
torch.Tensor, facultatif) — Embeddings de texte négatifs pré-générés. Peut être utilisé pour ajuster facilement les entrées de texte, par ex. le pondération des prompts. S'il n'est pas fourni, les pooled negative_prompt_embeds seront générés à partir de l'argument d'entréenegative_prompt. - ip_adapter_image — (
PipelineImageInput, facultatif) : Image d’entrée facultative pour travailler avec les IP Adapters. - ip_adapter_image_embeds (
list[torch.Tensor], facultatif) — Embeddings d’image pré-générés pour IP-Adapter. Il doit s’agir d’une liste dont la longueur est égale au nombre d’IP-adapters. Chaque élément doit être un tenseur de forme(batch_size, num_images, emb_dim). Il doit contenir l’embedding d’image négatif sido_classifier_free_guidanceest défini surTrue. S’il n’est pas fourni, les embeddings sont calculés à partir de l’argument d’entréeip_adapter_image. - output_type (
str, facultatif, par défaut"pil") — Le format de sortie de l'image générée. Choisissez entre PIL :PIL.Image.Imageounp.array. - return_dict (
bool, facultatif, par défautTrue) — Indique s'il faut retourner un~pipelines.stable_diffusion_xl.StableDiffusionAdapterPipelineOutputau lieu d'un simple tuple. - callback (
Callable, facultatif) — Une fonction qui sera appelée toutes lescallback_stepsétapes pendant l'inférence. La fonction sera appelée avec les arguments suivants :callback(step: int, timestep: int, latents: torch.Tensor). - callback_steps (
int, facultatif, valeur par défaut 1) — La fréquence à laquelle la fonctioncallbackest appelée. Si non spécifié, le callback est appelé à chaque étape. - cross_attention_kwargs (
dict, facultatif) — Un dictionnaire de kwargs qui, s'il est spécifié, est transmis à l'AttentionProcessordéfini sousself.processordans diffusers.models.attention_processor. - guidance_rescale (
float, facultatif, valeur par défaut 0.0) — Facteur de rescaling du guidance proposé par Common Diffusion Noise Schedules and Sample Steps are Flawedguidance_scaleest défini commeφdans l’équation 16. de Common Diffusion Noise Schedules and Sample Steps are Flawed. Le facteur de rescaling du guidance doit corriger l’exposition excessive lors de l’utilisation d’un SNR terminal nul. - original_size (
tuple[int], facultatif, par défaut (1024, 1024)) — Sioriginal_sizen’est pas identique àtarget_size, l’image apparaîtra sous-échantillonnée ou suréchantillonnée.original_sizeest par défaut(height, width)s’il n’est pas spécifié. Fait partie du micro-conditionnement de SDXL, tel que décrit dans la section 2.2 de https://huggingface.co/papers/2307.01952. - crops_coords_top_left (
tuple[int], facultatif, par défaut (0, 0)) —crops_coords_top_leftpeut être utilisé pour générer une image qui semble « recadrée » à partir de la positioncrops_coords_top_leftvers le bas. Des images bien cadrées et centrées sont généralement obtenues en définissantcrops_coords_top_leftsur (0, 0). Fait partie du micro-conditionnement de SDXL, tel que décrit dans la section 2.2 de https://huggingface.co/papers/2307.01952. - target_size (
tuple[int], facultatif, par défaut (1024, 1024)) — Dans la plupart des cas,target_sizedoit être défini sur la hauteur et la largeur souhaitées de l’image générée. S’il n’est pas spécifié, il prendra par défaut la valeur(height, width). Fait partie du micro-conditionnement de SDXL, tel que décrit dans la section 2.2 de https://huggingface.co/papers/2307.01952. section 2.2 de https://huggingface.co/papers/2307.01952. - negative_original_size (
tuple[int], facultatif, par défaut (1024, 1024)) — Permet de conditionner négativement le processus de génération en fonction d’une résolution d’image spécifique. Fait partie du micro-conditionnement de SDXL, tel que décrit à la section 2.2 de https://huggingface.co/papers/2307.01952. Pour plus d’informations, consultez ce fil de discussion : https://github.com/huggingface/diffusers/issues/4208. - negative_crops_coords_top_left (
tuple[int], facultatif, valeur par défaut (0, 0)) — Permet de conditionner négativement le processus de génération en fonction de coordonnées de recadrage spécifiques. Fait partie du micro-conditionnement de SDXL, tel que décrit à la section 2.2 de https://huggingface.co/papers/2307.01952. Pour plus d’informations, consultez ce fil de discussion : https://github.com/huggingface/diffusers/issues/4208. - negative_target_size (
tuple[int], facultatif, par défaut (1024, 1024)) — Permet de conditionner négativement le processus de génération en fonction de la résolution de l’image cible. Il doit être identique àtarget_sizedans la plupart des cas. Fait partie du micro-conditionnement de SDXL, tel que décrit à la section 2.2 de https://huggingface.co/papers/2307.01952. Pour plus d’informations, consultez ce fil de discussion : https://github.com/huggingface/diffusers/issues/4208. - adapter_conditioning_scale (
floatoulist[float], facultatif, valeur par défaut 1.0) — Les sorties de l’adaptateur sont multipliées paradapter_conditioning_scaleavant d’être ajoutées au résidu dans l’unet d’origine. Si plusieurs adaptateurs sont spécifiés à l’initialisation, vous pouvez définir l’échelle correspondante sous forme de liste. - adapter_conditioning_factor (
float, facultatif, valeur par défaut 1.0) — La fraction de timesteps pour laquelle l'adaptateur doit être appliqué. Siadapter_conditioning_factorest0.0, l'adaptateur n'est pas appliqué du tout. Siadapter_conditioning_factorest1.0, l'adaptateur est appliqué pour tous les timesteps. Siadapter_conditioning_factorest0.5, l'adaptateur est appliqué pour la moitié des timesteps. - clip_skip (
int, facultatif) — Nombre de couches à ignorer dans CLIP lors du calcul des embeddings de l'invite. Une valeur de 1 signifie que la sortie de la couche pré-finale sera utilisée pour calculer les embeddings de l'invite.
Retourne
~pipelines.stable_diffusion.StableDiffusionAdapterPipelineOutput ou tuple
~pipelines.stable_diffusion.StableDiffusionAdapterPipelineOutput si return_dict est True, sinon un
tuple. En cas de retour d'un tuple, le premier élément est une liste contenant les images générées.
Fonction appelée lors de l'appel du pipeline pour la génération.
Exemples :
>>> 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' )
Paramètres
- slice_size (
strouint, facultatif, par défaut"auto") — Lorsque la valeur est"auto", l’entrée des têtes d’attention est divisée par deux, de sorte que l’attention est calculée en deux étapes. Si la valeur est"max", la quantité maximale de mémoire est économisée en n’exécutant qu’une seule tranche à la fois. Si un nombre est fourni, le nombre de tranches utilisé estattention_head_dim // slice_size. Dans ce cas,attention_head_dimdoit être un multiple deslice_size.
Active le calcul de l'attention par tranches. Lorsque cette option est activée, le module d'attention divise le tenseur d'entrée en tranches pour calculer l'attention en plusieurs étapes. Pour plus d'une tête d'attention, le calcul est effectué séquentiellement sur chaque tête. Cela est utile pour économiser de la mémoire au prix d'une légère diminution de la vitesse.
> ⚠️ N’activez pas le découpage de l’attention si vous utilisez déjà
scaled_dot_product_attention(SDPA) depuis PyTorch > 2.0 ou xFormers. Ces calculs d’attention sont déjà très économes en mémoire, vous n’avez donc pas besoin d’activer > cette fonction. Si vous activez le découpage de l’attention avec SDPA ou xFormers, cela peut entraîner de fortes baisses de performances !
Exemples :
>>> 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]Désactive le calcul de l'attention par tranches. Si enable_attention_slicing a été appelé précédemment, l'attention est
calculée en une seule étape.
enable_xformers_memory_efficient_attention
< source >( attention_op: typing.Optional[typing.Callable] = None )
Paramètres
- attention_op (
Callable, facultatif) — Remplace l'opérateur par défautNonepour être utilisé comme argumentopde la fonctionmemory_efficient_attention()de xFormers.
Activer l’attention efficace en mémoire de xFormers. Lorsque cette option est activée, vous devriez observer une réduction de l’utilisation de la mémoire GPU et une accélération potentielle lors de l’inférence. L’accélération lors de l’entraînement n’est pas garantie.
> ⚠️ Lorsque l'attention efficace en mémoire et l'attention par tranches sont toutes deux activées, l'attention efficace en mémoire a la > priorité.
Exemples :
>>> 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)Désactiver l'attention efficace en mémoire de 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 )
Paramètres
- prompt (
stroulist[str], facultatif) — prompt à encoder - prompt_2 (
stroulist[str], facultatif) — Le prompt ou les prompts à envoyer autokenizer_2et autext_encoder_2. S'il n'est pas défini,promptest utilisé dans les deux text-encoders - device — (
torch.device) : torch device - num_images_per_prompt (
int) — nombre d'images à générer par invite - do_classifier_free_guidance (
bool) — indique s'il faut utiliser le classifier free guidance ou non - negative_prompt (
stroulist[str], facultatif) — Le ou les prompts à ne pas utiliser pour guider la génération d’image. S’il n’est pas défini, il faut passernegative_prompt_embedsà la place. Ignoré lorsque le guidage n’est pas utilisé (c’est-à-dire ignoré siguidance_scaleest inférieur à1). - negative_prompt_2 (
stroulist[str], facultatif) — Le prompt ou les prompts à ne pas utiliser pour guider la génération d’image, à envoyer àtokenizer_2ettext_encoder_2. S’il n’est pas défini,negative_promptest utilisé dans les deux text-encoders - prompt_embeds (
torch.Tensor, facultatif) — Embeddings de texte pré-générés. Peut être utilisé pour ajuster facilement les entrées de texte, par ex. le pondération des prompts. S'il n'est pas fourni, les embeddings de texte seront générés à partir de l'argument d'entréeprompt. - negative_prompt_embeds (
torch.Tensor, facultatif) — Embeddings de texte négatifs pré-générés. Peut être utilisé pour ajuster facilement les entrées de texte, par ex. le pondération des prompts. S'il n'est pas fourni, negative_prompt_embeds sera généré à partir de l'argument d'entréenegative_prompt. - pooled_prompt_embeds (
torch.Tensor, facultatif) — Embeddings de texte pré-poolés pré-générés. Peut être utilisé pour ajuster facilement les entrées de texte, par ex. le pondération des prompts. S'il n'est pas fourni, les embeddings de texte pré-poolés seront générés à partir de l'argument d'entréeprompt. - negative_pooled_prompt_embeds (
torch.Tensor, facultatif) — Embeddings de texte négatifs pré-générés. Peut être utilisé pour ajuster facilement les entrées de texte, par ex. le pondération des prompts. S'il n'est pas fourni, les pooled negative_prompt_embeds seront générés à partir de l'argument d'entréenegative_prompt. - lora_scale (
float, facultatif) — Un facteur d’échelle LoRA qui sera appliqué à toutes les couches LoRA de l’encodeur de texte si des couches LoRA sont chargées. - clip_skip (
int, facultatif) — Nombre de couches à ignorer dans CLIP lors du calcul des embeddings de l'invite. Une valeur de 1 signifie que la sortie de la couche pré-finale sera utilisée pour calculer les embeddings de l'invite.
Encode le prompt dans les états cachés de l'encodeur de texte.
get_guidance_scale_embedding
< source >( w: Tensorembedding_dim: int = 512dtype: dtype = torch.float32 ) → torch.Tensor
Paramètres
- w (
torch.Tensor) — Génère des vecteurs d’incorporation avec une échelle de guidage spécifiée afin d’enrichir ensuite les incorporations de pas de temps. - embedding_dim (
int, facultatif, par défaut 512) — Dimension des embeddings à générer. - dtype (
torch.dtype, facultatif, par défauttorch.float32) — Type de données des embeddings générés.
Retourne
torch.Tensor
Vecteurs d'embedding de forme (len(w), embedding_dim).