Diffusers 文件
AutoencoderKL
並獲得增強的文件體驗
開始使用
AutoencoderKL
變分自動編碼器 (VAE) 模型,帶有 KL 損失,由 Diederik P. Kingma 和 Max Welling 在 Auto-Encoding Variational Bayes 中提出。該模型在 🤗 Diffusers 中用於將影像編碼為潛在變數,並將潛在表示解碼為影像。
論文摘要如下:
在存在具有難以處理的後驗分佈的連續潛在變數和大型資料集的情況下,我們如何才能在有向機率模型中進行高效推理和學習?我們引入了一種隨機變分推理和學習演算法,該演算法可擴充套件到大型資料集,並且在一些溫和的可微分條件下,甚至在難以處理的情況下也能工作。我們的貢獻是雙重的。首先,我們表明變分下界的重引數化產生了一個可以利用標準隨機梯度方法直接最佳化的下界估計器。其次,我們表明對於每個資料點具有連續潛在變數的 i.i.d. 資料集,可以透過使用所提出的下界估計器將近似推理模型(也稱為識別模型)擬合到難以處理的後驗,從而使後驗推理變得特別高效。理論優勢體現在實驗結果中。
從原始格式載入
預設情況下,AutoencoderKL 應該透過 from_pretrained() 載入,但也可以使用 FromOriginalModelMixin.from_single_file
從原始格式載入,如下所示:
from diffusers import AutoencoderKL
url = "https://huggingface.co/stabilityai/sd-vae-ft-mse-original/blob/main/vae-ft-mse-840000-ema-pruned.safetensors" # can also be a local file
model = AutoencoderKL.from_single_file(url)
AutoencoderKL
類 diffusers.AutoencoderKL
< 來源 >( in_channels: int = 3 out_channels: int = 3 down_block_types: typing.Tuple[str] = ('DownEncoderBlock2D',) up_block_types: typing.Tuple[str] = ('UpDecoderBlock2D',) block_out_channels: typing.Tuple[int] = (64,) layers_per_block: int = 1 act_fn: str = 'silu' latent_channels: int = 4 norm_num_groups: int = 32 sample_size: int = 32 scaling_factor: float = 0.18215 shift_factor: typing.Optional[float] = None latents_mean: typing.Optional[typing.Tuple[float]] = None latents_std: typing.Optional[typing.Tuple[float]] = None force_upcast: float = True use_quant_conv: bool = True use_post_quant_conv: bool = True mid_block_add_attention: bool = True )
引數
- in_channels (int, 可選, 預設為 3) — 輸入影像中的通道數。
- out_channels (int, 可選, 預設為 3) — 輸出中的通道數。
- down_block_types (
Tuple[str]
, 可選, 預設為("DownEncoderBlock2D",)
) — 下采樣塊型別的元組。 - up_block_types (
Tuple[str]
, 可選, 預設為("UpDecoderBlock2D",)
) — 上取樣塊型別的元組。 - block_out_channels (
Tuple[int]
, 可選, 預設為(64,)
) — 塊輸出通道的元組。 - act_fn (
str
, 可選, 預設為"silu"
) — 要使用的啟用函式。 - latent_channels (
int
, 可選, 預設為 4) — 潛在空間中的通道數。 - sample_size (
int
, 可選, 預設為32
) — 樣本輸入大小。 - scaling_factor (
float
, 可選, 預設為 0.18215) — 使用訓練集第一批計算出的訓練潛在空間的逐分量標準差。這用於在訓練擴散模型時將潛在空間縮放到單位方差。在傳遞給擴散模型之前,潛在變數會透過公式z = z * scaling_factor
進行縮放。解碼時,潛在變數會透過公式z = 1 / scaling_factor * z
縮放回原始比例。有關更多詳細資訊,請參閱 High-Resolution Image Synthesis with Latent Diffusion Models 論文的 4.3.2 節和 D.1 節。 - force_upcast (
bool
, 可選, 預設為True
) — 如果啟用,它將強制 VAE 以 float32 執行高解析度影像管道,例如 SD-XL。VAE 可以微調/訓練到較低範圍,而不會損失太多精度,在這種情況下,force_upcast
可以設定為False
- 請參閱:https://huggingface.co/madebyollin/sdxl-vae-fp16-fix - mid_block_add_attention (
bool
, 可選, 預設為True
) — 如果啟用,編碼器和解碼器的 mid_block 將具有注意力塊。如果設定為 false,mid_block 將只有殘差塊
一個具有 KL 損失的 VAE 模型,用於將影像編碼為潛在變數並將潛在表示解碼為影像。
此模型繼承自 ModelMixin。有關所有模型實現的通用方法(如下載或儲存),請參閱超類文件。
停用切片 VAE 解碼。如果之前啟用了 enable_slicing
,此方法將恢復一步計算解碼。
停用平鋪 VAE 解碼。如果之前啟用了 enable_tiling
,此方法將恢復一步計算解碼。
啟用切片 VAE 解碼。啟用此選項後,VAE 會將輸入張量分片,分步計算解碼。這有助於節省一些記憶體並允許更大的批次大小。
啟用平鋪 VAE 解碼。啟用此選項後,VAE 將把輸入張量分割成瓦片,分多步計算編碼和解碼。這對於節省大量記憶體和處理更大的影像非常有用。
前向傳播
< 來源 >( sample: Tensor sample_posterior: bool = False return_dict: bool = True generator: typing.Optional[torch._C.Generator] = None )
設定注意力處理器
< 來源 >( processor: typing.Union[diffusers.models.attention_processor.AttnProcessor, diffusers.models.attention_processor.CustomDiffusionAttnProcessor, diffusers.models.attention_processor.AttnAddedKVProcessor, diffusers.models.attention_processor.AttnAddedKVProcessor2_0, diffusers.models.attention_processor.JointAttnProcessor2_0, diffusers.models.attention_processor.PAGJointAttnProcessor2_0, diffusers.models.attention_processor.PAGCFGJointAttnProcessor2_0, diffusers.models.attention_processor.FusedJointAttnProcessor2_0, diffusers.models.attention_processor.AllegroAttnProcessor2_0, diffusers.models.attention_processor.AuraFlowAttnProcessor2_0, diffusers.models.attention_processor.FusedAuraFlowAttnProcessor2_0, diffusers.models.attention_processor.FluxAttnProcessor2_0, diffusers.models.attention_processor.FluxAttnProcessor2_0_NPU, diffusers.models.attention_processor.FusedFluxAttnProcessor2_0, diffusers.models.attention_processor.FusedFluxAttnProcessor2_0_NPU, diffusers.models.attention_processor.CogVideoXAttnProcessor2_0, diffusers.models.attention_processor.FusedCogVideoXAttnProcessor2_0, diffusers.models.attention_processor.XFormersAttnAddedKVProcessor, diffusers.models.attention_processor.XFormersAttnProcessor, diffusers.models.attention_processor.XLAFlashAttnProcessor2_0, diffusers.models.attention_processor.AttnProcessorNPU, diffusers.models.attention_processor.AttnProcessor2_0, diffusers.models.attention_processor.MochiVaeAttnProcessor2_0, diffusers.models.attention_processor.MochiAttnProcessor2_0, diffusers.models.attention_processor.StableAudioAttnProcessor2_0, diffusers.models.attention_processor.HunyuanAttnProcessor2_0, diffusers.models.attention_processor.FusedHunyuanAttnProcessor2_0, diffusers.models.attention_processor.PAGHunyuanAttnProcessor2_0, diffusers.models.attention_processor.PAGCFGHunyuanAttnProcessor2_0, diffusers.models.attention_processor.LuminaAttnProcessor2_0, diffusers.models.attention_processor.FusedAttnProcessor2_0, diffusers.models.attention_processor.CustomDiffusionXFormersAttnProcessor, diffusers.models.attention_processor.CustomDiffusionAttnProcessor2_0, diffusers.models.attention_processor.SlicedAttnProcessor, diffusers.models.attention_processor.SlicedAttnAddedKVProcessor, diffusers.models.attention_processor.SanaLinearAttnProcessor2_0, diffusers.models.attention_processor.PAGCFGSanaLinearAttnProcessor2_0, diffusers.models.attention_processor.PAGIdentitySanaLinearAttnProcessor2_0, diffusers.models.attention_processor.SanaMultiscaleLinearAttention, diffusers.models.attention_processor.SanaMultiscaleAttnProcessor2_0, diffusers.models.attention_processor.SanaMultiscaleAttentionProjection, diffusers.models.attention_processor.IPAdapterAttnProcessor, diffusers.models.attention_processor.IPAdapterAttnProcessor2_0, diffusers.models.attention_processor.IPAdapterXFormersAttnProcessor, diffusers.models.attention_processor.SD3IPAdapterJointAttnProcessor2_0, diffusers.models.attention_processor.PAGIdentitySelfAttnProcessor2_0, diffusers.models.attention_processor.PAGCFGIdentitySelfAttnProcessor2_0, diffusers.models.attention_processor.LoRAAttnProcessor, diffusers.models.attention_processor.LoRAAttnProcessor2_0, diffusers.models.attention_processor.LoRAXFormersAttnProcessor, diffusers.models.attention_processor.LoRAAttnAddedKVProcessor, typing.Dict[str, typing.Union[diffusers.models.attention_processor.AttnProcessor, diffusers.models.attention_processor.CustomDiffusionAttnProcessor, diffusers.models.attention_processor.AttnAddedKVProcessor, diffusers.models.attention_processor.AttnAddedKVProcessor2_0, diffusers.models.attention_processor.JointAttnProcessor2_0, diffusers.models.attention_processor.PAGJointAttnProcessor2_0, diffusers.models.attention_processor.PAGCFGJointAttnProcessor2_0, diffusers.models.attention_processor.FusedJointAttnProcessor2_0, diffusers.models.attention_processor.AllegroAttnProcessor2_0, diffusers.models.attention_processor.AuraFlowAttnProcessor2_0, diffusers.models.attention_processor.FusedAuraFlowAttnProcessor2_0, diffusers.models.attention_processor.FluxAttnProcessor2_0, diffusers.models.attention_processor.FluxAttnProcessor2_0_NPU, diffusers.models.attention_processor.FusedFluxAttnProcessor2_0, diffusers.models.attention_processor.FusedFluxAttnProcessor2_0_NPU, diffusers.models.attention_processor.CogVideoXAttnProcessor2_0, diffusers.models.attention_processor.FusedCogVideoXAttnProcessor2_0, diffusers.models.attention_processor.XFormersAttnAddedKVProcessor, diffusers.models.attention_processor.XFormersAttnProcessor, diffusers.models.attention_processor.XLAFlashAttnProcessor2_0, diffusers.models.attention_processor.AttnProcessorNPU, diffusers.models.attention_processor.AttnProcessor2_0, diffusers.models.attention_processor.MochiVaeAttnProcessor2_0, diffusers.models.attention_processor.MochiAttnProcessor2_0, diffusers.models.attention_processor.StableAudioAttnProcessor2_0, diffusers.models.attention_processor.HunyuanAttnProcessor2_0, diffusers.models.attention_processor.FusedHunyuanAttnProcessor2_0, diffusers.models.attention_processor.PAGHunyuanAttnProcessor2_0, diffusers.models.attention_processor.PAGCFGHunyuanAttnProcessor2_0, diffusers.models.attention_processor.LuminaAttnProcessor2_0, diffusers.models.attention_processor.FusedAttnProcessor2_0, diffusers.models.attention_processor.CustomDiffusionXFormersAttnProcessor, diffusers.models.attention_processor.CustomDiffusionAttnProcessor2_0, diffusers.models.attention_processor.SlicedAttnProcessor, diffusers.models.attention_processor.SlicedAttnAddedKVProcessor, diffusers.models.attention_processor.SanaLinearAttnProcessor2_0, diffusers.models.attention_processor.PAGCFGSanaLinearAttnProcessor2_0, diffusers.models.attention_processor.PAGIdentitySanaLinearAttnProcessor2_0, diffusers.models.attention_processor.SanaMultiscaleLinearAttention, diffusers.models.attention_processor.SanaMultiscaleAttnProcessor2_0, diffusers.models.attention_processor.SanaMultiscaleAttentionProjection, diffusers.models.attention_processor.IPAdapterAttnProcessor, diffusers.models.attention_processor.IPAdapterAttnProcessor2_0, diffusers.models.attention_processor.IPAdapterXFormersAttnProcessor, diffusers.models.attention_processor.SD3IPAdapterJointAttnProcessor2_0, diffusers.models.attention_processor.PAGIdentitySelfAttnProcessor2_0, diffusers.models.attention_processor.PAGCFGIdentitySelfAttnProcessor2_0, diffusers.models.attention_processor.LoRAAttnProcessor, diffusers.models.attention_processor.LoRAAttnProcessor2_0, diffusers.models.attention_processor.LoRAXFormersAttnProcessor, diffusers.models.attention_processor.LoRAAttnAddedKVProcessor]]] )
設定用於計算注意力的注意力處理器。
停用自定義注意力處理器並設定預設注意力實現。
分塊解碼
< 來源 >( z: Tensor return_dict: bool = True ) → ~models.vae.DecoderOutput
或 tuple
使用分塊解碼器解碼一批影像。
分塊編碼
< 來源 >( x: Tensor return_dict: bool = True ) → ~models.autoencoder_kl.AutoencoderKLOutput
或 tuple
使用分塊編碼器編碼一批影像。
啟用此選項後,VAE 會將輸入張量分割成塊,分多步計算編碼。這對於保持記憶體使用恆定,不隨影像大小變化非常有用。分塊編碼的最終結果與非分塊編碼不同,因為每個塊都使用不同的編碼器。為了避免分塊偽影,塊之間會重疊並融合在一起,形成平滑的輸出。您可能仍然會在輸出中看到塊大小的變化,但它們應該不那麼明顯。
AutoencoderKLOutput
class diffusers.models.modeling_outputs.AutoencoderKLOutput
< 來源 >( latent_dist: DiagonalGaussianDistribution )
AutoencoderKL 編碼方法的輸出。
DecoderOutput
class diffusers.models.autoencoders.vae.DecoderOutput
< 來源 >( sample: Tensor commit_loss: typing.Optional[torch.FloatTensor] = None )
解碼方法的輸出。
FlaxAutoencoderKL
class diffusers.FlaxAutoencoderKL
< 來源 >( in_channels: int = 3 out_channels: int = 3 down_block_types: typing.Tuple[str] = ('DownEncoderBlock2D',) up_block_types: typing.Tuple[str] = ('UpDecoderBlock2D',) block_out_channels: typing.Tuple[int] = (64,) layers_per_block: int = 1 act_fn: str = 'silu' latent_channels: int = 4 norm_num_groups: int = 32 sample_size: int = 32 scaling_factor: float = 0.18215 dtype: dtype = <class 'jax.numpy.float32'> parent: typing.Union[flax.linen.module.Module, flax.core.scope.Scope, flax.linen.module._Sentinel, NoneType] = <flax.linen.module._Sentinel object at 0x7fc460aac610> name: typing.Optional[str] = None )
引數
- in_channels (
int
, 可選, 預設為 3) — 輸入影像中的通道數。 - out_channels (
int
, 可選, 預設為 3) — 輸出中的通道數。 - down_block_types (
Tuple[str]
, 可選, 預設為(DownEncoderBlock2D)
) — 下采樣塊型別的元組。 - up_block_types (
Tuple[str]
, 可選, 預設為(UpDecoderBlock2D)
) — 上取樣塊型別的元組。 - block_out_channels (
Tuple[str]
, 可選, 預設為(64,)
) — 塊輸出通道的元組。 - layers_per_block (
int
, 可選, 預設為2
) — 每個塊的 ResNet 層數。 - act_fn (
str
, 可選, 預設為silu
) — 要使用的啟用函式。 - latent_channels (
int
, 可選, 預設為4
) — 潛在空間中的通道數。 - norm_num_groups (
int
, 可選, 預設為32
) — 歸一化的組數。 - sample_size (
int
, 可選, 預設為 32) — 輸入樣本大小。 - scaling_factor (
float
, 可選, 預設為 0.18215) — 使用訓練集的第一批資料計算出的訓練潛在空間的逐分量標準差。這用於在訓練擴散模型時將潛在空間縮放到單位方差。在傳遞給擴散模型之前,潛在變數會按照公式z = z * scaling_factor
進行縮放。解碼時,潛在變數會按照公式z = 1 / scaling_factor * z
縮放回原始比例。有關更多詳細資訊,請參閱 高解析度影像合成與潛在擴散模型 論文的 4.3.2 節和 D.1 節。 - dtype (
jnp.dtype
, 可選, 預設為jnp.float32
) — 引數的dtype
。
使用 KL 損失解碼潛在表示的 VAE 模型的 Flax 實現。
此模型繼承自 FlaxModelMixin。請檢視超類文件以瞭解所有模型實現的通用方法(例如下載或儲存)。
此模型是 Flax Linen flax.linen.Module 的子類。將其作為常規 Flax Linen 模組使用,並參考 Flax 文件瞭解所有與其一般用法和行為相關的事項。
支援以下固有的 JAX 功能
FlaxAutoencoderKLOutput
class diffusers.models.vae_flax.FlaxAutoencoderKLOutput
< 來源 >( latent_dist: FlaxDiagonalGaussianDistribution )
AutoencoderKL 編碼方法的輸出。
返回一個新物件,用新值替換指定的欄位。
FlaxDecoderOutput
class diffusers.models.vae_flax.FlaxDecoderOutput
< 來源 >( sample: Array )
解碼方法的輸出。
返回一個新物件,用新值替換指定的欄位。