Diffusers documentation

AsymmetricAutoencoderKL

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.42.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

AsymmetricAutoencoderKL

Modèle de variational autoencoder (VAE) plus grand amélioré avec perte KL pour la tâche d'inpainting : Designing a Better Asymmetric VQGAN for StableDiffusion par Zixin Zhu, Xuelu Feng, Dongdong Chen, Jianmin Bao, Le Wang, Yinpeng Chen, Lu Yuan, Gang Hua.

L'abstract de l'article est :

StableDiffusion est un générateur d'images à partir de texte révolutionnaire qui fait sensation dans le monde de la génération et de l'édition d'images. Contrairement aux méthodes traditionnelles qui apprennent un modèle de diffusion dans l'espace des pixels, StableDiffusion apprend un modèle de diffusion dans l'espace latent via un VQGAN, garantissant à la fois l'efficacité et la qualité. Il prend en charge non seulement les tâches de génération d'images, mais permet également l'édition d'images réelles, telles que l'inpainting d'images et l'édition locale. Cependant, nous avons observé que le VQGAN standard utilisé dans StableDiffusion entraîne une perte d'information significative, provoquant des artefacts de distorsion même dans les régions d'image non modifiées. À cet effet, nous proposons un nouveau VQGAN asymétrique avec deux conceptions simples. Premièrement, en plus de l'entrée provenant de l'encodeur, le décodeur contient une branche conditionnelle qui intègre des informations issues de connaissances a priori spécifiques à la tâche, telles que la région d'image non masquée dans l'inpainting. Deuxièmement, le décodeur est beaucoup plus lourd que l'encodeur, permettant une récupération plus détaillée tout en n'augmentant que légèrement le coût total de déduction. Le coût d'entraînement de notre VQGAN asymétrique est faible, et nous n'avons besoin que d'entraîner un nouveau décodeur asymétrique tout en conservant l'encodeur du VQGAN standard et StableDiffusion inchangés. Notre VQGAN asymétrique peut être largement utilisé dans les méthodes d'inpainting et d'édition locale basées sur StableDiffusion. Des expériences étendues démontrent qu'il peut améliorer significativement les performances d'inpainting et d'édition, tout en maintenant la capacité originale de génération d'images à partir de texte. Le code est disponible à l'adresse https://github.com/buxiangzhiren/Asymmetric_VQGAN

Les résultats d'évaluation peuvent être consultés dans la section 4.1 de l'article original.

Points de contrôle disponibles

Exemple d'utilisation

from diffusers import AsymmetricAutoencoderKL, StableDiffusionInpaintPipeline
from diffusers.utils import load_image, make_image_grid


prompt = "a photo of a person with beard"
img_url = "https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main/repaint/celeba_hq_256.png"
mask_url = "https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main/repaint/mask_256.png"

original_image = load_image(img_url).resize((512, 512))
mask_image = load_image(mask_url).resize((512, 512))

pipe = StableDiffusionInpaintPipeline.from_pretrained("stable-diffusion-v1-5/stable-diffusion-inpainting")
pipe.vae = AsymmetricAutoencoderKL.from_pretrained("cross-attention/asymmetric-autoencoder-kl-x-1-5")
pipe.to("cuda")  # or "mps", "xpu", "cpu"

image = pipe(prompt=prompt, image=original_image, mask_image=mask_image).images[0]
make_image_grid([original_image, mask_image, image], rows=1, cols=3)

AsymmetricAutoencoderKL

classe diffusers.AsymmetricAutoencoderKL

< >

( in_channels: int = 3out_channels: int = 3down_block_types: tuple = ('DownEncoderBlock2D',)down_block_out_channels: tuple = (64,)layers_per_down_block: int = 1up_block_types: tuple = ('UpDecoderBlock2D',)up_block_out_channels: tuple = (64,)layers_per_up_block: int = 1act_fn: str = 'silu'latent_channels: int = 4norm_num_groups: int = 32sample_size: int = 32scaling_factor: float = 0.18215 )

