Transformers 文档

ViTDet

Hugging Face's logo
加入Hugging Face社区

并享受增强型文档体验

开始使用

ViTDet模型由Yanghao Li、Hanzi Mao、Ross Girshick和Kaiming He在《探索用于物体检测的普通视觉Transformer主干》一文中提出,该文发表于arXiv。ViTDet利用普通视觉Transformer来执行物体检测任务。

论文的摘要如下

我们探索将平面、非层次化的视觉转换器(ViT)作为目标检测的主干网络。此设计使原始的ViT架构能够在不重新设计用于预训练的层次化主干的情况下进行微调。通过最小化的微调调整,我们的平面主干检测器可以取得具有竞争力的结果。令人惊讶的是,我们发现:(i)仅从单尺度特征图构建简单的特征金字塔(无需常见的FPN设计)就足够了;(ii)仅使用窗口注意力(无需位移)和极少数跨窗口传播模块就足够了。我们将以掩码自编码器(MAE)预先训练的平面ViT主干命名为ViTDet检测器,它与基于层次化主干的先前领先方法相媲美,在COCO数据集上仅使用ImageNet-1K预训练达到了最高61.3 AP_box。我们希望我们的研究能引起对平面主干检测器研究的关注。

该模型由nielsr贡献。原始代码可在此处找到。

提示

  • 目前,只有主干可用。

VitDetConfig

transformers.VitDetConfig

< >

( 隐藏层大小 = 768 隐藏层数量 = 12 注意力头数量 = 12 多层感知器比率 = 4 隐藏层激活函数 = 'gelu' dropout 概率 = 0.0 初始化范围 = 0.02 层归一化容差 = 1e-06 图像大小 = 224 预训练图像大小 = 224 补丁大小 = 16 通道数量 = 3 qkv 偏置 = True drop_path 率 = 0.0 窗口块索引 = [] 残差块索引 = [] 使用绝对位置编码 = True 使用相对位置编码 = False 窗口大小 = 0 输出特征 = None 输出索引 = 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) — 用于初始化所有权重矩阵的截断正态分布初始化器的标准差。
  • layer_norm_eps (float, 可选, 默认为 1e-06) — 层归一化层使用的 epsilon 值。
  • image_size (int, 可选, 默认为 224) — 每个图像的大小(分辨率)。
  • pretrain_image_size (int, 可选, 默认为 224) — 预训练过程中每个图像的大小(分辨率)。
  • patch_size (int, 可选, 默认为 16) — 每个补丁的大小(分辨率)。
  • num_channels (int, 可选, 默认为 3) — 输入通道数。
  • qkv_bias (bool, 可选, 默认为 True) — 是否向查询、键和值添加偏差。
  • drop_path_rate (float, 可选, 默认为 0.0) — 随机深度率。
  • window_block_indices (List[int], 可选, 默认为 []) — 应具有窗口注意力而不是常规全局自我注意力的块索引列表。
  • residual_block_indices (List[int], 可选, 默认为 []) — 添加到 MLP 后应该具有额外残差块的块的索引列表。
  • use_absolute_position_embeddings (bool, 可选, 默认为 True) — 是否将绝对位置嵌入添加到补丁嵌入中。
  • 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

class 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 of shape (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, optional) — 是否返回ModelOutput,而不是普通元组。

返回值

transformers.modeling_outputs.BaseModelOutputtuple(torch.FloatTensor)

一个transformers.modeling_outputs.BaseModelOutput对象或一个元组,包含各种元素,这些元素取决于配置(VitDetConfig)和输入,前提是return_dict=False被传入或者当config.return_dict=False

  • last_hidden_state (torch.FloatTensor of shape (batch_size, sequence_length, hidden_size)) — 模型最后一层输出处的隐藏状态序列。

  • hidden_states (tuple(torch.FloatTensor), optional, returned when output_hidden_states=True is passed or when config.output_hidden_states=True) — 一个包含torch.FloatTensor的元组,代表嵌入层输出和每个层的输出(如果模型有嵌入层的话),形状为(batch_size, sequence_length, hidden_size)

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

  • attentions (tuple(torch.FloatTensor), optional, returned when output_attentions=True is passed or when config.output_attentions=True) — 包含每个层的torch.FloatTensor的元组,形状为(batch_size, num_heads, sequence_length, sequence_length)

    注意力权重复合后,用于计算每个自注意力头中的加权平均。

VitDetModel的前向方法覆盖了__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上的更新