Transformers 文档

HGNet-V2

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

HGNet-V2

概述

一个 HGNet-V2(High Performance GPU Net,高性能 GPU 网络)图像分类模型。HGNet 架构由 Zhan Chen、Chen Tang、Lu Xiong 在论文 《HGNET: A Hierarchical Feature Guided Network for Occupancy Flow Field Prediction》中提出。

HGNET 论文的摘要如下:

预测多个交通参与者的运动一直是自动驾驶中最具挑战性的任务之一。最近提出的占用流场预测方法已被证明是一种比通用轨迹预测方法更有效、更具扩展性的表示方式。然而,在复杂的多智能体交通场景中,对各种因素之间的相互作用以及不同时间步长预测输出之间的依赖性进行建模仍然很困难。鉴于此,我们提出了一种基于 Transformer 的分层特征引导网络(HGNET),它可以有效地从视觉和矢量化输入中提取智能体和地图信息的特征,并对多模态交互关系进行建模。其次,我们设计了特征引导注意力(FGAT)模块,以利用不同预测目标之间的潜在引导作用,从而提高预测准确性。此外,为了增强预测的时间一致性和因果关系,我们提出了一种时间序列记忆框架,用于从多元时间序列中学习未来时间步长预测输出的条件分布模型。结果表明,我们的模型表现出具有竞争力的性能,在 2024 年 Waymo 占用和流场预测挑战赛中排名第三。

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

HGNetV2Config

class transformers.HGNetV2Config

< >

( num_channels = 3 embedding_size = 64 depths = [3, 4, 6, 3] hidden_sizes = [256, 512, 1024, 2048] hidden_act = 'relu' out_features = None out_indices = None stem_channels = [3, 32, 48] stage_in_channels = [48, 128, 512, 1024] stage_mid_channels = [48, 96, 192, 384] stage_out_channels = [128, 512, 1024, 2048] stage_num_blocks = [1, 1, 3, 1] stage_downsample = [False, True, True, True] stage_light_block = [False, False, True, True] stage_kernel_size = [3, 3, 5, 5] stage_numb_of_layers = [6, 6, 6, 6] use_learnable_affine_block = False initializer_range = 0.02 **kwargs )

参数

  • num_channels (int,可选,默认为 3) — 输入通道数。
  • embedding_size (int,可选,默认为 64) — 嵌入层的维度(隐藏层大小)。
  • depths (list[int],可选,默认为 [3, 4, 6, 3]) — 每个阶段的深度(层数)。
  • hidden_sizes (list[int],可选,默认为 [256, 512, 1024, 2048]) — 每个阶段的维度(隐藏层大小)。
  • hidden_act (str,可选,默认为 "relu") — 每个块中的非线性激活函数。如果为字符串,支持 "gelu""relu""selu""gelu_new"
  • out_features (list[str],可选) — 当用作主干网络时,要输出的特征列表。可以是 "stem""stage1""stage2" 等中的任意值(取决于模型有多少个阶段)。如果未设置且 out_indices 已设置,则将默认为相应的阶段。如果未设置且 out_indices 也未设置,则将默认为最后一个阶段。必须与 stage_names 属性中定义的顺序相同。
  • out_indices (list[int],可选) — 当用作主干网络时,要输出的特征的索引列表。可以是 0, 1, 2 等中的任意值(取决于模型有多少个阶段)。如果未设置且 out_features 已设置,则将默认为相应的阶段。如果未设置且 out_features 也未设置,则将默认为最后一个阶段。必须与 stage_names 属性中定义的顺序相同。
  • stem_channels (list[int],可选,默认为 [3, 32, 48]) — 主干层的通道维度:
    • 第一个数字 (3) 是输入图像通道
    • 第二个数字 (32) 是中间主干通道
    • 第三个数字 (48) 是输出主干通道
  • stage_in_channels (list[int],可选,默认为 [48, 128, 512, 1024]) — 主干网络每个阶段的输入通道维度。这定义了每个阶段的输入将有多少个通道。
  • stage_mid_channels (list[int],可选,默认为 [48, 96, 192, 384]) — 主干网络每个阶段的中间通道维度。这定义了每个阶段中间层使用的通道数。
  • stage_out_channels (list[int],可选,默认为 [128, 512, 1024, 2048]) — 主干网络每个阶段的输出通道维度。这定义了每个阶段的输出将有多少个通道。
  • stage_num_blocks (list[int],可选,默认为 [1, 1, 3, 1]) — 主干网络每个阶段要使用的块数。这通过指定要堆叠多少个卷积块来控制每个阶段的深度。
  • stage_downsample (list[bool],可选,默认为 [False, True, True, True]) — 指示是否在每个阶段对特征图进行下采样。如果为 True,特征图的空间维度将被减小。
  • stage_light_block (list[bool],可选,默认为 [False, False, True, True]) — 指示是否在每个阶段使用轻量级块。轻量级块是卷积块的一种变体,可能具有较少的参数。
  • stage_kernel_size (list[int],可选,默认为 [3, 3, 5, 5]) — 每个阶段卷积层的核大小。
  • stage_numb_of_layers (list[int],可选,默认为 [6, 6, 6, 6]) — 每个阶段的块中要使用的层数。
  • use_learnable_affine_block (bool,可选,默认为 False) — 是否在网络中使用可学习仿射块(Learnable Affine Blocks, LAB)。LAB 在某些操作后添加可学习的缩放和偏置参数。
  • initializer_range (float,可选,默认为 0.02) — 用于初始化所有权重矩阵的 truncated_normal_initializer 的标准差。

