社群計算機視覺課程文件

基於Transformer的影像分割

Hugging Face's logo
加入 Hugging Face 社群

並獲得增強的文件體驗

開始使用

基於Transformer的影像分割

在本節中,我們將探討視覺Transformer與卷積神經網路(CNN)在影像分割方面的比較,並詳細介紹一個基於視覺Transformer的分割模型架構作為示例。

本節假設您熟悉影像分割、卷積神經網路(CNN)和視覺Transformer的基礎知識。如果您不熟悉這些概念,建議您在繼續之前查閱本課程的相關材料。

用於分割的CNN與Transformer

在視覺Transformer出現之前,CNN(卷積神經網路)一直是影像分割的首選。像U-NetMask R-CNN這樣的模型捕獲了區分影像中不同物件所需的細節,使其在分割任務中達到了最先進的水平。

儘管在過去十年中取得了優異的成果,但基於CNN的模型仍有一些侷限性,而Transformer旨在解決這些問題。

  • 空間侷限性:CNN透過小的感受野學習區域性模式。這種區域性焦點使其難以“連結”影像中相距較遠但相關的特徵,影響了它們準確分割複雜場景/物件的能力。與CNN不同,ViT旨在利用注意力機制捕獲影像中的全域性依賴關係。這意味著基於ViT的模型可以一次性考慮整個影像,從而理解影像遠距離部分之間的複雜關係。對於分割而言,這種全域性視角可以帶來更準確的物件劃分。
  • 任務特定元件:像Mask R-CNN這樣的方法結合了手工設計的元件(例如,非極大值抑制、空間錨點)來編碼關於分割任務的先驗知識。這些元件增加了複雜性並需要手動調整。相比之下,基於ViT的分割方法透過消除手工設計元件的需求來簡化分割過程,使其更容易最佳化。
  • 分割任務專業化:基於CNN的分割模型分別處理語義、例項和全景分割任務,導致每個任務都有專門的架構,併為每個任務單獨進行研究。最近基於ViT的模型,如MaskFormerSegFormerSAM,提供了一種在單一框架內處理語義、例項和全景分割任務的統一方法。

MaskFormer聚焦:視覺Transformer影像分割示例

MaskFormer(論文Hugging Face transformer文件)是論文“MaskFormer: Per-Pixel Classification is Not All You Need for Semantic Segmentation”中介紹的模型,它預測影像中每個存在的類別的分割掩碼,在一個架構中統一了語義和例項分割。

MaskFormer架構

下圖展示了從論文中提取的架構圖。

該架構由三個元件組成:

畫素級模組:使用骨幹網路提取影像特徵,並使用畫素解碼器生成逐畫素嵌入。

Transformer模組:採用標準Transformer解碼器從影像特徵和可學習的位置嵌入(查詢)計算逐段嵌入,編碼每個段的全域性資訊。

分割模組:分別使用線性分類器和多層感知器(MLP)為每個段生成類別機率預測和掩碼嵌入。掩碼嵌入與逐畫素嵌入結合使用,以預測每個段的二值掩碼。

該模型使用二值掩碼損失進行訓練,與DETR相同,並對每個預測的段使用交叉熵分類損失。

使用Hugging Face Transformer進行全景分割推理示例

全景分割的任務是為影像中的每個畫素標記其類別,並識別這些類別內的不同物件,結合了語義分割和例項分割。

from transformers import pipeline
from PIL import Image
import requests

segmentation = pipeline("image-segmentation", "facebook/maskformer-swin-base-coco")

url = "http://images.cocodataset.org/val2017/000000039769.jpg"
image = Image.open(requests.get(url, stream=True).raw)

results = segmentation(images=image, subtask="panoptic")
results

如下所示,結果包含同一類別的多個例項,每個例項都具有不同的掩碼。

[
  {
    "score": 0.993197,
    "label": "remote",
    "mask": <PIL.Image.Image image mode=L size=640x480 at 0x109363910>
  },
  {
    "score": 0.997852,
    "label": "cat",
    "mask": <PIL.Image.Image image mode=L size=640x480 at 0x1093635B0>
  },
  {
    "score": 0.998006,
    "label": "remote",
    "mask": <PIL.Image.Image image mode=L size=640x480 at 0x17EE84670>
  },
  {
    "score": 0.997469,
    "label": "cat",
    "mask": <PIL.Image.Image image mode=L size=640x480 at 0x17EE87100>
  }
]

視覺Transformer分割模型的微調

由於有許多預訓練的分割模型可用,遷移學習和微調通常用於使這些模型適應特定的用例,特別是對於基於Transformer的分割模型(如MaskFormer)來說,它們對資料要求高,難以從頭開始訓練。這些技術利用預訓練的表示來有效地將這些模型適應新資料。通常,對於MaskFormer,骨幹網路、畫素解碼器和Transformer解碼器保持凍結狀態,以利用其學習到的通用特徵,而Transformer模組則進行微調,以適應其類別預測和掩碼生成能力到新的分割任務。

此筆記本將引導您完成使用MaskFormer進行影像分割的遷移學習教程。

參考文獻

< > 在 GitHub 上更新

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