Diffusers 文档

Transformer2D模型

Hugging Face's logo
加入 Hugging Face 社区

并获得增强文档体验

开始使用

Transformer2DModel

来自 CompVis 的用于图像数据的 Transformer 模型,基于 Dosovitskiy 等人提出的 视觉转换器。该 Transformer2DModel 接受离散(向量嵌入的类别)或连续(实际嵌入)输入。

当输入为 **连续** 时

  1. 投影输入并将其重塑为 (batch_size, sequence_length, feature_dimension)
  2. 以标准方式应用 Transformer 块。
  3. 重塑为图像。

当输入为 **离散** 时

假设输入类别之一是掩码潜在像素。无噪声图像的预测类别不包含对掩码像素的预测,因为无噪声图像不能被掩码。

  1. 将输入(潜在像素的类别)转换为嵌入并应用位置嵌入。
  2. 以标准方式应用 Transformer 块。
  3. 预测无噪声图像的类别。

Transformer2DModel

diffusers.Transformer2DModel

< >

( num_attention_heads: int = 16 attention_head_dim: int = 88 in_channels: Optional = None out_channels: Optional = None num_layers: int = 1 dropout: float = 0.0 norm_num_groups: int = 32 cross_attention_dim: Optional = None attention_bias: bool = False sample_size: Optional = None num_vector_embeds: Optional = None patch_size: Optional = None activation_fn: str = 'geglu' num_embeds_ada_norm: Optional = None use_linear_projection: bool = False only_cross_attention: bool = False double_self_attention: bool = False upcast_attention: bool = False norm_type: str = 'layer_norm' norm_elementwise_affine: bool = True norm_eps: float = 1e-05 attention_type: str = 'default' caption_channels: int = None interpolation_scale: float = None use_additional_conditions: Optional = None )

参数

  • num_attention_heads (int, 可选, 默认为 16) — 多头注意力使用的头部数量。
  • attention_head_dim (int, 可选, 默认为 88) — 每个头部中的通道数。
  • in_channels (int, 可选) — 输入和输出的通道数(如果输入是**连续**的,则指定)。
  • num_layers (int, 可选, 默认为 1) — 要使用的 Transformer 块的层数。
  • dropout (float, 可选, 默认为 0.0) — 要使用的 dropout 概率。
  • cross_attention_dim (int, 可选) — 要使用的 encoder_hidden_states 维度数。
  • sample_size (int, 可选) — 潜在图像的宽度(如果输入是**离散**的,则指定)。 由于它用于学习一定数量的位置嵌入,因此在训练期间是固定的。
  • num_vector_embeds (int, 可选) — 潜在像素的向量嵌入的类别数(如果输入是**离散**的,则指定)。 包括掩码潜在像素的类别。
  • activation_fn (str可选,默认为 "geglu") — 前馈网络中使用的激活函数。
  • num_embeds_ada_norm ( int可选) — 训练期间使用的扩散步骤数。如果至少一个 norm_layersAdaLayerNorm,则传递此参数。 由于它用于学习添加到隐藏状态的一系列嵌入,因此在训练期间是固定的。

    在推理过程中,您可以最多执行 num_embeds_ada_norm 步,但不能超过该步数。

  • attention_bias (bool可选) — 配置 TransformerBlocks 注意力是否应包含偏置参数。

用于图像数据的二维 Transformer 模型。

前向传播

< >

( hidden_states: 张量 encoder_hidden_states: 可选 = None timestep: 可选 = None added_cond_kwargs: 字典 = None class_labels: 可选 = None cross_attention_kwargs: 字典 = None attention_mask: 可选 = None encoder_attention_mask: 可选 = None return_dict: bool = True )

参数

  • hidden_states (形状为 (批大小, 潜在像素数)torch.LongTensor(如果离散),形状为 (批大小, 通道, 高度, 宽度)torch.Tensor(如果连续)) — 输入 hidden_states
  • encoder_hidden_states (形状为 (批大小, 序列长度, 嵌入维度)torch.Tensor可选) — 用于交叉注意力层的条件嵌入。 如果未给出,则交叉注意力默认为自注意力。
  • timestep ( torch.LongTensor可选) — 用于指示去噪步骤。 可选的 timestep,将在 AdaLayerNorm 中作为嵌入应用。
  • class_labels (形状为 (批大小, 类别数)torch.LongTensor可选) — 用于指示类标签条件。 可选的类标签,将在 AdaLayerZeroNorm 中作为嵌入应用。
  • cross_attention_kwargs ( Dict[str, Any]可选) — 如果指定,则传递给 AttentionProcessor 的关键字参数字典,如 diffusers.models.attention_processorself.processor 所定义。
  • attention_mask (torch.Tensor可选) — 形状为(batch, key_tokens) 的注意力掩码,应用于 encoder_hidden_states。如果为 1,则保留掩码,否则如果为 0,则将其丢弃。掩码将被转换为偏差,这会向对应于“丢弃”标记的注意力分数添加较大的负值。
  • encoder_attention_mask (torch.Tensor可选) — 应用于 encoder_hidden_states 的交叉注意力掩码。支持两种格式:

    • 掩码 (batch, sequence_length) True = 保留,False = 丢弃。
    • 偏差 (batch, 1, sequence_length) 0 = 保留,-10000 = 丢弃。

    如果 ndim == 2:将被解释为掩码,然后转换为与上述格式一致的偏差。此偏差将添加到交叉注意力分数中。

  • return_dict (bool可选,默认为 True) — 是否返回 UNet2DConditionOutput 而不是普通元组。

Transformer2DModel 的前向方法。

Transformer2DModelOutput

diffusers.models.modeling_outputs.Transformer2DModelOutput

< >

( sample: torch.Tensor )

参数

  • sample (torch.Tensor 形状为 (batch_size, num_channels, height, width)(batch size, num_vector_embeds - 1, num_latent_pixels) 如果 Transformer2DModel 是离散的) — 基于 encoder_hidden_states 输入的条件输出的隐藏状态。如果为离散,则返回未加噪声潜在像素的概率分布。

Transformer2DModel 的输出。

< > 在 GitHub 上更新