Transformers 文档

Swin Transformer V2

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

Swin Transformer V2

PyTorch

概述

Swin Transformer V2 模型是由 Ze Liu, Han Hu, Yutong Lin, Zhuliang Yao, Zhenda Xie, Yixuan Wei, Jia Ning, Yue Cao, Zheng Zhang, Li Dong, Furu Wei, Baining Guo 在 Swin Transformer V2: Scaling Up Capacity and Resolution 中提出的。

论文的摘要如下:

大规模 NLP 模型已被证明可以显著提高语言任务的性能,且没有饱和的迹象。它们还展示了惊人的人类般的少样本能力。本文旨在探索计算机视觉中的大规模模型。我们解决了训练和应用大型视觉模型中的三个主要问题,包括训练不稳定、预训练和微调之间的分辨率差距,以及对标记数据的饥渴。提出了三种主要技术:1) 残差后归一化方法与余弦注意力相结合,以提高训练稳定性;2) 一种对数间隔的连续位置偏差方法,以有效地将使用低分辨率图像预训练的模型转移到具有高分辨率输入的下游任务;3) 一种自监督预训练方法 SimMIM,以减少对大量标记图像的需求。通过这些技术,本文成功训练了一个 30 亿参数的 Swin Transformer V2 模型,这是迄今为止最大的密集视觉模型,并使其能够使用高达 1,536×1,536 分辨率的图像进行训练。它在 4 个代表性的视觉任务上创造了新的性能记录,包括 ImageNet-V2 图像分类、COCO 对象检测、ADE20K 语义分割和 Kinetics-400 视频动作分类。另请注意,我们的训练比谷歌十亿级视觉模型中的训练效率更高,后者消耗的标记数据和训练时间分别减少了 40 倍。

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

资源

以下是官方 Hugging Face 和社区 (🌎 表示) 资源列表,可帮助您开始使用 Swin Transformer v2。

图像分类

除此之外

如果您有兴趣提交资源并将其包含在此处,请随时打开 Pull Request,我们将对其进行审核!该资源最好展示一些新的东西,而不是重复现有资源。

Swinv2Config

class transformers.Swinv2Config

< >

( image_size = 224 patch_size = 4 num_channels = 3 embed_dim = 96 depths = [2, 2, 6, 2] num_heads = [3, 6, 12, 24] window_size = 7 pretrained_window_sizes = [0, 0, 0, 0] mlp_ratio = 4.0 qkv_bias = True hidden_dropout_prob = 0.0 attention_probs_dropout_prob = 0.0 drop_path_rate = 0.1 hidden_act = 'gelu' use_absolute_embeddings = False initializer_range = 0.02 layer_norm_eps = 1e-05 encoder_stride = 32 out_features = None out_indices = None **kwargs )

参数

  • image_size (int, 可选, 默认为 224) — 每个图像的大小(分辨率)。
  • patch_size (int, 可选, 默认为 4) — 每个 patch 的大小(分辨率)。
  • num_channels (int, 可选, 默认为 3) — 输入通道数。
  • embed_dim (int, 可选, 默认为 96) — patch 嵌入的维度。
  • depths (list(int), 可选, 默认为 [2, 2, 6, 2]) — Transformer 编码器中每层的深度。
  • num_heads (list(int), 可选,默认为 [3, 6, 12, 24]) — Transformer 编码器中每层注意力头的数量。
  • window_size (int, 可选,默认为 7) — 窗口大小。
  • pretrained_window_sizes (list(int), 可选,默认为 [0, 0, 0, 0]) — 预训练期间的窗口大小。
  • mlp_ratio (float, 可选,默认为 4.0) — MLP 隐藏层维度与嵌入层维度的比率。
  • qkv_bias (bool, 可选,默认为 True) — 是否向queries, keys 和 values 添加可学习的偏置。
  • hidden_dropout_prob (float, 可选,默认为 0.0) — 嵌入层和编码器中所有全连接层的 dropout 概率。
  • attention_probs_dropout_prob (float, 可选,默认为 0.0) — 注意力概率的 dropout 比率。
  • drop_path_rate (float, 可选,默认为 0.1) — 随机深度比率。
  • hidden_act (strfunction, 可选,默认为 "gelu") — 编码器中的非线性激活函数(函数或字符串)。如果为字符串,则支持 "gelu", "relu", "selu""gelu_new"
  • use_absolute_embeddings (bool, 可选,默认为 False) — 是否将绝对位置嵌入添加到 patch 嵌入中。
  • initializer_range (float, 可选,默认为 0.02) — 用于初始化所有权重矩阵的 truncated_normal_initializer 的标准差。
  • layer_norm_eps (float, 可选,默认为 1e-05) — 层归一化层使用的 epsilon 值。
  • encoder_stride (int, 可选,默认为 32) — 在用于掩码图像建模的解码器头部中,增加空间分辨率的因子。
  • out_features (List[str], 可选) — 如果用作 backbone,则输出的特征列表。可以是 "stem", "stage1", "stage2" 等中的任何一个(取决于模型有多少个 stage)。如果未设置且设置了 out_indices,则默认为相应的 stage。如果未设置且 out_indices 也未设置,则默认为最后一个 stage。
  • out_indices (List[int], 可选) — 如果用作 backbone,则输出的特征索引列表。可以是 0, 1, 2 等中的任何一个(取决于模型有多少个 stage)。如果未设置且设置了 out_features,则默认为相应的 stage。如果未设置且 out_features 也未设置,则默认为最后一个 stage。

