【S4Net:Single Stage Salient-Instance Segmentation】--- 閱讀筆記

論文名稱:S4Net: Single Stage Salient-Instance Segmentation
論文作者:Ruochen Fan, Ming-Ming Cheng, Qibin Hou, Tai-Jiang Mu, Jingdong Wang, Shi-Min Hu
發行時間:(Submitted on 21 Nov 2017 (v1), last revised 10 Apr 2019 (this version, v2))
論文地址:https://arxiv.org/abs/1711.07618
代碼開源:https://github.com/RuochenFan/S4Net



一. 前言

按照人只對感興趣的實例類多關注, 而不是所有實例的注意力特點, 對 Salient-Instance Segmentation(顯著性實例分割) 進行了一定的研究.

本文的主要貢獻在於:

  • 提出端對端的但階段顯著實例分割框架, 實現了實時檢測且在性能上是state-of-the-art.
  • 設計了一種新層: RoIMasking layer 來實現目標對象及其周圍背景的特徵分離, 進而得到更優的分割.

二. S4Net

2.1. 觀察

  1. 從常用在語義、實例分割的 RoIAlignRoIWrap 只關注 proposals 裏面的特徵從而對目標實例的自身外觀變化進行描述, 缺少對不同類別的實例的分辨能力.
  2. 隨着CNN流行而對 feature separation between foreground and background(前景、背景特徵分離) 這一種有效方法不再被重視,該方法無需經過大量數據進行訓練就可以得到一個比較出色的分割結果(參考GrabCut)
  3. 通過使用 Ternary mask 方法使得同時關注 RoI 中的特徵和 RoI 周圍的特徵( surrounding context ), 擴大感受野並且增強前背景之間的對比, 這在後續的實驗中證實了這一點的有效性

本文采用的正是圖中的Ternary mask

橘色框內是RoI框裏的feature, 藍色和橘色框內就是RoI框周圍的特徵, 之外的可以看成背景

2.2. 網絡框架

S4Net結構

S4Net主要包含了兩大部件組成:

  • Bounding box Detector
  • Segmentation Branch
    這兩部件共享同一個基礎結構(ResNet+FPN特徵提取)

2.2.1. 單階段對象檢測(Object Detector)

採用Resnet-50和FPN作爲backbone, 爲了減少時間開銷, 將Conv2相連的那些結構直接剔除, 只保留其餘部分(如: conv3 - conv6). 用4個 detected head同各側層連接起來. detected head的結構類似 Faster R-CNN中的head structures, 唯一區別在於strides.

2.2.2. 單階段分割分支

不同於 Mask R-CNN中分割方法, 我們的仍然是單階段的.
該分支包含了 RoIMasking 層來作爲實例特徵提取和一個用於識別顯著實例的顯著實例鑑別器.

2.3. RoIMasking

從RoI中提取固定大小的feature的兩種標準做法是 RoIPool 和 RoIAlign, 但這兩種方法都只關注了 Proposal 內的區域, 其餘部分不考慮, 這樣丟失了很多能用於區分實例和背景的有用信息. 同時RoI經過這兩種方法的處理後(After sample), RoI的橫縱比和分辨率都可能會發生變化, 對結果可能會造成一定的影響. 故提出 RoIMasking 減少上述缺陷.

2.3.1. Binary RoIMasking

首先介紹下作爲 RoIMasking 最簡化版本的 Binary RoIMasking.

Binary RoIMasking接受detection branch得到的 feature map 和 預測的 proposal.

其中, 爲了體現前景、背景分離的思想, 根據給定的長方形proposal的大小和位置生成binary mask, 即proposal框內mask值取1, 方框外取0. 那麼Binary RoIMasking的輸出則是輸入的feature map 乘以 binary mask得到的值.

這種做法有效保障了原始的尺寸比和分辨率.

2.3.2. Expanded Binary RoIMasking

是對 Binary RoIMasking 的擴張(僅僅是簡單的對proposal區域大小進行擴張), 考慮了更多的信息, 也因爲增大了proposal大小使得segmentation branch具有更大的感受野.

2.3.3. Ternary RoIMasking

最終過渡到 Ternary RoIMasking 這一方法. 由於前面feature map提取上RELU這一激活函數的作用, 輸入的feature map上不存在負值. 這一特點方便我們利用上RoI周圍區域.

對於 ternary mask的取值:

  • proposal 框內的記爲1 (下圖對應的中黃色區域)
  • proposal框周圍的部分記爲-1(下圖中對應的藍色區域)
  • 其餘的部分記爲0(下圖中對應的綠色區域)

再經過和原 feature map進行乘操作後, 則實現了將 框內的顯著特徵 及 其RoI區域周圍特徵 區分開來, 更是做到了前景、背景分離.

經過分析, RoIMasking的引入不但不會附加任何計算負擔, 反而實現了一次很大的進步(經過後續實驗證明).

爲了方便寫作, 後續都將 Ternary RoIMasking 簡稱爲 RoIMasking.

