Transformers 文件
HGNet-V2
並獲得增強的文件體驗
開始使用
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
forward
< 原始碼 >( pixel_values: Tensor output_hidden_states: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None ) → transformers.modeling_outputs.BackboneOutput
或 tuple(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.BackboneOutput
或 tuple(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.ImageClassifierOutputWithNoAttention 或 tuple(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.ImageClassifierOutputWithNoAttention 或 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)
, 可選, 當傳遞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])