Transformers 文件

VAN

Hugging Face's logo
加入 Hugging Face 社群

並獲得增強的文件體驗

開始使用

VAN

PyTorch

該模型僅處於維護模式,我們不接受任何更改其程式碼的新 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` 的長度將等於階段數。

下圖說明了視覺注意力層的架構。取自原始論文

該模型由Francesco貢獻。原始程式碼可在此處找到。

資源

Hugging Face 官方和社群(用 🌎 表示)資源列表,幫助您開始使用 VAN。

影像分類

如果您有興趣在此處提交資源,請隨時開啟 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 (strfunction, 可選, 預設為 "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.BaseModelOutputWithPoolingAndNoAttentiontuple(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.BaseModelOutputWithPoolingAndNoAttentiontuple(torch.FloatTensor)

transformers.modeling_outputs.BaseModelOutputWithPoolingAndNoAttentiontorch.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.ImageClassifierOutputWithNoAttentiontuple(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.ImageClassifierOutputWithNoAttentiontuple(torch.FloatTensor)

一個 transformers.modeling_outputs.ImageClassifierOutputWithNoAttentiontorch.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
< > 在 GitHub 上更新

© . This site is unofficial and not affiliated with Hugging Face, Inc.