这是用于存储 Swinv2Model 配置的配置类。它用于根据指定的参数实例化 Swin Transformer v2 模型,定义模型架构。使用默认值实例化配置将产生与 Swin Transformer v2 microsoft/swinv2-tiny-patch4-window8-256 架构类似的配置。

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

示例

>>> from transformers import Swinv2Config, Swinv2Model

>>> # Initializing a Swinv2 microsoft/swinv2-tiny-patch4-window8-256 style configuration
>>> configuration = Swinv2Config()

>>> # Initializing a model (with random weights) from the microsoft/swinv2-tiny-patch4-window8-256 style configuration
>>> model = Swinv2Model(configuration)

>>> # Accessing the model configuration
>>> configuration = model.config

Swinv2Model

class transformers.Swinv2Model

< >

( config add_pooling_layer = True use_mask_token = False )

参数

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

Swinv2 Model 裸模型 Transformer 输出原始的 hidden-states,顶部没有任何特定的 head。此模型是 PyTorch torch.nn.Module 子类。将其用作常规 PyTorch 模块,并参考 PyTorch 文档以了解与常规用法和行为相关的所有事项。

forward

< >

( pixel_values: typing.Optional[torch.FloatTensor] = None bool_masked_pos: typing.Optional[torch.BoolTensor] = None head_mask: typing.Optional[torch.FloatTensor] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None interpolate_pos_encoding: bool = False return_dict: typing.Optional[bool] = None ) transformers.models.swinv2.modeling_swinv2.Swinv2ModelOutputtuple(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), 可选) — 用于 nullify self-attention 模块中选定 head 的 Mask。 Mask 值在 [0, 1] 中选择:

    • 1 表示 head 未被掩盖
    • 0 表示 head 被掩盖
  • output_attentions (bool, 可选) — 是否返回所有注意力层的 attentions tensor。 有关更多详细信息,请参见返回 tensors 下的 attentions
  • output_hidden_states (bool, 可选) — 是否返回所有层的 hidden state。 有关更多详细信息,请参见返回 tensors 下的 hidden_states
  • interpolate_pos_encoding (bool, 可选,默认为 False) — 是否插值预训练的位置编码。
  • return_dict (bool, optional) — 是否返回 ModelOutput 而不是一个普通的元组。
  • bool_masked_pos (torch.BoolTensor, shape: (batch_size, num_patches), optional) — 布尔掩码位置。指示哪些patch被掩码 (1) 以及哪些没有 (0)。

返回:

transformers.models.swinv2.modeling_swinv2.Swinv2ModelOutputtuple(torch.FloatTensor)

一个 transformers.models.swinv2.modeling_swinv2.Swinv2ModelOutput 或一个 torch.FloatTensor 元组 (如果传递了 return_dict=False 或者当 config.return_dict=False 时),包含各种元素,具体取决于配置 (Swinv2Config) 和输入。

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

  • pooler_output (torch.FloatTensor, shape: (batch_size, hidden_size), optional, 当传递 add_pooling_layer=True 时返回) — 最后一层隐藏状态的平均池化。

  • hidden_states (tuple(torch.FloatTensor), optional, 当传递 output_hidden_states=True 或当 config.output_hidden_states=True 时返回) — torch.FloatTensor 的元组 (每个嵌入输出一个,加上每个阶段的输出一个),形状为 (batch_size, sequence_length, hidden_size)

    模型在每一层输出以及初始嵌入输出的隐藏状态。

  • attentions (tuple(torch.FloatTensor), optional, 当传递 output_attentions=True 或当 config.output_attentions=True 时返回) — torch.FloatTensor 的元组 (每个阶段一个),形状为 (batch_size, num_heads, sequence_length, sequence_length)

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

  • reshaped_hidden_states (tuple(torch.FloatTensor), optional, 当传递 output_hidden_states=True 或当 config.output_hidden_states=True 时返回) — torch.FloatTensor 的元组 (每个嵌入输出一个,加上每个阶段的输出一个),形状为 (batch_size, hidden_size, height, width)

    模型在每一层输出以及初始嵌入输出的隐藏状态,并被重塑以包含空间维度。

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

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

