【实例分割_SOLOv2】SOLOv2:Dynamic,Faster and Stronger
文章目錄
- 一、背景
- 二、相關工作
- 三、重看 SOLOv1
- 四、SOLOv2
- 4.1 Dynamic Instance Segmentation
- 4.1.1 Mask kernel branch
- 4.1.2 Mask feature branch
- 4.1.3 Forming Instance Mask
- 五、Experiments
- 5.1 Instance segmentation
- 5.1.1 Main results
- 5.1.2 SOLOv2 visualization
- 5.1.3 Ablation Experiments
論文鏈接: 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 SS×S 個格子,輸出為 S×S×DS \times S \times DS×S×D
4.1.2 Mask feature branch
mask feature branch 需要預測每個實例的特征圖 F∈RH×W×EF \in R^{H\times W \times E}F∈RH×W×E,E 是 mask feature 的維度。F 是和 mask kernel branch 預測的 kernel 卷積的得到的。如果所有預測的權重都使用了,也就是 S2S^2S2 個分類器,則最后一層卷積后輸出的實例 mask 是 H×W×S2H \times W \times S^2H×W×S2,和 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)(i,j),首先獲得 mask kernel Gi,j,:∈RDG_{i,j,:}\in R^DGi,j,:?∈RD,然后將 Gi,j,:∈RDG_{i,j,:}\in R^DGi,j,:?∈RD 和 FFF 卷積,來得到實例 mask。每個預測 level 總共有 S2S^2S2 個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:
總結
以上是生活随笔為你收集整理的【实例分割_SOLOv2】SOLOv2:Dynamic,Faster and Stronger的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【目标分类_长尾分布问题】BBN:Bil
- 下一篇: 拉风的游戏名字有哪些