Transformers 文件
VAN
並獲得增強的文件體驗
開始使用
VAN
該模型僅處於維護模式,我們不接受任何更改其程式碼的新 PR。
如果在執行此模型時遇到任何問題,請重新安裝支援此模型的最後一個版本:v4.30.0。您可以透過執行以下命令進行安裝:`pip install -U transformers==4.30.0`。
概述
VAN 模型由 Meng-Hao Guo、Cheng-Ze Lu、Zheng-Ning Liu、Ming-Ming Cheng 和 Shi-Min Hu 在視覺注意力網路中提出。
本文提出了一種基於卷積操作的新型注意力層,能夠捕獲區域性和遠距離關係。這是透過結合普通卷積層和大核卷積層來完成的。後者使用空洞卷積來捕獲遠距離相關性。
論文摘要如下:
自注意力機制最初是為自然語言處理任務設計的,但最近在各種計算機視覺領域掀起了風暴。然而,影像的 2D 性質給在計算機視覺中應用自注意力帶來了三個挑戰。(1) 將影像視為 1D 序列忽略了它們的 2D 結構。(2) 對於高解析度影像,二次複雜度太昂貴。(3) 它只捕獲空間適應性,但忽略了通道適應性。在本文中,我們提出了一種新穎的大核注意力 (LKA) 模組,以在自注意力中實現自適應和長程相關性,同時避免上述問題。我們進一步介紹了一種基於 LKA 的新型神經網路,即視覺注意力網路 (VAN)。雖然極其簡單,但在廣泛的實驗中,包括影像分類、目標檢測、語義分割、例項分割等,VAN 在很大程度上優於最先進的視覺 Transformer 和卷積神經網路。程式碼可在此 https URL 獲取。
技巧
- VAN 沒有嵌入層,因此 `hidden_states` 的長度將等於階段數。
下圖說明了視覺注意力層的架構。取自原始論文。

