Transformers文档

PoolFormer

Hugging Face's logo
加入Hugging Face社区

并获取增强文档体验

开始使用

PoolFormer

概况

PoolFormer模型由Sea AI Labs在《MetaFormer实际上是你需要的视觉模型》一文中提出,该文章可参考此处。与设计复杂的分词混搭以实现SOTA(最先进)性能不同,这项工作的目标是展示Transformer模型的主要竞争力源于MetaFormer的通用架构。

该论文的摘要如下:

Transformer 在计算机视觉任务中表现出巨大潜力。一个共识是它们基于注意力的标记混合模块对其能力贡献最大。然而,近期的研究表明,Transformer 中的基于注意力的模块可以被空间 MLP 替换,并且结果模型仍能表现出色。基于这个观察,我们推测 Transformer 的通用架构,而不是特定的标记混合模块,对于模型性能更为关键。为了验证这一点,我们故意将 Transformer 中的注意力模块替换为一个明显简单的空间池化操作,仅进行最基础的标记混合。出乎意料的是,我们发现名为 PoolFormer 的由此产生的模型在多个计算机视觉任务上实现了有竞争力的性能。例如,在 ImageNet-1K 上,PoolFormer 达到了 82.1% 的 top-1 准确率,比经过精心调整的视觉 Transformer/MLP 基线 DeiT-B/ResMLP-B24 的 0.3%/1.1% 准确率高,同时参数减少了 35%/52%,MACs 减少了 48%/60%。PoolFormer 的有效性验证了我们的假设,促使我们引入“MetaFormer”的概念,这是一种从 Transformer 中抽象出的通用架构,不特定于标记混合器。基于广泛的实验,我们认为 MetaFormer 是实现最近 Transformer 和 MLP 类模型在视觉任务上取得优秀结果的关键因素。本研究呼吁未来进行更多致力于改进 MetaFormer 而不是专注于标记混合模块的研究。此外,我们提出的 PoolFormer 可以作为未来 MetaFormer 架构设计的起点。

下图展示了 PoolFormer 的架构。图片来自 原始论文

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

使用技巧

  • PoolFormer 采用分层架构,其中存在一个简单的平均池化层而不是注意力机制。模型的全部检查点可以在 此 hub 上找到。
  • 可以使用 PoolFormerImageProcessor 准备模型所需的图像。
  • 与大多数模型一样,PoolFormer 有不同的大小,具体细节可见下表。
模型变体 深度 隐藏层大小 参数(M) ImageNet-1k Top 1
s12 [2, 2, 6, 2] [64, 128, 320, 512] 12 77.2
s24 [4, 4, 12, 4] [64, 128, 320, 512] 21 80.3
s36 [6, 6, 18, 6] [64, 128, 320, 512] 31 81.4
m36 [6, 6, 18, 6] [96, 192, 384, 768] 56 82.1
m48 [8, 8, 24, 8] [96, 192, 384, 768] 73 82.5

资源

一份官方Hugging Face和社区(标有 🌎)资源列表,帮助你开始使用PoolFormer。

图像分类

如果您有兴趣提交在此处包含的资源,请随时提出拉取请求!该资源应 idealisically 展示一些新东西,而不是复制现有的资源。

PoolFormerConfig

transformers.PoolFormerConfig

< >

( num_channels = 3 patch_size = 16 stride = 16 pool_size = 3 mlp_ratio = 4.0 depths = [2, 2, 6, 2] hidden_sizes = [64, 128, 320, 512] patch_sizes = [7, 3, 3, 3] strides = [4, 2, 2, 2] padding = [2, 1, 1, 1] num_encoder_blocks = 4 drop_path_rate = 0.0 hidden_act = 'gelu' use_layer_scale = True layer_scale_init_value = 1e-05 initializer_range = 0.02 **kwargs )

参数:

  • num_channels (int, 可选, 默认为 3) — 输入图像中的通道数。
  • patch_size (int, 可选, 默认为 16) — 输入补丁的大小。
  • stride (int, 可选, 默认为 16) — 输入补丁的步长。
  • pool_size (int, 可选, 默认为 3) — 池化窗口的大小。
  • mlp_ratio (float, 可选, 默认为 4.0) — MLP 输出通道数与输入通道数的比例。
  • depths (列表, 可选, 默认为 [2, 2, 6, 2]) — 每个编码器块的深度。
  • hidden_sizes (列表, 可选, 默认为 [64, 128, 320, 512]) — 每个编码器块的隐藏维度。
  • patch_sizes (列表, 可选, 默认为 [7, 3, 3, 3]) — 每个编码器块的输入补丁大小。
  • strides (列表, 可选, 默认为 [4, 2, 2, 2]) — 每个编码器块的输入补丁步幅。
  • padding(列表,可选,默认为 [2, 1, 1, 1])— 每个编码器块的输入补丁的填充值。
  • num_encoder_blocks(整数,可选,默认为 4)— 编码器块的数目。
  • drop_path_rate(浮点数,可选,默认为 0.0)— 丢弃路径层的dropout率。
  • hidden_act(字符串,可选,默认为 "gelu")— 隐藏层的激活函数。
  • 使用层缩放 (bool, 可选,默认为 True) — 是否使用层缩放。
  • 层缩放初始化值 (float, 可选,默认为 1e-05) — 层缩放的初始值。
  • 初始化范围 (float, 可选,默认为 0.02) — 权重的初始化范围。

