Transformers 文档

FocalNet

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

FocalNet

PyTorch

概述

FocalNet 模型在 Focal Modulation Networks 中被提出,作者是 Jianwei Yang, Chunyuan Li, Xiyang Dai, Lu Yuan, Jianfeng Gao。FocalNet 完全用焦点调制机制取代了自注意力(在诸如 ViTSwin 等模型中使用),以建模视觉中的 token 交互。作者声称,在图像分类、对象检测和分割任务中,FocalNet 的性能优于基于自注意力的模型,且计算成本相近。

论文摘要如下:

我们提出了焦点调制网络(简称 FocalNets),其中自注意力(SA)被完全替换为焦点调制机制,用于建模视觉中的 token 交互。焦点调制包括三个组成部分:(i)分层上下文关联,通过堆叠深度卷积层实现,以编码从短程到远程的视觉上下文;(ii)门控聚合,根据每个查询 token 的内容选择性地收集上下文;以及(iii)逐元素调制或仿射变换,将聚合的上下文注入到查询中。广泛的实验表明,在图像分类、对象检测和分割任务中,FocalNet 的性能优于最先进的 SA 对等模型(例如,Swin 和 Focal Transformers),且计算成本相近。具体而言,微型和基础尺寸的 FocalNet 在 ImageNet-1K 上分别实现了 82.3% 和 83.9% 的 top-1 准确率。在 ImageNet-22K 上以 224 分辨率进行预训练后,当以 224 和 384 分辨率进行微调时,分别达到 86.5% 和 87.3% 的 top-1 准确率。当转移到下游任务时,FocalNet 表现出明显的优越性。对于使用 Mask R-CNN 进行对象检测,使用 1 倍训练的 FocalNet 基础模型比 Swin 对等模型高出 2.1 个百分点,并且已经超过了使用 3 倍训练计划的 Swin 模型(49.0 对 48.5)。对于使用 UPerNet 进行语义分割,单尺度 FocalNet 基础模型比 Swin 高出 2.4 个百分点,并且在多尺度上击败了 Swin 模型(50.5 对 49.7)。使用大型 FocalNet 和 Mask2former,我们在 ADE20K 语义分割中实现了 58.5 mIoU,在 COCO 全景分割中实现了 57.9 PQ。使用巨型 FocalNet 和 DINO,我们在 COCO minival 和 test-dev 上分别实现了 64.3 和 64.4 mAP,在比 Swinv2-G 和 BEIT-3 等更大的基于注意力的模型之上建立了新的 SoTA。

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

FocalNetConfig

class transformers.FocalNetConfig

< >