这是用于存储 HGNetV2Backbone 配置的配置类。它用于根据指定的参数实例化一个 HGNet-V2 模型,并定义模型架构。使用默认值实例化配置将产生与 D-FINE-X-COCO B4 “ustc-community/dfine_x_coco” 相似的配置。配置对象继承自 PretrainedConfig,可用于控制模型输出。有关更多信息,请阅读 PretrainedConfig 的文档。

HGNetV2Backbone

class transformers.HGNetV2Backbone

< >

( config: HGNetV2Config )

forward

< >

( pixel_values: Tensor output_hidden_states: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None ) transformers.modeling_outputs.BackboneOutputtuple(torch.FloatTensor)

参数

  • pixel_values (torch.Tensor,形状为 (batch_size, num_channels, image_size, image_size)) — 对应于输入图像的张量。像素值可以使用 {image_processor_class} 获取。有关详细信息,请参阅 {image_processor_class}.__call__{processor_class} 使用 {image_processor_class} 处理图像)。
  • output_hidden_states (bool, 可选) — 是否返回所有层的隐藏状态。有关更多详细信息,请参阅返回张量下的 hidden_states
  • return_dict (bool, 可选) — 是否返回 ModelOutput 而不是普通元组。

返回

transformers.modeling_outputs.BackboneOutputtuple(torch.FloatTensor)

一个 transformers.modeling_outputs.BackboneOutput 或一个 torch.FloatTensor 的元组(如果传递了 return_dict=False 或当 config.return_dict=False 时),包含各种元素,具体取决于配置(HGNetV2Config)和输入。

  • feature_maps (tuple(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)(batch_size, num_channels, height, width),具体取决于主干网络。

    模型在每个阶段输出的隐藏状态,以及初始的嵌入输出。

  • attentions (tuple(torch.FloatTensor), 可选, 当传递 output_attentions=True 或当 config.output_attentions=True 时返回) — torch.FloatTensor 的元组(每层一个),形状为 (batch_size, num_heads, sequence_length, sequence_length)。仅当主干网络使用注意力机制时适用。

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

HGNetV2Backbone 的 forward 方法,重写了 __call__ 特殊方法。

尽管前向传播的逻辑需要在此函数内定义,但之后应调用 Module 实例而不是这个函数,因为前者会处理运行前处理和后处理步骤,而后者会静默地忽略它们。

示例

>>> from transformers import RTDetrResNetConfig, RTDetrResNetBackbone
>>> import torch

>>> config = RTDetrResNetConfig()
>>> model = RTDetrResNetBackbone(config)

>>> pixel_values = torch.randn(1, 3, 224, 224)

>>> with torch.no_grad():
...     outputs = model(pixel_values)

>>> feature_maps = outputs.feature_maps
>>> list(feature_maps[-1].shape)
[1, 2048, 7, 7]

HGNetV2ForImageClassification

class transformers.HGNetV2ForImageClassification

< >

( config: HGNetV2Config )

参数

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

HGNetV2 模型,其顶部带有一个图像分类头(在池化特征之上添加一个线性层),例如用于 ImageNet。

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

该模型也是一个 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.modeling_outputs.ImageClassifierOutputWithNoAttentiontuple(torch.FloatTensor)

参数

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

返回

transformers.modeling_outputs.ImageClassifierOutputWithNoAttentiontuple(torch.FloatTensor)

一个 transformers.modeling_outputs.ImageClassifierOutputWithNoAttention 或一个 torch.FloatTensor 的元组(如果传递了 return_dict=False 或当 config.return_dict=False 时),包含各种元素,具体取决于配置(HGNetV2Config)和输入。

  • loss (形状为 (1,)torch.FloatTensor可选,当提供 labels 时返回) — 分类损失(如果 config.num_labels==1,则为回归损失)。
  • logits (形状为 (batch_size, config.num_labels)torch.FloatTensor) — 分类(如果 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)。模型在每个阶段输出的隐藏状态(也称为特征图)。

HGNetV2ForImageClassification 的 forward 方法,重写了 __call__ 特殊方法。

尽管前向传播的逻辑需要在此函数内定义,但之后应调用 Module 实例而不是这个函数,因为前者会处理运行前处理和后处理步骤,而后者会静默地忽略它们。

示例

>>> import torch
>>> import requests
>>> from transformers import HGNetV2ForImageClassification, AutoImageProcessor
>>> from PIL import Image

>>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
>>> image = Image.open(requests.get(url, stream=True).raw)

>>> model = HGNetV2ForImageClassification.from_pretrained("ustc-community/hgnet-v2")
>>> processor = AutoImageProcessor.from_pretrained("ustc-community/hgnet-v2")

>>> inputs = processor(images=image, return_tensors="pt")
>>> with torch.no_grad():
...     outputs = model(**inputs)
>>> outputs.logits.shape
torch.Size([1, 2])
< > 在 GitHub 上更新