Transformers 文件

UPerNet

Hugging Face's logo
加入 Hugging Face 社群

並獲得增強的文件體驗

開始使用

UPerNet

PyTorch

概述

UPerNet 模型由 Tete Xiao, Yingcheng Liu, Bolei Zhou, Yuning Jiang, Jian Sun 在 Unified Perceptual Parsing for Scene Understanding 中提出。UPerNet 是一個通用框架,可以有效地分割影像中的各種概念,利用任何視覺主幹網路,如 ConvNeXtSwin

論文摘要如下:

人類在多個層面識別視覺世界:我們毫不費力地對場景進行分類,檢測其中的物體,同時識別物體的紋理和表面以及它們的不同組成部分。在本文中,我們研究了一個名為“統一感知解析”的新任務,它要求機器視覺系統從給定影像中識別儘可能多的視覺概念。我們開發了一個名為 UPerNet 的多工框架和一種訓練策略,以從異構影像標註中學習。我們在統一感知解析上對我們的框架進行了基準測試,結果表明它能夠有效地分割影像中的各種概念。訓練好的網路進一步應用於發現自然場景中的視覺知識。

drawing 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。

如果您有興趣在此處提交資源,請隨時開啟 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 (PretrainedConfigdict, 可選, 預設為 ResNetConfig()) — 主幹模型的配置。
  • backbone (str, 可選) — 當 backbone_configNone 時使用的主幹網路的名稱。如果 use_pretrained_backboneTrue,這將從 timm 或 transformers 庫載入相應的預訓練權重。如果 use_pretrained_backboneFalse,這將載入主幹網路的配置並使用它來隨機初始化主幹網路。
  • 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 )

引數

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.SemanticSegmenterOutputtuple(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.SemanticSegmenterOutputtuple(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=Trueconfig.output_hidden_states=True 時返回) — 形狀為 (batch_size, patch_size, hidden_size)torch.FloatTensor 元組(一個用於嵌入層輸出(如果模型有嵌入層),+ 每個層的輸出一個)。

    模型在每個層輸出的隱藏狀態以及可選的初始嵌入輸出。

  • attentions (tuple(torch.FloatTensor), 可選, 當傳入 output_attentions=Trueconfig.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]
< > 在 GitHub 上更新

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