論文:SOLOv2: Dynamic, Faster and Stronger
代碼:https://github.com/WXinlong/SOLO
摘要
主要提出了作者在SOLOv2中實現的優秀的實例分割方法,旨在創建一個簡單、直接、快速的實例分割框架:
- 通過提出動態學習對象分割器的mask head,使mask head依賴于位置。具體來說,將mask branch分解為mask kernel branch和mask feature branch,分別負責學習卷積核和卷積特征 – mask learning
- 提出Matrix NMS顯著減少了由于mask的NMS導致的推斷時間開銷。 – Matrix NMS
- SOLOv2 可以用于目標檢測和全景分割
介紹
SOLOv2首先引入了一個動態方案,它允許按位置動態分割對象。具體來說,mask learn 可以分為兩部分:convolution kernel learning 和 feature learning。
文章提出的Matrix NMS有很好的性能優勢,文章表示Matrix NMS在準確性和速度上均勝過現有的NMS和同類產品。
通過這些改進,SOLOv2的AP性能比SOLOv1高出1.9%,速度也提高了33%。
文章給出了在單個V100 GPU卡上的評估結果,在MS COCO數據集上,Res-50-FPN SOLOv2在18 FPS時可實現38.8%的mask AP。
Related Work
1、Dynamic Convolutions(動態卷積)
- 在傳統的卷積層中,學習到的卷積核是固定的,并且獨立于輸入。
- 空間變換網絡[Spatial Transform Networks]預測全局參數變換以扭曲特征圖,從而使網絡能夠自適應地變換以輸入為條件的特征圖。
- 提出了動態濾波器[Dynamic filter]來主動預測卷積濾波器的參數。 它以特定于樣本的方式將動態生成的濾鏡應用于圖像。
- 變形卷積網絡[Deformable Convolutional Networks]通過預測每個圖像位置的偏移量來動態學習采樣位置。
2、Non-Maximum Suppression
- Soft-NMS根據鄰居與較高得分的預測的重疊程度來降低其置信度得分。與傳統的NMS相比,檢測精度有所提高,但由于順序操作,推理速度較慢。
- Adaptive NMS將動態抑制閾值應用于每個實例,該閾值是針對人群中的行人檢測量身定制的。
- Fast NMS能夠并行決定要保留的預測或丟棄的預測。但是它以性能下降為代價加快了速度。
- ++Matrix NMS同時解決了硬去除和順序操作的問題。在簡單的PyTorch實施中,Matrix NMS能夠在不到1 ms的時間內處理500個掩模,并且比Fast NMS的效率高出0.4%。++
SOLOv1
SOLOv1框架的核心思想是按位置分割對象。將輸入圖片劃分為S X S的網格。如果一個對象的中心落在一個網格單元格中,該網格單元格負責預測語義類別以及分配每個像素的位置信息。主要包括兩個分支:category branch and mask branch。
- Category branch:預測語義類別,掩碼分支對對象實例進行分段。具體地說,類分支輸出S×S×C形張量,其中C為對象類的個數。
- Mask branch
SOLOv2
1、Dynamic Instance Segmentation
SOLOv2 的網格,多層次的預測,coordConv和損失函數都是繼承于SOLOv1,提出了一套動態方案
動態方案:將原始的mask branch解耦為mask kernel branch以及mask feature branch,分別用于預測卷積核和卷積特征。
如圖2所示,在SOLOv1中,mask branch如2(a)所示,由于參數量較多,預測結果存在冗余信息,因此進行解耦如圖2(b)所示,本文考慮到都是從預測結果層面出發。對此作者想到為什么不從卷積核角度出發,由此得到2(c),上面為mask kernal分支,下面為mask特征分支。
2、Mask Kernel Branch
Mask kernel 分支位于prediction head內,與語義類別分支一起。prediction head 在 FPN 輸出的特征圖金字塔上工作。Head內的兩分支由4個卷積組成用于特征提取,最后一個卷積用于預測。Head 的權重在不同的特征圖層級上共享。 作者通過給第一個卷積添加歸一化的坐標,即連接兩個附加的輸入通道,將空間功能添加到內核分支。
對每個網格來說, kernel分支預測D維輸出來表示預測的卷積核權值,其中D為參數的數量。當為了生成具有E個輸入通道的1 × 1卷積的權重,D = E,當 3 × 3卷積D = 9E。這些生成的權重取決于位置,即網格單元。 如果將輸入圖像劃分為S × S 個網格,則輸出空間將為 S × S × D。注意到這里不需要激活函數。
這里輸入為 H × W × E的特征 F,其中 E是輸入特征的通道數;輸出為卷積核 S × S × D,其中S是劃分的網格數目,D 是卷積核的通道數。對應關系如下:1 × 1 × E 的卷積核,則 D = E ,3 × 3 × E的卷積核,則 D = 9E。
3、Mask Feature Branch
由于Mask Feature和Mask Kernel是解耦并分別預測的,因此有兩種構造Mask Feature Branch的方法:
- predict the mask features for each FPN levels:可以把它和Kernel分支一起放到head中,這意味著我們可以預測每個FPN級別的掩碼特征
- predict a unified mask feature representation for all FPN levels:為所有FPN級別預測一個統一的掩碼特征表示
文中采用的是第二種方法。
作者采用了特征金字塔融合來學習統一的高分辨率掩碼特征表示。將FPN P2 至 P5層分別依次經過 【3 × 3 conv,group norm,ReLU和 2x bilinear upsampling,這樣FPN特征P2至P5 被合并到了一個相同的輸出(原圖的1/4),然后再做逐點相加(element-wise summation),最后一層做【1x1卷積,group norm 和ReLU】操作。如圖3所示。應該注意的是,在進行卷積和雙線性上采樣之前,將歸一化的像素坐標輸入到最深的FPN級別(以1/32比例)。 提供的準確位置信息對于啟用位置敏感度和預測實例感知功能非常重要。
Forming Instance Mask
對于每個單元格(i,j),首先得到掩碼核
Gi,j,:∈RDG_{i,j,:} \in R^D Gi,j,:?∈RD
然后將G_{i,j}與F卷積得到實例掩碼。總的來說,每個預測級別最多有S^2掩碼。最后,使用Matrix NMS 得到最終的實例分割結果。
Learning and Inference
Loss 函數和 SOLOv1 一樣,如公式2所示:
L=Lcate+λLmaskL = L_{cate}+λL_{mask} L=Lcate?+λLmask?
Matrix NMS
其啟發自soft-NMS,soft-NMS 是每次選擇置信度最高的候選mask(或框)降低與其存在重疊的候選mask(或框)的置信度。這種過程像傳統的Greedy NMS一樣是順序的,無法并行實現。作者反其道而行之,既然是降低每個mask的置信度,那就想辦法按照一定規則對所有mask挨個降低置信度。
某一候選mj置信度被降低,和兩方面因素有關:其衰減因子受以下因素影響:
- The penalty of each prediction mi on mj (si > sj) 各預測mi對mj (si > sj)的罰值;
- The probability of mi being suppressed. mi被抑制的概率
對第一個來說, 可以通f(ioui,j)f(iou_{i, j})f(ioui,j?)輕松計算mj上每個預測mi的懲罰值
第二個比較麻煩,概率通常與IoUs呈正相關。所以在這里作者直接用the most overlapped prediction on mi預測來近似概率:
為此,最終的衰變因子變成公式4:
更新后的分數由 sj=sj?decayjs_j=s_j \cdot decay_jsj?=sj??decayj?計算得出
考慮兩個最簡單的遞減函數,表示為線性函數:
Gaussian:
Implementation
Matrix NMS的所有操作都可以一次性實現,不需要遞歸。
- 對按分數降序排列的前N個預值計算一個N×N的兩兩IoU矩陣。對于二進制掩碼,IoU矩陣可以通過矩陣運算有效地實現;
- 計算得到了IoU矩陣上的最大列數重疊的IoU;
- 計算所有較高得分預測的衰減因子,通過逐列最小值選取各預測的衰減因子作為最有效的衰減因子(Eqn. (4));
- 最后,通過衰減因子對分數進行更新。
為了使用,只需要threshing和選擇 top-k 得分掩碼作為最終的預測。
圖4顯示了Pytorch風格的 Matrix NMS 偽代碼:
Experiments
Main Results
SOLOv2 Visualization
The outputs of mask feature branch.作者使用的模型具有64個輸出通道(即,在mask prediction之前的最后一層特征圖的通道 E = 64。
這里有兩種主要模式:首先,最重要的是,mask features是position-aware。它顯示了水平和垂直掃描圖像中對象的明顯行為。另一個明顯的模式是某些特征圖負責激活所有前景對象,例如在白框中的那個。
與Mask R-CNN分割結果的比較:
最終的輸出如圖8所示。不同的物體有不同的顏色,SOLOv2方法在不同的場景中顯示了良好的效果,值得指出的是,邊界處的細節被很好地分割,特別是對于大型對象。
Ablation Experiments
在表1中,將SOLOv2與MS COCO test-dev上最先進的實例分割方法進行了比較。
參考:http://blog.csdn.net/john_bh/