Diffusers documentation
AsymmetricAutoencoderKL
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
- https://huggingface.co/cross-attention/asymmetric-autoencoder-kl-x-1-5
- https://huggingface.co/cross-attention/asymmetric-autoencoder-kl-x-2
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
< source >( 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éfaut1) — 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éfaut1) — 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éfaut32) — Taille de l'échantillon d'entrée. - norm_num_groups (
int, facultatif, valeur par défaut32) — 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 formulez = z * scaling_factoravant 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
< source >( 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éfautNone) — Masque de réintégration facultatif. - sample_posterior (
bool, facultatif, par défautFalse) — Indique s'il faut échantillonner à partir de la postérieure. - return_dict (
bool, facultatif, par défautTrue) — Indique s'il faut retourner unDecoderOutputplutôt qu'un simple tuple. - generator (
torch.Generator, facultatif) — Untorch.Generatorpour 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
< source >( latent_dist: DiagonalGaussianDistribution )
Sortie de la méthode d'encodage d'AutoencoderKL.
DecoderOutput
classe diffusers.models.autoencoders.vae.DecoderOutput
< source >( sample: Tensorcommit_loss: typing.Optional[torch.FloatTensor] = None )
Sortie de la méthode de décodage.