Deep Snake : 基於輪廓調整的SOTA實例分割方法,速度32.3fps | CVPR 2020


論文提出基於輪廓的實例分割方法Deep snake,輪廓調整是個很不錯的方向,引入循環卷積,不僅提升了性能還減少了計算量,保持了實時性,但是Deep snake的大體結構不夠優雅,應該還有一些工作可以補,推薦大家閱讀

來源:曉飛的算法工程筆記 公眾號

論文: Deep Snake for Real-Time Instance Segmentation

Introduction


  實例分割是許多計算機視覺任務中的重要手段,目前大多數的算法都采用在給定的bbox中進行pixel-wise分割的方法。受snake算法和Curve-GCN的啟發,論文采用基於輪廓的逐步調整策略,提出了Deep snake算法進行實時實例分割,該算法將初始輪廓逐漸優化為目標的邊界,如圖1所示,達到很好的性能且依然保持很高的實時性(32.3fps)。
  論文的主要貢獻如下:

  • 提出基於學習的snake算法用於實時實例分割,對初始輪廓調整至目標邊界,並且引入循環卷積(circular convolution)進行輪廓特征的學習。
  • 提出two-stage流程進行實例分割,先初始化輪廓再調整輪廓,兩個步驟均可以用於修正初始定位的誤差。
  • Deep snake能在多個實例分割數據集上達到SOTA,對於512的圖片輸入能達到32.3fps。

Proposed approach


  Deep snake方法將初始輪廓逐漸優化為目標的邊界來進行目標分割,即將物體輪廓作為輸入,基於CNN主干特征預測每個頂點的偏移量。為了充分利用輪廓拓撲結構,論文使用循環卷積(circular convolution)進行頂點特征的學習,有助於學習輪廓的優化,並基於deep snake提出了一套實時實例分割的流程。

Learning-based snake algorithm

  傳統的snake算法將頂點的坐標作為變量來優化人工設計的能量函數(energy function),通過最小化能量函數來擬合目標邊界。由於能量函數通常是非凸的,而且需要基於低維圖像特征進行人工設計,通常會陷於局部最優解。
  而deep snake則是直接從數據學習如何微調輪廓,對於$N$個頂點${ x_i | i=1, ..., N}$,首先構造每個頂點的特征向量,頂點$x_i$的特征$f_i$為對應的網絡特征和頂點坐標的concate$[F(x_i);x_i{'}]$,其中$F$為主干網絡輸出的特征圖,$F(x_i)$為頂點$x_i$處的雙線性差值輸出,附加的$x_i{'}$用於描述頂點間的位置關系,$x_i^{'}$是平移不變的,由每個頂點坐標減去輪廓中所有頂點的最小$x$和$y$得到相對坐標。

  在獲得頂點特征后,需要對輪廓特征進一步學習,頂點的特征可以視作1-D離散信號$f:\mathbb{Z}\to \mathbb{R}^D$,然后使用標准卷積對頂點逐個進行處理,但這樣會破壞輪廓的拓撲結構。因此,將頂點特征定義為公式1的周期信號,然后使用公式2的循環卷積進行特征學習,$k:[-r,r]\to \mathbb{R}^D$為可學習的卷積核,$*$為標准卷積操作。

  循環卷積操作如圖2所示,與標准的卷積操作類似,可以很簡單地集成到目前的網絡中。在特征學習后,對每個頂點使用3個$1\times 1$卷積層進行偏移的輸出,實驗中循環卷積的核大小固定為9。

  圖a展示了deep snake的細節結構,輸入為初始輪廓,主干包含8個"CirConv-Bn-ReLU"層,每層都使用殘差連接,Fusion block用於融合主干網絡中的多尺度輪廓特征,Prediction head使用3個$1\times 1$卷積輸出每個頂點的偏移。

Deep snake for instance segmentation

  將deep snake加入到目標檢測模型中進行實例分割,流程如圖b所示。模型首先產生目標框,將其構建成菱形框,然后使用deep snake算法將菱形頂點調整為目標極點,構造八邊形輪廓,最后進行迭代式deep snake輪廓調整得到目標形狀

  • Initial contour proposal

  論文采用ExtreNet的極點思想,能夠很好地包圍物體。在得到矩形框后,獲取4條邊的中心點${x_i^{bb} | i=1,2,3,4 }$連成菱形輪廓,使用deep snake對菱形輪廓調整成極點${x_i^{ex} | i=1,2,3,4 }$,然后每個極點放置一條邊,連接邊構造多邊形,每個極點的邊為其對應的bbox邊的$1/4$,若邊超過原bbox范圍會被截斷。在實際使用時,菱形輪廓輸入deep snake前會平均上采樣到40個點(有助於deep snake計算),但損失函數計算只考慮$x_i^{bb}$的對應偏移

  • Contour deformation

  對八邊形平均采樣$N$個點,將上極點$x_1{ex}$作為起點,同樣地,GT輪廓對物體邊緣平均采樣$N$個點,將靠近$x_1{ex}$的點作為起點,$N$一般為128。如果頂點離GT很遠,很難直接正確調整,於是采用迭代式地進行deep snake調整,實驗采用的迭代次數為3次。
  輪廓是目標空間位置的一種擴展表示方法,通過調整輪廓到物體邊緣能夠幫助解決detector的定位誤差

  • Handling multi-component objects

  由於遮擋,一個實例可能包含多個組件,然而一個輪廓只能勾勒出bbox內的一個組件。為了解決這個問題,使用RoIAlign來提取初始bbox特征,然后配合detector來檢測組件的box,再對每個box進行上述的輪廓調整,最后結合初始bbox內相同類別的組件輸出最終的物體形狀。

Implementation details


Training strategy

  極點的損失函數如公式3,$\tilde{x}_i^{ex}$為預測的極點。

  迭代輪廓調整的損失函數如公式4,$\tilde{x}_i$為調整后的頂點,$x_i^{gt}$為對應的GT邊緣點。對於檢測部分,則采用跟原檢測函數一樣的損失函數。

Detector

  使用CenterNet作為檢測器,對於物體檢測,使用跟原來一樣的設定輸出類別相關的box,而對於組件檢測,則使用類不可知的CenterNet,對於$H\times W\times C$的特征圖,輸出$H\times W\times 1$的中心點heatmap和$H\times W\times 2$的box大小特征圖。

Experiments


Ablation studies

  Baseline將輪廓視為圖結構,然后使用GCN進行輪廓調整,初始輪廓為圍繞bbox的橢圓,Arichitecture加入Fusion block,Initial proposal加入論文的輪廓初始化方法,最后是將GCN修改為循環卷積,可以看到每個步驟都對AP有提升。

  論文也對比了卷積類型以及迭代次數對結構的影響,可以看到循環卷積的結果比GCN要好。

Comparison with the state-of-the-art methods

  論文在不同的數據集上都取得了不錯的效果,作者在每個數據集上的訓練參數都有點不一樣,具體參數可以看看原文

Running time

Conclusion


  論文提出基於輪廓的實例分割方法Deep snake,輪廓調整是個很不錯的方向,引入循環卷積,不僅提升了性能還減少了計算量,保持了實時性,但是Deep snake的大體結構不夠優雅,應該還有一些工作可以補,推薦大家閱讀

參考內容



如果本文對你有幫助,麻煩點個贊或在看唄~
更多內容請關注 微信公眾號【曉飛的算法工程筆記】

work-life balance.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM