Diffusers documentation
Décodeur de cohérence
Décodeur de cohérence
Le décodeur de cohérence peut être utilisé pour décoder les latents issus du UNet de débruitage dans le StableDiffusionPipeline. Ce décodeur a été introduit dans le rapport technique de DALL-E 3.
Le code source original peut être trouvé sur openai/consistencydecoder.
L'inférence n'est actuellement prise en charge que pour 2 itérations.
Le pipeline n'aurait pas pu être contribué sans l'aide de madebyollin et mrsteyk de cet issue.
ConsistencyDecoderVAE
classe diffusers.ConsistencyDecoderVAE
< source >( scaling_factor: float = 0.18215latent_channels: int = 4sample_size: int = 32encoder_act_fn: str = 'silu'encoder_block_out_channels: tuple = (128, 256, 512, 512)encoder_double_z: bool = Trueencoder_down_block_types: tuple = ('DownEncoderBlock2D', 'DownEncoderBlock2D', 'DownEncoderBlock2D', 'DownEncoderBlock2D')encoder_in_channels: int = 3encoder_layers_per_block: int = 2encoder_norm_num_groups: int = 32encoder_out_channels: int = 4decoder_add_attention: bool = Falsedecoder_block_out_channels: tuple = (320, 640, 1024, 1024)decoder_down_block_types: tuple = ('ResnetDownsampleBlock2D', 'ResnetDownsampleBlock2D', 'ResnetDownsampleBlock2D', 'ResnetDownsampleBlock2D')decoder_downsample_padding: int = 1decoder_in_channels: int = 7decoder_layers_per_block: int = 3decoder_norm_eps: float = 1e-05decoder_norm_num_groups: int = 32decoder_num_train_timesteps: int = 1024decoder_out_channels: int = 6decoder_resnet_time_scale_shift: str = 'scale_shift'decoder_time_embedding_type: str = 'learned'decoder_up_block_types: tuple = ('ResnetUpsampleBlock2D', 'ResnetUpsampleBlock2D', 'ResnetUpsampleBlock2D', 'ResnetUpsampleBlock2D') )
Le décodeur de cohérence utilisé avec DALL-E 3.
Exemples :
>>> import torch
>>> from diffusers import StableDiffusionPipeline, ConsistencyDecoderVAE
>>> vae = ConsistencyDecoderVAE.from_pretrained("openai/consistency-decoder", torch_dtype=torch.float16)
>>> pipe = StableDiffusionPipeline.from_pretrained(
... "stable-diffusion-v1-5/stable-diffusion-v1-5", vae=vae, torch_dtype=torch.float16
... ).to("cuda")
>>> image = pipe("horse", generator=torch.manual_seed(0)).images[0]
>>> imagedécoder
< source >( z: Tensorgenerator: typing.Optional[torch.Generator] = Nonereturn_dict: bool = Truenum_inference_steps: int = 2 ) → DecoderOutput | tuple[torch.Tensor]
Paramètres
- z (torch.Tensor) — Le vecteur latent d'entrée.
- generator (torch.Generator | None) — Le générateur de nombres aléatoires. La valeur par défaut est None.
- return_dict (bool) — Indique s'il faut renvoyer la sortie sous forme de dictionnaire. La valeur par défaut est True.
- num_inference_steps (int) — Le nombre d'étapes d'inférence. La valeur par défaut est 2.
Retourne
DecoderOutput | tuple[torch.Tensor]
La sortie décodée.
Décode le vecteur latent d’entrée z à l’aide du modèle VAE du décodeur de cohérence.
encode
< source >( x: Tensorreturn_dict: bool = True )
Encode un lot d'images en latents.
forward
< source >( sample: Tensorsample_posterior: bool = Falsereturn_dict: bool = Truegenerator: typing.Optional[torch.Generator] = None ) → DecoderOutput or tuple
Paramètres
- sample (
torch.Tensor) — Échantillon d'entrée. - 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, par défautNone) — Générateur à utiliser pour l'échantillonnage.
Retourne
DecoderOutput ou tuple
If return_dict is True, a DecoderOutput is returned, otherwise a plain tuple is returned.
Désactive les processeurs d'attention personnalisés et définit l'implémentation d'attention par défaut.
tiled_encode
< source >( x: Tensorreturn_dict: bool = True ) → ConsistencyDecoderVAEOutput or tuple
Paramètres
- x (
torch.Tensor) — Lot d'images en entrée. - return_dict (
bool, facultatif, par défautTrue) — Indique s'il faut retourner unConsistencyDecoderVAEOutputau lieu d'un simple tuple.
Retourne
ConsistencyDecoderVAEOutput ou tuple
If return_dict is True, a ConsistencyDecoderVAEOutput
is returned, otherwise a plain tuple is returned.
Encoder un lot d'images à l'aide d'un encodeur tuilé.
Lorsque cette option est activée, le VAE divise le tenseur d’entrée en tuiles pour calculer l’encodage en plusieurs étapes. Cela est utile pour maintenir une utilisation de la mémoire constante, indépendamment de la taille de l’image. Le résultat final de l’encodage par tuiles diffère de celui de l’encodage non tuilé, car chaque tuile utilise un encodeur différent. Pour éviter les artefacts de tuilage, les tuiles se chevauchent et sont fusionnées pour former une sortie lisse. Vous pouvez encore observer des variations de la taille des tuiles dans la sortie, mais elles devraient être beaucoup moins perceptibles.