【實例分割_SOLOv1】SOLO: Segmenting Objects by Locations_2019


在這裏插入圖片描述

論文:https://arxiv.org/abs/1912.04488
代碼:https://github.com/WXinlong/SOLO
git

1、背景

實例分割具備很大的挑戰性,由於它須要正確分離圖像中的全部對象,同時還須要在像素級對每一個實例進行語義分割。圖像中的對象屬於一組固定的語義類別,可是實例的個數是未知的,因此,語義分割能夠被看作是一個密集的分類問題(對每一個像素進行分類),直接利用分類的方法來預測每一個像素的類別是一個很大的挑戰。github

現有的方法是怎麼作的:markdown

  • top-down:也就是「先檢測,後分割」,先檢測 bbox,後在每一個bbox中進行mask的分割
  • bottom-up:學習關係親和場,給每一個 pixel 分配一個嵌入式向量,將屬於不一樣實例的 pixel 推遠,把屬於同一個實例的 pixel 拉近。以後,須要一個後處理來分開每一個實例。

上述方法的特色: 分步實現 + indirect,前者很大程度上基於檢測結果的準確性,後者很大程度上依賴於嵌入式向量的學習和 grouping prcessing.網絡

2、本文方法

本文旨在於直接分割實例 mask。框架

做者提出的問題: 圖像中實例的本質區別是什麼?ide

解答:函數

以 MS COCO爲例,驗證集中有 36780 個目標佈局

  • 98.3% 的目標對兒的中心距離大於 30 pixels
  • 1.7% 的目標對兒中,其中 40.5% 的大小之比大於 1.5x

總結:在大多數狀況下,圖像中的兩個實例,要麼中心位置不一樣,要麼大小不一樣。性能

反思:是否能夠經過中心位置和對象大小直接區分實例?學習

SOLO:Seperate Object instances by Location and sizes

在語義分割中,如今主流的方法是使用FCN來輸出N個通道的密集預測,每一個輸出通道負責其中一個語義類別(包括背景),語義分割的目的是區分不一樣的語義範疇,在本文中,引入「實例類別」的概念來區分圖像中的對象實例,即量化的中心位置和對象大小,這使得能夠利用位置來分割對象,故名爲「SOLO」。

Locations: 圖像被分爲 S × S S \times S S×S 的格子,獲得 S 2 S^2 S2 箇中心位置類別

根據目標中心,每一個目標實例被分配到其中一個格子內,做爲其中心位置的類別。本文將中心位置的類別編碼成 channel axis,相似於語義分割中的語義類別。

每一個輸出通道都是對每一箇中心位置類別的響應,對應的 channel 的特徵圖能夠預測屬於該類別的實例的mask。因此,結構化的幾何信息天然地保存在空間矩陣中。

實際上,實例類別近似於實例的對象中心位置,所以,經過將每一個 pixel 分類到其實例類別中,就至關於使用迴歸方法從每一個像素來預測對象中心。

將位置預測任務轉化爲分類而不是迴歸任務的緣由在於: 使用分類時,更加直接,且更易於使用固定數量的通道對多個實例進行建模,同時不依賴於分組或學習嵌入式向量之類的後處理。

Sizes:使用 FPN 來區分不一樣大小的目標實例,以便將不一樣大小的對象分配給不一樣 level 的特徵圖,做爲對象大小類別。

全部的實例都被規則的分配,使得可以經過 「instance categories」 來區分類別。
注意:FPN是本文的核心之一,由於它對分割性能有着很大的影響,尤爲是對不一樣大小的物體。

SOLO效果:

  • 端到端訓練,且無後處理
  • 只須要mask的標註信息,無需 bbox 標註信息,
  • 在 COCO 上實現了和 Mask R-CNN 基本持平的效果
  • SOLO 只須要解決兩個像素級的分類問題,相似於語義分割,
  • 本質上,SOLO 經過離散量化,將座標迴歸轉化爲分類問題,能夠避免啓發式的座標規範化和 log 變換,一般用於像 YOLO 這樣的檢測器中。

3、本文方法的具體作法

3.1 問題定義

給定一個任意的圖像,實例分割系統須要肯定是否有須要分割的實例, 若是有,則返回分割的 mask。

SOLO 的核心想法:將實例分割問題轉化爲兩個問題:類別預測+實例 mask 生成

  • 將輸入圖像分紅格子 : S × S S\times S S×S
  • 若是目標的中心落到格子裏邊,則這個格子要 輸出實例類別(semantic category)+ 分割實例(segmenting instance)

