Transformers 文档

卷积视觉Transformer (CvT)

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

卷积视觉Transformer (CvT)

概述

CvT 模型由 Haiping Wu、Bin Xiao、Noel Codella、Mengchen Liu、Xiyang Dai、Lu Yuan 和 Lei Zhang 在 CvT:将卷积引入视觉Transformer 中提出。卷积视觉Transformer (CvT) 通过将卷积引入 ViT 来提高 视觉Transformer (ViT) 的性能和效率,从而产生两种设计的最佳效果。

论文的摘要是这样的

本文提出了一种新的架构,称为卷积视觉Transformer(CvT),它通过将卷积引入ViT来提高视觉Transformer(ViT)的性能和效率,从而产生两种设计的最佳效果。这是通过两个主要修改来实现的:包含新的卷积标记嵌入的Transformer层次结构,以及利用卷积投影的卷积Transformer块。这些变化将卷积神经网络(CNN)的理想属性(即平移、缩放和失真不变性)引入ViT架构,同时保持Transformer的优点(即动态注意力、全局上下文和更好的泛化能力)。我们通过进行广泛的实验来验证CvT,结果表明,这种方法在ImageNet-1k上比其他视觉Transformer和ResNet实现了最先进的性能,并且参数更少,FLOPs更低。此外,在更大的数据集(例如ImageNet-22k)上进行预训练并微调到下游任务时,性能增益得以保持。在ImageNet-22k上进行预训练后,我们的CvT-W24在ImageNet-1k验证集上获得了87.7%的top-1准确率。最后,我们的结果表明,位置编码是现有视觉Transformer中的一个关键组件,在我们的模型中可以安全地移除,从而简化了更高分辨率视觉任务的设计。

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

使用技巧

  • CvT 模型是常规的视觉Transformer,但使用卷积进行训练。当在 ImageNet-1K 和 CIFAR-100 上进行微调时,它们的性能优于 原始模型 (ViT)
  • 您可以查看有关推理以及对自定义数据进行微调的演示笔记本 此处(您可以将 ViTFeatureExtractor 替换为 AutoImageProcessor,并将 ViTForImageClassification 替换为 CvtForImageClassification)。
  • 可用的检查点要么 (1) 仅在 ImageNet-22k(包含 1400 万张图像和 22k 个类别的集合)上进行预训练,(2) 还在 ImageNet-22k 上进行微调,要么 (3) 还在 ImageNet-1k(也称为 ILSVRC 2012,包含 130 万张图像和 1000 个类别的集合)上进行微调。

资源

官方 Hugging Face 和社区(🌎 表示)资源列表,可帮助您开始使用 CvT。

图像分类

如果您有兴趣提交资源以包含在此处,请随时打开拉取请求,我们将对其进行审核!理想情况下,资源应该演示一些新内容,而不是复制现有资源。

CvtConfig

transformers.CvtConfig

< >

( num_channels = 3 patch_sizes = [7, 3, 3] patch_stride = [4, 2, 2] patch_padding = [2, 1, 1] embed_dim = [64, 192, 384] num_heads = [1, 3, 6] depth = [1, 2, 10] mlp_ratio = [4.0, 4.0, 4.0] attention_drop_rate = [0.0, 0.0, 0.0] drop_rate = [0.0, 0.0, 0.0] drop_path_rate = [0.0, 0.0, 0.1] qkv_bias = [True, True, True] cls_token = [False, False, True] qkv_projection_method = ['dw_bn', 'dw_bn', 'dw_bn'] kernel_qkv = [3, 3, 3] padding_kv = [1, 1, 1] stride_kv = [2, 2, 2] padding_q = [1, 1, 1] stride_q = [1, 1, 1] initializer_range = 0.02 layer_norm_eps = 1e-12 **kwargs )