2.4. 對RoIMasking的分析

本小節主要對使用 Proposal 周圍的背景信息的重要性和 RoIMasking 的有效性進行了論證.

受到 這篇文章 的啓發, 我們通過繪製 gradients map(梯度圖) 來可視化特定神經元的處理功能.

activation value指的是NN中的每個神經元上的由數字來表示的信息值

首先, 加載整個訓練好的模型權重, 然後使用一個特定的圖像進行前向傳播. 在這個過程中, feature map 在執行RoIMasking 之前的activation value Hi,j,cH_{i,j,c} 被提取出來並保存. 接下來在執行反向傳播. 不同於一般在訓練階段中將反向傳播用來計算梯度損失, 在該實驗將 Hi,j,cH_{i,j,c}視爲變量, 將卷積核作爲常量, 則這裏的反向傳播只會根據每個待輸入 RoIMasking 的feature map計算實例分割損失, 如Gi,j,c=LsalHi,j,cG_{i,j,c}=\frac{\partial L_{sal}}{\partial H_{i,j,c}} 其中 Gi,j,cG_{i,j,c} 的絕對值反映了feature map pixel Hi,j,cH_{i,j,c} 對顯著性任務的重要性.

最後在對 Gi,j,c|G_{i,j,c}| 沿通道維度(channel dimension) 求和, 則得到梯度圖 Gi,j,cG_{i,j,c}.

Binary and Ternary RoIMasking

在 Fig. 6 裏, 橙色框框是 GT 的顯著實例的包圍框(b-box), 在之前定義裏, 橙框內的各pixel置爲1, 橙藍框之間的pixel置爲-1, 藍框外的pixel置爲0(筆者注: 原文是將橙框內的像素置爲0, 這點和前文和邏輯都不符, 筆者推測是作者筆誤).

顯而易見的是, Fig. 6(b) 橙藍框的背景區域(標記爲-1的區域)由明顯的反應, 而在 Fig. 6(a) 的橙框周圍僅有少許反應, 這一點間接說明了RoI周圍的 context 信息的重要性.

2.5. 分割分支

首先說以下本文的 backbone 結構, 在 global context 和 細節 之間的權衡下, 我們將與 conv3 連接的側層得到的 feature map 以步長爲8作爲我們分割分支的輸入. 在和RoIMasking連接前, 我們首先增加了一個channels爲256, kernel size爲1×1的卷積層來對channels進行壓縮.
由於僅有RoIMasking層也難於在同一個RoI內部與其他的實例區分出顯著實例, 於是我們加入一個類似Mask-RCNN的 segmentation branch 來更好的從其他實例中區分出顯著實例.

根據 Pyramid Scene Parsing Network 這篇論文指出 增大感受野有助於分割任務. 於是我們設計了一個新的分割分支——引入 殘差連接(skip-connections) 和 空洞卷積層(dilated convolutional layers).

此外, 我們還加入了兩個大小爲3×33 \times 3, stride爲11的最大池化. 空洞卷積層的擴展率爲2, 以此增大感受野. 所有的卷積層的大小都是3×33 \times 3, 步長爲11. 我們將前三個通道數設爲 128128, 其餘都設爲 6464, 這對於顯著性實例分割是足夠的了.

2.6. 損失函數

S4Net 共有兩個分支, Detection branch(檢測分支)和 Segmentation branch(分割分支), 一共存在以下loss:

  • Detection branch:
    • Object classification(對象分類), 存在 LobjL_{obj} 損失
    • Coordinate regression(座標迴歸), 存在 LcoordL_{coord} 損失
  • Segmentation branch:
    • Saliency segmentation(顯著性分割), 存在 LsegL_{seg} 損失

本文使用多任務損失 LL 來同時訓練模型: L=Lobj+Lcoord+LsegL=L_{obj}+L_{coord}+L_{seg}

2.6.1. LobjL_{obj}

由於在檢測分支上 positive proposals 數量要遠遠少於 negative proposal(正樣本數遠遠少於負樣本數), 爲了避免在訓練階段 negative proposal對回傳梯度起主導地位, 我們採用如下策略減少這一現象的影響:

分別將正樣本集合和負樣本集合記爲PPNN, NPN_PNNN_N記爲正樣本的數量和負樣本數量(NpNNN_p \ll N_N). 然後我們先分別計算正負對象的loss, 然後再組合起來. 即
Lobj=(1NpiPlogpi+1NNjNlog(1pj))L_{obj}=-(\frac{1}{N_p}\sum_{i \in P}\log p_i+\frac{1}{N_N}\sum_{j \in N}\log (1-p_j))
其中, pip_i 是第i個proposal是正樣本的概率.

2.6.2. LcoordL_{coord}

我們使用 Faster-RCNN 中的 SmoothL1lossSmooth_{L_1} loss 作爲 LcoordL_{coord}, 即

