Transformers 文档

Hiera

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

Hiera

PyTorch

概览

Hiera 在 Hiera: A Hierarchical Vision Transformer without the Bells-and-Whistles 中被提出,作者是 Chaitanya Ryali, Yuan-Ting Hu, Daniel Bolya, Chen Wei, Haoqi Fan, Po-Yao Huang, Vaibhav Aggarwal, Arkabandhu Chowdhury, Omid Poursaeed, Judy Hoffman, Jitendra Malik, Yanghao Li, Christoph Feichtenhofer

该论文介绍了 “Hiera”,一个分层视觉 Transformer,通过移除不必要的组件简化了现代分层视觉 Transformer 的架构,同时不影响准确性或效率。与传统的 Transformer 不同,后者添加复杂的特定于视觉的组件以提高监督分类性能,Hiera 证明,这种添加(通常被称为“bells-and-whistles”)对于高精度来说不是必需的。通过利用强大的视觉预训练任务 (MAE) 进行预训练,Hiera 保留了简洁性,并在各种图像和视频识别任务中实现了卓越的准确性和速度,无论是在推理还是训练中。该方法表明,视觉任务所需的空间偏差可以通过适当的预训练有效地学习,从而消除了增加架构复杂性的需要。

该论文的摘要如下

现代分层视觉 Transformer 为了追求监督分类性能,添加了几个特定于视觉的组件。虽然这些组件带来了有效的准确性和有吸引力的 FLOP 计数,但增加的复杂性实际上使得这些 Transformer 比其原始 ViT 对应物更慢。在本文中,我们认为这种额外的累赘是不必要的。通过使用强大的视觉预训练任务 (MAE) 进行预训练,我们可以从最先进的多阶段视觉 Transformer 中剥离所有 “bells-and-whistles”,而不会损失准确性。在此过程中,我们创建了 Hiera,一个极其简单的分层视觉 Transformer,它比以前的模型更准确,同时在推理和训练期间都显着更快。我们在各种图像和视频识别任务上评估了 Hiera。我们的代码和模型可在 https://github.com/facebookresearch/hiera 获取。

绘图 Hiera 架构。取自原始论文。

