【實例分割_SOLOv2】SOLOv2:Dynamic,Faster and Stronger


在這裏插入圖片描述
論文鏈接:https://arxiv.org/abs/2003.10152
代碼鏈接:http://github.com/WXinlong/SOLO

一、背景

在 SOLOv1的基礎上的兩個提升:

  • 1、Mask Learning

    SOLOv2要進一步動態學習目標分割器的 mask head,mask head 被解耦成 mask kernel branch 和 mask feature branch,分別來學習卷積核和卷積特徵。mask learning 可以分爲兩部分:

    • convolutional kernel learning:當把 pixel 分類到不同的網格中時,網絡會自動預測要使用的分類器,並根據輸入圖像進行調整。
    • feature learning:很多的語義分割技術都可以用來提高性能,受FPN 啓發, SOLOv2 爲實例分割構建了一個統一,且有高分辨率 mask 特徵表達。
  • 2、Mask NMS

    在 SOLOv1的基礎上,SOLOv2提出了一個 Matrix NMS 來降低 inference 的時間。Matrix NMS 是並行矩陣乘法,能夠一次性實現 NMS。

對於 mask NMS,NMS 的缺點被放大了,相比 bbox,mask NMS 需要更多的時間來爲每個 mask 計算 IoU,導致更大的開銷。通過引入矩陣 NMS,可以並行的第一性執行完成。

二、相關工作

Instance Segmentation:

本文的方法是從SOLO[33]發展而來的,直接將原始的 mask 預測解耦爲 kernel 學習和特徵學習。不需要anchor、歸一化、邊界框檢測。直接將輸入圖像映射到所需的類別和 mask。訓練和推理都簡單得多。因此,該框架簡單得多,但實現了顯著的更好的性能(相同速度下提升了6%的AP);最佳模型實現了41.7 AP,而YOLACT的最佳31.2%AP。

Dynamic Convlutions:

傳統的卷積層中學習的卷積核是固定的,且和輸入無關,也就是說一幅圖像共享一個相同的卷積核。
也有一些工作在探究能否給傳統的卷積中引入更靈活的思想。

Spatial Transform Networks[15] 預測全局參數變換來 wrap 特徵圖,使得網絡能夠根據輸入來自適應的變換特徵圖。

Dynamic filter[16] 用於預測卷積核的參數,以特定樣本的方式將動態生成的卷積核應用於圖像。

Deformable Convolutional Networks [8] 通過預測每個圖像位置的偏移量來動態學習採樣位置。將動態方案引入到實例分割中,實現了基於位置的實例分割學習。

三、重看 SOLOv1

SOLOv1框架的核心思想是按位置分割對象。
見博客:https://blog.csdn.net/jiaoyangwm/article/details/105491010

四、SOLOv2

4.1 Dynamic Instance Segmentation

將 SOLOv1 的原始 mask branch 解耦爲 mask kernel branch + mask feature branch,如圖2所示。
在這裏插入圖片描述

4.1.1 Mask kernel branch

mask kernel 分支和類別預測分支一起位於預測 head 中。

head 在 FPN 生成的特徵圖金字塔中作用,兩個 head 中的 4x conv 用於特徵抽取,最後一個 conv 用於預測。head 的權重是共享的。通過給第一個卷積機上歸一化後的座標,來給 kernel 分支加上空間功能。也就是給第一個卷積層輸出那裏增加兩個額外的通道,一個輸入i,一個輸入j。

對於每個 grid,kernel branch 預測 D 維輸出,表示預測的卷積核權重,D 是參數的個數。爲了給輸出爲 E 個通道的1x1卷積產生權重,設定 D=E。對 3x3 卷積,D=9E。這種weights是根據位置生成的,也就是 grid cell。如果將圖像分割成 S×SS \times S 個格子,輸出爲 S×S×DS \times S \times D

4.1.2 Mask feature branch

mask feature branch 需要預測每個實例的特徵圖 FRH×W×EF \in R^{H\times W \times E},E 是 mask feature 的維度。F 是和 mask kernel branch 預測的 kernel 卷積的得到的。如果所有預測的權重都使用了,也就是 S2S^2 個分類器,則最後一層卷積後輸出的實例 mask 是 H×W×S2H \times W \times S^2,和 SOLOv1相同。

