Transformers 文件
ConvNeXt V2
並獲得增強的文件體驗
開始使用
ConvNeXt V2
概述
ConvNeXt V2 模型由 Sanghyun Woo、Shoubhik Debnath、Ronghang Hu、Xinlei Chen、Zhuang Liu、In So Kweon 和 Saining Xie 在論文 《ConvNeXt V2: Co-designing and Scaling ConvNets with Masked Autoencoders》 中提出。ConvNeXt V2 是一個純卷積模型(ConvNet),其設計靈感來源於 Vision Transformer,是 ConvNeXT 的後續版本。
論文摘要如下:
在改進的架構和更好的表示學習框架的推動下,視覺識別領域在 21 世紀 20 年代初經歷了快速的現代化和效能提升。例如,以 ConvNeXt 為代表的現代卷積網路(ConvNets)在各種場景中都表現出了強大的效能。雖然這些模型最初是為使用 ImageNet 標籤進行監督學習而設計的,但它們也可能從自監督學習技術中受益,例如掩碼自編碼器(MAE)。然而,我們發現簡單地將這兩種方法結合會導致效能不佳。在本文中,我們提出了一個全卷積掩碼自編碼器框架和一個新的全域性響應歸一化(Global Response Normalization,GRN)層,該層可以新增到 ConvNeXt 架構中以增強通道間特徵的競爭。這種自監督學習技術和架構改進的協同設計產生了一個新的模型家族,稱為 ConvNeXt V2,它顯著提高了純 ConvNets 在各種識別基準上的效能,包括 ImageNet 分類、COCO 檢測和 ADE20K 分割。我們還提供了各種大小的預訓練 ConvNeXt V2 模型,從引數為 370 萬的高效 Atto 模型(在 ImageNet 上的 top-1 準確率為 76.7%),到引數為 6.5 億的 Huge 模型,該模型僅使用公共訓練資料就達到了 88.9% 的 SOTA 準確率。