資源
Hugging Face 官方和社群(用 🌎 表示)資源列表,幫助您開始使用 VAN。
- VanForImageClassification 由此示例指令碼和筆記本支援。
- 另請參閱:影像分類任務指南
如果您有興趣在此處提交資源,請隨時開啟 Pull Request,我們將對其進行審查!該資源最好能展示一些新內容,而不是重複現有資源。
VanConfig
class transformers.VanConfig
< 源 >( image_size = 224 num_channels = 3 patch_sizes = [7, 3, 3, 3] strides = [4, 2, 2, 2] hidden_sizes = [64, 128, 320, 512] depths = [3, 3, 12, 3] mlp_ratios = [8, 8, 4, 4] hidden_act = 'gelu' initializer_range = 0.02 layer_norm_eps = 1e-06 layer_scale_init_value = 0.01 drop_path_rate = 0.0 dropout_rate = 0.0 **kwargs )
引數
- image_size (
int
, 可選, 預設為 224) — 每張影像的大小(解析度)。 - num_channels (
int
, 可選, 預設為 3) — 輸入通道的數量。 - patch_sizes (
list[int]
, 可選, 預設為[7, 3, 3, 3]
) — 每個階段的嵌入層中使用的補丁大小。 - strides (
list[int]
, 可選, 預設為[4, 2, 2, 2]
) — 每個階段嵌入層中用於下采樣輸入的步幅大小。 - hidden_sizes (
list[int]
, 可選, 預設為[64, 128, 320, 512]
) — 每個階段的維度(隱藏大小)。 - depths (
list[int]
, 可選, 預設為[3, 3, 12, 3]
) — 每個階段的深度(層數)。 - mlp_ratios (
list[int]
, 可選, 預設為[8, 8, 4, 4]
) — 每個階段的 mlp 層的擴充套件比。 - hidden_act (
str
或function
, 可選, 預設為"gelu"
) — 每層中的非線性啟用函式(函式或字串)。如果是字串,支援"gelu"
、"relu"
、"selu"
和"gelu_new"
。 - initializer_range (
float
, 可選, 預設為 0.02) — 用於初始化所有權重矩陣的截斷正態初始化器的標準差。 - layer_norm_eps (
float
, 可選, 預設為 1e-06) — 層歸一化層使用的 epsilon。 - layer_scale_init_value (
float
, 可選, 預設為 0.01) — 層縮放的初始值。 - drop_path_rate (
float
, 可選, 預設為 0.0) — 隨機深度丟棄的機率。 - dropout_rate (
float
, 可選, 預設為 0.0) — 丟棄的機率。
這是用於儲存 VanModel 配置的配置類。它用於根據指定引數例項化 VAN 模型,定義模型架構。使用預設值例項化配置將產生與 VAN Visual-Attention-Network/van-base 架構相似的配置。
配置物件繼承自 PretrainedConfig,可用於控制模型輸出。有關更多資訊,請參閱 PretrainedConfig 的文件。
示例
>>> from transformers import VanModel, VanConfig
>>> # Initializing a VAN van-base style configuration
>>> configuration = VanConfig()
>>> # Initializing a model from the van-base style configuration
>>> model = VanModel(configuration)
>>> # Accessing the model configuration
>>> configuration = model.config
VanModel
class transformers.VanModel
< 源 >( config )
引數
- config (VanConfig) — 包含模型所有引數的模型配置類。使用配置檔案初始化不載入與模型關聯的權重,只加載配置。請檢視 from_pretrained() 方法載入模型權重。
裸 VAN 模型輸出原始特徵,頂部沒有任何特定頭部。請注意,VAN 沒有嵌入層。此模型是 PyTorch torch.nn.Module 子類。將其作為常規 PyTorch 模組使用,並參考 PyTorch 文件瞭解所有與一般使用和行為相關的事項。
forward
< 源 >( pixel_values: typing.Optional[torch.FloatTensor] output_hidden_states: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None ) → transformers.modeling_outputs.BaseModelOutputWithPoolingAndNoAttention
或 tuple(torch.FloatTensor)
引數
- pixel_values (形狀為
(batch_size, num_channels, height, width)
的torch.FloatTensor
) — 畫素值。畫素值可以使用 AutoImageProcessor 獲取。詳細資訊請參閱 ConvNextImageProcessor.call()。 - output_hidden_states (
bool
, 可選) — 是否返回所有階段的隱藏狀態。有關詳細資訊,請參閱返回張量下的hidden_states
。 - return_dict (
bool
, 可選) — 是否返回 ModelOutput 而不是普通元組。
返回
transformers.modeling_outputs.BaseModelOutputWithPoolingAndNoAttention
或 tuple(torch.FloatTensor)
transformers.modeling_outputs.BaseModelOutputWithPoolingAndNoAttention
或 torch.FloatTensor
的元組(如果傳入 return_dict=False
或當 config.return_dict=False
時),包含根據配置 (VanConfig) 和輸入的不同元素。
-
last_hidden_state (
torch.FloatTensor
, 形狀為(batch_size, num_channels, height, width)
) — 模型最後一層輸出的隱藏狀態序列。 -
pooler_output (
torch.FloatTensor
, 形狀為(batch_size, hidden_size)
) — 經過空間維度池化操作後的最後一層隱藏狀態。 -
hidden_states (
tuple(torch.FloatTensor)
, 可選, 當傳入output_hidden_states=True
或當config.output_hidden_states=True
時返回) —torch.FloatTensor
的元組(一個用於嵌入層的輸出,如果模型有嵌入層,+ 一個用於每層的輸出),形狀為(batch_size, num_channels, height, width)
。模型在每個層輸出的隱藏狀態以及可選的初始嵌入輸出。
VanModel forward 方法,覆蓋了 __call__
特殊方法。
儘管前向傳播的配方需要在該函式中定義,但在此之後應該呼叫 Module
例項而不是這個函式,因為前者負責執行預處理和後處理步驟,而後者則默默地忽略它們。
示例
>>> from transformers import AutoImageProcessor, VanModel
>>> import torch
>>> from datasets import load_dataset
>>> dataset = load_dataset("huggingface/cats-image")
>>> image = dataset["test"]["image"][0]
>>> image_processor = AutoImageProcessor.from_pretrained("Visual-Attention-Network/van-base")
>>> model = VanModel.from_pretrained("Visual-Attention-Network/van-base")
>>> 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]
VanForImageClassification
class transformers.VanForImageClassification
< 源 >( config )
引數
- config (VanConfig) — 包含模型所有引數的模型配置類。使用配置檔案初始化不載入與模型關聯的權重,只加載配置。請檢視 from_pretrained() 方法載入模型權重。
帶有影像分類頭部的 VAN 模型(池化特徵頂部的線性層),例如用於 ImageNet。
此模型是 PyTorch torch.nn.Module 子類。將其作為常規 PyTorch 模組使用,並參考 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 (形狀為
(batch_size, num_channels, height, width)
的torch.FloatTensor
) — 畫素值。畫素值可以使用 AutoImageProcessor 獲取。詳細資訊請參閱 ConvNextImageProcessor.call()。 - output_hidden_states (
bool
, 可選) — 是否返回所有階段的隱藏狀態。有關詳細資訊,請參閱返回張量下的hidden_states
。 - return_dict (
bool
, 可選) — 是否返回 ModelOutput 而不是普通元組。 - labels (形狀為
(batch_size,)
的torch.LongTensor
, 可選) — 用於計算影像分類/迴歸損失的標籤。索引應在[0, ..., config.num_labels - 1]
之間。如果config.num_labels == 1
,則計算迴歸損失(均方損失),如果config.num_labels > 1
,則計算分類損失(交叉熵)。
返回
transformers.modeling_outputs.ImageClassifierOutputWithNoAttention 或 tuple(torch.FloatTensor)
一個 transformers.modeling_outputs.ImageClassifierOutputWithNoAttention 或 torch.FloatTensor
的元組(如果傳入 return_dict=False
或當 config.return_dict=False
時),包含根據配置 (VanConfig) 和輸入的不同元素。
- 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)
。模型在每個階段輸出的隱藏狀態(也稱為特徵圖)。
VanForImageClassification forward 方法,覆蓋了 __call__
特殊方法。
儘管前向傳播的配方需要在該函式中定義,但在此之後應該呼叫 Module
例項而不是這個函式,因為前者負責執行預處理和後處理步驟,而後者則默默地忽略它們。
示例
>>> from transformers import AutoImageProcessor, VanForImageClassification
>>> import torch
>>> from datasets import load_dataset
>>> dataset = load_dataset("huggingface/cats-image")
>>> image = dataset["test"]["image"][0]
>>> image_processor = AutoImageProcessor.from_pretrained("Visual-Attention-Network/van-base")
>>> model = VanForImageClassification.from_pretrained("Visual-Attention-Network/van-base")
>>> 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