Posted on

Segment Anything研究筆記

Segment Anything介紹

論文網址: https://arxiv.org/pdf/2304.02643.pdf

GitHub地址: https://github.com/facebookresearch/segment-anything

這份內容介紹了「Segment Anything」(SA)計畫,它包括了一個新的圖像分割任務、模型和數據集。使用高效的模型,在數據收集過程中建立了迄今為止最大的分割數據集,擁有超過10億個遮罩和1100萬張的圖像。這個模型設計和訓練成可提示,因此它可以進行zero-shot轉移到一系列任務,通過提示工程(prompt)實現。模型的zero-shot性能印象深刻,通常與或優於以前的完全監督結果競爭。他們公開了「Segment Anything Model」(SAM)和相應的數據集(SA-1B),以促進計算機視覺基礎模型的研究。

SAM模型由圖像編碼器、提示編碼器和遮罩解碼器三個組件組成,旨在實現高效運行和實時互動提示。數據引擎包括三個階段,從手動標註到半自動標註,最後實現完全自動生成遮罩。最終數據集SA-1B包括1100萬張高分辨率圖像和10億多個高質量分割遮罩,可供未來計算機視覺基礎模型的研究使用。該數據集的質量經過詳細分析,結果顯示自動生成的遮罩質量很高。

此外,文中還提到了有關模型效能、數據集特性以及公平性考這份內容介紹了「Segment Anything」(SA)計畫,它包括了一個新的圖像分割任務、模型和數據集。使用高效的模型,在數據收集過程中建立了迄今為止最大的分割數據集,擁有超過10億個遮罩和1100萬張許可和隱私尊重的圖像。這個模型設計和訓練成可提示,因此它可以進行零-shot轉移到一系列任務,通過提示工程實現。模型的零-shot性能印象深刻,通常與或優於以前的完全監督結果競爭。他們釋放了「Segment Anything Model」(SAM)和相應的數據集(SA-1B),以促進計算機視覺基礎模型的研究。

此外,文中還提到了有關模型效能、數據集特性以及公平性考慮的討論。該計畫的目標是促進基礎模型的發展,以應對圖像分割等廣泛的計算機視覺問題。整體來說,這個計畫提供了一個重要的資源,用於研究和開發計算機視覺基礎模型。

Segment Anything做了甚麼

1. 啟示來源:

  • 啟發自NLP的標記預測任務,並考慮如何為分割任務設計基礎模型

2. 定義分割任務:

  • 基於NLP的提示概念,SAM將其轉化為分割。提示可以是前景/背景點、粗略框、遮罩、或自由文本
  • 任務目標是根據給予的提示返回有效的分割遮罩。即使提示模糊,輸出仍應是合理的遮罩。

3. 預訓練策略:

  • 透過模擬各類提示序列進行預訓練,並將模型預測的遮罩與實際情況對照。
  • 即使遇到歧義的情境,如衣服與人的示例,模型仍應該能提供有效的遮罩。

4. 零樣本轉移:

  • 預訓練賦予模型根據不同提示進行推理的能力。
  • 通過工程化特定的提示,例如使用邊界框檢測器,可以解決具體的下游分割任務。

5. 分割的多面性:

  • 分割技術包括互動分割、邊緣檢測、超像素化等多種方法。
  • 本研究旨在產生一通用模型,可以適應多數分割任務,並透過提示工程來達成。

6. 與多任務分割的區別:

  • 傳統的多任務分割模型針對一組固定任務訓練,但SAM的模型在推理階段可以適應和執行不同的任務

7. 深入討論:

  • 提示和組合提供了一種策略,使模型更具擴展性,能夠完成許多不同的任務。
  • 透過組合的策略,模型可以作為更大系統的一部分進行運作,例如結合現有的對象檢測器進行實例分割。
從這個圖可以看出,SAM可以從同一個點的提示輸入,對照至多個不同的輪廓,這可以讓模型更具擴展性,藉由後續的訓練和組合完成更多不同的任務

Segment Anything Model (SAM) 簡介

SAM 是為了可以應對提示的分割而設計的模型。它主要包含三個組件:

  1. 圖像編碼器(image encoder):基於擴展性和強大的預訓練方法,SAM使用經過預訓練的Vision Transformer (ViT) 來適應處理高分辨率的輸入。該圖像編碼器每張圖片只運行一次,可以在對模型給出提示之前先運行。
  2. 提示編碼器(prompt encoder):SAM考慮兩組提示:稀疏(如點、框、文本)和密集(如遮罩)。SAM使用位置編碼來表示點和框,並為每種提示類型加上學到的嵌入;自由形式的文本則使用CLIP的文本編碼器。對於密集的提示(即遮罩),SAM使用卷積來嵌入它,並與圖像嵌入進行元素級的相加。
  3. 遮罩解碼器(mask decoder):該解碼器有效地映射圖像嵌入、提示嵌入以及輸出令牌到一個遮罩。在經過兩個解碼器區塊後,SAM放大圖像嵌入,然後使用一個MLP將輸出令牌映射到一個動態線性分類器,進而計算每個圖像位置上的遮罩前景概率。
