使用 CLIPSeg 進行零樣本影像分割
TL;DR
CLIPSeg 是一個零樣本影像分割模型,允許使用者透過文字描述或範例影像(視覺提示)來分割影像中的物件,無需對特定類別進行模型訓練。雖然它只能提供粗糙、低解析度的遮罩,但在機器人感知、影像修補以及產生用於微調更精確分割模型的預標籤方面具有高度的多功能性。
CLIPSeg 的運作方式:利用 CLIP 嵌入
CLIPSeg 透過在 CLIP(Contrastive Language–Image Pre-training)之上構建來實現零樣本分割,CLIP 是由 OpenAI 開發的模型。CLIP 在共享的高維空間中為影像與文字創建抽象表示(嵌入),相似概念會被放置在彼此靠近的位置。
為了實現分割,CLIPSeg 使用在 PhraseCut 資料集上訓練的基於 Transformer 的解碼器,該資料集包含超過 34 萬個片語及其對應的遮罩。其技術架構包括:
- Frozen CLIP Backbone:在訓練過程中,底層的 CLIP 模型保持凍結。
- Decoder Integration:解碼器接收目標影像的 CLIP 表示以及提示(文字或影像)的 CLIP 表示。
- Layer Utilization:解碼器不僅使用最終的 CLIP 表示,還利用多個中間 CLIP 層的輸出,以產生二元分割遮罩。
主要功能:文字與視覺提示
CLIPSeg 的特色在於能處理兩種提示類型以辨識分割目標物件:
文字提示
使用者可以提供文字字串(例如「pancakes」或「blueberries」)作為提示。模型利用這些詞彙的 CLIP 文字嵌入來定位並遮罩影像中相應的物件。
視覺提示
CLIPSeg 允許使用範例影像作為提示,而非文字。這對於難以用語言描述的物件(例如衣物上的特定標誌)特別有用。為了最佳化視覺提示,研究建議:
- Cropping:提示影像應裁切至僅包含目標物件。
- Background Modification:對提示影像的背景進行模糊或變暗可略微提升結果。
技術限制與實際應用
雖然在彈性上相當強大,CLIPSeg 仍有特定的技術限制:
- Resolution:模型在 352 x 352 像素的影像上運作,產生低解析度、模糊的輸出遮罩,無法達到像素級精確。
- Use Case:受解析度限制,最適合用於粗略定位或作為進一步精緻化的起點。
高精度分割工作流程
由於 CLIPSeg 只提供粗糙標籤,它可用於加速高品質資料集的建立。建議的工作流程是先使用 CLIPSeg 產生初始預標籤,然後使用如 Segments.ai 的標註工具精練這些遮罩,最後在精練後的資料上微調最先進的分割模型(例如 SegFormer)。
使用 Hugging Face Transformers 的實作
CLIPSeg 已整合至 ‹‹transformers‹‹ 函式庫。實作需要 CLIPSegProcessor 與 CLIPSegForImageSegmentation 兩個類別。
對於文字提示,processor 同時處理文字與影像。對於視覺提示,processor 會為目標影像與提示影像分別產生嵌入,並以 conditional_pixel_values 形式傳遞給模型。