Transformers 4.37 中文文档(七十三)(3)https://developer.aliyun.com/article/1564199
ViTDet
原文链接:
huggingface.co/docs/transformers/v4.37.2/en/model_doc/vitdet
概述
ViTDet 模型是由李洋浩、毛汉子、Ross Girshick、何开明在探索普通 Vision Transformer 骨干用于目标检测中提出的。VitDet 利用普通的 Vision Transformer 来进行目标检测任务。
论文摘要如下:
我们探索了作为目标检测的骨干网络的普通、非分层的 Vision Transformer(ViT)。这种设计使得原始的 ViT 架构可以在不需要重新设计分层骨干进行预训练的情况下进行微调以用于目标检测。通过最小的微调适应,我们的普通骨干检测器可以取得竞争性的结果。令人惊讶的是,我们观察到:(i)从单尺度特征图构建简单的特征金字塔就足够了(不需要常见的 FPN 设计),(ii)使用窗口注意力(无需移位)辅以极少的跨窗口传播块就足够了。通过将作为 Masked Autoencoders(MAE)进行预训练的普通 ViT 骨干,我们的检测器 ViTDet 可以与以往基于分层骨干的领先方法竞争,仅使用 ImageNet-1K 预训练就能在 COCO 数据集上达到高达 61.3 的 AP_box。我们希望我们的研究能引起对普通骨干检测器研究的关注。
提示:
- 目前只有骨干网络可用。
VitDetConfig
class 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
, optional, defaults to 768) — 编码器层和池化器层的维度。num_hidden_layers
(int
, optional, defaults to 12) — Transformer 编码器中的隐藏层数量。num_attention_heads
(int
, optional, defaults to 12) — Transformer 编码器中每个注意力层的注意力头数。mlp_ratio
(int
, optional, defaults to 4) — mlp 隐藏维度与嵌入维度的比率。hidden_act
(str
orfunction
, optional, defaults to"gelu"
) — 编码器和池化器中的非线性激活函数(函数或字符串)。如果是字符串,支持"gelu"
、"relu"
、"selu"
和"gelu_new"
。dropout_prob
(float
, optional, defaults to 0.0) — 嵌入层、编码器和池化器中所有全连接层的 dropout 概率。initializer_range
(float
, optional, defaults to 0.02) — 用于初始化所有权重矩阵的截断正态初始化器的标准差。layer_norm_eps
(float
, optional, defaults to 1e-06) — 层归一化层使用的 epsilon。image_size
(int
, optional, defaults to 224) — 每个图像的大小(分辨率)。pretrain_image_size
(int
, optional, defaults to 224) — 预训练期间每个图像的大小(分辨率)。patch_size
(int
, optional, defaults to 16) — 每个补丁的大小(分辨率)。num_channels
(int
, optional, defaults to 3) — 输入通道数。qkv_bias
(bool
, optional, defaults toTrue
) — 是否为查询、键和值添加偏置。drop_path_rate
(float
, optional, defaults to 0.0) — 随机深度率。window_block_indices
(List[int]
, optional, defaults to[]
) — 应该使用窗口注意力而不是常规全局自注意力的块的索引列表。residual_block_indices
(List[int]
, optional, defaults to[]
) — 应在 MLP 后具有额外残差块的块的索引列表。use_absolute_position_embeddings
(bool
, optional, 默认为True
) — 是否向补丁嵌入中添加绝对位置嵌入。use_relative_position_embeddings
(bool
, optional, 默认为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: Optional = None head_mask: Optional = None output_attentions: Optional = None output_hidden_states: Optional = None return_dict: Optional = None ) → export const metadata = 'undefined';transformers.modeling_outputs.BaseModelOutput or 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)
,可选) — 用于使自注意力模块中的选定头部失效的掩码。掩码值选定在[0, 1]
之间:
- 1 表示头部未被
掩盖
。 - 0 表示头部被
掩盖
。
output_attentions
(bool
,可选) — 是否返回所有注意力层的注意力张量。有关更多详细信息,请查看返回的张量下的attentions
。output_hidden_states
(bool
,可选)- 是否返回所有层的隐藏状态。有关更多详细信息,请参阅返回张量下的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
(形状为(batch_size, sequence_length, hidden_size)
的torch.FloatTensor
)- 模型最后一层输出的隐藏状态序列。hidden_states
(tuple(torch.FloatTensor)
,可选,当传递output_hidden_states=True
或config.output_hidden_states=True
时返回)- 形状为(batch_size, sequence_length, hidden_size)
的torch.FloatTensor
元组(如果模型有嵌入层,则为嵌入的输出加上每一层的输出)。
模型在每一层输出处的隐藏状态以及可选的初始嵌入输出。attentions
(tuple(torch.FloatTensor)
,可选,当传递output_attentions=True
或config.output_attentions=True
时返回)- 形状为(batch_size, num_heads, sequence_length, sequence_length)
的torch.FloatTensor
元组(每层一个)。
注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均值。
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]
ViTMAE
原始文本:
huggingface.co/docs/transformers/v4.37.2/en/model_doc/vit_mae
概述
ViTMAE 模型是由 Kaiming He、Xinlei Chen、Saining Xie、Yanghao Li、Piotr Dollár、Ross Girshick 在Masked Autoencoders Are Scalable Vision Learners中提出的。该论文表明,通过预训练视觉 Transformer(ViT)以重建被屏蔽补丁的像素值,可以在微调后获得优于监督预训练的结果。
论文的摘要如下:
本文表明,屏蔽自动编码器(MAE)是计算机视觉的可扩展自监督学习器。我们的 MAE 方法很简单:我们屏蔽输入图像的随机补丁并重建缺失的像素。它基于两个核心设计。首先,我们开发了一个不对称的编码器-解码器架构,其中编码器仅在可见的补丁子集上操作(没有掩码标记),以及一个轻量级的解码器,从潜在表示和掩码标记中重建原始图像。其次,我们发现屏蔽输入图像的高比例,例如 75%,产生了一个非平凡且有意义的自监督任务。结合这两个设计,我们能够高效有效地训练大型模型:我们加速训练(3 倍或更多)并提高准确性。我们的可扩展方法允许学习具有良好泛化性能的高容量模型:例如,一个普通的 ViT-Huge 模型在仅使用 ImageNet-1K 数据的方法中获得了最佳准确性(87.8%)。在下游任务中的转移性能优于监督预训练,并显示出有希望的扩展行为。
MAE 架构。摘自原始论文。
这个模型是由nielsr贡献的。TensorFlow 版本的模型是由sayakpaul和ariG23498贡献的(贡献相同)。原始代码可以在这里找到。
使用提示
- MAE(屏蔽自动编码)是一种用于自监督预训练视觉 Transformer(ViTs)的方法。预训练目标相对简单:通过屏蔽大部分(75%)的图像补丁,模型必须重建原始像素值。可以使用 ViTMAEForPreTraining 来实现这一目的。
- 在预训练之后,一个“丢弃”用于重建像素的解码器,使用编码器进行微调/线性探测。这意味着在微调之后,可以直接将权重插入到 ViTForImageClassification 中。
- 可以使用 ViTImageProcessor 来为模型准备图像。有关更多信息,请参阅代码示例。
- 请注意,MAE 的编码器仅用于对视觉补丁进行编码。然后,编码的补丁与掩码标记连接在一起,解码器(也由 Transformer 块组成)将其作为输入。每个掩码标记是一个共享的、可学习的向量,指示要预测的缺失补丁的存在。固定的 sin/cos 位置嵌入被添加到编码器和解码器的输入中。
- 要了解 MAE 的工作原理,可以查看这篇文章。
资源
以下是官方 Hugging Face 和社区(由🌎表示)资源列表,可帮助您开始使用 ViTMAE。
- ViTMAEForPreTraining 由这个示例脚本支持,允许您从头开始预训练模型/在自定义数据上进一步预训练模型。
- 可以在这里找到一个演示如何使用 ViTMAEForPreTraining 可视化重建像素值的笔记本。
如果您有兴趣提交资源以包含在此处,请随时打开一个 Pull Request,我们将进行审查!资源应该展示一些新内容,而不是重复现有资源。
ViTMAEConfig
class transformers.ViTMAEConfig
( hidden_size = 768 num_hidden_layers = 12 num_attention_heads = 12 intermediate_size = 3072 hidden_act = 'gelu' hidden_dropout_prob = 0.0 attention_probs_dropout_prob = 0.0 initializer_range = 0.02 layer_norm_eps = 1e-12 image_size = 224 patch_size = 16 num_channels = 3 qkv_bias = True decoder_num_attention_heads = 16 decoder_hidden_size = 512 decoder_num_hidden_layers = 8 decoder_intermediate_size = 2048 mask_ratio = 0.75 norm_pix_loss = False **kwargs )
参数
hidden_size
(int
, 可选, 默认为 768) — 编码器层和池化层的维度。num_hidden_layers
(int
, 可选, 默认为 12) — Transformer 编码器中的隐藏层数。num_attention_heads
(int
, 可选, 默认为 12) — Transformer 编码器中每个注意力层的注意力头数。intermediate_size
(int
, 可选, 默认为 3072) — Transformer 编码器中“中间”(即前馈)层的维度。hidden_act
(str
或function
, 可选, 默认为"gelu"
) — 编码器和池化器中的非线性激活函数(函数或字符串)。如果是字符串,支持"gelu"
、"relu"
、"selu"
和"gelu_new"
。hidden_dropout_prob
(float
, 可选, 默认为 0.0) — 嵌入层、编码器和池化器中所有全连接层的 dropout 概率。attention_probs_dropout_prob
(float
, 可选, 默认为 0.0) — 注意力概率的 dropout 比率。initializer_range
(float
, 可选, 默认为 0.02) — 用于初始化所有权重矩阵的截断正态初始化器的标准差。layer_norm_eps
(float
, 可选, 默认为 1e-12) — 层归一化层使用的 epsilon。image_size
(int
, 可选, 默认为 224) — 每个图像的大小(分辨率)。patch_size
(int
, 可选, 默认为 16) — 每个补丁的大小(分辨率)。num_channels
(int
, 可选, 默认为 3) — 输入通道数。qkv_bias
(bool
, 可选, 默认为True
) — 是否为查询、键和值添加偏置。decoder_num_attention_heads
(int
, 可选, 默认为 16) — 解码器中每个注意力层的注意力头数。decoder_hidden_size
(int
, 可选, 默认为 512) — 解码器的维度。decoder_num_hidden_layers
(int
, 可选, 默认为 8) — 解码器中的隐藏层数。decoder_intermediate_size
(int
, 可选, 默认为 2048) — 解码器中“中间”(即前馈)层的维度。mask_ratio
(float
, 可选, 默认为 0.75) — 输入序列中被屏蔽的令牌数量的比例。norm_pix_loss
(bool
, 可选, 默认为False
) — 是否使用归一化像素进行训练(参见论文中的表 3)。在作者的实验中,使用归一化像素提高了表示质量。
这是一个配置类,用于存储 ViTMAEModel 的配置。根据指定的参数实例化一个 ViT MAE 模型,定义模型架构。使用默认值实例化配置将产生类似于 ViT facebook/vit-mae-base架构的配置。
配置对象继承自 PretrainedConfig 并可用于控制模型输出。阅读 PretrainedConfig 中的文档以获取更多信息。
示例:
>>> from transformers import ViTMAEConfig, ViTMAEModel >>> # Initializing a ViT MAE vit-mae-base style configuration >>> configuration = ViTMAEConfig() >>> # Initializing a model (with random weights) from the vit-mae-base style configuration >>> model = ViTMAEModel(configuration) >>> # Accessing the model configuration >>> configuration = model.config
PytorchHide Pytorch content
ViTMAEModel
class transformers.ViTMAEModel
( config )
参数
config
(ViTMAEConfig) — 包含模型所有参数的模型配置类。使用配置文件初始化不会加载与模型相关的权重,只会加载配置。查看 from_pretrained() 方法以加载模型权重。
裸的 ViTMAE 模型变压器输出原始隐藏状态,没有特定的头部。这个模型是 PyTorch torch.nn.Module 的子类。将其用作常规的 PyTorch 模块,并参考 PyTorch 文档以获取有关一般用法和行为的所有相关信息。
forward
( pixel_values: Optional = None noise: Optional = None head_mask: Optional = None output_attentions: Optional = None output_hidden_states: Optional = None return_dict: Optional = None ) → export const metadata = 'undefined';transformers.models.vit_mae.modeling_vit_mae.ViTMAEModelOutput or tuple(torch.FloatTensor)
参数
pixel_values
(torch.FloatTensor
of shape(batch_size, num_channels, height, width)
) — 像素值。可以使用 AutoImageProcessor 获取像素值。有关详细信息,请参阅 ViTImageProcessor.call
()。head_mask
(torch.FloatTensor
of shape(num_heads,)
or(num_layers, num_heads)
, optional) — 用于使自注意力模块中选择的头部失效的掩码。掩码值选择在[0, 1]
之间:
- 1 表示头部未被
masked
, - 0 表示头部被
masked
。
output_attentions
(bool
, optional) — 是否返回所有注意力层的注意力张量。有关更多详细信息,请查看返回的张量下的attentions
。output_hidden_states
(bool
, optional) — 是否返回所有层的隐藏状态。有关更多详细信息,请查看返回的张量下的hidden_states
。return_dict
(bool
, optional) — 是否返回 ModelOutput 而不是普通元组。
返回
transformers.models.vit_mae.modeling_vit_mae.ViTMAEModelOutput
或 tuple(torch.FloatTensor)
一个 transformers.models.vit_mae.modeling_vit_mae.ViTMAEModelOutput
或一个 torch.FloatTensor
元组(如果传递了 return_dict=False
或当 config.return_dict=False
时),包含根据配置 (ViTMAEConfig) 和输入的各种元素。
last_hidden_state
(torch.FloatTensor
of shape(batch_size, sequence_length, hidden_size)
) — 模型最后一层的隐藏状态序列。mask
(torch.FloatTensor
of shape(batch_size, sequence_length)
) — 指示哪些补丁被掩码(1)哪些没有被掩码(0)的张量。ids_restore
(torch.LongTensor
of shape(batch_size, sequence_length)
) — 包含(打乱的)被掩码的补丁的原始索引的张量。hidden_states
(tuple(torch.FloatTensor)
, optional, 当传递output_hidden_states=True
或当config.output_hidden_states=True
时返回) — 形状为(batch_size, sequence_length, hidden_size)
的torch.FloatTensor
元组(一个用于嵌入的输出 + 一个用于每个层的输出)。模型在每一层的输出的隐藏状态加上初始嵌入输出。attentions
(tuple(torch.FloatTensor)
,可选的,当传递了output_attentions=True
或当config.output_attentions=True
时返回) — 形状为(batch_size, num_heads, sequence_length, sequence_length)
的torch.FloatTensor
元组(每层一个)。注意力 softmax 后的注意力权重,用于计算自注意力头部中的加权平均值。
ViTMAEModel 的前向方法,覆盖了 __call__
特殊方法。
虽然前向传递的步骤需要在此函数内定义,但应该在此之后调用 Module
实例,而不是在此处调用,因为前者会负责运行前后处理步骤,而后者会默默地忽略它们。
示例:
>>> from transformers import AutoImageProcessor, ViTMAEModel >>> from PIL import Image >>> import requests >>> url = "http://images.cocodataset.org/val2017/000000039769.jpg" >>> image = Image.open(requests.get(url, stream=True).raw) >>> image_processor = AutoImageProcessor.from_pretrained("facebook/vit-mae-base") >>> model = ViTMAEModel.from_pretrained("facebook/vit-mae-base") >>> inputs = image_processor(images=image, return_tensors="pt") >>> outputs = model(**inputs) >>> last_hidden_states = outputs.last_hidden_state
ViTMAEForPreTraining
class transformers.ViTMAEForPreTraining
( config )
参数
config
(ViTMAEConfig) — 模型配置类,包含模型的所有参数。使用配置文件初始化不会加载与模型相关的权重,只会加载配置。查看 from_pretrained() 方法以加载模型权重。
带有顶部解码器的 ViTMAE 模型变压器,用于自监督预训练。
请注意,我们在我们的示例目录中提供了一个脚本,用于在自定义数据上预训练此模型。
此模型是 PyTorch torch.nn.Module 的子类。将其用作常规的 PyTorch 模块,并参考 PyTorch 文档以获取与一般使用和行为相关的所有事项。
forward
( pixel_values: Optional = None noise: Optional = None head_mask: Optional = None output_attentions: Optional = None output_hidden_states: Optional = None return_dict: Optional = None ) → export const metadata = 'undefined';transformers.models.vit_mae.modeling_vit_mae.ViTMAEForPreTrainingOutput or 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)
,可选的) — 用于使自注意力模块的选定头部失效的掩码。掩码值选定在[0, 1]
中:
- 1 表示头部是
not masked
。 - 0 表示头部是
masked
。
output_attentions
(bool
,可选的) — 是否返回所有注意力层的注意力张量。有关更多详细信息,请查看返回张量下的attentions
。output_hidden_states
(bool
,可选的) — 是否返回所有层的隐藏状态。有关更多详细信息,请查看返回张量下的hidden_states
。return_dict
(bool
,可选的) — 是否返回一个 ModelOutput 而不是一个普通的元组。
返回
transformers.models.vit_mae.modeling_vit_mae.ViTMAEForPreTrainingOutput
或 tuple(torch.FloatTensor)
一个 transformers.models.vit_mae.modeling_vit_mae.ViTMAEForPreTrainingOutput
或一个 torch.FloatTensor
元组(如果传递了 return_dict=False
或当 config.return_dict=False
时)包含根据配置(ViTMAEConfig)和输入的各种元素。
loss
(torch.FloatTensor
,形状为(1,)
) — 像素重建损失。logits
(torch.FloatTensor
,形状为(batch_size, sequence_length, patch_size ** 2 * num_channels)
) — 像素重建 logits。mask
(形状为(batch_size, sequence_length)
的torch.FloatTensor
)—指示哪些补丁被屏蔽(1)哪些没有被屏蔽(0)的张量。ids_restore
(形状为(batch_size, sequence_length)
的torch.LongTensor
)—包含(打乱的)被屏蔽补丁的原始索引的张量。hidden_states
(tuple(torch.FloatTensor)
,可选,当传递output_hidden_states=True
或config.output_hidden_states=True
时返回)—形状为(batch_size, sequence_length, hidden_size)
的torch.FloatTensor
元组。模型在每一层输出的隐藏状态加上初始嵌入输出。attentions
(tuple(torch.FloatTensor)
,可选,当传递output_attentions=True
或config.output_attentions=True
时返回)—形状为(batch_size, num_heads, sequence_length, sequence_length)
的torch.FloatTensor
元组。注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均值。
ViTMAEForPreTraining 的前向方法,覆盖了__call__
特殊方法。
尽管前向传递的方法需要在此函数内定义,但应该在此之后调用Module
实例,而不是这个,因为前者负责运行预处理和后处理步骤,而后者会默默地忽略它们。
示例:
>>> from transformers import AutoImageProcessor, ViTMAEForPreTraining >>> from PIL import Image >>> import requests >>> url = "http://images.cocodataset.org/val2017/000000039769.jpg" >>> image = Image.open(requests.get(url, stream=True).raw) >>> image_processor = AutoImageProcessor.from_pretrained("facebook/vit-mae-base") >>> model = ViTMAEForPreTraining.from_pretrained("facebook/vit-mae-base") >>> inputs = image_processor(images=image, return_tensors="pt") >>> outputs = model(**inputs) >>> loss = outputs.loss >>> mask = outputs.mask >>> ids_restore = outputs.ids_restore
隐藏 TensorFlow 内容
Transformers 4.37 中文文档(七十三)(5)https://developer.aliyun.com/article/1564201