( image_size = 224 patch_size = 4 num_channels = 3 embed_dim = 96 use_conv_embed = False hidden_sizes = [192, 384, 768, 768] depths = [2, 2, 6, 2] focal_levels = [2, 2, 2, 2] focal_windows = [3, 3, 3, 3] hidden_act = 'gelu' mlp_ratio = 4.0 hidden_dropout_prob = 0.0 drop_path_rate = 0.1 use_layerscale = False layerscale_value = 0.0001 use_post_layernorm = False use_post_layernorm_in_modulation = False normalize_modulator = 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) — 嵌入层中每个补丁的大小(分辨率)。
  • num_channels (int, 可选的,默认为 3) — 输入通道的数量。
  • embed_dim (int, 可选的,默认为 96) — 补丁嵌入的维度。
  • use_conv_embed (bool, optional, defaults to False) — 是否使用卷积嵌入 (convolutional embedding)。 作者指出使用卷积嵌入通常可以提高性能,但默认情况下不使用。
  • hidden_sizes (List[int], optional, defaults to [192, 384, 768, 768]) — 每个阶段的维度(隐藏层大小)。
  • depths (list(int), optional, defaults to [2, 2, 6, 2]) — 编码器中每个阶段的深度(层数)。
  • focal_levels (list(int), optional, defaults to [2, 2, 2, 2]) — 编码器中各个阶段的每层中的焦点层级数。
  • focal_windows (list(int), optional, defaults to [3, 3, 3, 3]) — 编码器中各个阶段的每层中的焦点窗口大小。
  • hidden_act (str or function, optional, defaults to "gelu") — 编码器中的非线性激活函数(函数或字符串)。如果为字符串,则支持 "gelu""relu""selu""gelu_new"
  • mlp_ratio (float, optional, defaults to 4.0) — MLP 隐藏层维度与嵌入层维度的比率。
  • hidden_dropout_prob (float, optional, defaults to 0.0) — 嵌入层和编码器中所有全连接层的 dropout 概率。
  • drop_path_rate (float, optional, defaults to 0.1) — 随机深度比率。
  • use_layerscale (bool, optional, defaults to False) — 是否在编码器中使用层缩放 (layer scale)。
  • layerscale_value (float, optional, defaults to 0.0001) — 层缩放的初始值。
  • use_post_layernorm (bool, optional, defaults to False) — 是否在编码器中使用后层归一化 (post layer normalization)。
  • use_post_layernorm_in_modulation (bool, optional, defaults to False) — 是否在调制层 (modulation layer) 中使用后层归一化。
  • normalize_modulator (bool, optional, defaults to False) — 是否归一化调制器 (modulator)。
  • initializer_range (float, optional, defaults to 0.02) — 用于初始化所有权重矩阵的 truncated_normal_initializer 的标准差。
  • layer_norm_eps (float, optional, defaults to 1e-05) — 层归一化层使用的 epsilon 值。
  • encoder_stride (int, optional, defaults to 32) — 用于掩码图像建模 (masked image modeling) 的解码器头部中,增加空间分辨率的因子。
  • out_features (List[str], optional) — 如果用作骨干网络,则输出的特征列表。可以是 "stem""stage1""stage2" 等(取决于模型有多少个阶段)。如果未设置且设置了 out_indices,则默认为相应的阶段。如果未设置且 out_indices 也未设置,则默认为最后一个阶段。必须与 stage_names 属性中定义的顺序相同。
  • out_indices (List[int], optional) — 如果用作骨干网络,则输出的特征索引列表。可以是 0、1、2 等(取决于模型有多少个阶段)。如果未设置且设置了 out_features,则默认为相应的阶段。如果未设置且 out_features 也未设置,则默认为最后一个阶段。必须与 stage_names 属性中定义的顺序相同。

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

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

示例

>>> from transformers import FocalNetConfig, FocalNetModel

>>> # Initializing a FocalNet microsoft/focalnet-tiny style configuration
>>> configuration = FocalNetConfig()

>>> # Initializing a model (with random weights) from the microsoft/focalnet-tiny style configuration
>>> model = FocalNetModel(configuration)

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

FocalNetModel

class transformers.FocalNetModel

< >

( config add_pooling_layer = True use_mask_token = False )

参数

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

裸 FocalNet 模型输出原始隐藏状态,顶部没有任何特定的头部。 此模型是 PyTorch torch.nn.Module 子类。 将其用作常规 PyTorch 模块,并参阅 PyTorch 文档以了解与常规用法和行为相关的所有事项。

forward

< >

( pixel_values: typing.Optional[torch.FloatTensor] = None bool_masked_pos: typing.Optional[torch.BoolTensor] = None output_hidden_states: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None ) transformers.models.focalnet.modeling_focalnet.FocalNetModelOutputtuple(torch.FloatTensor)

参数

  • pixel_values (torch.FloatTensor of shape (batch_size, num_channels, height, width)) — 像素值。 像素值可以使用 AutoImageProcessor 获得。 有关详细信息,请参阅 AutoImageProcessor.__call__()
  • output_hidden_states (bool, optional) — 是否返回所有层的隐藏状态。 有关更多详细信息,请参阅返回张量下的 hidden_states
  • return_dict (bool, optional) — 是否返回 ModelOutput 而不是纯粹的元组。
  • bool_masked_pos (torch.BoolTensor,形状为 (batch_size, num_patches)) — 布尔掩码位置。指示哪些patch被掩码(1)以及哪些没有被掩码(0)。

返回:

transformers.models.focalnet.modeling_focalnet.FocalNetModelOutputtuple(torch.FloatTensor)

