Mask2Former 與 OneFormer:🤗 Transformers 中的通用影像分割模型
TL;DR
Mask2Former 與 OneFormer 現已在 🤗 Transformers 中提供,採用統一的架構即可執行實例、語意與全景分割,無需針對任務的專屬模型。
影像分割任務
Instance segmentation 識別每個物件實例(例如每個人),並為每個實例輸出二元遮罩。
Semantic segmentation 為每個像素指派單一類別標籤,且不區分同類別的不同實例。
Panoptic segmentation 結合前兩者:產生一組不重疊的區段,每個區段都有二元遮罩與類別標籤,涵蓋「事物」(instances)與「材質」(background categories)。
這三個子任務過去往往需要不同的模型族群,但近期研究已聚焦於單一的「遮罩分類」範式,將所有任務統一處理。
通用影像分割
自 2020 年起,像 DETR 這樣的模型引入基於 Transformer 的解碼器,能同時預測一組二元遮罩與類別標籤,從而以統一方式實現全景分割。MaskFormer 證明相同範式同樣適用於語意分割。
Mask2Former 透過改進 backbone、pixel decoder 與 transformer decoder,將此概念擴展至實例分割。其架構包括:
- 產生低解析度特徵圖的 backbone(ResNet 或 Swin Transformer)。
- 將這些特徵圖上採樣至高解析度的 pixel decoder。
- 接收固定查詢集合並輸出二元遮罩提案與類別 logits 的 transformer decoder。
Mask2Former 仍需針對每個任務分別訓練,以達到最先進的效能。
OneFormer 在 Mask2Former 基礎上加入文字編碼器,使模型能根據任務描述(「instance」, 「semantic」或「panoptic」)進行條件化。僅以全景風格資料集訓練,OneFormer 在三項任務上皆能取得最先進的結果,但因額外的文字編碼器而導致推論延遲較高。它支援 Swin Transformer 或 DiNAT 作為 backbone。
使用 Transformers 函式庫進行推論
兩個模型皆可透過單行程式碼載入,使用 AutoImageProcessor(或 OneFormerProcessor)以及對應的模型類別:
from transformers import AutoImageProcessor, Mask2FormerForUniversalSegmentation
processor = AutoImageProcessor.from_pretrained(
"facebook/mask2former-swin-base-coco-panoptic"
)
model = Mask2FormerForUniversalSegmentation.from_pretrained(
"facebook/mask2former-swin-base-coco-panoptic"
)
函式庫提供超過 30 個預訓練檢查點,涵蓋各種資料集與 backbone。
典型的推論流程:
from PIL import Image, ImageDraw
import requests, torch
url = "http://images.cocodataset.org/val2017/000000039769.jpg"
image = Image.open(requests.get(url, stream=True).raw)
inputs = processor(image, return_tensors="pt")
with torch.no_grad():
outputs = model(**inputs)
# 將原始遮罩提案轉為全景輸出
prediction = processor.post_process_panoptic_segmentation(
outputs, target_sizes=[image.size[::-1]]
)[0]
print(prediction.keys()) # dict_keys(['segmentation', 'segments_info'])
prediction['segmentation'] 為 (H, W) 的映射,每個像素值編碼實例 ID;segments_info 包含類別 ID、分數與其他中繼資料。
可使用 Matplotlib 進行視覺化,將每個區段 ID 映射至不同顏色,並加入圖例顯示類別名稱與實例數量。
OneFormer 推論 使用相同 API,但需額外提供文字提示,例如全景任務使用 "segment everything",實例任務使用 "segment instances",語意任務使用 "segment semantics"。完整示範筆記本位於 Hugging Face Transformers‑Tutorials 倉庫。
在自訂資料上微調
微調流程與 MaskFormer 相同,只需將 MaskFormerForInstanceSegmentation 替換為 Mask2FormerForUniversalSegmentation 或 OneFormerForUniversalSegmentation。處理器類別也相應變更:
Mask2FormerImageProcessor(或AutoImageProcessor)用於 Mask2Former。OneFormerProcessor用於 OneFormer,支援圖像與文字輸入。 示範筆記本說明了資料集準備、訓練迴圈與三種分割任務的評估方式。
影響與重要性
- Unified workflow – 研究人員與實務工程師不再需要為每個分割任務維護不同的程式碼庫。
- Reduced engineering overhead – 單一模型檢查點即可部署於多種下游應用(例如自動駕駛、醫學影像、內容審查)。
- State‑of‑the‑art performance – OneFormer 在單一全景資料集上訓練,即可匹配或超越專門模型,簡化資料收集流程。
- Open‑source accessibility – 透過將這些模型整合至 🤗 Transformers,Hugging Face 降低高品質分割的使用門檻,促進快速原型開發與可重現研究。
資源
- Demo notebooks: Mask2Former, OneFormer
- Live demo Spaces: Mask2Former demo, OneFormer demo
- Original papers: Mask2Former (arXiv:2112.01527), OneFormer (arXiv:2211.06220)