這張圖展示了SAM模型的整體流程。一個高效的圖像編碼器會輸出一個圖像嵌入(表示),然後可以被各種不同的輸入提示有效地查詢,以實時的速度產生物體的遮罩。對於對應多於一個物體的模糊提示,SAM能夠輸出多個合法的遮罩以及相關的信心分數。

解決模糊性:對於模糊的提示,模型可能會輸出多個合理的遮罩。為了解決這一問題,SAM修改模型使其能夠對單一提示預測多個輸出遮罩。SAM發現3個遮罩輸出通常足以應對大多數常見情況。模型還會為每個遮罩預測一個信心分數(即預估的IoU)。

效率:整體的模型設計主要是考慮到效率。給定一個預先計算的圖像嵌入,提示編碼器和遮罩解碼器可以在一個網頁瀏覽器上、在CPU上、在約50ms內運行。這樣的運行效能使得SAM的模型可以實時互動地給出提示。

損失和訓練:SAM使用focal loss和dice loss的線性組合來監督遮罩預測。SAM使用幾何提示的混合來訓練可提示的分割任務。SAM模擬一個互動設置,每個遮罩隨機抽樣提示11輪,使SAM能夠無縫地融入數據引擎中。

Zero-Shot Transfer 實驗

「零樣本遷移」是機器學習中的一個概念,主要關注如何讓模型在沒有直接經過訓練的任務或類別上表現得很好。以下是其詳細解釋:

零次轉移(Zero-Shot Transfer)簡介:

  1. 定義:在機器學習中,當我們訓練一個模型來處理某種任務或分類某些類別,但希望它能夠處理從未見過的新任務或新類別時,我們稱之為「零次轉移」換言之,模型從未直接在某些任務或類別上進行過訓練,但希望我們仍然能夠在這些任務或類別上表現良好。
  2. 如何實現:這通常是透過利用與目標任務或類別相關的一些額外資訊來實現的,例如語義關係或屬性。例如,在圖像分類中,即使模型從未見過「斑馬」這個類別,但透過知道斑馬是黑白條紋的、與馬相似的動物,模型可能能夠正確地辨識出斑馬。
  3. 應用:零樣本學習的應用範圍廣泛,包括圖像分類、文字分類、語音識別等。在現實世界中,我們經常遇到新的任務或類別,而不是總是從頭開始訓練新的模型,所以零次轉移學習提供了一個有效的方法來適應這些新情境。
  4. 與其他轉移學習的區別:轉移學習通常意味著將一個任務中學到的知識應用到另一個相關任務中。當這種轉移不涉及模型中從未見過的新類別時,它被稱為“有的轉移學習」或「少射程學習」。而當轉移涉及到完全未見過的監督類別時,它被稱為「零次轉移學習」。

總之,「零次轉移」是關於如何使機器學習模型具有更強的泛化能力,從而能夠處理它從未直接經歷過的任務或類別。

在這篇論文中,我們提示SAM來:(1) 執行邊緣檢測,(2) 分割所有內容,即物體提議生成,(3) 分割檢測到的物體,即實例分割,以及(4) 作為概念驗證,從自由格式文本中分割物體。下圖為測試結果:

從單個前景點分割出一個對象。但由於一個點可能指向多個對象,這樣的任務定義起來是不確定的。大多數數據集的真實遮罩並未列出所有可能的遮罩,使得自動度量可能不可靠。因此,我們除了標準的mIoU指標外,還進行了一項由標註者對遮罩質量進行1(無意義)到10(完美)評分的人類研究。

結果:

  • 在使用mIoU的全套23個數據集的自動評估中,與RITM比較,SAM在其中16個數據集上表現更好。
  • 在進行歧義解決的“神諭”實驗中,SAM在所有數據集上都超過了RITM。
  • 人類研究的結果顯示,評分者總是將SAM的遮罩質量評分為高於RITM。而且,SAM的平均評分落在7到9之間,這意味著其遮罩質量相當好。

其他觀察:

  • 當點的數量從1增加到9時,各方法之間的差距會減少。
  • 使用隨機點取樣替代默認的中心點取樣時,SAM與基線之間的差距變得更大,但SAM在兩種取樣方法下都能獲得相似的結果。

使用SAM進行智慧標記

Roboflow採用了SAM來進行智慧標記,使用狀況可參考下面的影片