Transformers 文档

ViTDet

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

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)使用窗口注意力(没有移位)并辅以极少的跨窗口传播块就足够了。通过预训练为 Masked Autoencoders (MAE) 的普通 ViT 骨干网络,我们名为 ViTDet 的检测器可以与之前所有基于分层骨干网络的领先方法竞争,仅使用 ImageNet-1K 预训练即可在 COCO 数据集上达到高达 61.3 AP_box 的性能。我们希望我们的研究能够引起人们对普通骨干检测器研究的关注。

此模型由 nielsr 贡献。 原始代码可以在这里找到。

提示

  • 目前,仅骨干网络可用。

VitDetConfig

transformers.VitDetConfig

< >

( 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 (strfunction, 可选, 默认为 "gelu") — 编码器和池化器中的非线性激活函数(函数或字符串)。如果为字符串,则支持 "gelu", "relu", "selu""gelu_new"
  • dropout_prob (float, 可选, 默认为 0.0) — 嵌入层、编码器和池化器中所有全连接层的 dropout 概率。
  • initializer_range (float, 可选, 默认为 0.02) — 用于初始化所有权重矩阵的 truncated_normal_initializer 的标准差。
  • 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) — 随机深度率。
  • window_block_indices (List[int], 可选, 默认为 []) — 应该使用窗口注意力而不是常规全局自注意力的块的索引列表。
  • residual_block_indices (List[int], 可选, 默认为 []) — 应该在 MLP 之后具有额外残差块的块的索引列表。
  • use_absolute_position_embeddings (bool, 可选, 默认为 True) — 是否向 patch 嵌入添加绝对位置嵌入。
  • use_relative_position_embeddings (bool, 可选, 默认为 False) — 是否向注意力图添加相对位置嵌入。
  • window_size (int, 可选, 默认为 0) — 注意力窗口的大小。
  • out_features (List[str], 可选) — 如果用作骨干网络,则输出的特征列表。可以是 "stem", "stage1", "stage2" 等中的任何一个(取决于模型有多少个阶段)。如果未设置且设置了 out_indices,则默认为相应的阶段。如果未设置且 out_indices 也未设置,则默认为最后一个阶段。必须与 stage_names 属性中定义的顺序相同。
  • out_indices (List[int], 可选) — 如果用作骨干网络,则输出的特征索引列表。可以是 0, 1, 2 等中的任何一个(取决于模型有多少个阶段)。如果未设置且设置了 out_features,则默认为相应的阶段。如果未设置且 out_features 也未设置,则默认为最后一个阶段。必须与 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

transformers.VitDetModel

< >

( config: VitDetConfig )

参数

  • config (VitDetConfig) — 包含模型所有参数的模型配置类。使用配置文件初始化模型不会加载与模型相关的权重,只会加载配置。请查看 from_pretrained() 方法来加载模型权重。

裸 VitDet Transformer 模型,输出原始的隐藏状态,没有任何特定的头部。此模型是 PyTorch torch.nn.Module 的子类。您可以像使用常规 PyTorch 模块一样使用它,并参考 PyTorch 文档以了解所有与通用用法和行为相关的事项。

forward

< >

( pixel_values: 可选 = None head_mask: 可选 = None output_attentions: 可选 = None output_hidden_states: 可选 = None return_dict: 可选 = None ) transformers.modeling_outputs.BaseModelOutputtuple(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), 可选) — 用于屏蔽自注意力模块中选定头的掩码。掩码值在 [0, 1] 中选择:

    • 1 表示头**未被屏蔽**,
    • 0 表示头**被屏蔽**。
  • output_attentions (bool, 可选) — 是否返回所有注意力层的注意力张量。有关更多详细信息,请参阅返回张量下的 attentions
  • output_hidden_states (bool, 可选) — 是否返回所有层的隐藏状态。有关更多详细信息,请参阅返回张量下的 hidden_states
  • return_dict (bool, 可选) — 是否返回 ModelOutput 而不是普通元组。

返回值

transformers.modeling_outputs.BaseModelOutputtuple(torch.FloatTensor)

一个 transformers.modeling_outputs.BaseModelOutput 或一个 tuple(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 时返回) — tuple(torch.FloatTensor) (每个元素对应一层,如果模型有嵌入层,则第一个元素是嵌入层的输出,之后是每一层的输出),形状为 (batch_size, sequence_length, hidden_size)

    模型在每一层输出的隐藏状态,加上可选的初始嵌入输出。

  • attentions (tuple(torch.FloatTensor), 可选, 当传递 output_attentions=True 或当 config.output_attentions=True 时返回) — tuple(torch.FloatTensor) (每个元素对应一层),形状为 (batch_size, num_heads, sequence_length, sequence_length)

    注意力 softmax 之后的注意力权重,用于计算自注意力头中的加权平均。

VitDetModel 的 forward 方法重写了 __call__ 特殊方法。

虽然前向传播的配方需要在这个函数中定义,但应该调用 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]
< > 在 GitHub 上更新