Transformers 文件
OneFormer
並獲得增強的文件體驗
開始使用
OneFormer
概述
OneFormer 模型由 Jitesh Jain、Jiachen Li、MangTik Chiu、Ali Hassani、Nikita Orlov 和 Humphrey Shi 在 OneFormer: One Transformer to Rule Universal Image Segmentation 中提出。OneFormer 是一個通用影像分割框架,可以在單個全景資料集上訓練,以執行語義分割、例項分割和全景分割任務。OneFormer 使用任務標記來根據焦點任務對模型進行條件化,使架構在訓練時以任務為導向,在推理時以任務為動態。

論文摘要如下:
通用影像分割並非新概念。過去幾十年中統一影像分割的嘗試包括場景解析、全景分割,以及最近的新的全景架構。然而,這些全景架構並不能真正統一影像分割,因為它們需要分別在語義分割、例項分割或全景分割上進行單獨訓練才能達到最佳效能。理想情況下,一個真正通用的框架應該只訓練一次,並在所有三個影像分割任務上都達到 SOTA 效能。為此,我們提出了 OneFormer,一個透過多工一次訓練設計來統一分割的通用影像分割框架。我們首先提出了一種任務條件下的聯合訓練策略,該策略允許在單個多工訓練過程中,針對每個領域(語義分割、例項分割和全景分割)的真實標籤進行訓練。其次,我們引入了一個任務標記來根據當前任務對模型進行條件化,使我們的模型具有任務動態性,以支援多工訓練和推理。第三,我們建議在訓練期間使用查詢-文字對比損失來建立更好的任務間和類別間區分。值得注意的是,儘管 Mask2Former 模型在 ADE20k、CityScapes 和 COCO 上對每個任務都單獨訓練,並使用了三倍的資源,但我們的單個 OneFormer 模型在所有三個分割任務上的效能都優於專門的 Mask2Former 模型。透過新的 ConvNeXt 和 DiNAT 主幹網路,我們觀察到更顯著的效能提升。我們相信 OneFormer 是使影像分割更加通用和易於訪問的重要一步。
下圖展示了 OneFormer 的架構。摘自原文。

