Transformers 文档
HGNet-V2
并获得增强的文档体验
开始使用
该模型于 2024-07-01 发布,并于 2025-04-29 添加到 Hugging Face Transformers。
HGNet-V2
HGNetV2 是一款下一代卷积神经网络(CNN)骨干网络,专为 NVIDIA GPU 上的最佳精度-延迟权衡而设计。在原有HGNet的基础上,HGNetV2 在快速推理速度下实现了高精度,并在图像分类、目标检测和分割等任务上表现强劲,使其成为基于 GPU 的计算机视觉应用的实用选择。
您可以在 USTC 组织下找到所有原始 HGNet V2 模型。
此模型由 VladOS95-cyber 贡献。点击右侧边栏的 HGNet V2 模型,了解更多关于如何将 HGNet V2 应用于不同计算机视觉任务的示例。
下面的示例演示了如何使用 Pipeline 或 AutoModel 类来对图像进行分类。
import torch
from transformers import pipeline
pipeline = pipeline(
task="image-classification",
model="ustc-community/hgnet-v2",
dtype=torch.float16,
device=0
)
pipeline("http://images.cocodataset.org/val2017/000000039769.jpg")HGNetV2Config
class transformers.HGNetV2Config
< source >( 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, optional, defaults to 3) — 输入通道数。 - embedding_size (
int, optional, defaults to 64) — 嵌入层的维度(隐藏大小)。 - depths (
list[int], optional, defaults to[3, 4, 6, 3]) — 每个阶段的深度(层数)。 - hidden_sizes (
list[int], optional, defaults to[256, 512, 1024, 2048]) — 每个阶段的维度(隐藏大小)。 - hidden_act (
str, optional, defaults to"relu") — 每个块中的非线性激活函数。如果为字符串,则支持“gelu”、“relu”、“selu”和“gelu_new”。 - 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属性中定义的顺序相同。 - stem_channels (
list[int], optional, defaults to[3, 32, 48]) — stem 层的通道维度:- 第一个数字(3)是输入图像通道数
- 第二个数字(32)是中间 stem 通道数
- 第三个数字(48)是输出 stem 通道数
- stage_in_channels (
list[int], optional, defaults to[48, 128, 512, 1024]) — 骨干网每个阶段的输入通道维度。这定义了每个阶段的输入将具有多少通道。 - stage_mid_channels (
list[int], optional, defaults to[48, 96, 192, 384]) — 主干网络的每个阶段的中间通道维度。这定义了每个阶段中间层使用的通道数。 - stage_out_channels (
list[int], optional, defaults to[128, 512, 1024, 2048]) — 主干网络的每个阶段的输出通道维度。这定义了每个阶段输出的通道数。 - stage_num_blocks (
list[int], optional, defaults to[1, 1, 3, 1]) — 主干网络每个阶段使用的块数。这通过指定要堆叠的卷积块的数量来控制每个阶段的深度。 - stage_downsample (
list[bool], optional, defaults to[False, True, True, True]) — 指示是否在每个阶段对特征图进行下采样。如果为True,则会减小特征图的空间尺寸。 - stage_light_block (
list[bool], optional, defaults to[False, False, True, True]) — 指示是否在每个阶段使用轻量级块。轻量级块是卷积块的一种变体,可能具有更少的参数。 - stage_kernel_size (
list[int], optional, defaults to[3, 3, 5, 5]) — 每个阶段卷积层的核大小。 - stage_numb_of_layers (
list[int], optional, defaults to[6, 6, 6, 6]) — 每个阶段的块中使用的层数。 - use_learnable_affine_block (
bool, optional, defaults toFalse) — 是否在网络中使用可学习仿射块(LAB)。LAB 在某些操作后添加可学习的缩放和偏置参数。 - initializer_range (
float, optional, defaults to 0.02) — 用于初始化所有权重矩阵的 truncated_normal_initializer 的标准差。
这是用于存储 HGNetV2Backbone 配置的配置类。它用于根据指定的参数实例化一个 HGNet-V2 模型,定义了模型的架构。使用默认值实例化一个配置将得到一个类似于 D-FINE-X-COCO B4 “ustc-community/dfine_x_coco” 的配置。配置对象继承自 PreTrainedConfig,可用于控制模型输出。有关更多信息,请阅读 PreTrainedConfig 的文档。
HGNetV2Backbone
forward
< source >( pixel_values: Tensor output_hidden_states: bool | None = None return_dict: bool | None = None **kwargs ) → transformers.modeling_outputs.BackboneOutput or tuple(torch.FloatTensor)
参数
- pixel_values (
torch.Tensor, shape(batch_size, num_channels, image_size, image_size)) — 对应于输入图像的张量。可以使用image_processor_class获取像素值。有关详细信息,请参阅image_processor_class.__call__(processor_class使用image_processor_class来处理图像)。 - output_hidden_states (
bool, optional) — 是否返回所有层的隐藏状态。有关详细信息,请参阅返回张量下的hidden_states。 - return_dict (
bool, optional) — 是否返回ModelOutput而不是普通元组。
返回
transformers.modeling_outputs.BackboneOutput 或 tuple(torch.FloatTensor)
一个 transformers.modeling_outputs.BackboneOutput 或一个 torch.FloatTensor 元组(如果传递了 return_dict=False 或当 config.return_dict=False 时),根据配置(HGNetV2Config)和输入而包含各种元素。
-
feature_maps (
tuple(torch.FloatTensor)of shape(batch_size, num_channels, height, width)) — 阶段的特征图。 -
hidden_states (
tuple(torch.FloatTensor), optional, returned whenoutput_hidden_states=Trueis passed or whenconfig.output_hidden_states=True) —torch.FloatTensor元组(一个用于嵌入输出 + 每个层输出一个)的形状为(batch_size, sequence_length, hidden_size)或(batch_size, num_channels, height, width),具体取决于主干网络。模型在每个阶段输出的隐藏状态以及初始嵌入输出。
-
attentions (
tuple(torch.FloatTensor), optional, returned whenoutput_attentions=Trueis passed or whenconfig.output_attentions=True) —torch.FloatTensor元组(每个层一个)的形状为(batch_size, num_heads, sequence_length, sequence_length)。仅当主干网络使用注意力时适用。注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均值。
HGNetV2Backbone 的 forward 方法,覆盖了 __call__ 特殊方法。
虽然 forward pass 的实现需要在此函数中定义,但你应该在之后调用
Module实例而不是这个,因为前者负责运行预处理和后处理步骤,而后者会静默地忽略它们。
示例
>>> from transformers import HGNetV2Config, HGNetV2Backbone
>>> import torch
>>> config = HGNetV2Config()
>>> model = HGNetV2Backbone(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
< source >( config: HGNetV2Config )
参数
- config (HGNetV2Config) — 模型配置类,包含模型的所有参数。使用配置文件初始化不会加载与模型相关的权重,只会加载配置。请查看 from_pretrained() 方法来加载模型权重。
HGNetV2 模型,顶部有一个图像分类头(一个位于池化特征之上的线性层),例如用于 ImageNet。
此模型继承自 PreTrainedModel。查看其父类文档,了解库为所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、修剪头等)。
此模型也是一个 PyTorch torch.nn.Module 子类。像普通的 PyTorch Module 一样使用它,并参考 PyTorch 文档了解一般用法和行为的所有相关信息。
forward
< source >( pixel_values: torch.FloatTensor | None = None labels: torch.LongTensor | None = None output_hidden_states: bool | None = None return_dict: bool | None = None **kwargs ) → transformers.modeling_outputs.ImageClassifierOutputWithNoAttention or tuple(torch.FloatTensor)
参数
- pixel_values (
torch.FloatTensor, shape(batch_size, num_channels, image_size, image_size), optional) — 对应于输入图像的张量。可以使用image_processor_class获取像素值。有关详细信息,请参阅image_processor_class.__call__(processor_class使用image_processor_class来处理图像)。 - labels (
torch.LongTensor, shape(batch_size,), optional) — 用于计算图像分类/回归损失的标签。索引应在[0, ..., config.num_labels - 1]范围内。如果config.num_labels == 1,则计算回归损失(均方损失);如果config.num_labels > 1,则计算分类损失(交叉熵)。 - output_hidden_states (
bool, optional) — 是否返回所有层的隐藏状态。有关详细信息,请参阅返回张量下的hidden_states。 - return_dict (
bool, optional) — 是否返回ModelOutput而不是普通元组。
返回
transformers.modeling_outputs.ImageClassifierOutputWithNoAttention or tuple(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), optional, 当传入output_hidden_states=True或config.output_hidden_states=True时返回) —torch.FloatTensor的元组(如果模型有嵌入层,则包含一个嵌入层输出,加上每阶段的一个输出),形状为(batch_size, num_channels, height, width)。模型在每个阶段输出的隐藏状态(也称为特征图)。
HGNetV2ForImageClassification 的前向(forward)方法会覆盖 __call__ 特殊方法。
虽然 forward pass 的实现需要在此函数中定义,但你应该在之后调用
Module实例而不是这个,因为前者负责运行预处理和后处理步骤,而后者会静默地忽略它们。
示例
>>> import torch
>>> import httpx
>>> from io import BytesIO
>>> from transformers import HGNetV2ForImageClassification, AutoImageProcessor
>>> from PIL import Image
>>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
>>> with httpx.stream("GET", url) as response:
... image = Image.open(BytesIO(response.read()))
>>> 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])