Diffusers documentation
LEDITS++
LEDITS++
LEDITS++ a été proposé dans LEDITS++: Limitless Image Editing using Text-to-Image Models par Manuel Brack, Felix Friedrich, Katharina Kornmeier, Linoy Tsaban, Patrick Schramowski, Kristian Kersting, Apolinário Passos.
L'abstract de l'article est :
Les modèles de diffusion texte-vers-image suscitent un intérêt croissant en raison de leur capacité remarquable à générer des images haute fidélité à partir d’entrées textuelles uniquement. Les travaux de recherche ultérieurs visent à exploiter et à appliquer leurs capacités à l’édition d’images réelles. Cependant, les méthodes existantes d’image-vers-image sont souvent inefficaces, imprécises et d’une polyvalence limitée. Elles nécessitent soit un ajustement fin chronophage, s’écartent inutilement et fortement de l’image d’entrée, et/ou ne prennent pas en charge plusieurs modifications simultanées. Pour remédier à ces problèmes, nous introduisons LEDITS++, une technique de manipulation d’images par texte, efficace, polyvalente et précise. L’approche d’inversion novatrice de LEDITS++ ne requiert ni ajustement ni optimisation et produit des résultats haute fidélité en quelques étapes de diffusion. Deuxièmement, notre méthodologie prend en charge plusieurs modifications simultanées et est indépendante de l’architecture. Troisièmement, nous utilisons une technique de masquage implicite novatrice qui limite les modifications aux régions pertinentes de l’image. Nous proposons le nouveau benchmark TEdBench++ dans le cadre de notre évaluation exhaustive. Nos résultats démontrent les capacités de LEDITS++ et ses améliorations par rapport aux méthodes précédentes. La page du projet est disponible à l’adresse https://leditsplusplus-project.static.hf.space .
Vous trouverez des informations supplémentaires sur LEDITS++ sur la page du projet et pouvez l'essayer dans une démo.
En raison de certains problèmes de compatibilité ascendante avec l’implémentation actuelle de DPMSolverMultistepScheduler dans diffusers, cette implémentation de LEdits++ ne peut plus garantir une inversion parfaite. Ce problème est peu susceptible d’avoir des effets notables sur les cas d’usage concrets. Toutefois, nous proposons une implémentation alternative garantissant une inversion parfaite dans un dépôt GitHub dédié.
Nous proposons deux pipelines distincts basés sur différents modèles pré-entraînés.
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 )
Paramètres
- 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) — Tokenizer de la classe CLIPTokenizer.
- unet (UNet2DConditionModel) — Architecture U-Net conditionnelle pour le débruitage des latents d'image encodés.
- scheduler (DPMSolverMultistepScheduler ou DDIMScheduler) —
Un planificateur à utiliser en combinaison avec
unetpour débruyer les latents de l'image encodée. Peut être DPMSolverMultistepScheduler ou DDIMScheduler. Si un autre planificateur est transmis, il sera automatiquement défini sur DPMSolverMultistepScheduler. - 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 le
safety_checker.
Pipeline pour l'édition d'images textuelles utilisant LEDits++ avec Stable Diffusion.
Ce modèle hérite de DiffusionPipeline et s’appuie sur StableDiffusionPipeline. Consultez la documentation de la classe parente pour les méthodes génériques implémentées pour tous les pipelines (téléchargement, sauvegarde, exécution sur un appareil particulier, 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 = ['latents']**kwargs ) → LEditsPPDiffusionPipelineOutput or tuple
Paramètres
- negative_prompt (
stroulist[str], facultatif) — Le ou les prompts à ne pas utiliser pour guider la génération d’image. Ignoré lorsque la guidance n’est pas utilisée (c’est-à-dire ignoré siguidance_scaleest inférieur à1). - generator (
torch.Generator, facultatif) — Un ou une liste de générateurs torch pour rendre la génération déterministe. - 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 LEditsPPDiffusionPipelineOutput plutôt qu'un simple tuplet. - editing_prompt (
stroulist[str], facultatif) — Le ou les prompts pour guider la génération de l’image. L’image est reconstruite en définissantediting_prompt = None. La direction du guidage du prompt doit être spécifiée viareverse_editing_direction. - editing_prompt_embeds (
torch.Tensor>, facultatif) — Embeddings précalculés à utiliser pour guider la génération d’image. La direction de guidage de l’embedding doit être spécifiée viareverse_editing_direction. - 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 (pondération des prompts). S'ils ne sont pas fournis, lesnegative_prompt_embedssont générés à partir de l'argument d'entréenegative_prompt. - reverse_editing_direction (
booloulist[bool], facultatif, par défautFalse) — Indique si le prompt correspondant dansediting_promptdoit être augmenté ou diminué. - edit_guidance_scale (
floatoulist[float], facultatif, par défaut 5) — Échelle de guidage pour orienter la génération d’image. Si fournie sous forme de liste, les valeurs doivent correspondre àediting_prompt.edit_guidance_scaleest défini commes_ede l’équation 12 de l’article LEDITS++. - edit_warmup_steps (
floatoulist[float], facultatif, valeur par défaut 10) — Nombre d'étapes de diffusion (pour chaque invite) pour lesquelles le guidage ne sera pas appliqué. - edit_cooldown_steps (
floatoulist[float], facultatif, par défautNone) — Nombre d'étapes de diffusion (pour chaque invite) après lesquelles le guidage ne sera plus appliqué. - edit_threshold (
floatoulist[float], facultatif, valeur par défaut 0.9) — Seuil de masquage du guidage. Le seuil doit être proportionnel à la région de l’image qui est modifiée. ‘edit_threshold’ est défini comme ‘λ’ de l’équation 12 de l’article LEDITS++. - user_mask (
torch.Tensor, facultatif) — Masque fourni par l'utilisateur pour un contrôle encore plus fin du processus d'édition. Cela est utile lorsque les masques implicites de LEDITS++ ne répondent pas aux préférences de l'utilisateur. - sem_guidance (
list[torch.Tensor], facultatif) — liste de vecteurs de guidage pré-générés à appliquer lors de la génération. La longueur de la liste doit correspondre ànum_inference_steps. - use_cross_attn_mask (
bool, par défautFalse) — Indique si des masques d'attention croisée sont utilisés. Les masques d'attention croisée sont toujours utilisés lorsque use_intersect_mask est défini sur true. Les masques d'attention croisée sont définis comme ‘M^1’ de l'équation 12 de l'article LEDITS++. - use_intersect_mask (
bool, par défautTrue) — Indique si le terme de masquage est calculé comme l’intersection des masques de cross-attention et des masques dérivés de l’estimation du bruit. Les masques de cross-attention sont définis comme ‘M^1’ et les masques dérivés de l’estimation du bruit comme ‘M^2’ de l’équation 12 de l’article LEDITS++. - attn_store_steps (
list[int], facultatif) — Étapes pour lesquelles les cartes d'attention sont stockées dans l'AttentionStore. Uniquement à des fins de visualisation. - store_averaged_over_steps (
bool, par défautTrue) — Indique si les cartes d'attention pour les ‘attn_store_steps’ sont stockées en moyenne sur les étapes de diffusion. Si False, les cartes d'attention de chaque étape sont stockées séparément. Uniquement à des fins de visualisation. - cross_attention_kwargs (
dict, facultatif) — Un dictionnaire de kwargs qui, s'il est spécifié, est transmis auAttentionProcessortel que défini dansself.processor. - guidance_rescale (
float, facultatif, valeur par défaut 0.0) — Facteur de rescaling du guidance issu 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. - 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. - callback_on_step_end (
Callable, facultatif) — Une fonction appelée à la fin de chaque étape de débruitage pendant l'inférence. La fonction est appelée avec les arguments suivants :callback_on_step_end(self: DiffusionPipeline, step: int, timestep: int, callback_kwargs: Dict).callback_kwargscontiendra une liste de tous les tenseurs spécifiés parcallback_on_step_end_tensor_inputs. - callback_on_step_end_tensor_inputs (
list, facultatif) — La liste des entrées tensorielles pour la fonctioncallback_on_step_end. Les tenseurs spécifiés dans la liste seront passés en tant qu'argumentcallback_kwargs. Vous ne pourrez inclure que les variables listées dans l'attribut._callback_tensor_inputsde votre classe de pipeline.
Retourne
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`.
La fonction d'appel du pipeline pour l'édition. La méthode invert() doit être appelée au préalable. Les modifications seront toujours effectuées sur la ou les dernières images inversées.
Exemples :
>>> 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
Paramètres
- image (
PipelineImageInput) — Input for the image(s) that are to be edited. Multiple input images have to default to the same aspect ratio. - source_prompt (
str, par défaut"") — Prompt décrivant l’image d’entrée, utilisé pour le guidage pendant l’inversion. Le guidage est désactivé sisource_promptvaut"". - source_guidance_scale (
float, par défaut3.5) — Force du guidage pendant l'inversion. - num_inversion_steps (
int, par défaut30) — Nombre total d'étapes d'inversion effectuées après avoir écarté lesskipétapes initiales. - skip (
float, par défaut0.15) — Fraction des étapes initiales qui sera ignorée pour l'inversion et la génération ultérieure. Des valeurs plus faibles entraîneront des modifications plus marquées de l'image d'entrée.skipdoit être compris entre0et1. - generator (
torch.Generator, facultatif) — Untorch.Generatorpour rendre l'inversion déterministe. - cross_attention_kwargs (
dict, facultatif) — Un dictionnaire de kwargs qui, s'il est spécifié, est transmis auAttentionProcessortel que défini dansself.processor. - 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. - height (
int, facultatif, par défautNone) — La hauteur de l'image prétraitée. SiNone, la fonctionget_default_height_width()est utilisée pour obtenir la hauteur par défaut. - width (
int, optional, defaults toNone) -- The width in preprocessed. IfNone, will use get_default_height_width()to get the default width. - resize_mode (
str, facultatif, par défautdefault) — Le mode de redimensionnement, peut êtredefaultoufill. Sidefault, l’image est redimensionnée pour s’adapter à la largeur et à la hauteur spécifiées, sans nécessairement conserver le ratio d’aspect d’origine. Sifill, l’image est redimensionnée pour s’adapter à la largeur et à la hauteur spécifiées en conservant le ratio d’aspect, puis centrée dans les dimensions, les espaces vides étant remplis avec des données issues de l’image. Sicrop, l’image est redimensionnée pour s’adapter à la largeur et à la hauteur spécifiées en conservant le ratio d’aspect, puis centrée dans les dimensions, l’excédent étant rogné. Notez que resize_modefilletcropne sont pris en charge que pour une entrée d’image PIL. - crops_coords (
list[tuple[int, int, int, int]], facultatif, par défautNone) — Les coordonnées de recadrage pour chaque image du lot. SiNone, l'image ne sera pas recadrée.
Retourne
La sortie contiendra l'image d'entrée redimensionnée et la reconstruction VAE correspondante.
La fonction de pipeline pour l'inversion d'image telle que décrite dans l'article LEDITS++. Si le planificateur est défini sur DDIMScheduler, l'inversion proposée par edit-friendly DPDM sera effectuée à la place.
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 )
Paramètres
- device — (
torch.device) : torch device - num_images_per_prompt (
int) — nombre d'images à générer par invite - enable_edit_guidance (
bool) — indique s'il faut effectuer des modifications ou reconstruire l'image d'entrée à la place - 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). - editing_prompt (
stroulist[str], facultatif) — Prompt(s) d'édition à encoder. S'il n'est pas défini, il faut passerediting_prompt_embedsà la place. - editing_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.
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 )
Paramètres
- 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 XL utilise la partie texte de CLIP, plus précisément la variante clip-vit-large-patch14.
- text_encoder_2 (CLIPTextModelWithProjection) — Deuxième encodeur de texte figé. Stable Diffusion XL utilise la partie texte et pool de CLIP, plus précisément la variante laion/CLIP-ViT-bigG-14-laion2B-39B-b160k.
- tokenizer (CLIPTokenizer) — Tokenizer de la classe CLIPTokenizer.
- tokenizer_2 (CLIPTokenizer) — Deuxième Tokenizer de la classe CLIPTokenizer.
- unet (UNet2DConditionModel) — Architecture U-Net conditionnelle pour le débruitage des latents d'image encodés.
- scheduler (DPMSolverMultistepScheduler ou DDIMScheduler) —
Un planificateur à utiliser en combinaison avec
unetpour débruyer les latents de l'image encodée. Peut être DPMSolverMultistepScheduler ou DDIMScheduler. Si un autre planificateur est transmis, il sera automatiquement défini sur DPMSolverMultistepScheduler. - force_zeros_for_empty_prompt (
bool, facultatif, valeur par défaut"True") — Indique si les embeddings du prompt négatif doivent être forcés à 0. Voir également la configuration destabilityai/stable-diffusion-xl-base-1-0. - add_watermarker (
bool, facultatif) — Indique s'il faut utiliser la bibliothèque invisible_watermark pour appliquer un filigrane aux images de sortie. Si non défini, la valeur par défaut est True si le package est installé, sinon aucun filigrane n'est utilisé.
Pipeline pour l'édition d'images textuelles utilisant LEDits++ avec Stable Diffusion XL.
Ce modèle hérite de DiffusionPipeline et s'appuie sur StableDiffusionXLPipeline. Consultez la documentation de la classe parente pour les méthodes génériques implémentées pour tous les pipelines (téléchargement, sauvegarde, exécution sur un appareil particulier, etc.).
De plus, le pipeline hérite des méthodes de chargement suivantes :
- LoRA : LEditsPPPipelineStableDiffusionXL.load_lora_weights()
- Ckpt: loaders.FromSingleFileMixin.from_single_file()
ainsi que les méthodes de sauvegarde suivantes :
- 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 = (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 = ['latents']**kwargs ) → LEditsPPDiffusionPipelineOutput or tuple
Paramètres
- 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 renvoyé 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 - 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 - 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. - 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) : Entrée d’image facultative pour travailler avec les IP Adapters. - 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.StableDiffusionXLPipelineOutputplutôt qu'un simple tuple. - 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.7) — 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. - 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(width, height). Fait partie du micro-conditionnement de SDXL, tel que décrit dans la section 2.2 de https://huggingface.co/papers/2307.01952. - editing_prompt (
stroulist[str], facultatif) — Le ou les prompts pour guider la génération de l’image. L’image est reconstruite en définissantediting_prompt = None. La direction du guidage du prompt doit être spécifiée viareverse_editing_direction. - editing_prompt_embeddings (
torch.Tensor, facultatif) — Embeddings de texte d’édition pré-générés. Peut être utilisé pour ajuster facilement les entrées de texte, par ex. le pondération des prompts. Si non fourni, editing_prompt_embeddings sera généré à partir de l’argument d’entréeediting_prompt. - editing_pooled_prompt_embeds (
torch.Tensor, facultatif) — Embeddings de texte d'édition pré-générés. Peut être utilisé pour ajuster facilement les entrées textuelles, par ex. le pondération des prompts. S'il n'est pas fourni, editing_prompt_embeddings sera généré à partir de l'argument d'entréeediting_prompt. - reverse_editing_direction (
booloulist[bool], facultatif, par défautFalse) — Indique si le prompt correspondant dansediting_promptdoit être augmenté ou diminué. - edit_guidance_scale (
floatoulist[float], facultatif, par défaut 5) — Échelle de guidage pour orienter la génération d’image. Si fournie sous forme de liste, les valeurs doivent correspondre àediting_prompt.edit_guidance_scaleest défini commes_ede l’équation 12 de l’article LEDITS++. - edit_warmup_steps (
floatoulist[float], facultatif, valeur par défaut 10) — Nombre d'étapes de diffusion (pour chaque invite) pour lesquelles le guidage n'est pas appliqué. - edit_cooldown_steps (
floatoulist[float], facultatif, par défautNone) — Nombre d'étapes de diffusion (pour chaque invite) après lesquelles le guidage n'est plus appliqué. - edit_threshold (
floatoulist[float], facultatif, valeur par défaut 0.9) — Seuil de masquage du guidage. Le seuil doit être proportionnel à la région de l’image qui est modifiée. ‘edit_threshold’ est défini comme ‘λ’ de l’équation 12 de l’article LEDITS++. - sem_guidance (
list[torch.Tensor], facultatif) — liste de vecteurs de guidage pré-générés à appliquer lors de la génération. La longueur de la liste doit correspondre ànum_inference_steps. - use_cross_attn_mask — Indique si des masques de cross-attention sont utilisés. Les masques de cross-attention sont toujours utilisés lorsque use_intersect_mask est défini sur true. Les masques de cross-attention sont définis comme ‘M^1’ de l’équation 12 de l’article LEDITS++.
- use_intersect_mask — Indique si le terme de masquage est calculé comme l'intersection des masques de cross-attention et des masques dérivés de l'estimation du bruit. Les masques de cross-attention sont définis comme ‘M^1’ et les masques dérivés de l'estimation du bruit comme ‘M^2’ de l'équation 12 de l'article LEDITS++.
- user_mask — Masque fourni par l'utilisateur pour un contrôle encore plus fin du processus d'édition. Cela est utile lorsque les masques implicites de LEDITS++ ne répondent pas aux préférences de l'utilisateur.
- attn_store_steps — Étapes pour lesquelles les cartes d'attention sont stockées dans l'AttentionStore. Uniquement à des fins de visualisation.
- store_averaged_over_steps — Indique si les cartes d'attention pour les ‘attn_store_steps’ sont stockées en moyenne sur les étapes de diffusion. Si False, les cartes d'attention pour chaque étape sont stockées séparément. Uniquement à des fins de visualisation.
- 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. - callback_on_step_end (
Callable, facultatif) — Une fonction appelée à la fin de chaque étape de débruitage pendant l'inférence. La fonction est appelée avec les arguments suivants :callback_on_step_end(self: DiffusionPipeline, step: int, timestep: int, callback_kwargs: Dict).callback_kwargscontiendra une liste de tous les tenseurs spécifiés parcallback_on_step_end_tensor_inputs. - callback_on_step_end_tensor_inputs (
list, facultatif) — La liste des entrées tensorielles pour la fonctioncallback_on_step_end. Les tenseurs spécifiés dans la liste seront passés en tant qu'argumentcallback_kwargs. Vous ne pourrez inclure que les variables listées dans l'attribut._callback_tensor_inputsde votre classe de pipeline.
Retourne
LEditsPPDiffusionPipelineOutput ou tuple
LEditsPPDiffusionPipelineOutput si return_dict est True, sinon un `tuple. Lors du retour d'un tuple, le premier élément est une liste contenant les images générées.
La fonction d'appel du pipeline pour l'édition. La méthode invert() doit être appelée au préalable. Les modifications seront toujours effectuées sur la ou les dernières images inversées.
Exemples :
>>> 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 = (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
Paramètres
- image (
PipelineImageInput) — Input for the image(s) that are to be edited. Multiple input images have to default to the same aspect ratio. - source_prompt (
str, par défaut"") — Prompt décrivant l’image d’entrée, utilisé pour le guidage pendant l’inversion. Le guidage est désactivé sisource_promptvaut"". - source_guidance_scale (
float, par défaut3.5) — Force du guidage pendant l'inversion. - 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_inversion_steps (
int, par défaut50) — Nombre total d'étapes d'inversion effectuées après avoir écarté lesskipétapes initiales. - skip (
float, par défaut0.15) — Fraction des étapes initiales qui sera ignorée pour l'inversion et la génération ultérieure. Des valeurs plus faibles entraîneront des modifications plus marquées de l'image d'entrée.skipdoit être compris entre0et1. - generator (
torch.Generator, facultatif) — Untorch.Generatorpour rendre l'inversion déterministe. - 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. - num_zero_noise_steps (
int, par défaut3) — Nombre d’étapes de diffusion finales qui ne réintroduiront pas de bruit sur l’image actuelle. Si aucune étape n’est définie à zéro, SD-XL combiné à DPMSolverMultistepScheduler produira des artefacts de bruit. - 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.
Retourne
La sortie contiendra l'image d'entrée redimensionnée et la reconstruction VAE correspondante.
La fonction de pipeline pour l'inversion d'image telle que décrite dans l'article LEDITS++. Si le planificateur est défini sur DDIMScheduler, l'inversion proposée par edit-friendly DPDM sera effectuée à la place.
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 )
Paramètres
- device — (
torch.device) : torch device - num_images_per_prompt (
int) — nombre d'images à générer par invite - 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. - 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 - 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. - 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. - enable_edit_guidance (
bool) — Indique s'il faut guider vers un prompt d'édition ou non. - editing_prompt (
stroulist[str], facultatif) — Prompt(s) d’édition à encoder. S’il n’est pas défini et que ‘enable_edit_guidance’ est True, il faut passerediting_prompt_embedsà la place. - editing_prompt_embeds (
torch.Tensor, facultatif) — Embeddings de texte d’édition pré-générés. Peut être utilisé pour ajuster facilement les entrées de texte, par ex. le pondération du prompt. S’il n’est pas fourni et que ‘enable_edit_guidance’ est True, editing_prompt_embeds sera généré à partir de l’argument d’entréeediting_prompt. - editing_pooled_prompt_embeds (
torch.Tensor, facultatif) — Embeddings de texte poolés pré-générés pour l'édition. Peut être utilisé pour ajuster facilement les entrées texte, par ex. le pondération des prompts. S'il n'est pas fourni, les editing_pooled_prompt_embeds poolés seront générés à partir de l'argument d'entréeediting_prompt.
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).
LEditsPPDiffusionPipelineOutput
classe diffusers.pipelines.LEditsPPDiffusionPipelineOutput
< source >( images: list[PIL.Image.Image] | numpy.ndarraynsfw_content_detected: list[bool] | None )
Paramètres
- images (
list[PIL.Image.Image]ounp.ndarray) — liste d'images PIL débruitées de longueurbatch_sizeou tableau NumPy de forme(batch_size, height, width, num_channels). - nsfw_content_detected (
list[bool]) — liste indiquant si l'image générée correspondante contient du contenu « not-safe-for-work » (nsfw) ouNonesi la vérification de sécurité n'a pas pu être effectuée.
Classe de sortie pour les pipelines de diffusion LEdits++.
LEditsPPInversionPipelineOutput
classe diffusers.pipelines.LEditsPPInversionPipelineOutput
< source >( images: list[PIL.Image.Image] | numpy.ndarrayvae_reconstruction_images: list[PIL.Image.Image] | numpy.ndarray )
Paramètres
- input_images (
list[PIL.Image.Image]ounp.ndarray) — liste des images d'entrée recadrées et redimensionnées, sous forme d'images PIL de longueurbatch_sizeou de tableau NumPy de forme(batch_size, height, width, num_channels). - vae_reconstruction_images (
list[PIL.Image.Image]ounp.ndarray) — liste des reconstructions VAE de toutes les images d'entrée, sous forme d'images PIL de longueurbatch_sizeou de tableau NumPy de forme(batch_size, height, width, num_channels).
Classe de sortie pour les pipelines de diffusion LEdits++.