一个 transformers.models.focalnet.modeling_focalnet.FocalNetModelOutput 或一个 torch.FloatTensor 元组(如果传递 return_dict=False 或当 config.return_dict=False 时),包含各种元素,具体取决于配置 (FocalNetConfig) 和输入。

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

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

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

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

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

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

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

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

示例

>>> from transformers import AutoImageProcessor, FocalNetModel
>>> 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/focalnet-tiny")
>>> model = FocalNetModel.from_pretrained("microsoft/focalnet-tiny")

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

FocalNetForMaskedImageModeling

class transformers.FocalNetForMaskedImageModeling

< >

( config )

参数

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

带有用于掩码图像建模的解码器的 FocalNet 模型。

这遵循 SimMIM 中的相同实现。

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

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

forward

< >

( pixel_values: typing.Optional[torch.FloatTensor] = None bool_masked_pos: typing.Optional[torch.BoolTensor] = None output_hidden_states: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None ) transformers.models.focalnet.modeling_focalnet.FocalNetMaskedImageModelingOutputtuple(torch.FloatTensor)

参数

  • pixel_values (torch.FloatTensor,形状为 (batch_size, num_channels, height, width)) — 像素值。像素值可以使用 AutoImageProcessor 获得。有关详细信息,请参阅 AutoImageProcessor.__call__()
  • output_hidden_states (bool, optional) — 是否返回所有层的隐藏状态。有关更多详细信息,请参阅返回张量下的 hidden_states
  • return_dict (bool, optional) — 是否返回 ModelOutput 而不是纯粹的元组。
  • bool_masked_pos (torch.BoolTensor,形状为 (batch_size, num_patches)) — 布尔掩码位置。指示哪些patch被掩码(1)以及哪些没有被掩码(0)。

返回:

transformers.models.focalnet.modeling_focalnet.FocalNetMaskedImageModelingOutputtuple(torch.FloatTensor)

一个 transformers.models.focalnet.modeling_focalnet.FocalNetMaskedImageModelingOutput 或一个 torch.FloatTensor 元组(如果传递 return_dict=False 或当 config.return_dict=False 时),包含各种元素,具体取决于配置 (FocalNetConfig) 和输入。

  • loss (torch.FloatTensor,形状为 (1,)可选,当提供 bool_masked_pos 时返回) — 掩码图像建模 (MLM) 损失。

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

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

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

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

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

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

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

示例

>>> from transformers import AutoImageProcessor, FocalNetConfig, FocalNetForMaskedImageModeling
>>> 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/focalnet-base-simmim-window6-192")
>>> config = FocalNetConfig()
>>> model = FocalNetForMaskedImageModeling(config)

>>> 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.logits
>>> list(reconstructed_pixel_values.shape)
[1, 3, 192, 192]

FocalNetForImageClassification

class transformers.FocalNetForImageClassification

< >

( config )

参数

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

带有图像分类头(池化输出顶部的线性层)的 FocalNet 模型,例如用于 ImageNet。

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

forward

< >

( pixel_values: typing.Optional[torch.FloatTensor] = None labels: typing.Optional[torch.LongTensor] = None output_hidden_states: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None ) transformers.models.focalnet.modeling_focalnet.FocalNetImageClassifierOutputtuple(torch.FloatTensor)

参数

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

返回:

transformers.models.focalnet.modeling_focalnet.FocalNetImageClassifierOutputtuple(torch.FloatTensor)

一个 transformers.models.focalnet.modeling_focalnet.FocalNetImageClassifierOutput 或一个 torch.FloatTensor 元组(如果传递 return_dict=False 或当 config.return_dict=False 时),包含各种元素,具体取决于配置 (FocalNetConfig) 和输入。

  • 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)可选,当传递 output_hidden_states=True 或当 config.output_hidden_states=True 时返回) — torch.FloatTensor 元组(每个嵌入输出一个 + 每个阶段的输出一个),形状为 (batch_size, sequence_length, hidden_size)

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

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

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

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

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

示例

>>> from transformers import AutoImageProcessor, FocalNetForImageClassification
>>> 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/focalnet-tiny")
>>> model = FocalNetForImageClassification.from_pretrained("microsoft/focalnet-tiny")

>>> 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
< > 在 GitHub 上更新