3.1.1 Semantic category

對於每一個 grid, SOLO 會預測 C 維的輸出,分別表明每一個類別的置信得分,C 爲類別個數。把圖像劃分爲 S × S S\times S S×S 個格子,輸出就是 S × S × C S \times S \times C S×S×C,如圖2_top所示。

該設計方法是基於一個假設:每一個格子都只屬於一個單獨的實例。

推理階段:C 維輸出表示每一個實例屬於不一樣類別的機率

在這裏插入圖片描述

3.1.2 Instance Mask

和類別預測並列的分支是實例mask預測分支,該分支對每一個 positive grid cell 產生一個對應的 instance mask。

對於輸入圖像 I I I,將其分爲 S × S S\times S S×S 的格子,則最多會預測 S 2 S^2 S2 個格子,將這些 mask 編碼成一個 3D 輸出的tensor,輸出有3維,也就是3個通道。則, instance mask 分支的輸出維度爲: H I × W I × S 2 H_I \times W_I \times S^2 HI×WI×S2 k t h − c h a n n e l k_{th}-channel kthchannel 是對 ( i , j ) (i,j) (i,j) 位置的分割響應,其中 k = i × S + j k= i\times S + j k=i×S+j。最後,在 semantic category 和 class-agnostic mask 之間創建了一對一的對應關係(圖2所示)。

現有的方法如何預測實例掩碼: 採用 FCN

不足:傳統的卷積在運算上具備空間不變性,圖像分類須要空間不變性,但語義分割模型須要對空間變化敏感的模型,由於這個模型是以 grid cell 爲條件的,因此必須由不一樣的特徵通道來分開。

本文方法如何實現預測 mask: 網絡開頭的地方,直接給網絡輸入歸一化後的 pixel 座標(參考 CoordConv operator[14])。也就是創建一個和原始的輸入尺寸相同的 tensor,這個 tensor 裏邊的 pixel 的座標被歸一化到 [-1,1]。以後,將該 tensor concat 到輸入特徵,並傳遞到以後的層。爲了使得卷積可以訪問其本身的輸入座標,本文將空域 functionality 加到 FCN 模型中。

假設原始特徵 tensor 尺寸爲 H × W × D H \times W \times D H×W×D,新的 tensor 尺寸爲 H × W × ( D + 2 ) H \times W \times (D+2) H×W×(D+2),其中,最後的兩個 channels 是 x − y x-y xy pixel 座標。

Forming Instance Segmentation: SOLO中,類別的預測和對應的 mask 能夠很天然的使用其 grid cell 來聯繫起來, k = i ⋅ S + j k=i \cdot S + j k=iS+j。基於此,能夠直接對每一個 grid 來創建最終的實例分割結果。

原始的實例分割結果是經過將全部 grid 的結果結合起來獲得的,以後,使用 NMS 來得到最終的實例分割結果,沒有其餘後處理。

3.2 Network Architecture

SOLO 使用 FPN 做爲 backbone,FPN 在每一個 level 產生固定通道但不一樣大小的特徵圖(通道一般爲256-d),這些特徵圖做爲預測 head 的輸入:semantic category head + instance mask head。同一個head的不一樣 level的參數是共享的。不一樣 level 的grid number 是不一樣的。另外,只有最後的 1x1 conv 的參數是沒有共享的。

爲了代表 SOLO 的通用性和高效性,做者使用了不一樣的 backbone 和 head 進行實驗:

  • backbone
  • head
  • loss 函數

3.3 SOLO learning

3.3.1 Label Assignment

類別預測分支: 網絡須要給每一個小格子預測目標類別機率。以 ( i , j ) (i,j) (i,j) 位置爲例,若是該網格內落入了任何 gt mask 的中心區域,則被分爲正例,不然被分爲負例。中心點採樣在如今的目標檢測方法中是很是高效的,因此做者在mask 類別分類任務上使用了相似的方法。

給定 gt mask 的中心 ( c x , c y ) (c_x, c_y) (cx,cy),寬 w w w,高 h h h。中心區域的尺度控制因子是 ϵ : ( c x , c y , ϵ w , ϵ h ) \epsilon:(c_x, c_y, \epsilon w, \epsilon h) ϵ:(cx,cy,ϵw,ϵh)

本文做者設定 ϵ = 0.2 \epsilon=0.2 ϵ=0.2,則每一個 gt mask 平均有 3 個 正樣本(positive samples)。