参数

  • num_channels (int, 可选, 默认值为 3) — 输入通道的数量。
  • patch_sizes (List[int], 可选, 默认值为 [7, 3, 3]) — 每个编码器块嵌入的内核大小。
  • patch_stride (List[int], 可选, 默认值为 [4, 2, 2]) — 每个编码器块嵌入的步幅大小。
  • patch_padding (List[int], 可选, 默认值为 [2, 1, 1]) — 每个编码器块嵌入的填充大小。
  • embed_dim (List[int], *可选*, 默认值为 [64, 192, 384]) — 每个编码器块的维度。
  • num_heads (List[int], *可选*, 默认值为 [1, 3, 6]) — Transformer 编码器每个块中每个注意力层的注意力头数。
  • depth (List[int], *可选*, 默认值为 [1, 2, 10]) — 每个编码器块中的层数。
  • mlp_ratios (List[float], *可选*, 默认值为 [4.0, 4.0, 4.0, 4.0]) — 隐藏层大小与编码器块中 Mix FFN 输入层大小的比率。
  • attention_drop_rate (List[float], *可选*, 默认值为 [0.0, 0.0, 0.0]) — 注意力概率的 dropout 比率。
  • drop_rate (List[float], *可选*, 默认值为 [0.0, 0.0, 0.0]) — 图像块嵌入概率的 dropout 比率。
  • drop_path_rate (List[float], *可选*, 默认值为 [0.0, 0.0, 0.1]) — Stochastic Depth 的 dropout 概率,用于 Transformer 编码器的块中。
  • qkv_bias (List[bool], *可选*, 默认值为 [True, True, True]) — 注意力机制中 query、key 和 value 的偏差 bool 值
  • cls_token (List[bool]可选,默认为 [False, False, True]) — 是否将分类标记添加到最后 3 个阶段中每个阶段的输出。
  • qkv_projection_method (List[string]可选,默认为 [“dw_bn”, “dw_bn”, “dw_bn”]`) — 查询、键和值的投影方法。默认为带有批归一化的深度卷积。对于线性投影,请使用 “avg”。
  • kernel_qkv (List[int]可选,默认为 [3, 3, 3]) — 注意力层中查询、键和值的内核大小
  • padding_kv (List[int]可选,默认为 [1, 1, 1]) — 注意力层中键和值的填充大小
  • stride_kv (List[int]可选,默认为 [2, 2, 2]) — 注意力层中键和值的步幅大小
  • padding_q (List[int]可选,默认为 [1, 1, 1]) — 注意力层中查询的填充大小
  • stride_q (List[int]可选,默认为 [1, 1, 1]) — 注意力层中查询的步幅大小
  • initializer_range (float可选,默认为 0.02) — 用于初始化所有权重矩阵的 truncated_normal_initializer 的标准差。
  • layer_norm_eps (float, 可选, 默认值为 1e-6) — 层归一化层使用的ε。

这是用于存储 CvtModel 配置的配置类。它用于根据指定的参数实例化 CvT 模型,定义模型架构。使用默认值实例化配置将产生与 CvT microsoft/cvt-13 架构类似的配置。

配置对象继承自 PretrainedConfig,可用于控制模型输出。请参阅 PretrainedConfig 的文档以获取更多信息。

例子

>>> from transformers import CvtConfig, CvtModel

>>> # Initializing a Cvt msft/cvt style configuration
>>> configuration = CvtConfig()

>>> # Initializing a model (with random weights) from the msft/cvt style configuration
>>> model = CvtModel(configuration)

>>> # Accessing the model configuration
>>> configuration = model.config
Pytorch
隐藏 Pytorch 内容

CvtModel

transformers.CvtModel

< >

( config add_pooling_layer = True )

参数

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

原始 Cvt 模型变压器输出原始隐藏状态,顶部没有任何特定头部。此模型是 PyTorch torch.nn.Module 子类。将其用作常规 PyTorch 模块,并参考 PyTorch 文档以获取与一般用法和行为相关的所有内容。

forward

< >

( pixel_values: Optional = None output_hidden_states: Optional = None return_dict: Optional = None ) transformers.models.cvt.modeling_cvt.BaseModelOutputWithCLSTokentuple(torch.FloatTensor)

参数

  • pixel_values (torch.FloatTensor 形状为 (batch_size, num_channels, height, width)) — 像素值。像素值可以使用 AutoImageProcessor 获取。有关详细信息,请参阅 CvtImageProcessor.__call__
  • output_hidden_states (bool, 可选) — 是否返回所有层的隐藏状态。有关更多详细信息,请参阅返回张量下的 hidden_states
  • return_dict (bool, 可选) — 是否返回 ModelOutput 而不是普通元组。

返回值

transformers.models.cvt.modeling_cvt.BaseModelOutputWithCLSTokentuple(torch.FloatTensor)

一个 transformers.models.cvt.modeling_cvt.BaseModelOutputWithCLSToken 或一个 torch.FloatTensor 元组(如果传递了 return_dict=Falseconfig.return_dict=False),包含根据配置 (CvtConfig) 和输入的不同元素。

  • last_hidden_state (torch.FloatTensor 形状为 (batch_size, sequence_length, hidden_size)) — 模型最后一层输出的隐藏状态序列。
  • cls_token_value (torch.FloatTensor 形状为 (batch_size, 1, hidden_size)) — 模型最后一层输出的分类标记。
  • hidden_states (tuple(torch.FloatTensor), 可选, 当传递 output_hidden_states=Trueconfig.output_hidden_states=True 时返回) — torch.FloatTensor 元组(一个用于嵌入输出 + 一个用于每层输出),形状为 (batch_size, sequence_length, hidden_size)。模型在每层输出处的隐藏状态以及初始嵌入输出。

CvtModel 的 forward 方法,覆盖了 __call__ 特殊方法。

尽管需要在此函数中定义正向传递的方法,但之后应该调用 Module 实例而不是此实例,因为前者负责运行预处理和后处理步骤,而后者则默默地忽略它们。

例子

>>> from transformers import AutoImageProcessor, CvtModel
>>> import torch
>>> from datasets import load_dataset

>>> dataset = load_dataset("huggingface/cats-image", trust_remote_code=True)
>>> image = dataset["test"]["image"][0]

>>> image_processor = AutoImageProcessor.from_pretrained("microsoft/cvt-13")
>>> model = CvtModel.from_pretrained("microsoft/cvt-13")

>>> inputs = image_processor(image, return_tensors="pt")

>>> with torch.no_grad():
...     outputs = model(**inputs)

>>> last_hidden_states = outputs.last_hidden_state
>>> list(last_hidden_states.shape)
[1, 384, 14, 14]

CvtForImageClassification

transformers.CvtForImageClassification

< >

( config )

参数

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

Cvt 模型变压器,顶部有一个图像分类头(在 [CLS] 标记的最终隐藏状态之上有一个线性层),例如用于 ImageNet。

此模型是 PyTorch torch.nn.Module 的子类。将其用作常规 PyTorch 模块,并参考 PyTorch 文档了解有关一般用法和行为的所有事项。

forward

< >

( pixel_values: 可选 = None 标签: 可选 = None output_hidden_states: 可选 = None return_dict: 可选 = None ) transformers.modeling_outputs.ImageClassifierOutputWithNoAttentiontuple(torch.FloatTensor)

参数

  • pixel_values (torch.FloatTensor 类型,形状为 (batch_size, num_channels, height, width)) — 像素值。像素值可以使用 AutoImageProcessor 获取。有关详细信息,请参阅 CvtImageProcessor.__call__
  • output_hidden_states (bool, *可选*) — 是否返回所有层的隐藏状态。有关详细信息,请参阅返回张量下的 hidden_states
  • return_dict (bool, *可选*) — 是否返回 ModelOutput 而不是普通的元组。
  • 标签 (torch.LongTensor 类型,形状为 (batch_size,), *可选*) — 用于计算图像分类/回归损失的标签。索引应在 [0, ..., config.num_labels - 1] 范围内。如果 config.num_labels == 1,则计算回归损失(均方误差);如果 config.num_labels > 1,则计算分类损失(交叉熵)。

返回值

transformers.modeling_outputs.ImageClassifierOutputWithNoAttentiontuple(torch.FloatTensor)

一个 transformers.modeling_outputs.ImageClassifierOutputWithNoAttention 或一个 torch.FloatTensor 的元组(如果传递了 return_dict=Falseconfig.return_dict=False),其中包含的各种元素取决于配置 (CvtConfig) 和输入。

  • loss (torch.FloatTensor 类型,形状为 (1,), *可选*,在提供 标签 时返回) — 分类(如果 config.num_labels==1 则为回归)损失。
  • logits (torch.FloatTensor 类型,形状为 (batch_size, config.num_labels)) — 分类(如果 config.num_labels==1 则为回归)分数(SoftMax 之前)。
  • hidden_states (tuple(torch.FloatTensor), *可选*,在传递 output_hidden_states=Trueconfig.output_hidden_states=True 时返回) — torch.FloatTensor 的元组(如果模型有嵌入层,则一个用于嵌入的输出 + 一个用于每个阶段的输出),形状为 (batch_size, num_channels, height, width)。模型在每个阶段输出处的隐藏状态(也称为特征图)。

CvtForImageClassification 的 forward 方法会覆盖 __call__ 特殊方法。

尽管需要在此函数中定义正向传递的方法,但之后应该调用 Module 实例而不是此实例,因为前者负责运行预处理和后处理步骤,而后者则默默地忽略它们。

例子

>>> from transformers import AutoImageProcessor, CvtForImageClassification
>>> import torch
>>> from datasets import load_dataset

>>> dataset = load_dataset("huggingface/cats-image", trust_remote_code=True)
>>> image = dataset["test"]["image"][0]

>>> image_processor = AutoImageProcessor.from_pretrained("microsoft/cvt-13")
>>> model = CvtForImageClassification.from_pretrained("microsoft/cvt-13")

>>> inputs = image_processor(image, return_tensors="pt")

>>> with torch.no_grad():
...     logits = model(**inputs).logits

>>> # model predicts one of the 1000 ImageNet classes
>>> predicted_label = logits.argmax(-1).item()
>>> print(model.config.id2label[predicted_label])
tabby, tabby cat
TensorFlow
隐藏 TensorFlow 内容

TFCvtModel

transformers.TFCvtModel

< >

( config: CvtConfig *inputs **kwargs )

参数

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

裸 Cvt 模型转换器输出原始隐藏状态,顶部没有任何特定的头部。

此模型继承自 TFPreTrainedModel。 查看超类文档以了解库为其所有模型实现的通用方法(例如下载或保存、调整输入嵌入的大小、修剪头部等)。

此模型也是一个 keras.Model 子类。 将其用作常规 TF 2.0 Keras 模型,并参考 TF 2.0 文档以了解与一般使用和行为相关的所有事项。

TF 2.0 模型接受两种格式作为输入

  • 将所有输入作为关键字参数(如 PyTorch 模型),或
  • 将所有输入作为列表、元组或字典放在第一个位置参数中。

当使用 keras.Model.fit 方法时,第二个选项很有用,该方法目前要求模型调用函数的第一个参数中包含所有张量: model(inputs)

调用

< >

( pixel_values: tf.Tensor | None = None output_hidden_states: Optional[bool] = None return_dict: Optional[bool] = None training: Optional[bool] = False ) transformers.models.cvt.modeling_tf_cvt.TFBaseModelOutputWithCLSTokentuple(tf.Tensor)

参数

  • pixel_values (np.ndarray, tf.Tensor, List[tf.Tensor] `Dict[str, tf.Tensor]Dict[str, np.ndarray],并且每个示例必须具有形状 (batch_size, num_channels, height, width)) — 像素值。 可以使用 AutoImageProcessor 获取像素值。 有关详细信息,请参阅 CvtImageProcessor.__call__
  • output_hidden_states (bool,*可选*) — 是否返回所有层的隐藏状态。有关详细信息,请参阅返回张量下的 hidden_states。此参数只能在渴望模式下使用,在图形模式下将使用配置中的值。
  • return_dict (bool,*可选*) — 是否返回 ModelOutput 而不是普通元组。此参数可以在渴望模式下使用,在图形模式下,该值将始终设置为 True。
  • training (bool,*可选*,默认为 `False“) — 是否在训练模式下使用模型(某些模块,如 dropout 模块,在训练和评估之间的行为不同)。

返回值

transformers.models.cvt.modeling_tf_cvt.TFBaseModelOutputWithCLSTokentuple(tf.Tensor)

transformers.models.cvt.modeling_tf_cvt.TFBaseModelOutputWithCLSTokentf.Tensor 的元组(如果传递了 return_dict=Falseconfig.return_dict=False),包含根据配置 (CvtConfig) 和输入而定的各种元素。

  • last_hidden_state (形状为 (batch_size, sequence_length, hidden_size)tf.Tensor) — 模型最后一层输出处的隐藏状态序列。
  • cls_token_value (形状为 (batch_size, 1, hidden_size)tf.Tensor) — 模型最后一层输出处的分类标记。
  • hidden_states (tuple(tf.Tensor),*可选*,在传递 output_hidden_states=Trueconfig.output_hidden_states=True 时返回) — tf.Tensor 的元组(一个用于嵌入的输出 + 一个用于每一层的输出),形状为 (batch_size, sequence_length, hidden_size)。模型在每一层输出处的隐藏状态以及初始嵌入输出。

TFCvtModel 前向方法,覆盖 __call__ 特殊方法。

尽管需要在此函数中定义正向传递的方法,但之后应该调用 Module 实例而不是此实例,因为前者负责运行预处理和后处理步骤,而后者则默默地忽略它们。

例子

>>> from transformers import AutoImageProcessor, TFCvtModel
>>> 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("microsoft/cvt-13")
>>> model = TFCvtModel.from_pretrained("microsoft/cvt-13")

>>> inputs = image_processor(images=image, return_tensors="tf")
>>> outputs = model(**inputs)
>>> last_hidden_states = outputs.last_hidden_state

TFCvtForImageClassification

transformers.TFCvtForImageClassification

< >

( config: CvtConfig *inputs **kwargs )

参数

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

Cvt 模型变压器,顶部有一个图像分类头(在 [CLS] 标记的最终隐藏状态之上有一个线性层),例如用于 ImageNet。

此模型继承自 TFPreTrainedModel。 查看超类文档以了解库为其所有模型实现的通用方法(例如下载或保存、调整输入嵌入的大小、修剪头部等)。

此模型也是一个 keras.Model 子类。 将其用作常规 TF 2.0 Keras 模型,并参考 TF 2.0 文档以了解与一般使用和行为相关的所有事项。

TF 2.0 模型接受两种格式作为输入

  • 将所有输入作为关键字参数(如 PyTorch 模型),或
  • 将所有输入作为列表、元组或字典放在第一个位置参数中。

当使用 keras.Model.fit 方法时,第二个选项很有用,该方法目前要求模型调用函数的第一个参数中包含所有张量: model(inputs)

调用

< >

( pixel_values: tf.Tensor | None = None labels: tf.Tensor | None = None output_hidden_states: Optional[bool] = None return_dict: Optional[bool] = None training: Optional[bool] = False ) transformers.modeling_tf_outputs.TFImageClassifierOutputWithNoAttentiontuple(tf.Tensor)

参数

  • pixel_values (np.ndarraytf.TensorList[tf.Tensor]、`Dict[str, tf.Tensor]Dict[str, np.ndarray],并且每个示例必须具有形状 (batch_size, num_channels, height, width)) — 像素值。像素值可以使用 AutoImageProcessor 获取。有关详细信息,请参阅 CvtImageProcessor.__call__
  • output_hidden_states (bool, 可选) — 是否返回所有层的隐藏状态。有关详细信息,请参阅返回张量下的 hidden_states。此参数只能在渴望模式下使用,在图形模式下将使用配置中的值。
  • return_dict (bool, 可选) — 是否返回 ModelOutput 而不是普通元组。此参数可以在渴望模式下使用,在图形模式下,该值将始终设置为 True。
  • training (bool, 可选, 默认为 `False“) — 是否在训练模式下使用模型(某些模块(如 dropout 模块)在训练和评估之间的行为不同)。
  • labels (tf.Tensor 或形状为 (batch_size,)np.ndarray,可选) — 用于计算图像分类/回归损失的标签。索引应在 [0, ..., config.num_labels - 1] 中。如果 config.num_labels == 1,则计算回归损失(均方损失),如果 config.num_labels > 1,则计算分类损失(交叉熵)。

返回值

transformers.modeling_tf_outputs.TFImageClassifierOutputWithNoAttentiontuple(tf.Tensor)

transformers.modeling_tf_outputs.TFImageClassifierOutputWithNoAttention 或一个 tf.Tensor 元组(如果传递了 return_dict=False 或当 config.return_dict=False 时)包含取决于配置 (CvtConfig) 和输入的各种元素。

  • loss (形状为 (1,)tf.Tensor可选,在提供 labels 时返回) — 分类(如果 config.num_labels==1 则为回归)损失。
  • logits (形状为 (batch_size, config.num_labels)tf.Tensor) — 分类(如果 config.num_labels==1 则为回归)分数(SoftMax 之前)。
  • hidden_states (tuple(tf.Tensor)可选,在传递 output_hidden_states=True 或当 config.output_hidden_states=True 时返回) — tf.Tensor 元组(一个用于嵌入的输出(如果模型有嵌入层),+ 一个用于每个阶段的输出),形状为 (batch_size, num_channels, height, width)。模型在每个阶段输出处的隐藏状态(也称为特征图)。

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

尽管需要在此函数中定义正向传递的方法,但之后应该调用 Module 实例而不是此实例,因为前者负责运行预处理和后处理步骤,而后者则默默地忽略它们。

例子

>>> from transformers import AutoImageProcessor, TFCvtForImageClassification
>>> import tensorflow as tf
>>> 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("microsoft/cvt-13")
>>> model = TFCvtForImageClassification.from_pretrained("microsoft/cvt-13")

>>> inputs = image_processor(images=image, return_tensors="tf")
>>> outputs = model(**inputs)
>>> logits = outputs.logits
>>> # model predicts one of the 1000 ImageNet classes
>>> predicted_class_idx = tf.math.argmax(logits, axis=-1)[0]
>>> print("Predicted class:", model.config.id2label[int(predicted_class_idx)])
< > 在 GitHub 上更新