Transformers 文档
ViTDet
并获得增强的文档体验
开始使用
ViTDet
概述
ViTDet 模型在 Exploring Plain Vision Transformer Backbones for Object Detection 中被提出,作者是 Yanghao Li, Hanzi Mao, Ross Girshick, Kaiming He。 VitDet 利用了普通的 Vision Transformer 来完成目标检测任务。
以下是论文的摘要
我们探索了普通的、非分层的 Vision Transformer (ViT) 作为目标检测的骨干网络。这种设计使得原始的 ViT 架构能够为目标检测进行微调,而无需重新设计用于预训练的分层骨干网络。通过对微调进行最小的调整,我们的普通骨干检测器可以获得有竞争力的结果。令人惊讶的是,我们观察到:(i)从单尺度特征图构建一个简单的特征金字塔(没有常见的 FPN 设计)就足够了,并且(ii)使用窗口注意力(无需移位)并辅以极少的跨窗口传播块就足够了。通过将普通 ViT 骨干预训练为 Masked Autoencoders (MAE),我们的检测器,名为 ViTDet,可以与以前所有基于分层骨干的领先方法竞争,仅使用 ImageNet-1K 预训练即可在 COCO 数据集上达到高达 61.3 AP_box。我们希望我们的研究将引起人们对普通骨干检测器的研究的关注。
提示
- 目前,仅骨干网络可用。
VitDetConfig
class transformers.VitDetConfig
< source >( hidden_size = 768 num_hidden_layers = 12 num_attention_heads = 12 mlp_ratio = 4 hidden_act = 'gelu' dropout_prob = 0.0 initializer_range = 0.02 layer_norm_eps = 1e-06 image_size = 224 pretrain_image_size = 224 patch_size = 16 num_channels = 3 qkv_bias = True drop_path_rate = 0.0 window_block_indices = [] residual_block_indices = [] use_absolute_position_embeddings = True use_relative_position_embeddings = False window_size = 0 out_features = None out_indices = None **kwargs )
参数
- hidden_size (
int
, 可选, 默认为 768) — 编码器层和池化器层的维度。 - num_hidden_layers (
int
, 可选, 默认为 12) — Transformer 编码器中隐藏层的数量。 - num_attention_heads (
int
, 可选, 默认为 12) — Transformer 编码器中每个注意力层的注意力头数。 - mlp_ratio (
int
, 可选, 默认为 4) — mlp 隐藏层维度与嵌入层维度的比率。 - hidden_act (
str
或function
, 可选, 默认为"gelu"
) — 编码器和池化器中的非线性激活函数(函数或字符串)。 如果是字符串,则支持"gelu"
,"relu"
,"selu"
和"gelu_new"
。 - dropout_prob (
float
, 可选, 默认为 0.0) — 嵌入层、编码器和池化器中所有全连接层的 dropout 概率。 - initializer_range (
float
, 可选, 默认为 0.02) — 用于初始化所有权重矩阵的截断正态初始化器的标准差。 - layer_norm_eps (
float
, 可选, 默认为 1e-06) — 层归一化层使用的 epsilon 值。 - image_size (
int
, 可选, 默认为 224) — 每个图像的尺寸(分辨率)。 - pretrain_image_size (
int
, 可选, 默认为 224) — 预训练期间每个图像的尺寸(分辨率)。 - patch_size (
int
, 可选, 默认为 16) — 每个 patch 的尺寸(分辨率)。 - num_channels (
int
, 可选, 默认为 3) — 输入通道数。 - qkv_bias (
bool
, 可选, 默认为True
) — 是否向 queries, keys 和 values 添加 bias。 - drop_path_rate (
float
, 可选, 默认为 0.0) — Stochastic depth rate (随机深度比率)。 - window_block_indices (
List[int]
, 可选, 默认为[]
) — 应该使用窗口注意力(window attention)而不是常规全局自注意力(regular global self-attention)的块的索引列表。 - residual_block_indices (
List[int]
, 可选, 默认为[]
) — 应该在 MLP 之后添加额外的残差块的块的索引列表。 - use_absolute_position_embeddings (
bool
, 可选, 默认为True
) — 是否向 patch embeddings 添加绝对位置嵌入(absolute position embeddings)。 - use_relative_position_embeddings (
bool
, 可选, 默认为False
) — 是否向 attention maps 添加相对位置嵌入(relative position embeddings)。 - window_size (
int
, 可选, 默认为 0) — 注意力窗口的大小。 - out_features (
List[str]
, 可选) — 如果用作 backbone,则输出的特征列表。 可以是"stem"
,"stage1"
,"stage2"
等中的任何一个(取决于模型有多少个 stage)。 如果未设置且设置了out_indices
,则默认为相应的 stage。 如果未设置且out_indices
也未设置,则默认为最后一个 stage。 必须与stage_names
属性中定义的顺序相同。 - out_indices (
List[int]
, 可选) — 如果用作 backbone,则输出的特征索引列表。 可以是 0, 1, 2 等中的任何一个(取决于模型有多少个 stage)。 如果未设置且设置了out_features
,则默认为相应的 stage。 如果未设置且out_features
也未设置,则默认为最后一个 stage。 必须与stage_names
属性中定义的顺序相同。
这是用于存储 VitDetModel 配置的配置类。 它用于根据指定的参数实例化 VitDet 模型,定义模型架构。 使用默认值实例化配置将产生与 VitDet google/vitdet-base-patch16-224 架构类似的配置。
配置对象继承自 PretrainedConfig,可用于控制模型输出。 有关更多信息,请阅读 PretrainedConfig 的文档。
示例
>>> from transformers import VitDetConfig, VitDetModel
>>> # Initializing a VitDet configuration
>>> configuration = VitDetConfig()
>>> # Initializing a model (with random weights) from the configuration
>>> model = VitDetModel(configuration)
>>> # Accessing the model configuration
>>> configuration = model.config
VitDetModel
class transformers.VitDetModel
< source >( config: VitDetConfig )
参数
- config (VitDetConfig) — 具有模型所有参数的模型配置类。 使用配置文件初始化不会加载与模型关联的权重,仅加载配置。 查看 from_pretrained() 方法以加载模型权重。
裸 VitDet Transformer 模型,输出原始隐藏状态,顶部没有任何特定的 head。 此模型是 PyTorch torch.nn.Module 子类。 将其用作常规 PyTorch 模块,并参阅 PyTorch 文档,了解所有与常规用法和行为相关的事项。
forward
< source >( pixel_values: typing.Optional[torch.Tensor] = None head_mask: typing.Optional[torch.Tensor] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None ) → transformers.modeling_outputs.BaseModelOutput 或 tuple(torch.FloatTensor)
参数
- pixel_values (
torch.FloatTensor
,形状为(batch_size, num_channels, height, width)
) — 像素值。 像素值可以使用 AutoImageProcessor 获得。 有关详细信息,请参阅 ViTImageProcessor.call()。 - head_mask (
torch.FloatTensor
,形状为(num_heads,)
或(num_layers, num_heads)
, 可选) — 用于置空自注意力模块中选定 head 的 Mask。 Mask 值在[0, 1]
中选择:- 1 表示 head 未被 mask,
- 0 表示 head 已被 mask。
- output_attentions (
bool
, 可选) — 是否返回所有注意力层的 attentions tensors。 有关更多详细信息,请参阅返回 tensors 下的attentions
。 - output_hidden_states (
bool
, 可选) — 是否返回所有层的隐藏状态。 有关更多详细信息,请参阅返回 tensors 下的hidden_states
。 - return_dict (
bool
, 可选) — 是否返回 ModelOutput 而不是普通元组。
返回值
transformers.modeling_outputs.BaseModelOutput 或 tuple(torch.FloatTensor)
一个 transformers.modeling_outputs.BaseModelOutput 或一个 torch.FloatTensor
元组(如果传递了 return_dict=False
或当 config.return_dict=False
时),包含各种元素,具体取决于配置 (VitDetConfig) 和输入。
-
last_hidden_state (
torch.FloatTensor
,形状为(batch_size, sequence_length, hidden_size)
) — 模型最后一层的输出处的隐藏状态序列。 -
hidden_states (
tuple(torch.FloatTensor)
, 可选, 当传递了output_hidden_states=True
或当config.output_hidden_states=True
时返回) —torch.FloatTensor
的元组(对于 embeddings 的输出,如果模型具有 embedding 层,则为一个;对于每个层的输出,则为一个),形状为(batch_size, sequence_length, hidden_size)
。模型在每一层输出处的隐藏状态,加上可选的初始 embedding 输出。
-
attentions (
tuple(torch.FloatTensor)
, 可选, 当传递了output_attentions=True
或当config.output_attentions=True
时返回) —torch.FloatTensor
的元组(每层一个),形状为(batch_size, num_heads, sequence_length, sequence_length)
。注意力 softmax 之后的注意力权重,用于计算自注意力 head 中的加权平均值。
VitDetModel forward 方法,覆盖了 __call__
特殊方法。
尽管 forward 传递的配方需要在该函数内定义,但应该在此之后调用 Module
实例而不是此函数,因为前者负责运行预处理和后处理步骤,而后者会静默地忽略它们。
示例
>>> from transformers import VitDetConfig, VitDetModel
>>> import torch
>>> config = VitDetConfig()
>>> model = VitDetModel(config)
>>> pixel_values = torch.randn(1, 3, 224, 224)
>>> with torch.no_grad():
... outputs = model(pixel_values)
>>> last_hidden_states = outputs.last_hidden_state
>>> list(last_hidden_states.shape)
[1, 768, 14, 14]