Diffusers documentation
Decoder Konsistensi
Decoder Konsistensi
Consistency decoder dapat digunakan untuk mendekode latents dari denoising UNet dalam StableDiffusionPipeline. Decoder ini diperkenalkan dalam laporan teknis DALL-E 3.
Kodebase asli dapat ditemukan di openai/consistencydecoder.
Inference saat ini hanya didukung untuk 2 iterasi.
Pipeline ini tidak akan dapat disumbangkan tanpa bantuan dari madebyollin dan mrsteyk dari isu ini.
ConsistencyDecoderVAE
kelas 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') )
Decoder konsistensi yang digunakan dengan DALL-E 3.
Contoh:
>>> 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]
>>> imagedecode
< source >( z: Tensorgenerator: typing.Optional[torch.Generator] = Nonereturn_dict: bool = Truenum_inference_steps: int = 2 ) → DecoderOutput | tuple[torch.Tensor]
Parameter
- z (torch.Tensor) — Vektor laten input.
- generator (torch.Generator | None) — Generator bilangan acak. Default adalah None.
- return_dict (bool) — Apakah mengembalikan output sebagai kamus. Default adalah True.
- num_inference_steps (int) — Jumlah langkah inferensi. Default adalah 2.
Mengembalikan
DecoderOutput | tuple[torch.Tensor]
Output yang telah didekodekan.
Mendekode vektor laten input z menggunakan model VAE konsistensi decoder.
encode
< source >( x: Tensorreturn_dict: bool = True )
Enkodekan batch gambar menjadi latents.
forward
< source >( sample: Tensorsample_posterior: bool = Falsereturn_dict: bool = Truegenerator: typing.Optional[torch.Generator] = None ) → DecoderOutput or tuple
Parameter
- sample (
torch.Tensor) — Sampel input. - sample_posterior (
bool, opsional, defaultFalse) — Apakah akan mengambil sampel dari posterior. - return_dict (
bool, opsional, defaultTrue) — Apakah akan mengembalikanDecoderOutputalih-alih tuple biasa. - generator (
torch.Generator, opsional, defaultNone) — Generator yang digunakan untuk sampling.
Mengembalikan
DecoderOutput atau tuple
If return_dict is True, a DecoderOutput is returned, otherwise a plain tuple is returned.
Menonaktifkan prosesor perhatian kustom dan mengatur implementasi perhatian default.
tiled_encode
< source >( x: Tensorreturn_dict: bool = True ) → ConsistencyDecoderVAEOutput or tuple
Parameter
- x (
torch.Tensor) — Batch input gambar. - return_dict (
bool, opsional, defaultTrue) — Apakah akan mengembalikanConsistencyDecoderVAEOutputdaripada tuple biasa.
Mengembalikan
ConsistencyDecoderVAEOutput atau tuple
If return_dict is True, a ConsistencyDecoderVAEOutput
is returned, otherwise a plain tuple is returned.
Enkodekan batch gambar menggunakan encoder bertile.
Ketika opsi ini diaktifkan, VAE akan membagi tensor input menjadi ubin (tiles) untuk menghitung encoding dalam beberapa langkah. Hal ini berguna untuk menjaga penggunaan memori tetap konstan terlepas dari ukuran gambar. Hasil akhir dari encoding bertile berbeda dari encoding non-tile karena setiap ubin menggunakan encoder yang berbeda. Untuk menghindari artefak tiling, ubin-ubin tersebut saling tumpang tindih dan dicampur (blended) untuk membentuk output yang halus. Anda mungkin masih melihat perubahan berukuran ubin pada output, tetapi seharusnya jauh lebih tidak terlihat.