該模型由 Jitesh Jain 貢獻。原始程式碼可在此處找到。
使用技巧
- OneFormer 在推理時需要兩個輸入:_影像_和_任務標記_。
- 在訓練期間,OneFormer 只使用全景標註。
- 如果要在多個節點組成的分散式環境中訓練模型,則應更新
modeling_oneformer.py
中OneFormerLoss
類內的get_num_masks
函式。在多節點訓練時,此值應設定為所有節點上目標掩碼的平均數量,如原始實現此處所示。 - 可以使用OneFormerProcessor為模型準備輸入影像和任務輸入,以及可選的模型目標。OneFormerProcessor將OneFormerImageProcessor和CLIPTokenizer封裝在一個例項中,以便同時準備影像和編碼任務輸入。
- 要獲得最終分割,根據任務的不同,可以呼叫post_process_semantic_segmentation()、post_process_instance_segmentation()或post_process_panoptic_segmentation()。所有三個任務都可以使用OneFormerForUniversalSegmentation的輸出來解決,全景分割接受一個可選的
label_ids_to_fuse
引數來融合目標物件(例如天空)的例項。
資源
官方 Hugging Face 和社群(🌎 表示)資源列表,幫助您開始使用 OneFormer。
- 有關自定義資料推理 + 微調的演示筆記本可在此處找到。
如果您有興趣提交資源以供此處收錄,請隨時發起拉取請求,我們將對其進行審查。理想情況下,資源應展示新內容,而非重複現有資源。
OneFormer 特有輸出
類 transformers.models.oneformer.modeling_oneformer.OneFormerModelOutput
< 源 >( 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[torch.FloatTensor] = None transformer_decoder_object_queries: typing.Optional[torch.FloatTensor] = None transformer_decoder_contrastive_queries: typing.Optional[torch.FloatTensor] = None transformer_decoder_mask_predictions: typing.Optional[torch.FloatTensor] = None transformer_decoder_class_predictions: typing.Optional[torch.FloatTensor] = None transformer_decoder_auxiliary_predictions: typing.Optional[tuple[dict[str, torch.FloatTensor]]] = None text_queries: typing.Optional[torch.FloatTensor] = None task_token: typing.Optional[torch.FloatTensor] = None attentions: typing.Optional[tuple[torch.FloatTensor]] = None )
引數
- encoder_hidden_states (
tuple(torch.FloatTensor)
, 可選, 當傳入output_hidden_states=True
或config.output_hidden_states=True
時返回) — 編碼器模型在每個階段輸出的隱藏狀態(也稱為特徵圖),形狀為(batch_size, num_channels, height, width)
的torch.FloatTensor
元組(一個用於嵌入輸出 + 一個用於每個階段的輸出)。 - pixel_decoder_hidden_states (
tuple(torch.FloatTensor)
, 可選, 當傳入output_hidden_states=True
或config.output_hidden_states=True
時返回) — 畫素解碼器模型在每個階段輸出的隱藏狀態(也稱為特徵圖),形狀為(batch_size, num_channels, height, width)
的torch.FloatTensor
元組(一個用於嵌入輸出 + 一個用於每個階段的輸出)。 - transformer_decoder_hidden_states (
tuple(torch.FloatTensor)
, 可選, 當傳入output_hidden_states=True
或config.output_hidden_states=True
時返回) — Transformer 解碼器在每個階段輸出的隱藏狀態(也稱為特徵圖),形狀為(batch_size, sequence_length, hidden_size)
的torch.FloatTensor
元組(一個用於嵌入輸出 + 一個用於每個階段的輸出)。 - transformer_decoder_object_queries (
torch.FloatTensor
,形狀為(batch_size, num_queries, hidden_dim)
) — Transformer 解碼器最後一層的輸出物件查詢。 - transformer_decoder_contrastive_queries (
torch.FloatTensor
,形狀為(batch_size, num_queries, hidden_dim)
) — Transformer 解碼器中的對比查詢。 - transformer_decoder_mask_predictions (
torch.FloatTensor
,形狀為(batch_size, num_queries, height, width)
) — Transformer 解碼器最後一層的掩碼預測。 - transformer_decoder_class_predictions (
torch.FloatTensor
,形狀為(batch_size, num_queries, num_classes+1)
) — Transformer 解碼器最後一層的類別預測。 - transformer_decoder_auxiliary_predictions (
Tuple
of Dict ofstr, torch.FloatTensor
, 可選) — Transformer 解碼器每一層的類別和掩碼預測元組。 - text_queries (
torch.FloatTensor
, 可選, 形狀為(batch_size, num_queries, hidden_dim)
) — 用於在訓練期間計算對比損失的輸入文字列表派生的文字查詢。 - task_token (
torch.FloatTensor
,形狀為(batch_size, hidden_dim)
) — 用於條件化查詢的一維任務標記。 - attentions (
tuple(tuple(torch.FloatTensor))
, 可選, 當傳入output_attentions=True
或config.output_attentions=True
時返回) — Transformer 解碼器的自注意力和交叉注意力權重元組(每個層一個),形狀為(batch_size, num_heads, sequence_length, sequence_length)
。
用於 OneFormerModel 輸出的類。此類別返回計算 logits 所需的所有隱藏狀態。
類 transformers.models.oneformer.modeling_oneformer.OneFormerForUniversalSegmentationOutput
< 源 >( loss: typing.Optional[torch.FloatTensor] = None class_queries_logits: typing.Optional[torch.FloatTensor] = None masks_queries_logits: typing.Optional[torch.FloatTensor] = None auxiliary_predictions: list = None encoder_hidden_states: typing.Optional[tuple[torch.FloatTensor]] = None pixel_decoder_hidden_states: typing.Optional[list[torch.FloatTensor]] = None transformer_decoder_hidden_states: typing.Optional[torch.FloatTensor] = None transformer_decoder_object_queries: typing.Optional[torch.FloatTensor] = None transformer_decoder_contrastive_queries: typing.Optional[torch.FloatTensor] = None transformer_decoder_mask_predictions: typing.Optional[torch.FloatTensor] = None transformer_decoder_class_predictions: typing.Optional[torch.FloatTensor] = None transformer_decoder_auxiliary_predictions: typing.Optional[list[dict[str, torch.FloatTensor]]] = None text_queries: typing.Optional[torch.FloatTensor] = None task_token: typing.Optional[torch.FloatTensor] = None attentions: typing.Optional[tuple[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_predictions (
List
of Dict ofstr, torch.FloatTensor
, 可選) — Transformer 解碼器每一層的類別和掩碼預測列表。 - encoder_hidden_states (
tuple(torch.FloatTensor)
, 可選, 當傳入output_hidden_states=True
或config.output_hidden_states=True
時返回) — 編碼器模型在每個階段輸出的隱藏狀態(也稱為特徵圖),形狀為(batch_size, num_channels, height, width)
的torch.FloatTensor
元組(一個用於嵌入輸出 + 一個用於每個階段的輸出)。 - pixel_decoder_hidden_states (
tuple(torch.FloatTensor)
, 可選, 當傳入output_hidden_states=True
或config.output_hidden_states=True
時返回) — 畫素解碼器模型在每個階段輸出的隱藏狀態(也稱為特徵圖),形狀為(batch_size, num_channels, height, width)
的torch.FloatTensor
元組(一個用於嵌入輸出 + 一個用於每個階段的輸出)。 - transformer_decoder_hidden_states (
tuple(torch.FloatTensor)
, 可選, 當傳入output_hidden_states=True
或config.output_hidden_states=True
時返回) — Transformer 解碼器在每個階段輸出的隱藏狀態(也稱為特徵圖),形狀為(batch_size, sequence_length, hidden_size)
的torch.FloatTensor
元組(一個用於嵌入輸出 + 一個用於每個階段的輸出)。 - transformer_decoder_object_queries (
torch.FloatTensor
,形狀為(batch_size, num_queries, hidden_dim)
) — Transformer 解碼器最後一層的輸出物件查詢。 - transformer_decoder_contrastive_queries (
torch.FloatTensor
,形狀為(batch_size, num_queries, hidden_dim)
) — Transformer 解碼器中的對比查詢。 - transformer_decoder_mask_predictions (
torch.FloatTensor
,形狀為(batch_size, num_queries, height, width)
) — Transformer 解碼器最後一層的掩碼預測。 - transformer_decoder_class_predictions (
torch.FloatTensor
,形狀為(batch_size, num_queries, num_classes+1)
) — Transformer 解碼器最後一層的類別預測。 - auxiliary_predictions (
List
of Dict ofstr, torch.FloatTensor
, 可選) — Transformer 解碼器每一層的類別和掩碼預測列表。 - text_queries (
torch.FloatTensor
, 可選, 形狀為(batch_size, num_queries, hidden_dim)
) — 用於在訓練期間計算對比損失的輸入文字列表派生的文字查詢。 - task_token (
torch.FloatTensor
,形狀為(batch_size, hidden_dim)
) — 用於條件化查詢的一維任務標記。 - attentions (
tuple(tuple(torch.FloatTensor))
, 可選, 當傳入output_attentions=True
或config.output_attentions=True
時返回) —tuple(torch.FloatTensor)
的元組(每層一個),形狀為(batch_size, num_heads, sequence_length, sequence_length)
。來自 Transformer 解碼器的自注意力和交叉注意力權重。
OneFormerForUniversalSegmentationOutput
的輸出類。
此輸出可以直接傳遞給 post_process_semantic_segmentation()、post_process_instance_segmentation() 或 post_process_panoptic_segmentation(),具體取決於任務。有關用法詳情,請參閱 [`~OneFormerImageProcessor]。
OneFormerConfig
class transformers.OneFormerConfig
< source >( backbone_config: typing.Optional[dict] = None backbone: typing.Optional[str] = None use_pretrained_backbone: bool = False use_timm_backbone: bool = False backbone_kwargs: typing.Optional[dict] = None ignore_value: int = 255 num_queries: int = 150 no_object_weight: int = 0.1 class_weight: float = 2.0 mask_weight: float = 5.0 dice_weight: float = 5.0 contrastive_weight: float = 0.5 contrastive_temperature: float = 0.07 train_num_points: int = 12544 oversample_ratio: float = 3.0 importance_sample_ratio: float = 0.75 init_std: float = 0.02 init_xavier_std: float = 1.0 layer_norm_eps: float = 1e-05 is_training: bool = False use_auxiliary_loss: bool = True output_auxiliary_logits: bool = True strides: typing.Optional[list] = [4, 8, 16, 32] task_seq_len: int = 77 text_encoder_width: int = 256 text_encoder_context_length: int = 77 text_encoder_num_layers: int = 6 text_encoder_vocab_size: int = 49408 text_encoder_proj_layers: int = 2 text_encoder_n_ctx: int = 16 conv_dim: int = 256 mask_dim: int = 256 hidden_dim: int = 256 encoder_feedforward_dim: int = 1024 norm: str = 'GN' encoder_layers: int = 6 decoder_layers: int = 10 use_task_norm: bool = True num_attention_heads: int = 8 dropout: float = 0.1 dim_feedforward: int = 2048 pre_norm: bool = False enforce_input_proj: bool = False query_dec_layers: int = 2 common_stride: int = 4 **kwargs )
引數
- backbone_config (
PretrainedConfig
, 可選, 預設為SwinConfig
) — 主幹模型的配置。 - 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
,則不能指定此引數。 - ignore_value (
int
, 可選, 預設為 255) — 計算損失時,GT 標籤中要忽略的值。 - num_queries (
int
, 可選, 預設為 150) — 物件查詢的數量。 - no_object_weight (
float
, 可選, 預設為 0.1) — 無物件類別預測的權重。 - class_weight (
float
, 可選, 預設為 2.0) — 分類交叉熵損失的權重。 - mask_weight (
float
, 可選, 預設為 5.0) — 二進位制交叉熵損失的權重。 - dice_weight (
float
, 可選, 預設為 5.0) — Dice 損失的權重。 - contrastive_weight (
float
, 可選, 預設為 0.5) — 對比損失的權重。 - contrastive_temperature (
float
, 可選, 預設為 0.07) — 用於縮放對比 logits 的初始值。 - train_num_points (
int
, 可選, 預設為 12544) — 計算掩碼預測損失時取樣的點數。 - oversample_ratio (
float
, 可選, 預設為 3.0) — 決定過取樣點數的比率。 - importance_sample_ratio (
float
, 可選, 預設為 0.75) — 透過重要性取樣取樣的點數比率。 - init_std (
float
, 可選, 預設為 0.02) — 正態初始化的標準差。 - init_xavier_std (
float
, 可選, 預設為 1.0) — Xavier 均勻初始化的標準差。 - layer_norm_eps (
float
, 可選, 預設為 1e-05) — 層歸一化的 epsilon 值。 - is_training (
bool
, 可選, 預設為False
) — 是否在訓練或推理模式下執行。 - use_auxiliary_loss (
bool
, 可選, 預設為True
) — 是否使用 Transformer 解碼器的中間預測計算損失。 - output_auxiliary_logits (
bool
, 可選, 預設為True
) — 是否返回 Transformer 解碼器的中間預測。 - strides (
list
, 可選, 預設為[4, 8, 16, 32]
) — 編碼器中特徵圖步幅的列表。 - task_seq_len (
int
, 可選, 預設為 77) — 用於對文字列表輸入進行分詞的序列長度。 - text_encoder_width (
int
, 可選, 預設為 256) — 文字編碼器的隱藏大小。 - text_encoder_context_length (
int
, 可選, 預設為 77) — 文字編碼器的輸入序列長度。 - text_encoder_num_layers (
int
, 可選, 預設為 6) — 文字編碼器中 Transformer 層的數量。 - text_encoder_vocab_size (
int
, 可選, 預設為 49408) — 分詞器的詞彙量大小。 - text_encoder_proj_layers (
int
, 可選, 預設為 2) — 用於投影文字查詢的 MLP 層數。 - text_encoder_n_ctx (
int
, 可選, 預設為 16) — 可學習文字上下文查詢的數量。 - conv_dim (
int
, 可選, 預設為 256) — 從主幹對映輸出的特徵圖維度。 - mask_dim (
int
, 可選, 預設為 256) — 畫素解碼器中特徵圖的維度。 - hidden_dim (
int
, 可選, 預設為 256) — Transformer 解碼器中隱藏狀態的維度。 - encoder_feedforward_dim (
int
, 可選, 預設為 1024) — 畫素解碼器中 FFN 層的維度。 - norm (
str
, 可選, 預設為"GN"
) — 歸一化型別。 - encoder_layers (
int
, 可選, 預設為 6) — 畫素解碼器中的層數。 - decoder_layers (
int
, 可選, 預設為 10) — Transformer 解碼器中的層數。 - use_task_norm (
bool
, 可選, 預設為True
) — 是否對任務 token 進行歸一化。 - num_attention_heads (
int
, 可選, 預設為 8) — 畫素和 Transformer 解碼器中 Transformer 層中的注意力頭數量。 - dropout (
float
, 可選, 預設為 0.1) — 畫素和 Transformer 解碼器的 Dropout 機率。 - dim_feedforward (
int
, 可選, 預設為 2048) — Transformer 解碼器中 FFN 層的維度。 - pre_norm (
bool
, 可選, 預設為False
) — 是否在 Transformer 解碼器中注意力層之前對隱藏狀態進行歸一化。 - enforce_input_proj (
bool
, 可選, 預設為False
) — 是否在 Transformer 解碼器中投影隱藏狀態。 - query_dec_layers (
int
, 可選, 預設為 2) — 查詢 Transformer 中的層數。 - common_stride (
int
, 可選, 預設為 4) — 畫素解碼器中特徵的常用步幅。
這是一個配置類,用於儲存 OneFormerModel 的配置。它用於根據指定引數例項化 OneFormer 模型,定義模型架構。使用預設值例項化配置將產生與 OneFormer shi-labs/oneformer_ade20k_swin_tiny 在 ADE20k-150 上訓練的架構類似的配置。
配置物件繼承自 PretrainedConfig,可用於控制模型輸出。有關更多資訊,請閱讀 PretrainedConfig 的文件。
示例
>>> from transformers import OneFormerConfig, OneFormerModel
>>> # Initializing a OneFormer shi-labs/oneformer_ade20k_swin_tiny configuration
>>> configuration = OneFormerConfig()
>>> # Initializing a model (with random weights) from the shi-labs/oneformer_ade20k_swin_tiny style configuration
>>> model = OneFormerModel(configuration)
>>> # Accessing the model configuration
>>> configuration = model.config
OneFormerImageProcessor
class transformers.OneFormerImageProcessor
< source >( do_resize: bool = True size: typing.Optional[dict[str, int]] = None 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 repo_path: typing.Optional[str] = 'shi-labs/oneformer_demo' class_info_file: typing.Optional[str] = None num_text: typing.Optional[int] = None num_labels: typing.Optional[int] = None **kwargs )
引數
- do_resize (
bool
, 可選, 預設為True
) — 是否將輸入調整為特定size
。 - size (
int
, 可選, 預設為 800) — 將輸入大小調整為給定大小。僅當do_resize
設定為True
時生效。如果大小是一個序列,如(width, height)
,則輸出大小將與此匹配。如果大小是一個整數,影像較短的邊將與此數字匹配。即,如果height > width
,則影像將被重新縮放為(size * height / width, size)
。 - 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
替換。 - repo_path (
str
, 可選, 預設為"shi-labs/oneformer_demo"
) — 指向包含資料集類資訊的 JSON 檔案的 hub 倉庫或本地目錄路徑。如果未設定,將在當前工作目錄中查詢class_info_file
。 - class_info_file (
str
, 可選) — 包含資料集類資訊的 JSON 檔案。例如,請參閱shi-labs/oneformer_demo/cityscapes_panoptic.json
。 - num_text (
int
, 可選) — 文字輸入列表中的文字條目數量。 - num_labels (
int
, 可選) — 分割圖中的標籤數量。
構建一個 OneFormer 影像處理器。該影像處理器可用於為模型準備影像、任務輸入和可選的文字輸入及目標。
此影像處理器繼承自 BaseImageProcessor,其中包含大部分主要方法。使用者應參閱此超類以獲取有關這些方法的更多資訊。
預處理
< 源 >( images: typing.Union[ForwardRef('PIL.Image.Image'), numpy.ndarray, ForwardRef('torch.Tensor'), list['PIL.Image.Image'], list[numpy.ndarray], list['torch.Tensor']] task_inputs: typing.Optional[list[str]] = None 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 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 task_inputs: 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]
) — 要填充的影像(畫素值)列表。每個影像都應該是形狀為(通道, 高度, 寬度)
的張量。 - task_inputs (
list[str]
) — 任務值列表。 - 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
物件。 - input_data_format (
str
或ChannelDimension
, 可選) — 輸入影像的通道維度格式。如果未提供,將從輸入影像推斷。
返回
一個具有以下欄位的 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]
)。 - text_inputs — 可選的文字字串條目列表,用於輸入到模型(當提供
annotations
時)。它們標識影像中存在的二進位制掩碼。
將影像填充到批處理中最大的影像,並建立相應的 pixel_mask
。
OneFormer 透過掩碼分類正規化處理語義分割,因此輸入分割圖將轉換為二進位制掩碼列表及其相應的標籤。舉個例子,假設 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]
,即每個掩碼的標籤。
後處理語義分割
< 源 >( 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]]
) 對應於每個預測的請求最終大小(高度,寬度)。如果留空,則不會調整預測大小。
返回
list[torch.Tensor]
一個長度為 batch_size
的列表,其中每個專案是形狀為 (高度, 寬度) 的語義分割圖,對應於 target_sizes 條目(如果指定了 target_sizes
)。每個 torch.Tensor
的每個條目對應於一個語義類別 ID。
將 MaskFormerForInstanceSegmentation 的輸出轉換為語義分割圖。僅支援 PyTorch。
後處理例項分割
< 源 >( outputs task_type: str = 'instance' is_demo: bool = True 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 ) → list[Dict]
引數
- outputs (
OneFormerForUniversalSegmentationOutput
) —OneFormerForUniversalSegmentationOutput
的輸出。 - task_type (
str
, 可選, 預設為“instance”) — 後處理取決於任務令牌輸入。如果task_type
為“全景”,則需要忽略物體預測。 - is_demo (
bool
, 可選), 預設為True
) — 模型是否處於演示模式。如果為 True,則使用閾值預測最終掩碼。 - 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]]
) 對應於批處理中每個預測的請求最終大小(高度,寬度)。如果留空,則不會調整預測大小。 - return_coco_annotation (
bool
, 可選), 預設為False
) — 是否以 COCO 格式返回預測。
返回
list[Dict]
字典列表,每個影像一個,每個字典包含兩個鍵
- 分割 — 形狀為
(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 — 表示
將 OneFormerForUniversalSegmentationOutput
的輸出轉換為影像例項分割預測。僅支援 PyTorch。
後處理全景分割
< 源 >( 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 (MaskFormerForInstanceSegmentation) — 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]]
) 對應於批處理中每個預測的請求最終大小(高度,寬度)。如果留空,則不會調整預測大小。
返回
list[Dict]
字典列表,每個影像一個,每個字典包含兩個鍵
- 分割 — 形狀為
(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。
OneFormerProcessor
class transformers.OneFormerProcessor
< 源 >( image_processor = None tokenizer = None max_seq_length: int = 77 task_seq_length: int = 77 **kwargs )
引數
- image_processor (OneFormerImageProcessor) — 影像處理器是必需輸入。
- tokenizer ([
CLIPTokenizer
,CLIPTokenizerFast
]) — 分詞器是必需輸入。 - max_seq_len (
int
, 可選, 預設為 77)) — 輸入文字列表的序列長度。 - task_seq_len (
int
, 可選, 預設為 77) — 輸入任務令牌的序列長度。
構建一個 OneFormer 處理器,該處理器封裝了 OneFormerImageProcessor 和 CLIPTokenizer/CLIPTokenizerFast,使其成為一個繼承影像處理器和分詞器功能的單一處理器。
此方法將其所有引數轉發給 OneFormerImageProcessor.encode_inputs(),然後對 task_inputs 進行分詞。有關此方法的更多資訊,請參閱其文件字串。
此方法將其所有引數轉發給 OneFormerImageProcessor.post_process_instance_segmentation()。有關此方法的更多資訊,請參閱其文件字串。
此方法將其所有引數轉發給 OneFormerImageProcessor.post_process_panoptic_segmentation()。有關此方法的更多資訊,請參閱其文件字串。
此方法將其所有引數轉發給 OneFormerImageProcessor.post_process_semantic_segmentation()。有關此方法的更多資訊,請參閱其文件字串。
OneFormerModel
class transformers.OneFormerModel
< 源 >( config: OneFormerConfig )
引數
- config (OneFormerConfig) — 模型配置類,包含模型的所有引數。用配置檔案初始化不會載入與模型相關的權重,只會載入配置。要載入模型權重,請檢視from_pretrained()方法。
不帶任何特定頭部輸出原始隱藏狀態的裸 Oneformer 模型。
此模型繼承自PreTrainedModel。請查閱超類文件以瞭解庫為其所有模型實現的通用方法(如下載或儲存、調整輸入嵌入大小、修剪頭部等)。
此模型也是 PyTorch torch.nn.Module 子類。將其作為常規 PyTorch 模組使用,並參考 PyTorch 文件以瞭解所有與一般用法和行為相關的事項。
正向傳播
< 源 >( pixel_values: Tensor task_inputs: Tensor text_inputs: typing.Optional[torch.Tensor] = None 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.oneformer.modeling_oneformer.OneFormerModelOutput 或 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}
處理影像)。 - task_inputs (形狀為
(batch_size, sequence_length)
的torch.FloatTensor
) — 任務輸入。任務輸入可以使用 AutoImageProcessor 獲取。有關詳細資訊,請參閱OneFormerProcessor.__call__()
。 - text_inputs (
list[torch.Tensor]
, 可選) — 形狀為(num_queries, sequence_length)
的張量,用於饋送到模型中。 - pixel_mask (形狀為
(batch_size, height, width)
的torch.Tensor
, 可選) — 避免對填充畫素值執行注意力操作的掩碼。掩碼值選擇在[0, 1]
之間:- 1 表示真實畫素(即未被掩蓋),
- 0 表示填充畫素(即被掩蓋)。
- output_hidden_states (
bool
, 可選) — 是否返回所有層的隱藏狀態。有關詳細資訊,請參閱返回張量中的hidden_states
。 - output_attentions (
bool
, 可選) — 是否返回所有注意力層的注意力張量。有關詳細資訊,請參閱返回張量中的attentions
。 - return_dict (
bool
, 可選) — 是否返回 ModelOutput 而非純元組。
返回
transformers.models.oneformer.modeling_oneformer.OneFormerModelOutput 或 tuple(torch.FloatTensor)
transformers.models.oneformer.modeling_oneformer.OneFormerModelOutput 或 torch.FloatTensor
的元組(如果傳入 return_dict=False
或 config.return_dict=False
),包含根據配置(OneFormerConfig)和輸入而定的各種元素。
- 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 解碼器在每個階段輸出的隱藏狀態(也稱為特徵圖)。 - transformer_decoder_object_queries (形狀為
(batch_size, num_queries, hidden_dim)
的torch.FloatTensor
) — transformer 解碼器最後一層的輸出物件查詢。 - transformer_decoder_contrastive_queries (形狀為
(batch_size, num_queries, hidden_dim)
的torch.FloatTensor
) — transformer 解碼器的對比查詢。 - transformer_decoder_mask_predictions (形狀為
(batch_size, num_queries, height, width)
的torch.FloatTensor
) — transformer 解碼器最後一層的掩碼預測。 - transformer_decoder_class_predictions (形狀為
(batch_size, num_queries, num_classes+1)
的torch.FloatTensor
) — transformer 解碼器最後一層的類別預測。 - transformer_decoder_auxiliary_predictions (
Tuple
of Dict ofstr, torch.FloatTensor
, 可選) — transformer 解碼器每一層的類別和掩碼預測元組。 - text_queries (
torch.FloatTensor
, 可選, 形狀為(batch_size, num_queries, hidden_dim)
) — 從輸入文字列表派生的文字查詢,用於訓練期間計算對比損失。 - task_token (形狀為
(batch_size, hidden_dim)
的torch.FloatTensor
) — 用於條件化查詢的一維任務令牌。 - attentions (
tuple(tuple(torch.FloatTensor))
, 可選, 當傳入output_attentions=True
或config.output_attentions=True
時返回) —tuple(torch.FloatTensor)
的元組(每層一個),形狀為(batch_size, num_heads, sequence_length, sequence_length)
。來自 transformer 解碼器的自注意力和交叉注意力權重。
OneFormerModel 正向傳播方法,覆蓋了 __call__
特殊方法。
儘管正向傳播的實現需要在該函式中定義,但之後應該呼叫 Module
例項而不是該函式,因為前者負責執行預處理和後處理步驟,而後者則默默地忽略它們。
示例
>>> import torch
>>> from PIL import Image
>>> import requests
>>> from transformers import OneFormerProcessor, OneFormerModel
>>> # download texting image
>>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
>>> image = Image.open(requests.get(url, stream=True).raw)
>>> # load processor for preprocessing the inputs
>>> processor = OneFormerProcessor.from_pretrained("shi-labs/oneformer_ade20k_swin_tiny")
>>> model = OneFormerModel.from_pretrained("shi-labs/oneformer_ade20k_swin_tiny")
>>> inputs = processor(image, ["semantic"], return_tensors="pt")
>>> with torch.no_grad():
... outputs = model(**inputs)
>>> mask_predictions = outputs.transformer_decoder_mask_predictions
>>> class_predictions = outputs.transformer_decoder_class_predictions
>>> f"👉 Mask Predictions Shape: {list(mask_predictions.shape)}, Class Predictions Shape: {list(class_predictions.shape)}"
'👉 Mask Predictions Shape: [1, 150, 128, 171], Class Predictions Shape: [1, 150, 151]'
OneFormerForUniversalSegmentation
class transformers.OneFormerForUniversalSegmentation
< 源 >( config: OneFormerConfig )
引數
- config (OneFormerConfig) — 模型配置類,包含模型的所有引數。用配置檔案初始化不會載入與模型相關的權重,只會載入配置。要載入模型權重,請檢視from_pretrained()方法。
用於例項、語義和全景影像分割的 OneFormer 模型。
此模型繼承自PreTrainedModel。請查閱超類文件以瞭解庫為其所有模型實現的通用方法(如下載或儲存、調整輸入嵌入大小、修剪頭部等)。
此模型也是 PyTorch torch.nn.Module 子類。將其作為常規 PyTorch 模組使用,並參考 PyTorch 文件以瞭解所有與一般用法和行為相關的事項。
正向傳播
< 源 >( pixel_values: Tensor task_inputs: Tensor text_inputs: typing.Optional[torch.Tensor] = None 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.oneformer.modeling_oneformer.OneFormerForUniversalSegmentationOutput 或 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}
處理影像)。 - task_inputs (形狀為
(batch_size, sequence_length)
的torch.FloatTensor
) — 任務輸入。任務輸入可以使用 AutoImageProcessor 獲取。有關詳細資訊,請參閱OneFormerProcessor.__call__()
。 - text_inputs (
list[torch.Tensor]
, 可選) — 形狀為(num_queries, sequence_length)
的張量,用於饋送到模型。 - mask_labels (
list[torch.Tensor]
, 可選) — 形狀為(num_labels, height, width)
的掩碼標籤列表,用於饋送到模型中。 - class_labels (
list[torch.LongTensor]
, 可選) — 形狀為(num_labels, height, width)
的目標類別標籤列表,用於饋送到模型中。它們標識了mask_labels
的標籤,例如mask_labels[i][j]
的標籤為class_labels[i][j]
。 - pixel_mask (形狀為
(batch_size, height, width)
的torch.Tensor
, 可選) — 避免對填充畫素值執行注意力操作的掩碼。掩碼值選擇在[0, 1]
之間:- 1 表示真實畫素(即未被掩蓋),
- 0 表示填充畫素(即被掩蓋)。
- output_auxiliary_logits (
bool
, 可選) — 是否輸出輔助 logits。 - output_hidden_states (
bool
, 可選) — 是否返回所有層的隱藏狀態。有關詳細資訊,請參閱返回張量中的hidden_states
。 - output_attentions (
bool
, 可選) — 是否返回所有注意力層的注意力張量。有關詳細資訊,請參閱返回張量中的attentions
。 - return_dict (
bool
, 可選) — 是否返回 ModelOutput 而非純元組。
返回
transformers.models.oneformer.modeling_oneformer.OneFormerForUniversalSegmentationOutput 或 tuple(torch.FloatTensor)
transformers.models.oneformer.modeling_oneformer.OneFormerForUniversalSegmentationOutput 或 torch.FloatTensor
的元組(如果傳入 return_dict=False
或 config.return_dict=False
),包含根據配置(OneFormerConfig)和輸入而定的各種元素。
- 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_predictions (
List
of Dict ofstr, torch.FloatTensor
, 可選) — 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 解碼器在每個階段輸出的隱藏狀態(也稱為特徵圖)。 - transformer_decoder_object_queries (形狀為
(batch_size, num_queries, hidden_dim)
的torch.FloatTensor
) — transformer 解碼器最後一層的輸出物件查詢。 - transformer_decoder_contrastive_queries (形狀為
(batch_size, num_queries, hidden_dim)
的torch.FloatTensor
) — transformer 解碼器的對比查詢。 - transformer_decoder_mask_predictions (形狀為
(batch_size, num_queries, height, width)
的torch.FloatTensor
) — transformer 解碼器最後一層的掩碼預測。 - transformer_decoder_class_predictions (形狀為
(batch_size, num_queries, num_classes+1)
的torch.FloatTensor
) — transformer 解碼器最後一層的類別預測。 - transformer_decoder_auxiliary_predictions (
List
of Dict ofstr, torch.FloatTensor
, 可選) — transformer 解碼器每一層的類別和掩碼預測列表。 - text_queries (
torch.FloatTensor
, 可選, 形狀為(batch_size, num_queries, hidden_dim)
) — 從輸入文字列表派生的文字查詢,用於訓練期間計算對比損失。 - task_token (形狀為
(batch_size, hidden_dim)
的torch.FloatTensor
) — 用於條件化查詢的一維任務令牌。 - attentions (
tuple(tuple(torch.FloatTensor))
, 可選, 當傳入output_attentions=True
或config.output_attentions=True
時返回) —tuple(torch.FloatTensor)
的元組(每層一個),形狀為(batch_size, num_heads, sequence_length, sequence_length)
。來自 transformer 解碼器的自注意力和交叉注意力權重。
OneFormerForUniversalSegmentation 正向傳播方法,覆蓋了 __call__
特殊方法。
儘管正向傳播的實現需要在該函式中定義,但之後應該呼叫 Module
例項而不是該函式,因為前者負責執行預處理和後處理步驟,而後者則默默地忽略它們。
示例
通用分割示例
>>> from transformers import OneFormerProcessor, OneFormerForUniversalSegmentation
>>> from PIL import Image
>>> import requests
>>> import torch
>>> # load OneFormer fine-tuned on ADE20k for universal segmentation
>>> processor = OneFormerProcessor.from_pretrained("shi-labs/oneformer_ade20k_swin_tiny")
>>> model = OneFormerForUniversalSegmentation.from_pretrained("shi-labs/oneformer_ade20k_swin_tiny")
>>> 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)
>>> # Semantic Segmentation
>>> inputs = processor(image, ["semantic"], return_tensors="pt")
>>> with torch.no_grad():
... 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 processor for semantic postprocessing
>>> predicted_semantic_map = processor.post_process_semantic_segmentation(
... outputs, target_sizes=[(image.height, image.width)]
... )[0]
>>> f"👉 Semantic Predictions Shape: {list(predicted_semantic_map.shape)}"
'👉 Semantic Predictions Shape: [512, 683]'
>>> # Instance Segmentation
>>> inputs = processor(image, ["instance"], return_tensors="pt")
>>> with torch.no_grad():
... 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 processor for instance postprocessing
>>> predicted_instance_map = processor.post_process_instance_segmentation(
... outputs, target_sizes=[(image.height, image.width)]
... )[0]["segmentation"]
>>> f"👉 Instance Predictions Shape: {list(predicted_instance_map.shape)}"
'👉 Instance Predictions Shape: [512, 683]'
>>> # Panoptic Segmentation
>>> inputs = processor(image, ["panoptic"], return_tensors="pt")
>>> with torch.no_grad():
... 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 processor for panoptic postprocessing
>>> predicted_panoptic_map = processor.post_process_panoptic_segmentation(
... outputs, target_sizes=[(image.height, image.width)]
... )[0]["segmentation"]
>>> f"👉 Panoptic Predictions Shape: {list(predicted_panoptic_map.shape)}"
'👉 Panoptic Predictions Shape: [512, 683]'