對每一個 positive sample,都會設定一個二值分割 mask,此處共有 S 2 S^2 S2 個 grid,全部每一個圖像都會輸出 S 2 S^2 S2 個 mask,對每一個 positive sample,其對應的 binary mask 都會被標記。

注意: mask 的維度會影響 mask 預測分支,然而,做者展現了最簡單的 row-major order 在本文方法都會有很好的效果。

3.3.2 Loss Function

訓練的 loss function, λ = 3 \lambda=3 λ=3
在這裏插入圖片描述
其中, L c a t e L_{cate} Lcate 是用於分類的 Focal loss, L m a s k L_{mask} Lmask 是用於 mask 預測的 loss:
在這裏插入圖片描述
若是 grid 的索引(類別 label)是從左到右、從上到下排列的,則 i = ⌊ k / S ⌋ i=\lfloor k/S \rfloor i=k/S j = k % S j=k \% S j=k%S N p o s N_{pos} Npos 是 positive samples 的個數, p ∗ p^* p m ∗ m^* m 分別是類別和mask。 1 1 1 是指示函數,若是 p i , j ∗ > 0 p_{i,j}^*>0 pi,j>0,則爲1,不然爲0。



d m a s k : d_{mask}: dmask 本文中,做者對比了三種不一樣的 loss函數

  • Binary Cross Entropy(BCE)
  • Focal loss
  • Dice loss

最終, Dice loss 以其高效性和穩定性贏得了做者的青睞

在這裏插入圖片描述

3.4 Inference

  • 首先通過 FPN,獲得 ( i , j ) (i,j) (i,j) 位置上的類別得分 p i , j p_{i,j} pi,j,和對應的 mask m k m_k mk,其中 k = i ⋅ S + j k=i \cdot S +j k=iS+j
  • 使用閾值 0.1 來過濾掉低的類別得分
  • 選擇前 500 個得分對應的mask,並進行 NMS。
  • 爲了將預測的 soft mask 轉化成 二值 mask,做者使用 0.5 的閾值將 soft mask 進行二值化。保留前100 個實例來進行評估。

4、實驗

8GPU,SGD,batch_size:16,共 36 個epoch,初始 lr=0.01,分別在 27 和 33 個epoch處降低10倍。圖像大小:短邊隨機採樣到 640 ~ 800 pixel。

4.1 主要結果

在 MS COCO test-dev上對比:如表1所示

  • SOLO 和 ResNet-101 結合,獲得 mask AP 37.8%
  • SOLO 和 DCN-101 結合,獲得 mask AP 40.4%
    在這裏插入圖片描述
    SOLO 輸出如圖8所示,在不少不一樣的場景均可以得到較好的效果。
    在這裏插入圖片描述
    在這裏插入圖片描述



4.2 How SOLO works?

S = 12 S=12 S=12 時的網絡輸出如圖4所示,子圖 ( i , j ) (i,j) (i,j) 表示由其對應的 mask 分支(通過 sigmoid)預測獲得的 soft mask。

不一樣的實例是由不一樣的 mask 預測分支來響應的,經過在不一樣位置來分割實例,SOLO 將實例分割問題轉化成了 position-aware 的分類問題。

每一個 grid 僅僅會對一個實例響應,且一個實例可能會被相鄰的 channel 都預測,在 inference 階段,使用 NMS 來抑制多餘的 mask。
在這裏插入圖片描述

4.3 Ablation Experiments

Grid number: 本文對比了不一樣的 grid number 帶來的影響,如表2所示。

特徵的生成是經過 merge ResNet(stride=8) 的 C3, C4, C5 的輸出獲得的。

S=12 時, SOLO 能夠在 MS COCO 上獲得 27.2 的 AP,當 S=24 時,提升到了 29.0 AP。
在這裏插入圖片描述
在這裏插入圖片描述

上述結果代表,單尺度的 SOLO 能夠應用到目標尺寸差別不太多的場景中。

然而,單尺度的模型遠遠低於金字塔模型。

Multi-level Prediction: 做者使用 5 級 FPN 金字塔,來分割不一樣尺度的目標,如表3所示。gt mask 的尺寸被顯式的用於分配它們去特定的金字塔 level。

基於上述多尺度方法,做者獲得了 35.8 AP,大大的提高了效果。