Paramètres

  • in_channels (int, facultatif, valeur par défaut 3) — Nombre de canaux de l'image d'entrée.
  • out_channels (int, facultatif, par défaut 3) — Nombre de canaux dans la sortie.
  • down_block_types (tuple[str], facultatif, par défaut ("DownEncoderBlock2D",)) — tuple des types de blocs de sous-échantillonnage.
  • down_block_out_channels (tuple[int], facultatif, par défaut (64,)) — tuplet des canaux de sortie des blocs de descente.
  • layers_per_down_block (int, facultatif, par défaut 1) — Nombre de couches pour le bloc de descente.
  • up_block_types (tuple[str], facultatif, par défaut ("UpDecoderBlock2D",)) — tuple de types de blocs de suréchantillonnage.
  • up_block_out_channels (tuple[int], facultatif, par défaut (64,)) — tuplet des canaux de sortie des blocs de montée.
  • layers_per_up_block (int, facultatif, par défaut 1) — Nombre de couches pour le bloc de montée.
  • act_fn (str, facultatif, par défaut "silu") — La fonction d'activation à utiliser.
  • latent_channels (int, facultatif, valeur par défaut 4) — Nombre de canaux dans l'espace latent.
  • sample_size (int, facultatif, par défaut 32) — Taille de l'échantillon d'entrée.
  • norm_num_groups (int, facultatif, valeur par défaut 32) — Nombre de groupes à utiliser pour la première couche de normalisation dans les blocs ResNet.
  • scaling_factor (float, facultatif, valeur par défaut 0.18215) — L'écart-type par composante de l'espace latent entraîné, calculé à l'aide du premier lot du jeu d'entraînement. Il est utilisé pour mettre à l'échelle l'espace latent afin qu'il ait une variance unitaire lors de l'entraînement du modèle de diffusion. Les latents sont mis à l'échelle avec la formule z = z * scaling_factor avant d'être transmis au modèle de diffusion. Lors du décodage, les latents sont remis à l'échelle d'origine avec la formule : z = 1 / scaling_factor * z. Pour plus de détails, consultez les sections 4.3.2 et D.1 de l'article High-Resolution Image Synthesis with Latent Diffusion Models.

Conception d'un VQGAN asymétrique amélioré pour StableDiffusion https://huggingface.co/papers/2306.04632 . Un modèle VAE avec perte KL pour encoder les images en latents et décoder les représentations latentes en images.

Ce modèle hérite de ModelMixin. Consultez la documentation de la classe parente pour ses méthodes génériques implémentées pour tous les modèles (téléchargement ou sauvegarde, par exemple).

forward

< >

( sample: Tensormask: typing.Optional[torch.Tensor] = Nonesample_posterior: bool = Falsereturn_dict: bool = Truegenerator: typing.Optional[torch.Generator] = None ) → DecoderOutput or tuple

Paramètres

  • sample (torch.Tensor) — Échantillon d'entrée.
  • mask (torch.Tensor, facultatif, par défaut None) — Masque de réintégration facultatif.
  • sample_posterior (bool, facultatif, par défaut False) — Indique s'il faut échantillonner à partir de la postérieure.
  • return_dict (bool, facultatif, par défaut True) — Indique s'il faut retourner un DecoderOutput plutôt qu'un simple tuple.
  • generator (torch.Generator, facultatif) — Un torch.Generator pour rendre l'échantillonnage déterministe.

Retourne

DecoderOutput ou tuple

Si return_dict est True, un DecoderOutput est renvoyé, sinon un simple tuple est renvoyé.

AutoencoderKLOutput

classe diffusers.models.modeling_outputs.AutoencoderKLOutput

< >

( latent_dist: DiagonalGaussianDistribution )

Paramètres

  • latent_dist (DiagonalGaussianDistribution) — Sorties encodées de Encoder représentées par la moyenne et le logvar de DiagonalGaussianDistribution. DiagonalGaussianDistribution permet d’échantillonner des latents à partir de la distribution.

Sortie de la méthode d'encodage d'AutoencoderKL.

DecoderOutput

classe diffusers.models.autoencoders.vae.DecoderOutput

< >

( sample: Tensorcommit_loss: typing.Optional[torch.FloatTensor] = None )

Paramètres

  • sample (torch.Tensor de forme (batch_size, num_channels, height, width)) — L'échantillon de sortie décodé de la dernière couche du modèle.

Sortie de la méthode de décodage.

Update on GitHub