这是存储 PoolFormerModel 配置的配置类。它用于根据指定参数实例化 PoolFormer 模型,定义模型架构。使用默认参数的配置实例将产生类似于 PoolFormer sail/poolformer_s12 架构的配置。

配置对象继承自 PretrainedConfig,并可用来控制模型输出。更多详细信息请参阅 PretrainedConfig 文档。

示例

>>> from transformers import PoolFormerConfig, PoolFormerModel

>>> # Initializing a PoolFormer sail/poolformer_s12 style configuration
>>> configuration = PoolFormerConfig()

>>> # Initializing a model (with random weights) from the sail/poolformer_s12 style configuration
>>> model = PoolFormerModel(configuration)

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

PoolFormerFeatureExtractor

transformers.PoolFormerFeatureExtractor

< >

( *args **kwargs )

__call__

< >

( images **kwargs )

预处理一个或一组图像。

PoolFormerImageProcessor

transformers.PoolFormerImageProcessor

< >

( do_resize: bool = True size: Dict = None crop_pct: int = 0.9 resample: Resampling = <Resampling.BICUBIC: 3> do_center_crop: bool = True crop_size: Dict = None rescale_factor: Union = 0.00392156862745098 do_rescale: bool = True do_normalize: bool = True image_mean: Union = None image_std: Union = None **kwargs )

参数:

  • do_resize (bool, 可选, 默认为 True) — 是否将图像的(高度,宽度)维度调整为指定的 size。可以被 preprocess 中的 do_resize 覆盖。
  • size (Dict[str, int] 可选, 默认为 {"shortest_edge" -- 224}):调整大小后的图像大小。可以被 preprocess 中的 size 覆盖。如果 crop_pct 未设置:
  • crop_pct (float, 可选, 默认为 0.9) — 从图像中心裁剪的百分比。可以被 preprocess 中的 crop_pct 覆盖。
  • resample (PILImageResampling, 可选,默认为 Resampling.BICUBIC) — 调整图像大小时使用的重采样过滤器。可以由 preprocess 方法中的 resample 覆盖。
  • do_center_crop (bool, 可选,默认为 True) — 是否进行中心裁剪图像。如果输入尺寸沿任何边缘小于 crop_size,则使用 0 进行填充然后再进行中心裁剪。可以由 preprocess 方法中的 do_center_crop 覆盖。
  • crop_size (Dict[str, int], 可选,默认为 {"height" -- 224, "width": 224}): 应用中心裁剪后的图像尺寸。仅在将 do_center_crop 设置为 True 时生效。可以由 preprocess 方法中的 crop_size 参数覆盖。
  • rescale_factorintfloat,可选,默认为 1/255) — 如果缩放图像时使用该缩放因子。可以通过 preprocess 方法中的 rescale_factor 参数进行覆盖。
  • do_rescalebool,可选,默认为 True) — 是否通过指定的 rescale_factor 缩放图像。可以通过 preprocess 方法中的 do_rescale 参数进行覆盖。
  • do_normalizebool,可选,默认为 True) — 控制是否归一化图像。可以通过 preprocess 方法中的 do_normalize 参数进行覆盖。
  • image_mean (floatList[float], 可选,默认为 IMAGENET_STANDARD_MEAN) — 正则化图像时使用的平均值。这是一个与图像通道数相同的 float 或 float 列表。可以通过 preprocess 方法中的 image_mean 参数进行覆盖。
  • image_std (floatList[float], 可选,默认为 IMAGENET_STANDARD_STD) — 正则化图像时使用的标准差。这是一个与图像通道数相同的 float 或 float 列表。可以通过 preprocess 方法中的 image_std 参数进行覆盖。

构建 PoolFormer 图像处理器。

preprocess

< >

( images: 联合 do_resize: 布尔型 = None size: 字典 = None crop_pct: 整型 = None resample: 重采样 = None do_center_crop: 布尔型 = None crop_size: 字典 = None do_rescale: 布尔型 = None rescale_factor: 浮点型 = None do_normalize: 布尔型 = None image_mean: 联合 = None image_std: 联合 = None return_tensors: 联合 = None data_format: 通道维度 = <ChannelDimension.FIRST: 'channels_first'> input_data_format: 联合 = None )