CoordConv: 另一個重要的組件是 spatially variant convolution(CoordConv)。如表4所示,標準的 conv 已經在必定程度上具備了空間可變性。當使得卷積可以訪問本身的座標時,能夠提高3.6個AP。兩個或更多的 CoordConv 會帶來更多的提高,這說明,CoordConv 可以給預測輸出帶來空域變化或位置敏感性。
在這裏插入圖片描述
Loss function: 表5展現了不一樣的 loss function 給 mask 分支帶來的影響,包括 BCE、FL、DL。

  • BCE:對 positive samples,設置mask分支的 weight=10,pixel weight=2
  • FL:mask 分支 weight=2

FL 損失更優,因爲實例 mask 的大部分像素都在背景中, Focal loss 本來就是爲了下降分類良好的樣本的損失來緩解樣本不平衡問題的。

  • Dice Loss:在無需人工設定 loss 的權重超參數的狀況下,獲得了最好的效果。該 loss 函數將 pixels 視爲一個 object,能夠自動的在背景和前景像素間創建正確的平衡。
    在這裏插入圖片描述

Alignment in category branch: 類別預測分支,必須將 H × W H\times W H×W S × S S\times S S×S 的卷積特徵進行匹配。做者對比了三個方法:

  • interpolationg:直接雙線性插值到須要的尺寸
  • adaptive-pool:2 維 max-pool,從 H × W H\times W H×W S × S S\times S S×S
  • region-grid-interpolation:對每一個網格,使用基於密集採樣點的雙線性插值,並將結果與均值進行聚合。

從結果來看,這些不一樣的方法並無帶來很大的性能差別,也就是說對齊的過程較爲靈活。

Different head depth: SOLO 中,實例分割是一個 pixel-to-pixel 的任務,做者使用 FCN 來探索 mask 的空間佈局。如圖5所示,做者對比了不一樣的 head 深度帶來的影響。將 head 的深度從 4 提高到 7,得到了 1.2 的 AP 提高。當深度超過 7 時,性能趨於穩定。故本文中使用深度爲 7。

爲何 SOLO 中 head 更深?

以前的工做,如 Mask R-CNN,一般在 head 使用 4 層卷積來進行 mask 的預測,在 SOLO 中,mask 是基於空間位置來調節的,因此做者將座標附加到 head 開始的地方,mask head 必須由足夠的特徵表達能力來學習這種平移。對於類別分類分支,計算的開銷能夠胡烈,由於 S 2 < < H × W S^2 << H \times W S2<<H×W
在這裏插入圖片描述

4.4 SOLO-512

做者還訓練了小的版本,來突破實時語義分割的界限。做者使用的模型的輸出具備較小的分辨率,較短的邊爲 512 而非 800。其餘設置和 SOLO 相同。

在這裏插入圖片描述
SOLO 對於密集的、任意的實例預測任務來講,是一種通用的技術。
在這裏插入圖片描述

5、Decoupled SOLO

假設設定 S = 20 S=20 S=20, SOLO 的輸出是 S 2 = 400 S^2=400 S2=400 個通道的 map,然而,這些預測在通常狀況下是冗餘的,由於目標是稀疏的。因此做者又在本節引入了 Decoupled SOLO,如圖7所示。
在這裏插入圖片描述
Decoupled SOLO:

  • 原始輸出 tensor : M ∈ R H × W × S 2 M \in R^{H \times W \times S^2} MRH×W×S2
  • 通過解耦以後的輸出:分別對應於兩個座標的 tensor, X ∈ R H × W × S X \in R^{H \times W \times S} XRH×W×S X ∈ Y H × W × S X \in Y^{H \times W \times S} XYH×W×S

因此,輸出空間從 H × W × S 2 H \times W \times S^2 H×W×S2 降到了 H × W × 2 S H \times W \times 2S H×W×2S

對於落到網格 ( i , j ) (i,j) (i,j) 中的目標:

  • 原始SOLO 在輸出 tensor M 的第 k 個通道分割其 mask, k = i ⋅ S + j k=i \cdot S + j k=iS+j
  • Decoupled SOLO,該對象的預測 mask 被定義爲兩個 channel map 的元素級別的相乘:
    在這裏插入圖片描述

在這裏插入圖片描述

7、Conclusion

SOLO 是一個端到端的實例分割框架,與 mask r-cnn 相比,達到了競爭性的準確性。


發佈了155 篇原創文章 · 獲贊 736 · 訪問量 71萬+
相關文章
相關標籤/搜索