此模型是由 EduardoPacheconamangarg110 共同贡献的。 原始代码可以在[这里] (https://github.com/facebookresearch/hiera) 找到。

资源

官方 Hugging Face 和社区 (用 🌎 表示) 资源列表,可帮助您开始使用 Hiera。如果您有兴趣提交资源并将其包含在此处,请随时打开 Pull Request,我们将对其进行审核!该资源最好展示一些新的东西,而不是重复现有资源。

图像分类

HieraConfig

class transformers.HieraConfig

< >

( embed_dim = 96 image_size = [224, 224] patch_size = [7, 7] patch_stride = [4, 4] patch_padding = [3, 3] mlp_ratio = 4.0 depths = [2, 3, 16, 3] num_heads = [1, 2, 4, 8] embed_dim_multiplier = 2.0 num_query_pool = 3 query_stride = [2, 2] masked_unit_size = [8, 8] masked_unit_attention = [True, True, False, False] drop_path_rate = 0.0 num_channels = 3 hidden_act = 'gelu' initializer_range = 0.02 layer_norm_init = 1.0 layer_norm_eps = 1e-06 decoder_hidden_size = None decoder_depth = None decoder_num_heads = None normalize_pixel_loss = True mask_ratio = 0.6 out_features = None out_indices = None **kwargs )

参数

  • embed_dim (int, 可选,默认为 96) — patch 嵌入的维度。
  • image_size (list(int), 可选,默认为 [224, 224]) — 输入的大小(分辨率),格式为图像的 (height, width) 和视频的 (frames, height, width)。
  • patch_size (list(int), 可选,默认为 [7, 7]) — 每个 patch 的大小(分辨率)。
  • patch_stride (list(int), 可选,默认为 [4, 4]) — patch 的步幅。
  • patch_padding (list(int), 可选, 默认为 [3, 3]) — patch 的 padding。
  • mlp_ratio (float, 可选, 默认为 4.0) — mlp 隐藏层维度与 embedding 维度的比率。
  • depths (list(int), 可选, 默认为 [2, 3, 16, 3]) — Transformer 编码器中每一层的深度。
  • num_heads (list(int), 可选, 默认为 [1, 2, 4, 8]) — Transformer 编码器每一层中的 attention head 数量。
  • embed_dim_multiplier (float, 可选, 默认为 2.0) — Transformer 编码器每一层中 patch embedding 维度的乘数。
  • num_query_pool (int, 可选, 默认为 3) — query pool 阶段的数量。
  • query_stride (list(int), 可选, 默认为 [2, 2]) — query pool 的 stride。
  • masked_unit_size (list(int), 可选, 默认为 [8, 8]) — masked unit 的大小。
  • masked_unit_attention (list(bool), 可选, 默认为 [True, True, False, False]) — 是否在 Transformer 编码器的每一层中使用 masked unit attention。
  • drop_path_rate (float, 可选, 默认为 0.0) — drop path 比率。
  • num_channels (int, 可选, 默认为 3) — 输入通道数。
  • hidden_act (str, 可选, 默认为 "gelu") — 编码器中的非线性激活函数(函数或字符串)。如果为字符串,则支持 "gelu", "relu", "selu""gelu_new"
  • initializer_range (float, 可选, 默认为 0.02) — 用于初始化所有权重矩阵的 truncated_normal_initializer 的标准差,以及用于初始化所有偏置向量的 zero_initializer。
  • layer_norm_init (float, 可选, 默认为 1.0) — layer normalization 层的初始权重值。
  • layer_norm_eps (float, 可选, 默认为 1e-06) — layer normalization 层使用的 epsilon 值。
  • decoder_hidden_size (int, 可选) — 用于 MAE 预训练的 decoder embedding 的维度。
  • decoder_depth (int, 可选) — 用于 MAE 预训练的 decoder 深度。
  • decoder_num_heads (int, 可选) — 用于 MAE 预训练的 decoder 每一层中的 attention head 数量。
  • normalize_pixel_loss (bool, 可选, 默认为 True) — 是否通过像素数量来标准化像素损失。
  • mask_ratio (float, 可选, 默认为 0.6) — 输入中被 mask 的 token 的比率。
  • out_features (List[str], 可选) — 如果用作 backbone,则输出的特征列表。可以是 "stem", "stage1", "stage2" 等(取决于模型有多少个 stage)。如果未设置且 out_indices 已设置,则默认为对应的 stage。如果未设置且 out_indices 也未设置,则默认为最后一个 stage。必须与 stage_names 属性中定义的顺序相同。
  • out_indices (List[int], 可选) — 如果用作 backbone,则输出的特征索引列表。可以是 0, 1, 2 等(取决于模型有多少个 stage)。如果未设置且 out_features 已设置,则默认为对应的 stage。如果未设置且 out_features 也未设置,则默认为最后一个 stage。必须与 stage_names 属性中定义的顺序相同。

这是用于存储 HieraModel 配置的配置类。它用于根据指定的参数实例化 Hiera 模型,定义模型架构。使用默认值实例化配置将产生与 Hiera facebook/hiera-base-224 架构类似的配置。

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

示例

>>> from transformers import HieraConfig, HieraModel

>>> # Initializing a Hiera hiera-base-patch16-224 style configuration
>>> configuration = HieraConfig()

>>> # Initializing a model (with random weights) from the hiera-base-patch16-224 style configuration
>>> model = HieraModel(configuration)

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

HieraModel

class transformers.HieraModel

< >

( config: HieraConfig add_pooling_layer: bool = True is_mae: bool = False )

参数

  • config (HieraConfig) — 带有模型所有参数的模型配置类。使用配置文件初始化不会加载与模型关联的权重,仅加载配置。查看 from_pretrained() 方法以加载模型权重。
  • add_pooling_layer (bool, 可选, 默认为 True) — 是否应用 pooling 层。
  • is_mae (bool, optional, defaults to False) — 是否在 MAE 模式下运行模型。

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

forward

< >

( pixel_values: typing.Optional[torch.Tensor] = None noise: typing.Optional[torch.FloatTensor] = None head_mask: typing.Optional[torch.Tensor] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None interpolate_pos_encoding: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None ) transformers.models.hiera.modeling_hiera.HieraModelOutputtuple(torch.FloatTensor)

参数

  • pixel_values (torch.FloatTensor,形状为 (batch_size, num_channels, height, width)) — 像素值。像素值可以使用 AutoImageProcessor 获得。有关详细信息,请参阅 BitImageProcessor.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
  • interpolate_pos_encoding (bool, 可选) — 是否插值预训练的位置编码。
  • return_dict (bool, 可选) — 是否返回 ModelOutput 而不是普通元组。
  • noise (torch.FloatTensor,形状为 (batch_size, num_mask_units), 可选) — 主要用于测试目的,以控制随机性并在 is_mae 设置为 True 时保持可重复性。

返回值

transformers.models.hiera.modeling_hiera.HieraModelOutputtuple(torch.FloatTensor)

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

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

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

  • bool_masked_pos (torch.BoolTensor,形状为 (batch_size, sequence_length)) — 指示哪些补丁被掩蔽 (0) 以及哪些未被掩蔽 (1) 的张量。

  • ids_restore (torch.LongTensor,形状为 (batch_size, sequence_length)) — 包含(洗牌后的)掩蔽补丁的原始索引的张量。

  • hidden_states (tuple(torch.FloatTensor), 可选,当传递 output_hidden_states=True 或当 config.output_hidden_states=True 时返回) — torch.FloatTensor 元组(每个嵌入输出一个,每个阶段的输出一个),形状为 (batch_size, sequence_length, hidden_size)。 这些是模型的展开隐藏状态。

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

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

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

  • reshaped_hidden_states (tuple(torch.FloatTensor), 可选,当传递 output_hidden_states=True 或当 config.output_hidden_states=True 时返回) — torch.FloatTensor 元组(每个嵌入输出一个,每个阶段的输出一个),形状为 (batch_size, height, width, hidden_size)。 这些是模型的重塑和重新展开的隐藏状态。

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

HieraModel forward 方法,覆盖了 __call__ 特殊方法。

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

示例

>>> from transformers import AutoImageProcessor, HieraModel
>>> 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("facebook/hiera-tiny-224-hf")
>>> model = HieraModel.from_pretrained("facebook/hiera-tiny-224-hf")

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

HieraForPreTraining

class transformers.HieraForPreTraining

< >

( config: HieraConfig )

参数

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

带有用于自监督预训练的解码器顶部的 Hiera 模型 Transformer。

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

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

forward

< >

( pixel_values: typing.Optional[torch.Tensor] = None noise: typing.Optional[torch.FloatTensor] = None head_mask: typing.Optional[torch.Tensor] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None interpolate_pos_encoding: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None ) transformers.models.hiera.modeling_hiera.HieraForPreTrainingOutputtuple(torch.FloatTensor)

参数

  • pixel_values (torch.FloatTensor,形状为 (batch_size, num_channels, height, width)) — 像素值。像素值可以使用 AutoImageProcessor 获得。有关详细信息,请参阅 BitImageProcessor.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
  • interpolate_pos_encoding (bool, 可选) — 是否插值预训练的位置编码。
  • return_dict (bool, 可选) — 是否返回 ModelOutput 而不是普通元组。
  • noise (torch.FloatTensor,形状为 (batch_size, num_mask_units), 可选) — 主要用于测试目的,以控制随机性并在 is_mae 设置为 True 时保持可重复性。

返回值

transformers.models.hiera.modeling_hiera.HieraForPreTrainingOutputtuple(torch.FloatTensor)

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

  • loss (torch.FloatTensor,形状为 (1,)) — 像素重建损失。
  • logits (torch.FloatTensor,形状为 (batch_size, sequence_length, patch_size ** 2 * num_channels)) — 像素重建 logits。
  • bool_masked_pos (torch.BoolTensor,形状为 (batch_size, sequence_length)) — 指示哪些补丁被掩蔽 (0) 以及哪些未被掩蔽 (1) 的张量。
  • ids_restore (torch.LongTensor,形状为 (batch_size, sequence_length)) — 包含(洗牌后的)掩蔽补丁的原始索引的张量。
  • hidden_states (tuple(torch.FloatTensor), 可选, 当传递了 output_hidden_states=True 或当 config.output_hidden_states=True 时返回) — torch.FloatTensor 的元组 (每个层的输出以及初始嵌入输出各一个),形状为 (batch_size, sequence_length, hidden_size)。模型在每一层输出的隐藏状态,加上初始嵌入输出。
  • attentions (tuple(torch.FloatTensor), 可选, 当传递了 output_attentions=True 或当 config.output_attentions=True 时返回) — torch.FloatTensor 的元组 (每层一个),形状为 (batch_size, num_heads, sequence_length, sequence_length)。注意力 softmax 之后的注意力权重,用于计算自注意力头中的加权平均值。
  • reshaped_hidden_states (tuple(torch.FloatTensor), 可选, 当传递了 output_hidden_states=True 或当 config.output_hidden_states=True 时返回) — torch.FloatTensor 的元组 (每个层的输出以及初始嵌入输出各一个),形状为 (batch_size, height, width, hidden_size)。模型在每一层输出的隐藏状态,加上初始嵌入输出被重塑以包含空间维度。

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

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

示例

>>> from transformers import AutoImageProcessor, HieraForPreTraining
>>> 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("facebook/hiera-tiny-224-mae-hf")
>>> model = HieraForPreTraining.from_pretrained("facebook/hiera-tiny-224-mae-hf")

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

>>> outputs = model(**inputs)
>>> logits = outputs.logits
>>> loss = outputs.loss
>>> print(list(logits.shape))
[1, 196, 768]

HieraForImageClassification

class transformers.HieraForImageClassification

< >

( config: HieraConfig )

参数

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

Hiera 模型 Transformer,顶部带有一个图像分类头(最终隐藏状态顶部的一个线性层,带有平均池化),例如用于 ImageNet。

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

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

forward

< >

( pixel_values head_mask: typing.Optional[torch.Tensor] = None labels: typing.Optional[torch.Tensor] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None interpolate_pos_encoding: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None ) transformers.models.hiera.modeling_hiera.HieraForImageClassificationOutputtuple(torch.FloatTensor)

参数

  • pixel_values (torch.FloatTensor,形状为 (batch_size, num_channels, height, width)) — 像素值。像素值可以使用 AutoImageProcessor 获得。 有关详细信息,请参阅 BitImageProcessor.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
  • interpolate_pos_encoding (bool, 可选) — 是否对预训练的位置编码进行插值。
  • return_dict (bool, 可选) — 是否返回一个 ModelOutput 而不是一个普通元组。
  • labels (torch.LongTensor,形状为 (batch_size,), 可选) — 用于计算图像分类/回归损失的标签。索引应在 [0, ..., config.num_labels - 1] 中。 如果 config.num_labels == 1,则计算回归损失(均方误差损失)。如果 config.num_labels > 1,则计算分类损失(交叉熵损失)。

返回值

transformers.models.hiera.modeling_hiera.HieraForImageClassificationOutputtuple(torch.FloatTensor)

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

  • loss (torch.FloatTensor,形状为 (1,), 可选) — 训练任务的损失值。

  • logits (torch.FloatTensor,形状为 (batch_size, num_labels)) — 分类头的预测得分(输出层的 logits)。

  • hidden_states (tuple(torch.FloatTensor), 可选) — torch.FloatTensor 的元组 (每个嵌入输出以及每个阶段的输出各一个),形状为 (batch_size, sequence_length, hidden_size)。 这些是模型展开的隐藏状态。

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

  • attentions (tuple(torch.FloatTensor), 可选) — torch.FloatTensor 的元组 (每个阶段一个),形状为 (batch_size, num_heads, sequence_length, sequence_length)

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

  • reshaped_hidden_states (tuple(torch.FloatTensor), 可选) — torch.FloatTensor 的元组 (每个嵌入输出以及每个阶段的输出各一个),形状为 (batch_size, height, width, hidden_size)。 这些是模型重塑和重新展开的隐藏状态。

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

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

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

示例

>>> from transformers import AutoImageProcessor, HieraForImageClassification
>>> 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("facebook/hiera-tiny-224-in1k-hf")
>>> model = HieraForImageClassification.from_pretrained("facebook/hiera-tiny-224-in1k-hf")

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