AutoencoderKL
由 Diederik P. Kingma 和 Max Welling 在论文 Auto-Encoding Variational Bayes 中引入的具有 KL 损失的变分自动编码器 (VAE) 模型。该模型用于 🤗 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
class diffusers.AutoencoderKL
< 源代码 >( in_channels: int = 3 out_channels: int = 3 down_block_types: Tuple = ('DownEncoderBlock2D',) up_block_types: Tuple = ('UpDecoderBlock2D',) block_out_channels: Tuple = (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: Optional = None latents_mean: Optional = None latents_std: Optional = 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) — 输出图像中的通道数量。
- block_out_channels (
元组[int]
,可选,默认值为(64,)
) — 块输出通道的元组。 - sample_size (
int
, 可选,默认为32
) — 示例输入大小。 - scaling_factor (
浮点类型
、可选、默认为 0.18215)— 使用训练集的第一批次计算的训练过的潜在空间的组件标准差。这用于在训练 diffusion 模型时将潜在空间缩放为单位方差。潜在空间使用公式z = z * scaling_factor
进行缩放,然后再传递给 diffusion 模型。在解码时,潜在空间使用公式z = 1 / scaling_factor * z
缩放回原始比例。更多详细信息,请参阅 《使用潜在 diffusion 模型进行高分辨率图像合成》 论文的第 4.3.2 节和 D.1 节。 - force_upcast (
布尔类型
、可选、默认为True
)— 如果启用,它将强制 VAE 以 float32 运行用于图像分辨率高的管道(比如 SD-XL)。VAE 可以微调或训练至较低范围,而不会丢失太多精度,在这种情况下可以将force_upcast
设置为False
- 请参阅:https://huggingface.co/madebyollin/sdxl-vae-fp16-fix - mid_block_add_attention (
bool
, 可选,默认为True
) — 如果已启用,Encoder 和 Decoder 的 mid_block 将具有 attention 块。如果设置为 false,mid_block 将只包含 ResNet 块
一个具有 KL 损失的 VAE 模型,用于将图像编码成潜在变量,并将潜在表征解码成图像。
该模型继承自 ModelMixin。请查阅超类文档,了解为所有模型实现的通用方法(例如下载或保存)。
禁用切片 VAE 解码。如果先前已启用 enable_slicing
,此方法将返回计算一步解码。
禁用切片 VAE 解码。如果之前已启用 enable_tiling
,此方法将返回一步计算解码。
启用切片 VAE 解码。在启用此选项时,VAE 将把输入张量拆分为多片并通过多个步骤计算解码。此举有助于节省存储空间,并允许使用更大的批量大小。
启用分块 VAE 解码。当启用此选项时,VAE 将把输入张量拆分为分块,以分几步计算解码和编码。这有助于节省大量内存并允许处理更大的图像。
正向
< 源代码 > ( sample: 张量 sample_posterior: bool = False return_dict: bool = True generator: 可选 = None )
启用融合 QKV 投影。对于自注意力模块,所有投影矩阵(即查询、键、值)都融合在一起。对于交叉注意力模块,键和值投影矩阵融合在一起。
此 API 为 🧪 实验性功能。
set_attn_processor
< 源代码 > ( processor: Union )
设置用于计算注意力的注意处理器。
禁用自定义注意力处理器并设置默认注意力实现。
tiled_decode
< 源 > ( z: 张量 return_dict: bool = True ) → ~models.vae.DecoderOutput
或 tuple
使用平铺解码器对一批图像进行解码。
tiled_encode
< 源 > ( x: Tensor return_dict: bool = True ) → ~models.autoencoder_kl.AutoencoderKLOutput
或 元组
使用平铺编码器对一批图像进行编码。
启用此选项时,VAE 将把输入张量拆分成平铺,分多步计算编码。这对于在不考虑图像大小的情况下保持内存使用量恒定十分有用。平铺编码的最终效果不同于非平铺编码,因为每个平铺会使用不同的编码器。要避免平铺伪影,平铺会重叠在一起并混合成一个平滑的输出。你可能仍然会在输出中看到大小为平铺的更改,但它们应该不太明显。
AutoencoderKLOutput
类 diffusers.models.modeling_outputs.AutoencoderKLOutput
< 源代码 >( latent_dist: 对角 Gaussian 分布 )
VAE 编码方法的输出。
DecoderOutput
class diffusers.models.autoencoders.vae.DecoderOutput
< 源代码 >( sample: 张量 commit_loss: 可选 = 无 )
解码方法的输出。
FlaxAutoencoderKL
类 diffusers.FlaxAutoencoderKL
< 源代码 >( in_channels: int = 3 out_channels: int = 3 down_block_types: Tuple = ('DownEncoderBlock2D',) up_block_types: Tuple = ('UpDecoderBlock2D',) block_out_channels: Tuple = (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: Union = <flax.linen.module._Sentinel object at 0x7fb2b317ed40> name: Optional = None )
参数
- 输入通道 (
int
, 可选, 默认为 3) — 输入图像中的通道数。 - out_channels (
int
, 可选,默认为 `3` ) - 输出中的通道数。 - down_block_types (
Tuple[str]
, 可选,默认为 `(DownEncoderBlock2D)` ) - 下采样块类型的元组。 - layers_per_block (
int
, optional, defaults to2
) — 每个模块的 ResNet 层数。 - norm_num_groups (
int
, 可选,默认为32
) — 标准化组数。 - dtype (
jnp.dtype
, optional, defaults tojnp.float32
) — 参数的dtype
。
使用 KL 损失对潜在表示进行解码的 VAE 模型的 Flax 实现。
此模型继承自 FlaxModelMixin。查看超类的文档,了解为所有模型(例如下载或保存)实现的通用方法。
该模块是一个 Flax Linen flax.linen.Module 子类。按照常规 Flax Linen 模块的方式使用它,并参考 Flax 文档了解所有与一般用法和行为相关的内容。
支持下述固有的 JAX 特性
FlaxAutoencoderKLOutput
类 diffusers.models.vae_flax.FlaxAutoencoderKLOutput
< 源代码 >( latent_dist: FlaxDiagonalGaussianDistribution )
VAE 编码方法的输出。
“返回一个新的对象,用新值替换指定字段。
FlaxDecoderOutput
class diffusers.models.vae_flax.FlaxDecoderOutput
< 源代码 >( sample: 数组 )
解码方法的输出。
“返回一个新的对象,用新值替换指定字段。