Lcoord=SmoothL1={0.5x2,     x<1x0.5,     otherwiseL_{coord}=Smooth_{L_1}=\left\{\begin{matrix} 0.5x^2 ,~~~~~|x|<1\\ |x|-0.5,~~~~~{ \rm otherwise} \end{matrix}\right.

2.6.3. LsegL_{seg}

計算方式類似於 Mask-RCNN 中的segmentation branch.

Mask-RCNN 節選

三. 實驗

使用 Instance-Level Salient Object Segmentation 提供的數據集. 爲了公平對比, 隨機選取500500張用於訓練, 300300張用於測試, 200200張用於驗證.

3.1. 實現細節

3.1.1. 訓練和測試

在訓練階段, 定義僅當 IoU>0.5{\rm IoU} > 0.5 時, 該b-box proposal爲正樣本, 反之 IoU<0.5{\rm IoU < 0.5} 時爲該b-box proposal爲負樣本.

在訓練階段, 輸入RoIMasking層是 GT b-boxes, 而在測試階段, 輸入RoIMasking層則是detection branch生成的 b-boxes. 這樣分開操作使得分割分支能獲得更穩定有效的數據, 同時實驗證明能有效減小訓練的時間開銷.

3.1.2. 超參數設置

輸入圖像通過水平翻轉(horizontal flipping)進行數據增強.

超參數的設置如下:

  • weight decay: 0.00010.0001
  • momentum: 0.90.9
  • 22 GPUs for 2020K iterations
  • initial learning rate: 0.0040.004, 每增加1010k個iterations 學習率就除以1010.

3.2. 消融實驗

通過消融實驗來對S4Net網絡的每一部分進行有效性驗證.

按照標準的COCO指標, 以 mAP\rm mAP(averaged
precision over IoU thresholds)展示結果, 包括 mAP0.5\rm mAP^{0.5}mAP0.7\rm mAP^{0.7}. 此外爲了分析區分不同實例的能力, 我們還考慮了另一個只包含遮擋實例的集合, 其由 mAPO\rm mAP_O 進行表示.

3.2.1. RoIMasking 效果

首先 只用 RoIPooling 和RoIAlign分別替代 RoIMasking 進行對比試驗, 不改變其他部分結構, 效果圖如下:

從結果如果上看Binary、Ternary RoIMasking都較前兩種方法有所提高, 尤其是Ternary RoIMasking, 這意味着關注ROI周圍的背景對分割很有幫助.

值得一提的是, Binary RoIMasking在 mAPO\rm mAP_O 上的表現並不好, 這說明簡單擴展RoI區域對顯著實例劃分幫助不大.

Ternary RoIMasking的優秀在於將RoI周圍的符號進行反轉, 提高了顯著實例和周圍背景之間的差別, 利於分割. 更重要的一點是, 這樣一來 proposal內的非顯著區域更容易被預測成與擴張區域相同的類別. 由此可見在顯著性實例分割中, 將目標與周圍背景的特徵分離能力有多重要.

3.2.2. Context區域的大小

設顯著性實例的b-box大小爲 (w,h)(w,h), 其中ww是寬, hh是高度. 我們定義一個擴展係數 α\alpha 來定義將其標記成 1-1的mask的區域擴張程度, 則有效區域的大小爲 (w+2αw,h+2αh)(w+2\alpha w, h+2\alpha h).

爲了確定α\alpha的最佳取值, 取一系列不同的α\alpha值進行實驗, 結果如下.

由實驗結果可知, α\alpha對結果的影響並不大, 因此我們取效果最好的 α=13\alpha=\frac{1}{3}作爲超參數.

這顯然符合我們的認知, α\alpha 取值過小則無法獲得豐富的RoI周圍背景信息, α\alpha 取值過大則可能會包裹更多的顯著實例, 不利於分辨真正的顯著實例.

3.2.3. Proposals窗口數

雖然更多的 proposal 數對結果有提升, 但同時也會增大計算負擔. 且當 proposal 數量大於2020後, 提升的並不明顯, 爲了確保性能, 文章選取 proposal 數爲 2020 進行折中.

3.2.4. Base模型

S4Net使用的 base model是 ResNet-50, 此外我們還對 ResNet-101, VGG16, MobileNet作爲base model進行性能測試, 測試結果如下:

從結果可知, 那些分類效果好的base model在本次實驗中依舊出色.

同時在時間上, 我們的S4Net基本能夠達到實時性的效果.

3.3. 結果對比

同 state-of-the-Arts 對比結果

從該對比實驗可知效果提升明顯.

四. 結論

本文提出了一個實時顯著實例分割的單階段顯著實例分割框架(S4Net), 創新點主要是:

  1. RoIMasking layer:
    • 同時考慮proposal內部的信息和周圍的context信息
    • 能夠保持proposal的縱橫比和分辨率不變
  2. Salient instance discriminator:
    • 通過增大分割分支的感受野來提升分割性能
      總體而言, RoIMasking比RoIPooling和RoIMasking的性能更好, 特別是對同一範圍內實例進行分辨時.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章