Transformer2DModel
来自 CompVis 的用于图像数据的 Transformer 模型,基于 Dosovitskiy 等人提出的 视觉转换器。该 Transformer2DModel 接受离散(向量嵌入的类别)或连续(实际嵌入)输入。
当输入为 **连续** 时
- 投影输入并将其重塑为
(batch_size, sequence_length, feature_dimension)
。 - 以标准方式应用 Transformer 块。
- 重塑为图像。
当输入为 **离散** 时
假设输入类别之一是掩码潜在像素。无噪声图像的预测类别不包含对掩码像素的预测,因为无噪声图像不能被掩码。
- 将输入(潜在像素的类别)转换为嵌入并应用位置嵌入。
- 以标准方式应用 Transformer 块。
- 预测无噪声图像的类别。
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_layers
是AdaLayerNorm
,则传递此参数。 由于它用于学习添加到隐藏状态的一系列嵌入,因此在训练期间是固定的。在推理过程中,您可以最多执行
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_processor 中self.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 的输出。