Transformers 文件
Swin Transformer V2
並獲得增強的文件體驗
開始使用
Swin Transformer V2
Swin Transformer V2 是一個擁有 3B 引數的模型,其重點是如何將視覺模型擴充套件到數十億引數。它引入了殘差後歸一化結合餘弦注意力以提高訓練穩定性,對預訓練和微調之間不同影像解析度具有更好處理能力的對數間隔連續位置偏差,以及一種新的預訓練方法 (SimMIM),以減少對大量標註資料的需求。這些改進使得高效訓練非常大的模型(高達 30 億引數)成為可能,這些模型能夠處理高解析度影像。
您可以在 Microsoft 組織下找到官方的 Swin Transformer V2 檢查點。
點選右側邊欄的 Swin Transformer V2 模型,檢視更多 Swin Transformer V2 應用於視覺任務的示例。
import torch
from transformers import pipeline
pipeline = pipeline(
task="image-classification",
model="microsoft/swinv2-tiny-patch4-window8-256",
torch_dtype=torch.float16,
device=0
)
pipeline(images="https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/pipeline-cat-chonk.jpeg")
注意事項
- Swin Transformer V2 可以對任何可被 `32` 整除的輸入高度和寬度進行填充。
- Swin Transformer V2 可用作 骨幹網路。當 `output_hidden_states = True` 時,它會同時輸出 `hidden_states` 和 `reshaped_hidden_states`。`reshaped_hidden_states` 的形狀為 `(batch, num_channels, height, width)`,而不是 `(batch_size, sequence_length, num_channels)`。
Swinv2Config
類 transformers.Swinv2Config
< 源 >( image_size = 224 patch_size = 4 num_channels = 3 embed_dim = 96 depths = [2, 2, 6, 2] num_heads = [3, 6, 12, 24] window_size = 7 pretrained_window_sizes = [0, 0, 0, 0] mlp_ratio = 4.0 qkv_bias = True hidden_dropout_prob = 0.0 attention_probs_dropout_prob = 0.0 drop_path_rate = 0.1 hidden_act = 'gelu' use_absolute_embeddings = False initializer_range = 0.02 layer_norm_eps = 1e-05 encoder_stride = 32 out_features = None out_indices = None **kwargs )
引數
- image_size (
int
, 可選, 預設為 224) — 每張影像的大小(解析度)。 - patch_size (
int
, 可選, 預設為 4) — 每個塊的大小(解析度)。 - num_channels (
int
, 可選, 預設為 3) — 輸入通道數。 - embed_dim (
int
, 可選, 預設為 96) — 塊嵌入的維度。 - depths (
list(int)
, 可選, 預設為[2, 2, 6, 2]
) — Transformer 編碼器中每層的深度。 - num_heads (
list(int)
, 可選, 預設為[3, 6, 12, 24]
) — Transformer 編碼器中每層的注意力頭數。 - window_size (
int
, 可選, 預設為 7) — 視窗大小。 - pretrained_window_sizes (
list(int)
, 可選, 預設為[0, 0, 0, 0]
) — 預訓練期間的視窗大小。 - mlp_ratio (
float
, 可選, 預設為 4.0) — MLP 隱藏維度與嵌入維度之比。 - qkv_bias (
bool
, 可選, 預設為True
) — 是否應將可學習的偏置新增到查詢、鍵和值中。 - hidden_dropout_prob (
float
, 可選, 預設為 0.0) — 嵌入和編碼器中所有全連線層的 dropout 機率。 - attention_probs_dropout_prob (
float
, 可選, 預設為 0.0) — 注意力機率的 dropout 比率。 - drop_path_rate (
float
, 可選, 預設為 0.1) — 隨機深度率。 - hidden_act (
str
或function
, 可選, 預設為"gelu"
) — 編碼器中的非線性啟用函式(函式或字串)。如果為字串,則支援"gelu"
、"relu"
、"selu"
和"gelu_new"
。 - use_absolute_embeddings (
bool
, 可選, 預設為False
) — 是否向塊嵌入新增絕對位置嵌入。 - initializer_range (
float
, 可選, 預設為 0.02) — 用於初始化所有權重矩陣的 truncated_normal_initializer 的標準差。 - layer_norm_eps (
float
, 可選, 預設為 1e-05) — 層歸一化層使用的 epsilon 值。 - encoder_stride (
int
, 可選, 預設為 32) — 用於掩碼影像建模的解碼器頭部空間解析度的增加因子。 - out_features (
list[str]
, 可選) — 如果用作骨幹網路,則為要輸出的特徵列表。可以是"stem"
、"stage1"
、"stage2"
等(取決於模型有多少個階段)。如果未設定且out_indices
已設定,則預設為相應的階段。如果未設定且out_indices
未設定,則預設為最後一個階段。 - out_indices (
list[int]
, 可選) — 如果用作骨幹網路,則為要輸出的特徵索引列表。可以是 0、1、2 等(取決於模型有多少個階段)。如果未設定且out_features
已設定,則預設為相應的階段。如果未設定且out_features
未設定,則預設為最後一個階段。
這是配置類,用於儲存 Swinv2Model 的配置。它用於根據指定的引數例項化 Swin Transformer v2 模型,定義模型架構。使用預設值例項化配置將生成與 Swin Transformer v2 microsoft/swinv2-tiny-patch4-window8-256 架構相似的配置。
配置物件繼承自 PretrainedConfig,可用於控制模型輸出。有關更多資訊,請參閱 PretrainedConfig 的文件。
示例
>>> from transformers import Swinv2Config, Swinv2Model
>>> # Initializing a Swinv2 microsoft/swinv2-tiny-patch4-window8-256 style configuration
>>> configuration = Swinv2Config()
>>> # Initializing a model (with random weights) from the microsoft/swinv2-tiny-patch4-window8-256 style configuration
>>> model = Swinv2Model(configuration)
>>> # Accessing the model configuration
>>> configuration = model.config
Swinv2Model
類 transformers.Swinv2Model
< 源 >( config add_pooling_layer = True use_mask_token = False )
引數
- config (Swinv2Model) — 模型配置類,包含模型的所有引數。使用配置檔案初始化不會載入與模型相關的權重,只加載配置。請檢視 from_pretrained() 方法來載入模型權重。
- add_pooling_layer (
bool
, 可選, 預設為True
) — 是否應用池化層。 - use_mask_token (
bool
, 可選, 預設為False
) — 是否在嵌入層中建立和應用掩碼標記。
裸 Swinv2 模型,輸出原始隱藏狀態,頂部沒有任何特定頭部。
此模型繼承自 PreTrainedModel。請檢視超類文件,瞭解庫為所有模型實現的通用方法(例如下載或儲存、調整輸入嵌入大小、修剪頭部等)。
此模型也是 PyTorch torch.nn.Module 子類。請將其作為常規 PyTorch 模組使用,並參考 PyTorch 文件以獲取所有與通用用法和行為相關的事項。
前向傳播
< 源 >( pixel_values: typing.Optional[torch.FloatTensor] = None bool_masked_pos: typing.Optional[torch.BoolTensor] = None head_mask: typing.Optional[torch.FloatTensor] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None interpolate_pos_encoding: bool = False return_dict: typing.Optional[bool] = None ) → transformers.models.swinv2.modeling_swinv2.Swinv2ModelOutput
或 tuple(torch.FloatTensor)
引數
- pixel_values (形狀為
(batch_size, num_channels, image_size, image_size)
的torch.FloatTensor
,可選) — 對應於輸入影像的張量。畫素值可以使用{image_processor_class}
獲取。有關詳細資訊,請參閱{image_processor_class}.__call__
({processor_class}
使用{image_processor_class}
處理影像)。 - bool_masked_pos (形狀為
(batch_size, num_patches)
的torch.BoolTensor
,可選) — 布林掩碼位置。指示哪些塊被掩碼(1)哪些沒有(0)。 - head_mask (形狀為
(num_heads,)
或(num_layers, num_heads)
的torch.FloatTensor
,可選) — 用於使自注意力模組的選定頭部無效的掩碼。掩碼值選擇在[0, 1]
之間:- 1 表示頭部未被掩碼,
- 0 表示頭部被掩碼。
- output_attentions (
bool
, 可選) — 是否返回所有注意力層的注意力張量。有關更多詳細資訊,請參見返回張量下的attentions
。 - output_hidden_states (
bool
, 可選) — 是否返回所有層的隱藏狀態。有關更多詳細資訊,請參見返回張量下的hidden_states
。 - interpolate_pos_encoding (
bool
, 預設為False
) — 是否插值預訓練的位置編碼。 - return_dict (
bool
, 可選) — 是否返回 ModelOutput 而不是純元組。
返回
transformers.models.swinv2.modeling_swinv2.Swinv2ModelOutput
或 tuple(torch.FloatTensor)
一個 transformers.models.swinv2.modeling_swinv2.Swinv2ModelOutput
或一個 torch.FloatTensor
元組(如果傳遞了 return_dict=False
或 config.return_dict=False
),包含根據配置 (Swinv2Config) 和輸入而定的各種元素。
-
last_hidden_state (形狀為
(batch_size, sequence_length, hidden_size)
的torch.FloatTensor
, 可選,預設為None
) — 模型最後一層輸出的隱藏狀態序列。 -
pooler_output (
torch.FloatTensor
,形狀為(batch_size, hidden_size)
,可選,當傳遞add_pooling_layer=True
時返回) — 最後一層隱藏狀態的平均池化。 -
hidden_states (
tuple[torch.FloatTensor, ...]
, 可選, 當傳入output_hidden_states=True
或config.output_hidden_states=True
時返回) —torch.FloatTensor
元組(一個用於嵌入層的輸出,如果模型有嵌入層,外加一個用於每層的輸出),形狀為(batch_size, sequence_length, hidden_size)
。模型在每個層輸出的隱藏狀態以及可選的初始嵌入輸出。
-
attentions (
tuple[torch.FloatTensor, ...]
, 可選, 當傳入output_attentions=True
或config.output_attentions=True
時返回) —torch.FloatTensor
元組(每層一個),形狀為(batch_size, num_heads, sequence_length, sequence_length)
。注意力 softmax 後的注意力權重,用於計算自注意力頭中的加權平均值。
-
reshaped_hidden_states (
tuple(torch.FloatTensor)
, 可選, 當傳入output_hidden_states=True
或config.output_hidden_states=True
時返回) —torch.FloatTensor
元組(一個用於嵌入層的輸出,外加一個用於每個階段的輸出),形狀為(batch_size, hidden_size, height, width)
。模型在每層輸出處的隱藏狀態,以及重新調整以包含空間維度的初始嵌入輸出。
Swinv2Model 的 forward 方法,重寫了 __call__
特殊方法。
儘管前向傳播的實現需要在函式內部定義,但之後應該呼叫 Module
例項,而不是此函式,因為前者負責執行預處理和後處理步驟,而後者會默默地忽略它們。
Swinv2ForMaskedImageModeling
類 transformers.Swinv2ForMaskedImageModeling
< 源 >( config )
引數
- config (Swinv2ForMaskedImageModeling) — 模型配置類,包含模型的所有引數。使用配置檔案初始化不會載入與模型相關的權重,只加載配置。請檢視 from_pretrained() 方法來載入模型權重。
Swinv2 模型,頂部帶有解碼器,用於掩碼影像建模,如 SimMIM 中所提出的。
請注意,我們在 examples directory 中提供了一個指令碼,用於在自定義資料上預訓練此模型。
此模型繼承自 PreTrainedModel。請檢視超類文件,瞭解庫為所有模型實現的通用方法(例如下載或儲存、調整輸入嵌入大小、修剪頭部等)。
此模型也是 PyTorch torch.nn.Module 子類。請將其作為常規 PyTorch 模組使用,並參考 PyTorch 文件以獲取所有與通用用法和行為相關的事項。
前向傳播
< 源 >( pixel_values: typing.Optional[torch.FloatTensor] = None bool_masked_pos: typing.Optional[torch.BoolTensor] = None head_mask: typing.Optional[torch.FloatTensor] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None interpolate_pos_encoding: bool = False return_dict: typing.Optional[bool] = None ) → transformers.models.swinv2.modeling_swinv2.Swinv2MaskedImageModelingOutput
或 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}
處理影像)。 - bool_masked_pos (
torch.BoolTensor
,形狀為(batch_size, num_patches)
) — 布林掩碼位置。指示哪些補丁被掩碼 (1) 哪些未被掩碼 (0)。 - head_mask (
torch.FloatTensor
,形狀為(num_heads,)
或(num_layers, num_heads)
,可選) — 用於使自注意力模組的選定頭無效的掩碼。掩碼值選擇在[0, 1]
之間:- 1 表示頭未被掩碼,
- 0 表示頭已被掩碼。
- output_attentions (
bool
,可選) — 是否返回所有注意力層的注意力張量。有關詳細資訊,請參閱返回張量中的attentions
。 - output_hidden_states (
bool
,可選) — 是否返回所有層的隱藏狀態。有關詳細資訊,請參閱返回張量中的hidden_states
。 - interpolate_pos_encoding (
bool
,預設為False
) — 是否對預訓練的位置編碼進行插值。 - return_dict (
bool
,可選) — 是否返回 ModelOutput 而不是普通的元組。
返回
transformers.models.swinv2.modeling_swinv2.Swinv2MaskedImageModelingOutput
或 tuple(torch.FloatTensor)
一個 transformers.models.swinv2.modeling_swinv2.Swinv2MaskedImageModelingOutput
或一個 torch.FloatTensor
元組(如果傳遞 return_dict=False
或 config.return_dict=False
時),包含取決於配置 (Swinv2Config) 和輸入的不同元素。
-
loss (
torch.FloatTensor
,形狀為(1,)
,可選,當提供bool_masked_pos
時返回) — 掩碼影像建模 (MLM) 損失。 -
reconstruction (
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)
。模型在每個層輸出的隱藏狀態以及可選的初始嵌入輸出。
-
attentions (
tuple[torch.FloatTensor, ...]
, 可選, 當傳入output_attentions=True
或config.output_attentions=True
時返回) —torch.FloatTensor
元組(每層一個),形狀為(batch_size, num_heads, sequence_length, sequence_length)
。注意力 softmax 後的注意力權重,用於計算自注意力頭中的加權平均值。
-
reshaped_hidden_states (
tuple(torch.FloatTensor)
, 可選, 當傳入output_hidden_states=True
或config.output_hidden_states=True
時返回) —torch.FloatTensor
元組(一個用於嵌入層的輸出,外加一個用於每個階段的輸出),形狀為(batch_size, hidden_size, height, width)
。模型在每層輸出處的隱藏狀態,以及重新調整以包含空間維度的初始嵌入輸出。
Swinv2ForMaskedImageModeling 的 forward 方法,覆蓋了 __call__
特殊方法。
儘管前向傳播的實現需要在函式內部定義,但之後應該呼叫 Module
例項,而不是此函式,因為前者負責執行預處理和後處理步驟,而後者會默默地忽略它們。
示例
>>> from transformers import AutoImageProcessor, Swinv2ForMaskedImageModeling
>>> import torch
>>> from PIL import Image
>>> import requests
>>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
>>> image = Image.open(requests.get(url, stream=True).raw)
>>> image_processor = AutoImageProcessor.from_pretrained("microsoft/swinv2-tiny-patch4-window8-256")
>>> model = Swinv2ForMaskedImageModeling.from_pretrained("microsoft/swinv2-tiny-patch4-window8-256")
>>> num_patches = (model.config.image_size // model.config.patch_size) ** 2
>>> pixel_values = image_processor(images=image, return_tensors="pt").pixel_values
>>> # create random boolean mask of shape (batch_size, num_patches)
>>> bool_masked_pos = torch.randint(low=0, high=2, size=(1, num_patches)).bool()
>>> outputs = model(pixel_values, bool_masked_pos=bool_masked_pos)
>>> loss, reconstructed_pixel_values = outputs.loss, outputs.reconstruction
>>> list(reconstructed_pixel_values.shape)
[1, 3, 256, 256]
Swinv2ForImageClassification
class transformers.Swinv2ForImageClassification
< 源 >( config )
引數
- config (Swinv2ForImageClassification) — 模型的配置類,包含模型的所有引數。使用配置檔案初始化不載入與模型關聯的權重,只加載配置。請檢視 from_pretrained() 方法來載入模型權重。
Swinv2 模型變換器,頂部帶有一個影像分類頭([CLS] 標記最終隱藏狀態之上的線性層),例如用於 ImageNet。
請注意,透過在模型的 forward 方法中將 interpolate_pos_encoding
設定為 True
,可以將 SwinV2 微調到比其訓練影像更高解析度的影像上。這將把預訓練的位置嵌入插值到更高解析度。
此模型繼承自 PreTrainedModel。請檢視超類文件,瞭解庫為所有模型實現的通用方法(例如下載或儲存、調整輸入嵌入大小、修剪頭部等)。
此模型也是 PyTorch torch.nn.Module 子類。請將其作為常規 PyTorch 模組使用,並參考 PyTorch 文件以獲取所有與通用用法和行為相關的事項。
前向傳播
< 源 >( pixel_values: typing.Optional[torch.FloatTensor] = None head_mask: typing.Optional[torch.FloatTensor] = None labels: typing.Optional[torch.LongTensor] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None interpolate_pos_encoding: bool = False return_dict: typing.Optional[bool] = None ) → transformers.models.swinv2.modeling_swinv2.Swinv2ImageClassifierOutput
或 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}
處理影像)。 - head_mask (
torch.FloatTensor
,形狀為(num_heads,)
或(num_layers, num_heads)
,可選) — 用於使自注意力模組的選定頭無效的掩碼。掩碼值選擇在[0, 1]
之間:- 1 表示頭未被掩碼,
- 0 表示頭已被掩碼。
- labels (
torch.LongTensor
,形狀為(batch_size,)
,可選) — 用於計算影像分類/迴歸損失的標籤。索引應在[0, ..., config.num_labels - 1]
之間。如果config.num_labels == 1
,則計算迴歸損失(均方損失);如果config.num_labels > 1
,則計算分類損失(交叉熵)。 - output_attentions (
bool
,可選) — 是否返回所有注意力層的注意力張量。有關詳細資訊,請參閱返回張量中的attentions
。 - output_hidden_states (
bool
,可選) — 是否返回所有層的隱藏狀態。有關詳細資訊,請參閱返回張量中的hidden_states
。 - interpolate_pos_encoding (
bool
,預設為False
) — 是否對預訓練的位置編碼進行插值。 - return_dict (
bool
,可選) — 是否返回 ModelOutput 而不是普通的元組。
返回
transformers.models.swinv2.modeling_swinv2.Swinv2ImageClassifierOutput
或 tuple(torch.FloatTensor)
一個 transformers.models.swinv2.modeling_swinv2.Swinv2ImageClassifierOutput
或一個 torch.FloatTensor
元組(如果傳遞 return_dict=False
或 config.return_dict=False
時),包含取決於配置 (Swinv2Config) 和輸入的不同元素。
-
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, sequence_length, hidden_size)
。模型在每個層輸出的隱藏狀態以及可選的初始嵌入輸出。
-
attentions (
tuple[torch.FloatTensor, ...]
, 可選, 當傳入output_attentions=True
或config.output_attentions=True
時返回) —torch.FloatTensor
元組(每層一個),形狀為(batch_size, num_heads, sequence_length, sequence_length)
。注意力 softmax 後的注意力權重,用於計算自注意力頭中的加權平均值。
-
reshaped_hidden_states (
tuple(torch.FloatTensor)
, 可選, 當傳入output_hidden_states=True
或config.output_hidden_states=True
時返回) —torch.FloatTensor
元組(一個用於嵌入層的輸出,外加一個用於每個階段的輸出),形狀為(batch_size, hidden_size, height, width)
。模型在每層輸出處的隱藏狀態,以及重新調整以包含空間維度的初始嵌入輸出。
Swinv2ForImageClassification 的 forward 方法,覆蓋了 __call__
特殊方法。
儘管前向傳播的實現需要在函式內部定義,但之後應該呼叫 Module
例項,而不是此函式,因為前者負責執行預處理和後處理步驟,而後者會默默地忽略它們。
示例
>>> from transformers import AutoImageProcessor, Swinv2ForImageClassification
>>> import torch
>>> from datasets import load_dataset
>>> dataset = load_dataset("huggingface/cats-image")
>>> image = dataset["test"]["image"][0]
>>> image_processor = AutoImageProcessor.from_pretrained("microsoft/swinv2-tiny-patch4-window8-256")
>>> model = Swinv2ForImageClassification.from_pretrained("microsoft/swinv2-tiny-patch4-window8-256")
>>> 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])
...