参数:

  • images (ImageInput) — 需要预处理的图像。期望单个或批量的图像,像素值范围从0到255。如果传入像素值在0到1之间的图像,设置do_rescale=False
  • do_resize (bool, 可选, 默认 self.do_resize) — 是否缩放图像。
  • size (Dict[str, int], 可选, 默认 self.size) — 应用缩放后图像的大小。
  • crop_pct (float, 可选, 默认 self.crop_pct) — 要裁剪的图像百分比。只有当 do_resize 设置为 True 时才有效。
  • resample (int, 可选,默认为 self.resample) — 如果调整图像大小时使用的重采样滤波器。这可以是枚举 PILImageResampling 的一个值,只有当 do_resize 设置为 True 时才有效。
  • do_center_crop (bool, 可选,默认为 self.do_center_crop) — 是否中心裁剪图像。
  • crop_size (Dict[str, int], 可选,默认为 self.crop_size) — 应用中心裁剪后的图像大小。
  • do_rescale (bool, 可选,默认为 self.do_rescale) — 是否将图像值缩放到 [0 - 1] 范围内。
  • rescale_factor(浮点数,可选,默认为 self.rescale_factor)— 如果设置为 True,则通过调整图像的 rescale_factor 进行缩放的缩放因子。
  • do_normalize(布尔值,可选,默认为 self.do_normalize)— 是否对图像进行归一化。
  • image_mean(浮点数或浮点数列表,可选,默认为 self.image_mean)— 图像均值。
  • image_stdfloatList[float]可选,默认为 self.image_std)- 图像标准差。
  • return_tensorsstrTensorType可选)- 返回张量的类型。可以是以下之一:
    • 未设置:返回一个包含 np.ndarray 的列表。
    • TensorType.TENSORFLOW'tf':返回一个类型为 tf.Tensor 的批次。
    • TensorType.PYTORCH'pt':返回一个类型为 torch.Tensor 的批次。
    • TensorType.NUMPY'np':返回一个类型为 np.ndarray 的批次。
    • TensorType.JAX'jax':返回一个类型为 jax.numpy.ndarray 的批次。
  • data_formatChannelDimensionstr可选,默认为 ChannelDimension.FIRST)- 输出图像的通道维度格式。可以是以下之一:
    • ChannelDimension.FIRST:图像格式为 (num_channels, height, width)。
    • ChannelDimension.LAST:图像格式为 (height, width, num_channels)。
  • input_data_format (ChannelDimensionstr,可选) — 输入图像的通道维度格式。如果未设置,则从输入图像推断通道维度格式。可以是以下之一:
    • "channels_first"ChannelDimension.FIRST:图像格式为 (num_channels, height, width)。
    • "channels_last"ChannelDimension.LAST:图像格式为 (height, width, num_channels)。
    • "none"ChannelDimension.NONE:图像格式为 (height, width)。

预处理图像或图像批。

PoolFormerModel

transformers.PoolFormerModel

< >

( 配置 )

参数:

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

不带任何特定头部输出的原始隐藏状态的 PoolFormer 模型。这是一个 PyTorch torch.nn.Module 子类。将其作为常规 PyTorch 模块使用,并查阅 PyTorch 文档获取所有关于通用使用和行为的内容。

forward

< >

( pixel_values: Optional = None output_hidden_states: Optional = None return_dict: Optional = None ) transformers.modeling_outputs.BaseModelOutputWithNoAttentiontuple(torch.FloatTensor)

参数:

返回

transformers.modeling_outputs.BaseModelOutputWithNoAttentiontuple(torch.FloatTensor)

示例

>>> from transformers import AutoImageProcessor, PoolFormerModel
>>> 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("sail/poolformer_s12")
>>> model = PoolFormerModel.from_pretrained("sail/poolformer_s12")

>>> 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, 512, 7, 7]

( 配置 )

参数:

PoolFormer 模型,顶部带有图像分类头

此模型是 PyTorch torch.nn.Module 子类。如常规 PyTorch 模块使用,并参考 PyTorch 文档以了解所有相关问题。

forward

( pixel_values: 可选 = None labels: 可选 = 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 获取像素值。有关详细信息,请参阅 PoolFormerImageProcessor.call()
  • labels (torch.LongTensor,形状为 (batch_size,)可选) — 用于计算图像分类/回归损失的标签。索引应为 [0, ..., config.num_labels - 1]。如果 config.num_labels == 1,则计算回归损失(均方损失);如果 config.num_labels > 1,则计算分类损失(交叉熵)。

返回

transformers.modeling_outputs.ImageClassifierOutputWithNoAttentiontuple(torch.FloatTensor)

A transformers.modeling_outputs.ImageClassifierOutputWithNoAttention 或一个由 torch.FloatTensor 组成的元组(如果传递了 return_dict=False 或当 config.return_dict=False 时),根据配置(PoolFormerConfig)和输入包含各种元素。

  • loss (形状为 (1,)torch.FloatTensor,可选,当提供 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, num_channels, height, width)。每个阶段的模型输出隐藏状态(也称为特征图)。

PoolFormerForImageClassification 前向方法,覆盖了 __call__ 特殊方法。

示例

>>> from transformers import AutoImageProcessor, PoolFormerForImageClassification
>>> 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("sail/poolformer_s12")
>>> model = PoolFormerForImageClassification.from_pretrained("sail/poolformer_s12")

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