由於 mask feature 和 mask kernel 是解耦開的且分別預測的,因此有兩種方法來構造 mask feature 分支:

  • ① 直接和 kernel branch 一起放到 head處,這就意味着可以預測每個 FPN level 的 mask feature
  • ② 給所有的 FPN level 預測相同的 mask feature 表達。

對比兩者,最後作者使用了第二種方法。

爲了學習一個統一且高分辨率mask 特徵表達,作者使用特徵金字塔融合的方法。 經過重複的 3x3 卷積+group norm+relu+2x 雙線性上採樣,FPN 特徵 P2 到 P5 被合併成一個相同的輸出(1/4 scale)。

逐點相加之後,最後一層是由 1x1 卷積+group norm+ReLU 實現的,如圖3所示。

作者將座標加到了最深層的 FPN 輸出(1/32)上,這種提供精確位置信息的做法能夠引入位置敏感性並且預測得到與 instance-aware 特徵。

在這裏插入圖片描述

4.1.3 Forming Instance Mask

對於每個網格 (i,j)(i,j),首先獲得 mask kernel Gi,j,:RDG_{i,j,:}\in R^D,然後將 Gi,j,:RDG_{i,j,:}\in R^DFF 卷積,來得到實例 mask。每個預測 level 總共有 S2S^2 個mask。最後,使用 Matrix NMS 來得到最終的實例分割結果。

五、Experiments

5.1 Instance segmentation

5.1.1 Main results

在這裏插入圖片描述

5.1.2 SOLOv2 visualization

作者從兩個方面可視化了 SOLOv2 學習到的東西:

  • mask feature的輸出
  • 經過動態學習後的最終輸出

Mask feature branch 的輸出: 使用最終輸出 64 個通道的模型(mask prediction 前的最後一層特徵圖的通道 E=64)。圖5展示了每個 channels 。

  • 首先,mask feature 是 position-aware 的
  • 其次,一些特徵圖對所有的前景目標響應(白色框)
    在這裏插入圖片描述

最終輸出: 如圖8所示,不同的目標是不同的顏色,可以看出本文方法分割邊界的細節很好,尤其是對大目標。
在這裏插入圖片描述
在這裏插入圖片描述
SOLOv2和 Mask R-CNN 的對比如圖6,SOLOv2表現更好。

在這裏插入圖片描述

5.1.3 Ablation Experiments

Kernel shape: 最優的是 1x1x256,文章中所有試驗都用的這個參數
在這裏插入圖片描述

Effectiveness of coordinates: 由於本文是使用位置,或更確切的說,是利用位置來學習目標分割器。如果 mask kernel branch 對位置不敏感,則外觀相同的目標將會有相同的kernel,導致相同的輸出 mask。如果 mask feature branch 對位置不敏感,則它將不知道如何按照 mask 匹配的順序將像素分配給不同通道。如表4所示,如果沒有 coordinates 輸入,則只能達到 36.3% AP。

這個結果還比較理想,因爲 CNN 可以從 zero-padding 操作中隱式的學習到絕對位置信息。但這種隱式的學習是不準確的,使用 coordconv 時,可以增加 1.5 AP。
在這裏插入圖片描述

Unified Mask Feature Representation: 對於 mask 特徵的學習,有兩種選擇:

  • 分別學習 FPN 每個 level 的特徵(solov1)
  • 統一學習一個表示(圖3)

表5中對比了這兩種不同的方法,後者取得了好的效果,這也很容易理解,在 solov1中,大尺寸對象被分配到高層特徵中去分割,高層特徵的分辨率較低,會導致邊界估計比較粗略。

Dynamic and Decoupled: 動態學習 head 和 decoupled head 在表6中進行了對比,dynamic head 比 decoupled head 高 0.7% AP。這種提升,作者覺得來源於網絡根據輸入來動態的學習 kernel weights。
在這裏插入圖片描述
Matrix NMS:

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章