Transformers 文件
MaskFormer
並獲得增強的文件體驗
開始使用
MaskFormer
這是一個最近推出的模型,因此 API 尚未經過廣泛測試。未來可能會有一些錯誤修復或輕微的破壞性更改。如果您發現任何異常情況,請提交 Github Issue。
概述
MaskFormer 模型由 Bowen Cheng、Alexander G. Schwing 和 Alexander Kirillov 在論文 Per-Pixel Classification is Not All You Need for Semantic Segmentation 中提出。MaskFormer 使用掩碼分類正規化來解決語義分割問題,而不是執行經典的畫素級分類。
論文摘要如下:
現代方法通常將語義分割表述為逐畫素分類任務,而例項級分割則透過另一種掩碼分類方法來處理。我們的關鍵見解是:掩碼分類足夠通用,可以使用完全相同的模型、損失和訓練過程,以統一的方式解決語義級和例項級分割任務。基於這一觀察,我們提出了 MaskFormer,一個簡單的掩碼分類模型,它預測一組二進位制掩碼,每個掩碼都與一個單一的全域性類別標籤預測相關聯。總的來說,我們提出的基於掩碼分類的方法簡化了語義和全景分割任務的有效方法,並顯示出優異的實驗結果。特別地,我們觀察到當類別數量較多時,MaskFormer 的效能優於逐畫素分類基線。我們基於掩碼分類的方法在語義分割(在 ADE20K 上達到 55.6 mIoU)和全景分割(在 COCO 上達到 52.7 PQ)方面均優於當前最先進的模型。
下圖展示了 MaskFormer 的架構。圖片來自原始論文。

