VQModel
VQ-VAE 模型在 神经离散表示学习 中由 Aaron van den Oord、Oriol Vinyals 和 Koray Kavukcuoglu 提出来。该模型在 🤗 Diffusers 中用于将潜在表示解码为图像。与 AutoencoderKL 不同,VQModel 在量化潜在空间中工作。
该论文的摘要如下所示
在机器学习中,在没有监督的情况下学习有用的表征仍然是主要挑战。在本文中,我们提出一个简单而强大的生成模型,用于学习此类离散表征。我们的模型,矢量量化变分自动编码器(VQ-VAE),在两个关键方面与 VAE 不同:编码器网络输出离散代码,而非连续代码;且先验是学习的,而非静态的。为了学习离散潜在表征,我们融合了矢量量化(VQ)中的思想。使用 VQ 方法使模型能够规避“后验坍塌”(通常在 VAE 框架中观察到,该方法与强大的自回归解码器配对时会忽略潜在变量)的问题。将这些表征与自回归先验配对,模型可以生成高质量图像、视频和语音,还可以执行高质量的发言人转换和音位的无监督学习,从而进一步证明了所学表征的实用性。
VQModel
类 diffusers.VQModel
< 源 >( in_channels: int = 3 out_channels: int = 3 down_block_types: 元组 = ('DownEncoderBlock2D',) up_block_types: 元组 = ('UpDecoderBlock2D',) block_out_channels: 元组 = (64,) layers_per_block: int = 1 act_fn: str = 'silu' latent_channels: int = 3 sample_size: int = 32 num_vq_embeddings: int = 256 norm_num_groups: int = 32 vq_embed_dim: 可选值 = 无 scaling_factor: float = 0.18215 norm_type: str = 'group' mid_block_add_attention = True lookup_from_codebook = False force_upcast = False )
参数
- in_channels (int, 可选,默认为 3) — 输入图像中的通道数。
- out_channels (int, 可选,默认为 3) — 输出中的通道数。
- block_out_channels (
Tuple[int]
, 可选,默认为(64,)
) — 模块输出通道元组. - latent_channels (
int
, 可选, 默认为3
) — 潜在空间中的通道数。 - norm_num_groups (
int
, optional, defaults to32
) — 规范化层的组数。 - norm_type (
str
,可选,默认为"group"
) — 要使用的标准化层类型。它可以是"group"
或"spatial"
之一。
用于解码潜在特征的 VQ-VAE 模型。
此模型继承自 ModelMixin。查看超类的文档,了解为所有模型(例如下载或保存)实现的泛型方法。
forward
< 源代码 > ( sample: Tensor return_dict: bool = True ) → VQEncoderOutput 或 元组
参数
- sample (
torch.Tensor
) — 输入样本。 - return_dict (
bool
, 可选,默认为True
) — 返回 models.autoencoders.vq_model.VQEncoderOutput 还是普通元组。
返回
VQEncoderOutput 或 元组
如果 return_dict 为 True,则返回 VQEncoderOutput,否则返回一个普通 元组
。
VQModel 前向方法。
VQEncoderOutput
类 diffusers.models.autoencoders.vq_model.VQEncoderOutput
< 源代码 >( latents: 张量 )
vqmodel 编码方法的输出。