Transformers 文件
UPerNet
並獲得增強的文件體驗
開始使用
UPerNet
概述
UPerNet 模型由 Tete Xiao, Yingcheng Liu, Bolei Zhou, Yuning Jiang, Jian Sun 在 Unified Perceptual Parsing for Scene Understanding 中提出。UPerNet 是一個通用框架,可以有效地分割影像中的各種概念,利用任何視覺主幹網路,如 ConvNeXt 或 Swin。
論文摘要如下:
人類在多個層面識別視覺世界:我們毫不費力地對場景進行分類,檢測其中的物體,同時識別物體的紋理和表面以及它們的不同組成部分。在本文中,我們研究了一個名為“統一感知解析”的新任務,它要求機器視覺系統從給定影像中識別儘可能多的視覺概念。我們開發了一個名為 UPerNet 的多工框架和一種訓練策略,以從異構影像標註中學習。我們在統一感知解析上對我們的框架進行了基準測試,結果表明它能夠有效地分割影像中的各種概念。訓練好的網路進一步應用於發現自然場景中的視覺知識。

該模型由 nielsr 貢獻。原始程式碼基於 OpenMMLab 的 mmsegmentation 此處。
使用示例
UPerNet 是一個通用的語義分割框架。它可以與任何視覺主幹網路一起使用,例如:
from transformers import SwinConfig, UperNetConfig, UperNetForSemanticSegmentation
backbone_config = SwinConfig(out_features=["stage1", "stage2", "stage3", "stage4"])
config = UperNetConfig(backbone_config=backbone_config)
model = UperNetForSemanticSegmentation(config)
要使用另一個視覺主幹網路,例如 ConvNeXt,只需使用適當的主幹網路例項化模型
from transformers import ConvNextConfig, UperNetConfig, UperNetForSemanticSegmentation
backbone_config = ConvNextConfig(out_features=["stage1", "stage2", "stage3", "stage4"])
config = UperNetConfig(backbone_config=backbone_config)
model = UperNetForSemanticSegmentation(config)
請注意,這將隨機初始化模型的所有權重。
資源
官方 Hugging Face 和社群(🌎 表示)資源列表,可幫助您開始使用 UPerNet。
- UPerNet 的演示筆記本可以在此處找到。
- UperNetForSemanticSegmentation 受此示例指令碼和筆記本支援。
- 另請參見:語義分割任務指南
如果您有興趣在此處提交資源,請隨時開啟 Pull Request,我們將對其進行審查!該資源最好能展示一些新內容,而不是重複現有資源。
UperNetConfig
class transformers.UperNetConfig
< 源 >( backbone_config = None backbone = None use_pretrained_backbone = False use_timm_backbone = False backbone_kwargs = None hidden_size = 512 initializer_range = 0.02 pool_scales = [1, 2, 3, 6] use_auxiliary_head = True auxiliary_loss_weight = 0.4 auxiliary_in_channels = None auxiliary_channels = 256 auxiliary_num_convs = 1 auxiliary_concat_input = False loss_ignore_index = 255 **kwargs )
引數
- backbone_config (
PretrainedConfig
或dict
, 可選, 預設為ResNetConfig()
) — 主幹模型的配置。 - backbone (
str
, 可選) — 當backbone_config
為None
時使用的主幹網路的名稱。如果use_pretrained_backbone
為True
,這將從 timm 或 transformers 庫載入相應的預訓練權重。如果use_pretrained_backbone
為False
,這將載入主幹網路的配置並使用它來隨機初始化主幹網路。 - use_pretrained_backbone (
bool
, 可選,False
) — 是否使用主幹網路的預訓練權重。 - use_timm_backbone (
bool
, 可選,False
) — 是否從 timm 庫載入backbone
。如果為False
,則從 transformers 庫載入主幹網路。 - backbone_kwargs (
dict
, 可選) — 載入檢查點時傳遞給 AutoBackbone 的關鍵字引數,例如{'out_indices': (0, 1, 2, 3)}
。如果設定了backbone_config
則無法指定。 - hidden_size (
int
, 可選, 預設為 512) — 卷積層中的隱藏單元數。 - initializer_range (
float
, 可選, 預設為 0.02) — 用於初始化所有權重矩陣的 truncated_normal_initializer 的標準差。 - pool_scales (
tuple[int]
, 可選, 預設為[1, 2, 3, 6]
) — 應用於最後一個特徵圖的池化金字塔模組中使用的池化比例。 - use_auxiliary_head (
bool
, 可選, 預設為True
) — 訓練期間是否使用輔助頭。 - auxiliary_loss_weight (
float
, 可選, 預設為 0.4) — 輔助頭的交叉熵損失權重。 - auxiliary_channels (
int
, 可選, 預設為 256) — 輔助頭中使用的通道數。 - auxiliary_num_convs (
int
, 可選, 預設為 1) — 輔助頭中使用的卷積層數。 - auxiliary_concat_input (
bool
, 可選, 預設為False
) — 是否在分類層之前將輔助頭的輸出與輸入連線起來。 - loss_ignore_index (
int
, 可選, 預設為 255) — 損失函式忽略的索引。
這是用於儲存 UperNetForSemanticSegmentation 配置的配置類。它用於根據指定引數例項化 UPerNet 模型,定義模型架構。使用預設值例項化配置將產生類似於 UPerNet openmmlab/upernet-convnext-tiny 架構的配置。
配置物件繼承自 PretrainedConfig,可用於控制模型輸出。有關更多資訊,請參閱 PretrainedConfig 的文件。
示例
>>> from transformers import UperNetConfig, UperNetForSemanticSegmentation
>>> # Initializing a configuration
>>> configuration = UperNetConfig()
>>> # Initializing a model (with random weights) from the configuration
>>> model = UperNetForSemanticSegmentation(configuration)
>>> # Accessing the model configuration
>>> configuration = model.config
UperNetForSemanticSegmentation
class transformers.UperNetForSemanticSegmentation
< 源 >( config )
引數
- config (UperNetForSemanticSegmentation) — 包含模型所有引數的模型配置類。使用配置檔案初始化不載入與模型關聯的權重,僅載入配置。檢視 from_pretrained() 方法以載入模型權重。
UperNet 框架利用任何視覺主幹網路,例如用於 ADE20k、CityScapes。
此模型繼承自 PreTrainedModel。有關庫為其所有模型實現的通用方法(例如下載或儲存、調整輸入嵌入大小、修剪頭部等),請檢視超類文件。
此模型也是 PyTorch torch.nn.Module 子類。將其用作常規 PyTorch 模組,並參考 PyTorch 文件以獲取所有與一般用法和行為相關的事項。
前向
< 源 >( pixel_values: typing.Optional[torch.Tensor] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None labels: typing.Optional[torch.Tensor] = None return_dict: typing.Optional[bool] = None ) → transformers.modeling_outputs.SemanticSegmenterOutput 或 tuple(torch.FloatTensor)
引數
- pixel_values (形狀為
(batch_size, num_channels, image_size, image_size)
的torch.Tensor
,可選) — 對應於輸入影像的張量。畫素值可以使用{image_processor_class}
獲得。有關詳細資訊,請參見{image_processor_class}.__call__
({processor_class}
使用{image_processor_class}
處理影像)。 - output_attentions (
bool
, 可選) — 是否返回所有注意力層的注意力張量。有關更多詳細資訊,請參見返回張量下的attentions
。 - output_hidden_states (
bool
, 可選) — 是否返回所有層的隱藏狀態。有關更多詳細資訊,請參見返回張量下的hidden_states
。 - labels (形狀為
(batch_size, height, width)
的torch.LongTensor
,可選) — 用於計算損失的真實語義分割圖。索引應在[0, ..., config.num_labels - 1]
範圍內。如果config.num_labels > 1
,則計算分類損失(交叉熵)。 - return_dict (
bool
, 可選) — 是否返回 ModelOutput 而不是純元組。
返回
transformers.modeling_outputs.SemanticSegmenterOutput 或 tuple(torch.FloatTensor)
一個 transformers.modeling_outputs.SemanticSegmenterOutput 或一個 torch.FloatTensor
元組(如果傳遞 return_dict=False
或當 config.return_dict=False
時),包含根據配置 (UperNetConfig) 和輸入的不同元素。
-
loss (形狀為
(1,)
的torch.FloatTensor
,可選,當提供labels
時返回) — 分類損失(如果 config.num_labels==1,則為迴歸損失)。 -
logits (形狀為
(batch_size, config.num_labels, logits_height, logits_width)
的torch.FloatTensor
) — 每個畫素的分類分數。返回的 logits 大小不一定與作為輸入傳遞的
pixel_values
相同。這是為了避免兩次插值並在使用者需要將 logits 調整到原始影像大小時作為後處理而損失一些質量。您應始終檢查 logits 形狀並根據需要調整大小。 -
hidden_states (
tuple(torch.FloatTensor)
, 可選, 當傳入output_hidden_states=True
或config.output_hidden_states=True
時返回) — 形狀為(batch_size, patch_size, hidden_size)
的torch.FloatTensor
元組(一個用於嵌入層輸出(如果模型有嵌入層),+ 每個層的輸出一個)。模型在每個層輸出的隱藏狀態以及可選的初始嵌入輸出。
-
attentions (
tuple(torch.FloatTensor)
, 可選, 當傳入output_attentions=True
或config.output_attentions=True
時返回) — 形狀為(batch_size, num_heads, patch_size, sequence_length)
的torch.FloatTensor
元組(每個層一個)。注意力 softmax 後的注意力權重,用於計算自注意力頭中的加權平均值。
UperNetForSemanticSegmentation 的前向方法,覆蓋了 __call__
特殊方法。
儘管前向傳播的實現需要在該函式中定義,但應在此之後呼叫 Module
例項,因為前者負責執行預處理和後處理步驟,而後者則默默忽略它們。
示例
>>> from transformers import AutoImageProcessor, UperNetForSemanticSegmentation
>>> from PIL import Image
>>> from huggingface_hub import hf_hub_download
>>> image_processor = AutoImageProcessor.from_pretrained("openmmlab/upernet-convnext-tiny")
>>> model = UperNetForSemanticSegmentation.from_pretrained("openmmlab/upernet-convnext-tiny")
>>> filepath = hf_hub_download(
... repo_id="hf-internal-testing/fixtures_ade20k", filename="ADE_val_00000001.jpg", repo_type="dataset"
... )
>>> image = Image.open(filepath).convert("RGB")
>>> inputs = image_processor(images=image, return_tensors="pt")
>>> outputs = model(**inputs)
>>> logits = outputs.logits # shape (batch_size, num_labels, height, width)
>>> list(logits.shape)
[1, 150, 512, 512]