該模型由 francesco 貢獻。原始程式碼可以在這裡找到。
使用技巧
- MaskFormer 的 Transformer 解碼器與 DETR 的解碼器相同。在訓練過程中,DETR 的作者發現,在解碼器中使用輔助損失非常有幫助,特別是為了幫助模型輸出每個類別的正確物件數量。如果您將 MaskFormerConfig 的引數 `use_auxiliary_loss` 設定為 `True`,那麼在每個解碼器層之後都會新增預測前饋神經網路和匈牙利損失(FFN 共享引數)。
- 如果你想在多節點分散式環境中訓練模型,那麼應該更新 `modeling_maskformer.py` 中 `MaskFormerLoss` 類裡的 `get_num_masks` 函式。在多節點上訓練時,應將其設定為所有節點上目標掩碼的平均數,正如原始實現中所示,請參閱這裡。
- 您可以使用 MaskFormerImageProcessor 為模型準備影像和可選的目標。
- 要獲得最終的分割結果,根據任務的不同,您可以呼叫 post_process_semantic_segmentation() 或 post_process_panoptic_segmentation()。這兩個任務都可以使用 MaskFormerForInstanceSegmentation 的輸出解決,全景分割接受一個可選的 `label_ids_to_fuse` 引數,用於將目標物件的例項(例如天空)融合在一起。
資源
- 所有展示使用 MaskFormer 進行推理以及在自定義資料上進行微調的 notebook 都可以在這裡找到。
- 使用 Trainer 或 Accelerate 微調 `MaskFormer` 的指令碼可以在這裡找到。
MaskFormer 特定輸出
class transformers.models.maskformer.modeling_maskformer.MaskFormerModelOutput
< 原始碼 >( encoder_last_hidden_state: typing.Optional[torch.FloatTensor] = None pixel_decoder_last_hidden_state: typing.Optional[torch.FloatTensor] = None transformer_decoder_last_hidden_state: typing.Optional[torch.FloatTensor] = None encoder_hidden_states: typing.Optional[tuple[torch.FloatTensor]] = None pixel_decoder_hidden_states: typing.Optional[tuple[torch.FloatTensor]] = None transformer_decoder_hidden_states: typing.Optional[tuple[torch.FloatTensor]] = None hidden_states: typing.Optional[tuple[torch.FloatTensor]] = None attentions: typing.Optional[tuple[torch.FloatTensor]] = None )
引數
- encoder_last_hidden_state (
torch.FloatTensor
,形狀為(batch_size, num_channels, height, width)
) — 編碼器模型(主幹網路)最後一個階段的最後隱藏狀態(最終特徵圖)。 - pixel_decoder_last_hidden_state (
torch.FloatTensor
,形狀為(batch_size, num_channels, height, width)
) — 畫素解碼器模型(FPN)最後一個階段的最後隱藏狀態(最終特徵圖)。 - transformer_decoder_last_hidden_state (
torch.FloatTensor
,形狀為(batch_size, sequence_length, hidden_size)
) — transformer 解碼器模型最後一個階段的最後隱藏狀態(最終特徵圖)。 - encoder_hidden_states (
tuple(torch.FloatTensor)
,*可選*,在傳遞 `output_hidden_states=True` 或 `config.output_hidden_states=True` 時返回) — `torch.FloatTensor` 的元組(一個用於嵌入層的輸出 + 每個階段的輸出),形狀為 `(batch_size, num_channels, height, width)`。編碼器模型每個階段輸出的隱藏狀態(也稱為特徵圖)。 - pixel_decoder_hidden_states (
tuple(torch.FloatTensor)
,*可選*,在傳遞 `output_hidden_states=True` 或 `config.output_hidden_states=True` 時返回) — `torch.FloatTensor` 的元組(一個用於嵌入層的輸出 + 每個階段的輸出),形狀為 `(batch_size, num_channels, height, width)`。畫素解碼器模型每個階段輸出的隱藏狀態(也稱為特徵圖)。 - transformer_decoder_hidden_states (
tuple(torch.FloatTensor)
,*可選*,在傳遞 `output_hidden_states=True` 或 `config.output_hidden_states=True` 時返回) — `torch.FloatTensor` 的元組(一個用於嵌入層的輸出 + 每個階段的輸出),形狀為 `(batch_size, sequence_length, hidden_size)`。transformer 解碼器每個階段輸出的隱藏狀態(也稱為特徵圖)。 - hidden_states `tuple(torch.FloatTensor)`,*可選*,在傳遞 `output_hidden_states=True` 或 `config.output_hidden_states=True` 時返回) — 包含 `encoder_hidden_states`、`pixel_decoder_hidden_states` 和 `decoder_hidden_states` 的 `torch.FloatTensor` 元組。
- 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)`。經過 attention softmax 後的注意力權重,用於計算自注意力頭中的加權平均值。
MaskFormerModel 輸出的類。該類返回計算 logits 所需的所有隱藏狀態。
class transformers.models.maskformer.modeling_maskformer.MaskFormerForInstanceSegmentationOutput
< 原始碼 >( loss: typing.Optional[torch.FloatTensor] = None class_queries_logits: typing.Optional[torch.FloatTensor] = None masks_queries_logits: typing.Optional[torch.FloatTensor] = None auxiliary_logits: typing.Optional[torch.FloatTensor] = None encoder_last_hidden_state: typing.Optional[torch.FloatTensor] = None pixel_decoder_last_hidden_state: typing.Optional[torch.FloatTensor] = None transformer_decoder_last_hidden_state: typing.Optional[torch.FloatTensor] = None encoder_hidden_states: typing.Optional[tuple[torch.FloatTensor]] = None pixel_decoder_hidden_states: typing.Optional[tuple[torch.FloatTensor]] = None transformer_decoder_hidden_states: typing.Optional[tuple[torch.FloatTensor]] = None hidden_states: typing.Optional[tuple[torch.FloatTensor]] = None attentions: typing.Optional[tuple[torch.FloatTensor]] = None )
引數
- loss (
torch.Tensor
,*可選*) — 當標籤存在時返回的計算損失。 - class_queries_logits (
torch.FloatTensor
,*可選*,預設為 `None`) — 形狀為 `(batch_size, num_queries, num_labels + 1)` 的張量,表示每個查詢的建議類別。請注意,需要 `+ 1` 是因為我們包含了空類別。 - masks_queries_logits (
torch.FloatTensor
,*可選*,預設為 `None`) — 形狀為 `(batch_size, num_queries, height, width)` 的張量,表示每個查詢的建議掩碼。 - auxiliary_logits (
Dict[str, torch.FloatTensor]
,*可選*,在 `output_auxiliary_logits=True` 時返回) — 包含每個解碼器層的輔助預測的字典,當啟用輔助損失時。 - encoder_last_hidden_state (
torch.FloatTensor
,形狀為(batch_size, num_channels, height, width)
) — 編碼器模型(主幹網路)最後一個階段的最後隱藏狀態(最終特徵圖)。 - pixel_decoder_last_hidden_state (
torch.FloatTensor
,形狀為(batch_size, num_channels, height, width)
) — 畫素解碼器模型(FPN)最後一個階段的最後隱藏狀態(最終特徵圖)。 - transformer_decoder_last_hidden_state (
torch.FloatTensor
,形狀為(batch_size, sequence_length, hidden_size)
) — transformer 解碼器模型最後一個階段的最後隱藏狀態(最終特徵圖)。 - encoder_hidden_states (
tuple(torch.FloatTensor)
,*可選*,在傳遞 `output_hidden_states=True` 或 `config.output_hidden_states=True` 時返回) — `torch.FloatTensor` 的元組(一個用於嵌入層的輸出 + 每個階段的輸出),形狀為 `(batch_size, num_channels, height, width)`。編碼器模型每個階段輸出的隱藏狀態(也稱為特徵圖)。 - pixel_decoder_hidden_states (
tuple(torch.FloatTensor)
,*可選*,在傳遞 `output_hidden_states=True` 或 `config.output_hidden_states=True` 時返回) — `torch.FloatTensor` 的元組(一個用於嵌入層的輸出 + 每個階段的輸出),形狀為 `(batch_size, num_channels, height, width)`。畫素解碼器模型每個階段輸出的隱藏狀態(也稱為特徵圖)。 - transformer_decoder_hidden_states (
tuple(torch.FloatTensor)
,*可選*,在傳遞 `output_hidden_states=True` 或 `config.output_hidden_states=True` 時返回) — `torch.FloatTensor` 的元組(一個用於嵌入層的輸出 + 每個階段的輸出),形狀為 `(batch_size, sequence_length, hidden_size)`。transformer 解碼器每個階段輸出的隱藏狀態。 - hidden_states `tuple(torch.FloatTensor)`,*可選*,在傳遞 `output_hidden_states=True` 或 `config.output_hidden_states=True` 時返回) — 包含 `encoder_hidden_states`、`pixel_decoder_hidden_states` 和 `decoder_hidden_states` 的 `torch.FloatTensor` 元組。
- 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)`。經過 attention softmax 後的注意力權重,用於計算自注意力頭中的加權平均值。
MaskFormerForInstanceSegmentation 的輸出類。
此輸出可以直接傳遞給 post_process_semantic_segmentation() 或 post_process_instance_segmentation() 或 post_process_panoptic_segmentation(),具體取決於任務。有關使用詳情,請參閱 [`~MaskFormerImageProcessor]。
MaskFormerConfig
class transformers.MaskFormerConfig
< 原始碼 >( fpn_feature_size: int = 256 mask_feature_size: int = 256 no_object_weight: float = 0.1 use_auxiliary_loss: bool = False backbone_config: typing.Optional[dict] = None decoder_config: typing.Optional[dict] = None init_std: float = 0.02 init_xavier_std: float = 1.0 dice_weight: float = 1.0 cross_entropy_weight: float = 1.0 mask_weight: float = 20.0 output_auxiliary_logits: typing.Optional[bool] = None backbone: typing.Optional[str] = None use_pretrained_backbone: bool = False use_timm_backbone: bool = False backbone_kwargs: typing.Optional[dict] = None **kwargs )
引數
- mask_feature_size (
int
,*可選*,預設為 256) — 掩碼的特徵大小,該值也將用於指定特徵金字塔網路(Feature Pyramid Network)的特徵大小。 - no_object_weight (
float
,*可選*,預設為 0.1) — 應用於空(無物件)類別的權重。 - use_auxiliary_loss(
bool
, *可選*,預設為 `False`) — 如果為 `True`,`MaskFormerForInstanceSegmentationOutput` 將包含使用每個解碼器階段的 logits 計算的輔助損失。 - backbone_config (
Dict
,*可選*) — 傳遞給主幹網路的配置,如果未設定,將使用對應於 `swin-base-patch4-window12-384` 的配置。 - 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`,則不能指定此引數。 - decoder_config (
Dict
,*可選*) — 傳遞給 transformer 解碼器模型的配置,如果未設定,將使用 `detr-resnet-50` 的基本配置。 - init_std (
float
, 可選, 預設為 0.02) — 用於初始化所有權重矩陣的 truncated_normal_initializer 的標準差。 - init_xavier_std (
float
, 可選, 預設為 1) — 在 HM Attention 地圖模組中,用於 Xavier 初始化增益的縮放因子。 - dice_weight (
float
, 可選, 預設為 1.0) — Dice 損失的權重。 - cross_entropy_weight (
float
, 可選, 預設為 1.0) — 交叉熵損失的權重。 - mask_weight (
float
, 可選, 預設為 20.0) — 掩碼損失的權重。 - output_auxiliary_logits (
bool
, 可選) — 模型是否應輸出其 `auxiliary_logits`。
引發
ValueError
ValueError
— 如果選擇的主幹模型型別不在 `["swin"]` 中,或者選擇的解碼器模型型別不在 `["detr"]` 中,則會引發此錯誤。
這是用於儲存 MaskFormerModel 配置的配置類。它用於根據指定的引數例項化一個 MaskFormer 模型,定義模型架構。使用預設值例項化配置將產生與在 ADE20k-150 上訓練的 MaskFormer facebook/maskformer-swin-base-ade 架構相似的配置。
配置物件繼承自 PretrainedConfig,可用於控制模型輸出。有關更多資訊,請閱讀 PretrainedConfig 的文件。
目前,MaskFormer 僅支援 Swin Transformer 作為主幹。
示例
>>> from transformers import MaskFormerConfig, MaskFormerModel
>>> # Initializing a MaskFormer facebook/maskformer-swin-base-ade configuration
>>> configuration = MaskFormerConfig()
>>> # Initializing a model (with random weights) from the facebook/maskformer-swin-base-ade style configuration
>>> model = MaskFormerModel(configuration)
>>> # Accessing the model configuration
>>> configuration = model.config
from_backbone_and_decoder_configs
< 原始碼 >( backbone_config: PretrainedConfig decoder_config: PretrainedConfig **kwargs ) → MaskFormerConfig
引數
- backbone_config (PretrainedConfig) — 主幹配置。
- decoder_config (PretrainedConfig) — 要使用的 Transformer 解碼器配置。
一個配置物件的例項
從一個預訓練的主幹模型配置和 DETR 模型配置中例項化一個 MaskFormerConfig(或其派生類)。
MaskFormerImageProcessor
class transformers.MaskFormerImageProcessor
< 原始碼 >( do_resize: bool = True size: typing.Optional[dict[str, int]] = None size_divisor: int = 32 resample: Resampling = <Resampling.BILINEAR: 2> do_rescale: bool = True rescale_factor: float = 0.00392156862745098 do_normalize: bool = True image_mean: typing.Union[float, list[float], NoneType] = None image_std: typing.Union[float, list[float], NoneType] = None ignore_index: typing.Optional[int] = None do_reduce_labels: bool = False num_labels: typing.Optional[int] = None **kwargs )
引數
- do_resize (
bool
, 可選, 預設為 `True`) — 是否將輸入調整為特定的 `size`。 - size (
int
, 可選, 預設為 800) — 將輸入調整到給定的大小。僅當 `do_resize` 設定為 `True` 時有效。如果 size 是一個序列,如 `(width, height)`,輸出尺寸將與之匹配。如果 size 是一個整數,影像的較短邊將與此數字匹配。即,如果 `height > width`,則影像將被縮放為 `(size * height / width, size)`。 - size_divisor (
int
, 可選, 預設為 32) — 一些主幹網路需要影像尺寸能被特定數字整除。如果未傳遞,則預設為 Swin Transformer 中使用的值。 - resample (
int
, 可選, 預設為 `Resampling.BILINEAR`) — 可選的重取樣過濾器。可以是 `PIL.Image.Resampling.NEAREST`、`PIL.Image.Resampling.BOX`、`PIL.Image.Resampling.BILINEAR`、`PIL.Image.Resampling.HAMMING`、`PIL.Image.Resampling.BICUBIC` 或 `PIL.Image.Resampling.LANCZOS` 中的一個。僅當 `do_resize` 設定為 `True` 時有效。 - do_rescale (
bool
, 可選, 預設為 `True`) — 是否將輸入重新縮放到某個 `scale`。 - rescale_factor (
float
, 可選, 預設為 `1/255`) — 透過給定的因子重新縮放輸入。僅當 `do_rescale` 設定為 `True` 時有效。 - do_normalize (
bool
, 可選, 預設為 `True`) — 是否使用均值和標準差對輸入進行歸一化。 - image_mean (
int
, 可選, 預設為 `[0.485, 0.456, 0.406]`) — 用於歸一化影像的每個通道的均值序列。預設為 ImageNet 的均值。 - image_std (
int
, 可選, 預設為 `[0.229, 0.224, 0.225]`) — 用於歸一化影像的每個通道的標準差序列。預設為 ImageNet 的標準差。 - ignore_index (
int
, 可選) — 在分割圖中分配給背景畫素的標籤。如果提供,分割圖中標記為 0(背景)的畫素將被替換為 `ignore_index`。 - do_reduce_labels (
bool
, 可選, 預設為 `False`) — 是否將分割圖的所有標籤值減 1。通常用於 0 被用作背景的資料集,且背景本身不包含在資料集的所有類別中(例如 ADE20k)。背景標籤將被替換為 `ignore_index`。 - num_labels (
int
, 可選) — 分割圖中的標籤數量。
構建一個 MaskFormer 影像處理器。該影像處理器可用於為模型準備影像和可選的目標。
該影像處理器繼承自 BaseImageProcessor,其中包含大多數主要方法。使用者應參考此超類以獲取有關這些方法的更多資訊。
preprocess
< 原始碼 >( images: typing.Union[ForwardRef('PIL.Image.Image'), numpy.ndarray, ForwardRef('torch.Tensor'), list['PIL.Image.Image'], list[numpy.ndarray], list['torch.Tensor']] segmentation_maps: typing.Union[ForwardRef('PIL.Image.Image'), numpy.ndarray, ForwardRef('torch.Tensor'), list['PIL.Image.Image'], list[numpy.ndarray], list['torch.Tensor'], NoneType] = None instance_id_to_semantic_id: typing.Optional[dict[int, int]] = None do_resize: typing.Optional[bool] = None size: typing.Optional[dict[str, int]] = None size_divisor: typing.Optional[int] = None resample: Resampling = None do_rescale: typing.Optional[bool] = None rescale_factor: typing.Optional[float] = None do_normalize: typing.Optional[bool] = None image_mean: typing.Union[float, list[float], NoneType] = None image_std: typing.Union[float, list[float], NoneType] = None ignore_index: typing.Optional[int] = None do_reduce_labels: typing.Optional[bool] = None return_tensors: typing.Union[str, transformers.utils.generic.TensorType, NoneType] = None data_format: typing.Union[str, transformers.image_utils.ChannelDimension] = <ChannelDimension.FIRST: 'channels_first'> input_data_format: typing.Union[str, transformers.image_utils.ChannelDimension, NoneType] = None )
編碼輸入
< 原始碼 >( pixel_values_list: list segmentation_maps: typing.Union[ForwardRef('PIL.Image.Image'), numpy.ndarray, ForwardRef('torch.Tensor'), list['PIL.Image.Image'], list[numpy.ndarray], list['torch.Tensor']] = None instance_id_to_semantic_id: typing.Union[list[dict[int, int]], dict[int, int], NoneType] = None ignore_index: typing.Optional[int] = None do_reduce_labels: bool = False return_tensors: typing.Union[str, transformers.utils.generic.TensorType, NoneType] = None input_data_format: typing.Union[str, transformers.image_utils.ChannelDimension, NoneType] = None ) → BatchFeature
引數
- pixel_values_list (
list[ImageInput]
) — 要填充的影像(畫素值)列表。每張影像應為形狀 `(channels, height, width)` 的張量。 - segmentation_maps (
ImageInput
, 可選) — 帶有畫素級註釋的相應語義分割圖。(
bool
, 可選, 預設為 `True`):是否將影像填充到批次中最大影像的大小並建立畫素掩碼。如果保留為預設值,將返回一個畫素掩碼:
- 對於真實畫素(即未被掩碼),值為 1,
- 對於填充畫素(即被掩碼),值為 0。
- instance_id_to_semantic_id (
list[dict[int, int]]
或 `dict[int, int]`, 可選) — 物件例項 ID 和類別 ID 之間的對映。如果傳遞此引數,`segmentation_maps` 將被視為例項分割圖,其中每個畫素代表一個例項 ID。可以提供一個全域性/資料集級別的對映的單個字典,也可以提供一個字典列表(每張影像一個),以分別對映每張影像中的例項 ID。 - return_tensors (
str
或 TensorType, 可選) — 如果設定,將返回張量而不是 NumPy 陣列。如果設定為 `'pt'`,則返回 PyTorch `torch.Tensor` 物件。
返回
一個具有以下欄位的 BatchFeature
- pixel_values — 要輸入到模型的畫素值。
- pixel_mask — 要輸入到模型的畫素掩碼(當
=True
或pixel_mask
在self.model_input_names
中時)。 - mask_labels — 可選的掩碼標籤列表,形狀為
(labels, height, width)
,用於輸入到模型(當提供annotations
時)。 - class_labels — 可選的類別標籤列表,形狀為 `(labels)`,用於提供給模型(當提供 `annotations` 時)。它們標識了 `mask_labels` 的標籤,例如,`mask_labels[i][j]` 的標籤是 `class_labels[i][j]`。
將影像填充到批處理中最大的影像,並建立相應的 pixel_mask
。
MaskFormer 使用掩碼分類正規化來解決語義分割問題,因此輸入分割圖將被轉換為二進位制掩碼列表及其各自的標籤。舉個例子,假設 `segmentation_maps = [[2,6,7,9]]`,輸出將包含 `mask_labels = [[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]]`(四個二進位制掩碼)和 `class_labels = [2,6,7,9]`,即每個掩碼的標籤。
post_process_semantic_segmentation
< 原始碼 >( outputs target_sizes: typing.Optional[list[tuple[int, int]]] = None ) → `list[torch.Tensor]`
引數
- outputs (MaskFormerForInstanceSegmentation) — 模型的原始輸出。
- target_sizes (
list[tuple[int, int]]
, 可選) — 長度為 (batch_size) 的列表,其中每個列表項(`tuple[int, int]]`)對應每個預測請求的最終尺寸(高,寬)。如果為 None,則預測不會被調整大小。
返回
list[torch.Tensor]
一個長度為 `batch_size` 的列表,其中每一項是形狀為 (height, width) 的語義分割圖,對應於 target_sizes 條目(如果指定了 `target_sizes`)。每個 `torch.Tensor` 的每個條目對應一個語義類別 ID。
將 MaskFormerForInstanceSegmentation 的輸出轉換為語義分割圖。僅支援 PyTorch。
post_process_instance_segmentation
< 原始碼 >( outputs threshold: float = 0.5 mask_threshold: float = 0.5 overlap_mask_area_threshold: float = 0.8 target_sizes: typing.Optional[list[tuple[int, int]]] = None return_coco_annotation: typing.Optional[bool] = False return_binary_maps: typing.Optional[bool] = False ) → `list[Dict]`
引數
- outputs (MaskFormerForInstanceSegmentation) — 模型的原始輸出。
- threshold (
float
, 可選, 預設為 0.5) — 用於保留預測例項掩碼的機率得分閾值。 - mask_threshold (
float
, 可選, 預設為 0.5) — 將預測的掩碼轉換為二進位制值時使用的閾值。 - overlap_mask_area_threshold (
float
, 可選, 預設為 0.8) — 用於合併或丟棄每個二進位制例項掩碼內小的斷開部分的重疊掩碼區域閾值。 - target_sizes (
list[Tuple]
, 可選) — 長度為 (batch_size) 的列表,其中每個列表項(`tuple[int, int]]`)對應每個預測請求的最終尺寸(高,寬)。如果為 None,則預測不會被調整大小。 - return_coco_annotation (
bool
, 可選, 預設為 `False`) — 如果設定為 `True`,分割圖將以 COCO 遊程編碼 (RLE) 格式返回。 - return_binary_maps (
bool
, 可選, 預設為 `False`) — 如果設定為 `True`,分割圖將作為連線的二進位制分割圖張量返回(每個檢測到的例項一個)。
返回
list[Dict]
字典列表,每個影像一個,每個字典包含兩個鍵
- segmentation — 一個形狀為 `(height, width)` 的張量,其中每個畫素代表一個 `segment_id`;或者,如果 return_coco_annotation 設定為 `True`,則是分割圖的 `list[List]` 遊程編碼 (RLE);或者,如果 return_binary_maps 設定為 `True`,則是一個形狀為 `(num_instances, height, width)` 的張量。如果在 `threshold` 之上沒有找到掩碼,則設定為 `None`。
- segments_info — 包含每個段的附加資訊的字典。
- id — 表示
segment_id
的整數。 - label_id — 表示與
segment_id
對應的標籤/語義類 ID 的整數。 - score — 具有
segment_id
的段的預測分數。
- id — 表示
將 `MaskFormerForInstanceSegmentationOutput` 的輸出轉換為例項分割預測。僅支援 PyTorch。如果例項可能重疊,請將 return_coco_annotation 或 return_binary_maps 設定為 `True` 以獲得正確的分割結果。
post_process_panoptic_segmentation
< 原始碼 >( outputs threshold: float = 0.5 mask_threshold: float = 0.5 overlap_mask_area_threshold: float = 0.8 label_ids_to_fuse: typing.Optional[set[int]] = None target_sizes: typing.Optional[list[tuple[int, int]]] = None ) → `list[Dict]`
引數
- outputs (
MaskFormerForInstanceSegmentationOutput
) — 來自 MaskFormerForInstanceSegmentation 的輸出。 - threshold (
float
, 可選, 預設為 0.5) — 用於保留預測例項掩碼的機率得分閾值。 - mask_threshold (
float
, 可選, 預設為 0.5) — 將預測的掩碼轉換為二進位制值時使用的閾值。 - overlap_mask_area_threshold (
float
, 可選, 預設為 0.8) — 用於在每個二值例項掩碼內合併或丟棄小的、不連貫部分的重疊掩碼區域閾值。 - label_ids_to_fuse (
Set[int]
, 可選) — 在此集合中的標籤,其所有例項都將被融合在一起。例如,我們可以規定一張圖中只能有一片天空,但可以有多個人,那麼天空的標籤 ID 應該在該集合中,而人的標籤 ID 則不應該在。 - target_sizes (
list[Tuple]
, 可選) — 長度為 (batch_size) 的列表,其中每個列表項 (tuple[int, int]
) 對應批處理中每個預測所需的最終尺寸(高,寬)。如果為 None,則不會調整預測尺寸。
返回
list[Dict]
字典列表,每個影像一個,每個字典包含兩個鍵
- segmentation — 形狀為
(height, width)
的張量,其中每個畫素代表一個segment_id
。如果在threshold
之上沒有找到掩碼,則設為None
。如果指定了target_sizes
,分割結果將被調整為相應的target_sizes
條目的大小。 - segments_info — 包含每個段的附加資訊的字典。
- id — 表示
segment_id
的整數。 - label_id — 表示與
segment_id
對應的標籤/語義類 ID 的整數。 - was_fused — 一個布林值,如果
label_id
在label_ids_to_fuse
中則為True
,否則為False
。同一類別/標籤的多個例項已融合並分配了一個單獨的segment_id
。 - score — 具有
segment_id
的段的預測分數。
- id — 表示
將 MaskFormerForInstanceSegmentationOutput
的輸出轉換為影像全景分割預測。僅支援 PyTorch。
MaskFormerFeatureExtractor
編碼輸入
< source >( pixel_values_list: list segmentation_maps: typing.Union[ForwardRef('PIL.Image.Image'), numpy.ndarray, ForwardRef('torch.Tensor'), list['PIL.Image.Image'], list[numpy.ndarray], list['torch.Tensor']] = None instance_id_to_semantic_id: typing.Union[list[dict[int, int]], dict[int, int], NoneType] = None ignore_index: typing.Optional[int] = None do_reduce_labels: bool = False return_tensors: typing.Union[str, transformers.utils.generic.TensorType, NoneType] = None input_data_format: typing.Union[str, transformers.image_utils.ChannelDimension, NoneType] = None ) → BatchFeature
引數
- pixel_values_list (
list[ImageInput]
) — 待填充的影像(畫素值)列表。每張影像應為形狀為(channels, height, width)
的張量。 - segmentation_maps (
ImageInput
, 可選) — 帶有畫素級標註的相應語義分割圖。(
bool
, 可選, 預設為True
): 是否將影像填充到批次中最大影像的尺寸並建立畫素掩碼。如果保留預設值,將返回一個畫素掩碼,其中:
- 真實畫素(即未被遮蔽)為 1,
- 填充畫素(即被遮蔽)為 0。
- instance_id_to_semantic_id (
list[dict[int, int]]
或dict[int, int]
, 可選) — 物件例項ID和類別ID之間的對映。如果傳遞此引數,segmentation_maps
將被視為例項分割圖,其中每個畫素代表一個例項ID。可以提供一個全域性/資料集級別的對映字典,也可以提供一個字典列表(每張影像一個),用於分別對映每張影像中的例項ID。 - return_tensors (
str
或 TensorType, 可選) — 如果設定,將返回張量而不是 NumPy 陣列。如果設定為'pt'
,則返回 PyTorchtorch.Tensor
物件。
返回
一個具有以下欄位的 BatchFeature
- pixel_values — 要輸入到模型的畫素值。
- pixel_mask — 要輸入到模型的畫素掩碼(當
=True
或pixel_mask
在self.model_input_names
中時)。 - mask_labels — 可選的掩碼標籤列表,形狀為
(labels, height, width)
,用於輸入到模型(當提供annotations
時)。 - class_labels — 可選的類別標籤列表,形狀為 `(labels)`,用於提供給模型(當提供 `annotations` 時)。它們標識了 `mask_labels` 的標籤,例如,`mask_labels[i][j]` 的標籤是 `class_labels[i][j]`。
將影像填充到批處理中最大的影像,並建立相應的 pixel_mask
。
MaskFormer 使用掩碼分類正規化來解決語義分割問題,因此輸入分割圖將被轉換為二進位制掩碼列表及其各自的標籤。舉個例子,假設 `segmentation_maps = [[2,6,7,9]]`,輸出將包含 `mask_labels = [[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]]`(四個二進位制掩碼)和 `class_labels = [2,6,7,9]`,即每個掩碼的標籤。
post_process_semantic_segmentation
< source >( outputs target_sizes: typing.Optional[list[tuple[int, int]]] = None ) → `list[torch.Tensor]`
引數
- outputs (MaskFormerForInstanceSegmentation) — 模型的原始輸出。
- target_sizes (
list[tuple[int, int]]
, 可選) — 長度為 (batch_size) 的列表,其中每個列表項 (tuple[int, int]]
) 對應每個預測所需的最終尺寸(高,寬)。如果為 None,則不會調整預測尺寸。
返回
list[torch.Tensor]
一個長度為 `batch_size` 的列表,其中每一項是形狀為 (height, width) 的語義分割圖,對應於 target_sizes 條目(如果指定了 `target_sizes`)。每個 `torch.Tensor` 的每個條目對應一個語義類別 ID。
將 MaskFormerForInstanceSegmentation 的輸出轉換為語義分割圖。僅支援 PyTorch。
post_process_instance_segmentation
< source >( outputs threshold: float = 0.5 mask_threshold: float = 0.5 overlap_mask_area_threshold: float = 0.8 target_sizes: typing.Optional[list[tuple[int, int]]] = None return_coco_annotation: typing.Optional[bool] = False return_binary_maps: typing.Optional[bool] = False ) → `list[Dict]`
引數
- outputs (MaskFormerForInstanceSegmentation) — 模型的原始輸出。
- threshold (
float
, 可選, 預設為 0.5) — 用於保留預測例項掩碼的機率分數閾值。 - mask_threshold (
float
, 可選, 預設為 0.5) — 將預測掩碼轉換為二值時使用的閾值。 - overlap_mask_area_threshold (
float
, 可選, 預設為 0.8) — 用於在每個二值例項掩碼內合併或丟棄小的、不連貫部分的重疊掩碼區域閾值。 - target_sizes (
list[Tuple]
, 可選) — 長度為 (batch_size) 的列表,其中每個列表項 (tuple[int, int]
) 對應批處理中每個預測所需的最終尺寸(高,寬)。如果為 None,則不會調整預測尺寸。 - return_coco_annotation (
bool
, 可選, 預設為False
) — 如果設為True
,則以 COCO 遊程編碼(RLE)格式返回分割圖。 - return_binary_maps (
bool
, 可選, 預設為False
) — 如果設為True
,則以拼接的二值分割圖張量形式返回分割圖(每個檢測到的例項一個)。
返回
list[Dict]
字典列表,每個影像一個,每個字典包含兩個鍵
- segmentation — 一個形狀為 `(height, width)` 的張量,其中每個畫素代表一個 `segment_id`;或者,如果 return_coco_annotation 設定為 `True`,則是分割圖的 `list[List]` 遊程編碼 (RLE);或者,如果 return_binary_maps 設定為 `True`,則是一個形狀為 `(num_instances, height, width)` 的張量。如果在 `threshold` 之上沒有找到掩碼,則設定為 `None`。
- segments_info — 包含每個段的附加資訊的字典。
- id — 表示
segment_id
的整數。 - label_id — 表示與
segment_id
對應的標籤/語義類 ID 的整數。 - score — 具有
segment_id
的段的預測分數。
- id — 表示
將 `MaskFormerForInstanceSegmentationOutput` 的輸出轉換為例項分割預測。僅支援 PyTorch。如果例項可能重疊,請將 return_coco_annotation 或 return_binary_maps 設定為 `True` 以獲得正確的分割結果。
post_process_panoptic_segmentation
< source >( outputs threshold: float = 0.5 mask_threshold: float = 0.5 overlap_mask_area_threshold: float = 0.8 label_ids_to_fuse: typing.Optional[set[int]] = None target_sizes: typing.Optional[list[tuple[int, int]]] = None ) → `list[Dict]`
引數
- outputs (
MaskFormerForInstanceSegmentationOutput
) — 來自 MaskFormerForInstanceSegmentation 的輸出。 - threshold (
float
, 可選, 預設為 0.5) — 用於保留預測例項掩碼的機率分數閾值。 - mask_threshold (
float
, 可選, 預設為 0.5) — 將預測掩碼轉換為二值時使用的閾值。 - overlap_mask_area_threshold (
float
, 可選, 預設為 0.8) — 用於在每個二值例項掩碼內合併或丟棄小的、不連貫部分的重疊掩碼區域閾值。 - label_ids_to_fuse (
Set[int]
, 可選) — 在此集合中的標籤,其所有例項都將被融合在一起。例如,我們可以規定一張圖中只能有一片天空,但可以有多個人,那麼天空的標籤 ID 應該在該集合中,而人的標籤 ID 則不應該在。 - target_sizes (
list[Tuple]
, 可選) — 長度為 (batch_size) 的列表,其中每個列表項 (tuple[int, int]]
) 對應批處理中每個預測所需的最終尺寸(高,寬)。如果為 None,則不會調整預測尺寸。
返回
list[Dict]
字典列表,每個影像一個,每個字典包含兩個鍵
- segmentation — 形狀為
(height, width)
的張量,其中每個畫素代表一個segment_id
。如果在threshold
之上沒有找到掩碼,則設為None
。如果指定了target_sizes
,分割結果將被調整為相應的target_sizes
條目的大小。 - segments_info — 包含每個段的附加資訊的字典。
- id — 表示
segment_id
的整數。 - label_id — 表示與
segment_id
對應的標籤/語義類 ID 的整數。 - was_fused — 一個布林值,如果
label_id
在label_ids_to_fuse
中則為True
,否則為False
。同一類別/標籤的多個例項已融合並分配了一個單獨的segment_id
。 - score — 具有
segment_id
的段的預測分數。
- id — 表示
將 MaskFormerForInstanceSegmentationOutput
的輸出轉換為影像全景分割預測。僅支援 PyTorch。
MaskFormerModel
class transformers.MaskFormerModel
< source >( config: MaskFormerConfig )
引數
- config (MaskFormerConfig) — 包含模型所有引數的模型配置類。使用配置檔案進行初始化不會載入與模型相關的權重,只會載入配置。請查閱 from_pretrained() 方法來載入模型權重。
基礎的 Maskformer 模型,輸出原始的隱藏狀態,頂部沒有任何特定的頭部。
該模型繼承自 PreTrainedModel。查閱超類文件以瞭解該庫為其所有模型實現的通用方法(例如下載或儲存、調整輸入嵌入大小、修剪頭部等)。
該模型也是 PyTorch torch.nn.Module 的子類。可以像常規 PyTorch 模組一樣使用它,並參考 PyTorch 文件瞭解所有與通用用法和行為相關的事項。
forward
< source >( pixel_values: Tensor pixel_mask: typing.Optional[torch.Tensor] = None output_hidden_states: typing.Optional[bool] = None output_attentions: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None ) → transformers.models.maskformer.modeling_maskformer.MaskFormerModelOutput 或 tuple(torch.FloatTensor)
引數
- pixel_values (
torch.Tensor
, 形狀為(batch_size, num_channels, image_size, image_size)
) — 對應於輸入影像的張量。畫素值可以使用{image_processor_class}
獲取。有關詳細資訊,請參閱{image_processor_class}.__call__
({processor_class}
使用{image_processor_class}
處理影像)。 - pixel_mask (
torch.Tensor
, 形狀為(batch_size, height, width)
, 可選) — 用於避免在填充畫素值上執行注意力操作的掩碼。掩碼值在[0, 1]
中選擇:- 真實畫素(即未被遮蔽)為 1,
- 填充畫素(即被遮蔽)為 0。
- output_hidden_states (
bool
, 可選) — 是否返回所有層的隱藏狀態。有關更多詳細資訊,請參閱返回張量下的hidden_states
。 - output_attentions (
bool
, 可選) — 是否返回所有注意力層的注意力張量。有關更多詳細資訊,請參閱返回張量下的attentions
。 - return_dict (
bool
, 可選) — 是否返回一個 ModelOutput 而不是一個普通的元組。
返回
transformers.models.maskformer.modeling_maskformer.MaskFormerModelOutput 或 tuple(torch.FloatTensor)
一個 transformers.models.maskformer.modeling_maskformer.MaskFormerModelOutput 或一個 torch.FloatTensor
的元組(如果傳遞了 return_dict=False
或當 config.return_dict=False
時),根據配置(MaskFormerConfig)和輸入,包含不同的元素。
-
encoder_last_hidden_state (
torch.FloatTensor
, 形狀為(batch_size, num_channels, height, width)
) — 編碼器模型(主幹網路)最後一個階段的最後隱藏狀態(最終特徵圖)。 -
pixel_decoder_last_hidden_state (
torch.FloatTensor
, 形狀為(batch_size, num_channels, height, width)
) — 畫素解碼器模型(FPN)最後一個階段的最後隱藏狀態(最終特徵圖)。 -
transformer_decoder_last_hidden_state (
torch.FloatTensor
, 形狀為(batch_size, sequence_length, hidden_size)
) — Transformer 解碼器模型最後一個階段的最後隱藏狀態(最終特徵圖)。 -
encoder_hidden_states (
tuple(torch.FloatTensor)
, 可選, 當傳遞output_hidden_states=True
或config.output_hidden_states=True
時返回) —torch.FloatTensor
的元組(一個用於嵌入的輸出 + 每個階段的輸出各一個),形狀為(batch_size, num_channels, height, width)
。編碼器模型在每個階段輸出的隱藏狀態(也稱為特徵圖)。 -
pixel_decoder_hidden_states (
tuple(torch.FloatTensor)
, 可選, 當傳遞output_hidden_states=True
或config.output_hidden_states=True
時返回) —torch.FloatTensor
的元組(一個用於嵌入的輸出 + 每個階段的輸出各一個),形狀為(batch_size, num_channels, height, width)
。畫素解碼器模型在每個階段輸出的隱藏狀態(也稱為特徵圖)。 -
transformer_decoder_hidden_states (
tuple(torch.FloatTensor)
, 可選, 當傳遞output_hidden_states=True
或config.output_hidden_states=True
時返回) —torch.FloatTensor
的元組(一個用於嵌入的輸出 + 每個階段的輸出各一個),形狀為(batch_size, sequence_length, hidden_size)
。Transformer 解碼器在每個階段輸出的隱藏狀態(也稱為特徵圖)。 -
hidden_states
tuple(torch.FloatTensor)
, 可選, 當傳遞output_hidden_states=True
或config.output_hidden_states=True
時返回) — 包含encoder_hidden_states
、pixel_decoder_hidden_states
和decoder_hidden_states
的torch.FloatTensor
元組。 -
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 後的注意力權重,用於計算自注意力頭中的加權平均值。
MaskFormerModel 的 forward 方法,重寫了 __call__
特殊方法。
雖然前向傳播的流程需要在這個函式中定義,但之後應該呼叫 `Module` 例項而不是這個函式,因為前者會處理預處理和後處理步驟,而後者會靜默地忽略它們。
示例
>>> from transformers import AutoImageProcessor, MaskFormerModel
>>> from PIL import Image
>>> import requests
>>> # load MaskFormer fine-tuned on ADE20k semantic segmentation
>>> image_processor = AutoImageProcessor.from_pretrained("facebook/maskformer-swin-base-ade")
>>> model = MaskFormerModel.from_pretrained("facebook/maskformer-swin-base-ade")
>>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
>>> image = Image.open(requests.get(url, stream=True).raw)
>>> inputs = image_processor(image, return_tensors="pt")
>>> # forward pass
>>> outputs = model(**inputs)
>>> # the decoder of MaskFormer outputs hidden states of shape (batch_size, num_queries, hidden_size)
>>> transformer_decoder_last_hidden_state = outputs.transformer_decoder_last_hidden_state
>>> list(transformer_decoder_last_hidden_state.shape)
[1, 100, 256]
MaskFormerForInstanceSegmentation
forward
< source >( pixel_values: Tensor mask_labels: typing.Optional[list[torch.Tensor]] = None class_labels: typing.Optional[list[torch.Tensor]] = None pixel_mask: typing.Optional[torch.Tensor] = None output_auxiliary_logits: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None output_attentions: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None ) → transformers.models.maskformer.modeling_maskformer.MaskFormerForInstanceSegmentationOutput 或 tuple(torch.FloatTensor)
引數
- pixel_values (
torch.Tensor
, 形狀為(batch_size, num_channels, image_size, image_size)
) — 對應於輸入影像的張量。畫素值可以使用{image_processor_class}
獲取。有關詳細資訊,請參閱{image_processor_class}.__call__
({processor_class}
使用{image_processor_class}
處理影像)。 - mask_labels (
list[torch.Tensor]
, 可選) — 形狀為(num_labels, height, width)
的掩碼標籤列表,用於輸入模型。 - class_labels (
list[torch.LongTensor]
, 可選) — 形狀為(num_labels, height, width)
的目標類別標籤列表,用於輸入模型。它們標識mask_labels
的標籤,例如,class_labels[i][j]
是mask_labels[i][j]
的標籤。 - pixel_mask (
torch.Tensor
, 形狀為(batch_size, height, width)
, 可選) — 用於避免在填充畫素值上執行注意力操作的掩碼。掩碼值在[0, 1]
中選擇:- 真實畫素(即未被遮蔽)為 1,
- 填充畫素(即被遮蔽)為 0。
- output_auxiliary_logits (
bool
, optional) — 是否輸出輔助 logits。 - output_hidden_states (
bool
, optional) — 是否返回所有層的隱藏狀態。有關更多詳細資訊,請參閱返回張量下的hidden_states
。 - output_attentions (
bool
, optional) — 是否返回所有注意力層的注意力張量。有關更多詳細資訊,請參閱返回張量下的attentions
。 - return_dict (
bool
, optional) — 是返回一個 ModelOutput 而不是一個普通的元組。
返回
transformers.models.maskformer.modeling_maskformer.MaskFormerForInstanceSegmentationOutput 或 tuple(torch.FloatTensor)
一個 transformers.models.maskformer.modeling_maskformer.MaskFormerForInstanceSegmentationOutput 或一個 torch.FloatTensor
的元組(如果傳遞了 return_dict=False
或當 config.return_dict=False
時),包含根據配置(MaskFormerConfig)和輸入而變化的不同元素。
-
loss (
torch.Tensor
, 可選) — 計算出的損失,當存在標籤時返回。 -
class_queries_logits (
torch.FloatTensor
, optional, defaults toNone
) — 形狀為(batch_size, num_queries, num_labels + 1)
的張量,表示每個查詢的建議類別。請注意,需要+ 1
是因為我們包含了空類別。 -
masks_queries_logits (
torch.FloatTensor
, 可選, 預設為None
) — 形狀為(batch_size, num_queries, height, width)
的張量,表示每個查詢的建議掩碼。 -
auxiliary_logits (
Dict[str, torch.FloatTensor]
, optional, returned whenoutput_auxiliary_logits=True
) — 字典,當啟用輔助損失時,包含每個解碼器層的輔助預測。 -
encoder_last_hidden_state (
torch.FloatTensor
, 形狀為(batch_size, num_channels, height, width)
) — 編碼器模型(主幹網路)最後一個階段的最後隱藏狀態(最終特徵圖)。 -
pixel_decoder_last_hidden_state (
torch.FloatTensor
, 形狀為(batch_size, num_channels, height, width)
) — 畫素解碼器模型(FPN)最後一個階段的最後隱藏狀態(最終特徵圖)。 -
transformer_decoder_last_hidden_state (
torch.FloatTensor
, 形狀為(batch_size, sequence_length, hidden_size)
) — Transformer 解碼器模型最後一個階段的最後隱藏狀態(最終特徵圖)。 -
encoder_hidden_states (
tuple(torch.FloatTensor)
, 可選, 當傳遞output_hidden_states=True
或config.output_hidden_states=True
時返回) —torch.FloatTensor
的元組(一個用於嵌入的輸出 + 每個階段的輸出各一個),形狀為(batch_size, num_channels, height, width)
。編碼器模型在每個階段輸出的隱藏狀態(也稱為特徵圖)。 -
pixel_decoder_hidden_states (
tuple(torch.FloatTensor)
, 可選, 當傳遞output_hidden_states=True
或config.output_hidden_states=True
時返回) —torch.FloatTensor
的元組(一個用於嵌入的輸出 + 每個階段的輸出各一個),形狀為(batch_size, num_channels, height, width)
。畫素解碼器模型在每個階段輸出的隱藏狀態(也稱為特徵圖)。 -
transformer_decoder_hidden_states (
tuple(torch.FloatTensor)
, optional, returned whenoutput_hidden_states=True
is passed or whenconfig.output_hidden_states=True
) —torch.FloatTensor
的元組(一個用於嵌入層的輸出,每個階段的輸出各一個),形狀為(batch_size, sequence_length, hidden_size)
。transformer 解碼器在每個階段輸出的隱藏狀態。 -
hidden_states
tuple(torch.FloatTensor)
, optional, returned whenoutput_hidden_states=True
is passed or whenconfig.output_hidden_states=True
) —torch.FloatTensor
的元組,包含encoder_hidden_states
、pixel_decoder_hidden_states
和decoder_hidden_states
。 -
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 後的注意力權重,用於計算自注意力頭中的加權平均值。
MaskFormerForInstanceSegmentation 的 forward 方法,重寫了 __call__
特殊方法。
雖然前向傳播的流程需要在這個函式中定義,但之後應該呼叫 `Module` 例項而不是這個函式,因為前者會處理預處理和後處理步驟,而後者會靜默地忽略它們。
示例
語義分割示例
>>> from transformers import AutoImageProcessor, MaskFormerForInstanceSegmentation
>>> from PIL import Image
>>> import requests
>>> # load MaskFormer fine-tuned on ADE20k semantic segmentation
>>> image_processor = AutoImageProcessor.from_pretrained("facebook/maskformer-swin-base-ade")
>>> model = MaskFormerForInstanceSegmentation.from_pretrained("facebook/maskformer-swin-base-ade")
>>> url = (
... "https://huggingface.co/datasets/hf-internal-testing/fixtures_ade20k/resolve/main/ADE_val_00000001.jpg"
... )
>>> image = Image.open(requests.get(url, stream=True).raw)
>>> inputs = image_processor(images=image, return_tensors="pt")
>>> outputs = model(**inputs)
>>> # model predicts class_queries_logits of shape `(batch_size, num_queries)`
>>> # and masks_queries_logits of shape `(batch_size, num_queries, height, width)`
>>> class_queries_logits = outputs.class_queries_logits
>>> masks_queries_logits = outputs.masks_queries_logits
>>> # you can pass them to image_processor for postprocessing
>>> predicted_semantic_map = image_processor.post_process_semantic_segmentation(
... outputs, target_sizes=[(image.height, image.width)]
... )[0]
>>> # we refer to the demo notebooks for visualization (see "Resources" section in the MaskFormer docs)
>>> list(predicted_semantic_map.shape)
[512, 683]
全景分割示例
>>> from transformers import AutoImageProcessor, MaskFormerForInstanceSegmentation
>>> from PIL import Image
>>> import requests
>>> # load MaskFormer fine-tuned on COCO panoptic segmentation
>>> image_processor = AutoImageProcessor.from_pretrained("facebook/maskformer-swin-base-coco")
>>> model = MaskFormerForInstanceSegmentation.from_pretrained("facebook/maskformer-swin-base-coco")
>>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
>>> image = Image.open(requests.get(url, stream=True).raw)
>>> inputs = image_processor(images=image, return_tensors="pt")
>>> outputs = model(**inputs)
>>> # model predicts class_queries_logits of shape `(batch_size, num_queries)`
>>> # and masks_queries_logits of shape `(batch_size, num_queries, height, width)`
>>> class_queries_logits = outputs.class_queries_logits
>>> masks_queries_logits = outputs.masks_queries_logits
>>> # you can pass them to image_processor for postprocessing
>>> result = image_processor.post_process_panoptic_segmentation(outputs, target_sizes=[(image.height, image.width)])[0]
>>> # we refer to the demo notebooks for visualization (see "Resources" section in the MaskFormer docs)
>>> predicted_panoptic_map = result["segmentation"]
>>> list(predicted_panoptic_map.shape)
[480, 640]