示例

>>> from transformers import AutoImageProcessor, Swinv2Model
>>> 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/swinv2-tiny-patch4-window8-256")
>>> model = Swinv2Model.from_pretrained("microsoft/swinv2-tiny-patch4-window8-256")

>>> 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, 64, 768]

Swinv2ForMaskedImageModeling

class transformers.Swinv2ForMaskedImageModeling

< >

( config )

参数

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

带有用于掩码图像建模的解码器的 Swinv2 模型,如 SimMIM 中提出的那样。

请注意,我们在 examples directory 中提供了一个脚本,用于在自定义数据上预训练此模型。

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

forward

< >

( pixel_values: typing.Optional[torch.FloatTensor] = None bool_masked_pos: typing.Optional[torch.BoolTensor] = None head_mask: typing.Optional[torch.FloatTensor] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None interpolate_pos_encoding: bool = False return_dict: typing.Optional[bool] = None ) transformers.models.swinv2.modeling_swinv2.Swinv2MaskedImageModelingOutputtuple(torch.FloatTensor)

参数

  • pixel_values (torch.FloatTensor, shape: (batch_size, num_channels, height, width)) — 像素值。像素值可以使用 AutoImageProcessor 获得。参见 ViTImageProcessor.call() 以了解详情。
  • head_mask (torch.FloatTensor, shape: (num_heads,)(num_layers, num_heads), optional) — 用于置空自注意力模块中选定头的掩码。在 [0, 1] 中选择的掩码值:

    • 1 表示头未被掩码
    • 0 表示头被掩码
  • output_attentions (bool, optional) — 是否返回所有注意力层的注意力张量。有关更多详细信息,请参见返回张量下的 attentions
  • output_hidden_states (bool, optional) — 是否返回所有层的隐藏状态。有关更多详细信息,请参见返回张量下的 hidden_states
  • interpolate_pos_encoding (bool, optional, 默认值: False) — 是否插值预训练的位置编码。
  • return_dict (bool, optional) — 是否返回 ModelOutput 而不是一个普通的元组。
  • bool_masked_pos (torch.BoolTensor, shape: (batch_size, num_patches)) — 布尔掩码位置。指示哪些patch被掩码 (1) 以及哪些没有 (0)。

返回:

transformers.models.swinv2.modeling_swinv2.Swinv2MaskedImageModelingOutputtuple(torch.FloatTensor)

一个 transformers.models.swinv2.modeling_swinv2.Swinv2MaskedImageModelingOutput 或一个 torch.FloatTensor 元组 (如果传递了 return_dict=False 或者当 config.return_dict=False 时),包含各种元素,具体取决于配置 (Swinv2Config) 和输入。

  • loss (torch.FloatTensor, shape: (1,), optional, 当提供 bool_masked_pos 时返回) — 掩码图像建模 (MLM) 损失。

  • reconstruction (torch.FloatTensor, shape: (batch_size, num_channels, height, width)) — 重建的像素值。

  • hidden_states (tuple(torch.FloatTensor), optional, 当传递 output_hidden_states=True 或当 config.output_hidden_states=True 时返回) — torch.FloatTensor 的元组 (每个嵌入输出一个,加上每个阶段的输出一个),形状为 (batch_size, sequence_length, hidden_size)

    模型在每一层输出以及初始嵌入输出的隐藏状态。

  • attentions (tuple(torch.FloatTensor), optional, 当传递 output_attentions=True 或当 config.output_attentions=True 时返回) — torch.FloatTensor 的元组 (每个阶段一个),形状为 (batch_size, num_heads, sequence_length, sequence_length)

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

  • reshaped_hidden_states (tuple(torch.FloatTensor), optional, 当传递 output_hidden_states=True 或当 config.output_hidden_states=True 时返回) — torch.FloatTensor 的元组 (每个嵌入输出一个,加上每个阶段的输出一个),形状为 (batch_size, hidden_size, height, width)

    模型在每一层输出以及初始嵌入输出的隐藏状态,并被重塑以包含空间维度。

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

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

示例

>>> from transformers import AutoImageProcessor, Swinv2ForMaskedImageModeling
>>> import torch
>>> 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/swinv2-tiny-patch4-window8-256")
>>> model = Swinv2ForMaskedImageModeling.from_pretrained("microsoft/swinv2-tiny-patch4-window8-256")