資源
Hugging Face 官方和社群(由 🌎 標識)提供的資源列表,幫助你開始使用 ConvNeXt V2。
如果您有興趣在此處提交資源,請隨時開啟 Pull Request,我們將對其進行審查!該資源最好能展示一些新內容,而不是重複現有資源。
ConvNextV2Config
class transformers.ConvNextV2Config
< 來源 >( num_channels = 3 patch_size = 4 num_stages = 4 hidden_sizes = None depths = None hidden_act = 'gelu' initializer_range = 0.02 layer_norm_eps = 1e-12 drop_path_rate = 0.0 image_size = 224 out_features = None out_indices = None **kwargs )
引數
- num_channels (
int
, 可選, 預設為 3) — 輸入通道數。 - patch_size (
int
, 可選, 預設為 4) — 影像塊嵌入層中使用的影像塊大小。 - num_stages (
int
, 可選, 預設為 4) — 模型中的階段數。 - hidden_sizes (
list[int]
, 可選, 預設為[96, 192, 384, 768]
) — 每個階段的維度(隱藏層大小)。 - depths (
list[int]
, 可選, 預設為[3, 3, 9, 3]
) — 每個階段的深度(塊數)。 - hidden_act (
str
或function
, 可選, 預設為"gelu"
) — 每個塊中的非線性啟用函式(函式或字串)。如果為字串,則支援"gelu"
、"relu"
、"selu"
和"gelu_new"
。 - initializer_range (
float
, 可選, 預設為 0.02) — 用於初始化所有權重矩陣的 truncated_normal_initializer 的標準差。 - layer_norm_eps (
float
, 可選, 預設為 1e-12) — 層歸一化層使用的 epsilon 值。 - drop_path_rate (
float
, 可選, 預設為 0.0) — 隨機深度的丟棄率。 - image_size (
int
, 可選, 預設為 224) — 每張影像的大小(解析度)。 - 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
屬性中定義的順序相同。
這是用於儲存 ConvNextV2Model 配置的配置類。它用於根據指定的引數例項化一個 ConvNeXTV2 模型,定義模型架構。使用預設值例項化配置將產生與 ConvNeXTV2 facebook/convnextv2-tiny-1k-224 架構類似的配置。
配置物件繼承自 PretrainedConfig,可用於控制模型輸出。有關更多資訊,請參閱 PretrainedConfig 的文件。
示例
>>> from transformers import ConvNeXTV2Config, ConvNextV2Model
>>> # Initializing a ConvNeXTV2 convnextv2-tiny-1k-224 style configuration
>>> configuration = ConvNeXTV2Config()
>>> # Initializing a model (with random weights) from the convnextv2-tiny-1k-224 style configuration
>>> model = ConvNextV2Model(configuration)
>>> # Accessing the model configuration
>>> configuration = model.config
ConvNextV2Model
class transformers.ConvNextV2Model
< 來源 >( config )
引數
- config (ConvNextV2Model) — 包含模型所有引數的模型配置類。使用配置檔案進行初始化不會載入與模型關聯的權重,只會載入配置。請檢視 from_pretrained() 方法以載入模型權重。
基礎的 Convnextv2 模型,輸出原始的隱藏狀態,沒有任何特定的頭部。
該模型繼承自 PreTrainedModel。請檢視超類文件以瞭解該庫為其所有模型實現的通用方法(例如下載或儲存、調整輸入嵌入大小、修剪頭部等)。
該模型也是一個 PyTorch torch.nn.Module 的子類。可以像使用常規 PyTorch 模組一樣使用它,並參考 PyTorch 文件瞭解所有與常規用法和行為相關的事項。
forward
< 來源 >( pixel_values: typing.Optional[torch.FloatTensor] = None output_hidden_states: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None ) → transformers.modeling_outputs.BaseModelOutputWithPoolingAndNoAttention
或 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}
處理影像)。 - 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
時),包含根據配置(ConvNextV2Config)和輸入的不同元素。
-
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)
。模型在每個層輸出的隱藏狀態以及可選的初始嵌入輸出。
ConvNextV2Model 的 forward 方法,重寫了 __call__
特殊方法。
儘管前向傳播的配方需要在此函式內定義,但之後應呼叫 Module
例項而不是此函式,因為前者會處理執行前處理和後處理步驟,而後者會靜默地忽略它們。
ConvNextV2ForImageClassification
class transformers.ConvNextV2ForImageClassification
< 來源 >( config )
引數
- config (ConvNextV2ForImageClassification) — 包含模型所有引數的模型配置類。使用配置檔案進行初始化不會載入與模型關聯的權重,只會載入配置。請檢視 from_pretrained() 方法以載入模型權重。
帶有影像分類頭的 ConvNextV2 模型(在池化特徵之上加一個線性層),例如用於 ImageNet。
該模型繼承自 PreTrainedModel。請檢視超類文件以瞭解該庫為其所有模型實現的通用方法(例如下載或儲存、調整輸入嵌入大小、修剪頭部等)。
該模型也是一個 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 (
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
時),包含根據配置(ConvNextV2Config)和輸入的不同元素。
- 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)
。模型在每個階段輸出的隱藏狀態(也稱為特徵圖)。
ConvNextV2ForImageClassification 的 forward 方法,重寫了 __call__
特殊方法。
儘管前向傳播的配方需要在此函式內定義,但之後應呼叫 Module
例項而不是此函式,因為前者會處理執行前處理和後處理步驟,而後者會靜默地忽略它們。
示例
>>> from transformers import AutoImageProcessor, ConvNextV2ForImageClassification
>>> import torch
>>> from datasets import load_dataset
>>> dataset = load_dataset("huggingface/cats-image")
>>> image = dataset["test"]["image"][0]
>>> image_processor = AutoImageProcessor.from_pretrained("facebook/convnextv2-tiny-1k-224")
>>> model = ConvNextV2ForImageClassification.from_pretrained("facebook/convnextv2-tiny-1k-224")
>>> 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])
...
TFConvNextV2Model
class transformers.TFConvNextV2Model
< 來源 >( config: ConvNextV2Config *inputs **kwargs )
引數
- config (ConvNextV2Config) — 包含模型所有引數的模型配置類。使用配置檔案進行初始化不會載入與模型關聯的權重,只會載入配置。請檢視 from_pretrained() 方法以載入模型權重。
基礎的 ConvNextV2 模型,輸出原始特徵,沒有任何特定的頭部。該模型繼承自 TFPreTrainedModel。請檢視超類文件以瞭解該庫為其所有模型實現的通用方法(例如下載或儲存、調整輸入嵌入大小、修剪頭部等)。
該模型也是一個 keras.Model 的子類。可以像使用常規的 TF 2.0 Keras 模型一樣使用它,並參考 TF 2.0 文件瞭解所有與常規用法和行為相關的事項。
transformers
中的 TensorFlow 模型和層接受兩種輸入格式
- 所有輸入作為關鍵字引數(如 PyTorch 模型),或
- 所有輸入作為第一個位置引數中的列表、元組或字典。
支援第二種格式的原因是,Keras 方法在將輸入傳遞給模型和層時更喜歡這種格式。由於這種支援,當使用 model.fit()
等方法時,一切應該會“正常工作”——只需以 model.fit()
支援的任何格式傳遞你的輸入和標籤!然而,如果你想在 Keras 方法(如 fit()
和 predict()
)之外使用第二種格式,例如在使用 Keras Functional
API 建立自己的層或模型時,有三種可能性可以用來在第一個位置引數中收集所有輸入張量:
- 一個只包含
pixel_values
的獨立張量:model(pixel_values)
- 一個長度可變的列表,其中包含一個或多個輸入張量,按文件字串中給定的順序排列:
model([pixel_values, attention_mask])
或model([pixel_values, attention_mask, token_type_ids])
- 一個字典,包含一個或多個與文件字串中給定的輸入名稱相關聯的輸入張量:
model({"pixel_values": pixel_values, "token_type_ids": token_type_ids})
請注意,當使用子類化建立模型和層時,你無需擔心任何這些問題,因為你可以像傳遞給任何其他 Python 函式一樣傳遞輸入!
呼叫
< source >( pixel_values: TFModelInputType | None = None output_hidden_states: Optional[bool] = None return_dict: Optional[bool] = None training: bool = False ) → transformers.modeling_tf_outputs.TFBaseModelOutputWithPoolingAndNoAttention
或 tuple(tf.Tensor)
引數
- pixel_values (
np.ndarray
,tf.Tensor
,list[tf.Tensor]
,dict[str, tf.Tensor]
或dict[str, np.ndarray]
,並且每個示例的形狀必須為(batch_size, num_channels, height, width)
) — 畫素值。畫素值可以使用 AutoImageProcessor 獲取。有關詳細資訊,請參閱 ConvNextImageProcessor.__call__()。 - output_hidden_states (
bool
, optional) — 是否返回所有層的隱藏狀態。有關更多詳細資訊,請參閱返回張量下的hidden_states
。此引數只能在 Eager 模式下使用,在圖模式下將使用配置中的值。 - return_dict (
bool
, optional) — 是否返回一個 ModelOutput 而不是一個普通的元組。此引數可以在 Eager 模式下使用,在圖模式下,該值將始終設定為True
。
返回
transformers.modeling_tf_outputs.TFBaseModelOutputWithPoolingAndNoAttention
或 tuple(tf.Tensor)
一個 transformers.modeling_tf_outputs.TFBaseModelOutputWithPoolingAndNoAttention
或一個 tf.Tensor
元組(如果傳遞了 return_dict=False
或當 config.return_dict=False
時),根據配置(ConvNextV2Config)和輸入,包含各種元素。
-
last_hidden_state (形狀為
(batch_size, num_channels, height, width)
的tf.Tensor
) — 模型最後一層輸出的隱藏狀態序列。 -
pooler_output (形狀為
(batch_size, hidden_size)
的tf.Tensor
) — 在空間維度上進行池化操作後最後一層的隱藏狀態。 -
hidden_states (
tuple(tf.Tensor)
, optional, 當傳遞output_hidden_states=True
或config.output_hidden_states=True
時返回) —tf.Tensor
的元組(如果模型有嵌入層,則一個用於嵌入層的輸出,外加每個層的輸出),形狀為(batch_size, num_channels, height, width)
。模型在每個層輸出的隱藏狀態以及可選的初始嵌入輸出。
TFConvNextV2Model 的前向方法,重寫了 __call__
特殊方法。
儘管前向傳播的配方需要在此函式內定義,但之後應呼叫 Module
例項而不是此函式,因為前者會處理執行前處理和後處理步驟,而後者會靜默地忽略它們。
示例
>>> from transformers import AutoImageProcessor, TFConvNextV2Model
>>> from datasets import load_dataset
>>> dataset = load_dataset("huggingface/cats-image")
>>> image = dataset["test"]["image"][0]
>>> image_processor = AutoImageProcessor.from_pretrained("facebook/convnextv2-tiny-1k-224")
>>> model = TFConvNextV2Model.from_pretrained("facebook/convnextv2-tiny-1k-224")
>>> inputs = image_processor(image, return_tensors="tf")
>>> outputs = model(**inputs)
>>> last_hidden_states = outputs.last_hidden_state
>>> list(last_hidden_states.shape)
[1, 768, 7, 7]
TFConvNextV2ForImageClassification
class transformers.TFConvNextV2ForImageClassification
< source >( config: ConvNextV2Config *inputs **kwargs )
引數
- config (ConvNextV2Config) — 模型配置類,包含模型的所有引數。使用配置檔案初始化不會載入與模型相關的權重,只會載入配置。請檢視 from_pretrained() 方法來載入模型權重。
帶有影像分類頭的 ConvNextV2 模型(在池化特徵之上加一個線性層),例如用於 ImageNet。
該模型繼承自 TFPreTrainedModel。請檢視超類文件,瞭解庫為其所有模型實現的通用方法(例如下載或儲存、調整輸入嵌入大小、修剪頭部等)。
該模型也是一個 keras.Model 的子類。可以像使用常規的 TF 2.0 Keras 模型一樣使用它,並參考 TF 2.0 文件瞭解所有與常規用法和行為相關的事項。
transformers
中的 TensorFlow 模型和層接受兩種輸入格式
- 所有輸入作為關鍵字引數(如 PyTorch 模型),或
- 所有輸入作為第一個位置引數中的列表、元組或字典。
支援第二種格式的原因是,Keras 方法在將輸入傳遞給模型和層時更喜歡這種格式。由於這種支援,當使用 model.fit()
等方法時,一切應該會“正常工作”——只需以 model.fit()
支援的任何格式傳遞你的輸入和標籤!然而,如果你想在 Keras 方法(如 fit()
和 predict()
)之外使用第二種格式,例如在使用 Keras Functional
API 建立自己的層或模型時,有三種可能性可以用來在第一個位置引數中收集所有輸入張量:
- 一個只包含
pixel_values
的獨立張量:model(pixel_values)
- 一個長度可變的列表,其中包含一個或多個輸入張量,按文件字串中給定的順序排列:
model([pixel_values, attention_mask])
或model([pixel_values, attention_mask, token_type_ids])
- 一個字典,包含一個或多個與文件字串中給定的輸入名稱相關聯的輸入張量:
model({"pixel_values": pixel_values, "token_type_ids": token_type_ids})
請注意,當使用子類化建立模型和層時,你無需擔心任何這些問題,因為你可以像傳遞給任何其他 Python 函式一樣傳遞輸入!
呼叫
< source >( pixel_values: TFModelInputType | None = None output_hidden_states: Optional[bool] = None return_dict: Optional[bool] = None labels: np.ndarray | tf.Tensor | None = None training: Optional[bool] = False ) → transformers.modeling_tf_outputs.TFImageClassifierOutputWithNoAttention
或 tuple(tf.Tensor)
引數
- pixel_values (
np.ndarray
,tf.Tensor
,list[tf.Tensor]
,dict[str, tf.Tensor]
或dict[str, np.ndarray]
,並且每個示例的形狀必須為(batch_size, num_channels, height, width)
) — 畫素值。畫素值可以使用 AutoImageProcessor 獲取。有關詳細資訊,請參閱 ConvNextImageProcessor.__call__()。 - output_hidden_states (
bool
, optional) — 是否返回所有層的隱藏狀態。有關更多詳細資訊,請參閱返回張量下的hidden_states
。此引數只能在 Eager 模式下使用,在圖模式下將使用配置中的值。 - return_dict (
bool
, optional) — 是否返回一個 ModelOutput 而不是一個普通的元組。此引數可以在 Eager 模式下使用,在圖模式下,該值將始終設定為True
。 - labels (
tf.Tensor
或np.ndarray
,形狀為(batch_size,)
, optional) — 用於計算影像分類/迴歸損失的標籤。索引應在[0, ..., config.num_labels - 1]
範圍內。如果config.num_labels == 1
,則計算迴歸損失(均方損失),如果config.num_labels > 1
,則計算分類損失(交叉熵)。
返回
transformers.modeling_tf_outputs.TFImageClassifierOutputWithNoAttention
或 tuple(tf.Tensor)
一個 transformers.modeling_tf_outputs.TFImageClassifierOutputWithNoAttention
或一個 tf.Tensor
元組(如果傳遞了 return_dict=False
或當 config.return_dict=False
時),根據配置(ConvNextV2Config)和輸入,包含各種元素。
- loss (形狀為
(1,)
的tf.Tensor
,可選,當提供labels
時返回) — 分類(如果 config.num_labels==1,則為迴歸)損失。 - logits (
tf.Tensor
,形狀為(batch_size, config.num_labels)
) — 分類(或迴歸,如果 config.num_labels==1)分數(SoftMax 之前)。 - hidden_states (
tuple(tf.Tensor)
, optional, 當傳遞output_hidden_states=True
或config.output_hidden_states=True
時返回) —tf.Tensor
的元組(如果模型有嵌入層,則一個用於嵌入層的輸出,外加每個階段的輸出),形狀為(batch_size, num_channels, height, width)
。模型在每個階段輸出的隱藏狀態(也稱為特徵圖)。
TFConvNextV2ForImageClassification 的前向方法,重寫了 __call__
特殊方法。
儘管前向傳播的配方需要在此函式內定義,但之後應呼叫 Module
例項而不是此函式,因為前者會處理執行前處理和後處理步驟,而後者會靜默地忽略它們。
示例
>>> from transformers import AutoImageProcessor, TFConvNextV2ForImageClassification
>>> import tensorflow as tf
>>> from datasets import load_dataset
>>> dataset = load_dataset("huggingface/cats-image"))
>>> image = dataset["test"]["image"][0]
>>> image_processor = AutoImageProcessor.from_pretrained("facebook/convnextv2-tiny-1k-224")
>>> model = TFConvNextV2ForImageClassification.from_pretrained("facebook/convnextv2-tiny-1k-224")
>>> inputs = image_processor(image, return_tensors="tf")
>>> logits = model(**inputs).logits
>>> # model predicts one of the 1000 ImageNet classes
>>> predicted_label = int(tf.math.argmax(logits, axis=-1))
>>> print(model.config.id2label[predicted_label])
tabby, tabby cat