>>> num_patches = (model.config.image_size // model.config.patch_size) ** 2
>>> pixel_values = image_processor(images=image, return_tensors="pt").pixel_values
>>> # create random boolean mask of shape (batch_size, num_patches)
>>> bool_masked_pos = torch.randint(low=0, high=2, size=(1, num_patches)).bool()

>>> outputs = model(pixel_values, bool_masked_pos=bool_masked_pos)
>>> loss, reconstructed_pixel_values = outputs.loss, outputs.reconstruction
>>> list(reconstructed_pixel_values.shape)
[1, 3, 256, 256]

Swinv2ForImageClassification

class transformers.Swinv2ForImageClassification

< >

( config )

参数

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

带有图像分类头的 Swinv2 模型 Transformer([CLS] 标记的最终隐藏状态之上的线性层),例如用于 ImageNet。

请注意,通过在模型的前向传播中将 interpolate_pos_encoding 设置为 True,可以在比 SwinV2 训练时更高的分辨率图像上微调 SwinV2。 这会将预训练的位置嵌入插值到更高的分辨率。

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

forward

< >

( pixel_values: typing.Optional[torch.FloatTensor] = None head_mask: typing.Optional[torch.FloatTensor] = None labels: typing.Optional[torch.LongTensor] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None interpolate_pos_encoding: bool = False return_dict: typing.Optional[bool] = None ) transformers.models.swinv2.modeling_swinv2.Swinv2ImageClassifierOutputtuple(torch.FloatTensor)

参数

  • pixel_values (torch.FloatTensor, shape: (batch_size, num_channels, height, width)) — 像素值。像素值可以使用 AutoImageProcessor 获得。参见 ViTImageProcessor.call() 以了解详情。
  • head_mask (torch.FloatTensor, shape: (num_heads,)(num_layers, num_heads), optional) — 用于置空自注意力模块中选定头的掩码。在 [0, 1] 中选择的掩码值:

    • 1 表示头未被掩码
    • 0 表示头被掩码
  • output_attentions (bool, optional) — 是否返回所有注意力层的注意力张量。有关更多详细信息,请参见返回张量下的 attentions
  • output_hidden_states (bool, optional) — 是否返回所有层的隐藏状态。有关更多详细信息,请参见返回张量下的 hidden_states
  • interpolate_pos_encoding (bool, optional, 默认值: False) — 是否插值预训练的位置编码。
  • return_dict (bool, 可选) — 是否返回 ModelOutput 而不是纯粹的元组。
  • labels (torch.LongTensor,形状为 (batch_size,)可选) — 用于计算图像分类/回归损失的标签。索引应该在 [0, ..., config.num_labels - 1] 中。如果 config.num_labels == 1,则计算回归损失(均方误差损失)。如果 config.num_labels > 1,则计算分类损失(交叉熵损失)。

返回:

transformers.models.swinv2.modeling_swinv2.Swinv2ImageClassifierOutputtuple(torch.FloatTensor)

一个 transformers.models.swinv2.modeling_swinv2.Swinv2ImageClassifierOutput 或一个 torch.FloatTensor 元组 (如果传递了 return_dict=False 或者当 config.return_dict=False 时),包含取决于配置 (Swinv2Config) 和输入的各种元素。

  • loss (torch.FloatTensor,形状为 (1,)可选,当提供了 labels 时返回) — 分类损失 (如果 config.num_labels==1 则是回归损失)。

  • logits (torch.FloatTensor,形状为 (batch_size, config.num_labels)) — 分类得分 (如果 config.num_labels==1 则是回归得分) (在 SoftMax 之前)。

  • hidden_states (tuple(torch.FloatTensor), optional, 当传递 output_hidden_states=True 或当 config.output_hidden_states=True 时返回) — torch.FloatTensor 的元组 (每个嵌入输出一个,加上每个阶段的输出一个),形状为 (batch_size, sequence_length, hidden_size)

    模型在每一层输出以及初始嵌入输出的隐藏状态。

  • attentions (tuple(torch.FloatTensor), optional, 当传递 output_attentions=True 或当 config.output_attentions=True 时返回) — torch.FloatTensor 的元组 (每个阶段一个),形状为 (batch_size, num_heads, sequence_length, sequence_length)

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

  • reshaped_hidden_states (tuple(torch.FloatTensor), optional, 当传递 output_hidden_states=True 或当 config.output_hidden_states=True 时返回) — torch.FloatTensor 的元组 (每个嵌入输出一个,加上每个阶段的输出一个),形状为 (batch_size, hidden_size, height, width)

    模型在每一层输出以及初始嵌入输出的隐藏状态,并被重塑以包含空间维度。

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

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

示例

>>> from transformers import AutoImageProcessor, Swinv2ForImageClassification
>>> 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/swinv2-tiny-patch4-window8-256")
>>> model = Swinv2ForImageClassification.from_pretrained("microsoft/swinv2-tiny-patch4-window8-256")

>>> 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])
Egyptian cat
< > 在 GitHub 上更新