論文提出基於輪廓的實例分割方法Deep snake,輪廓調整是個很不錯的方向,引入循環卷積,不只提高了性能還減小了計算量,保持了實時性,可是Deep snake的大致結構不夠優雅,應該還有一些工做能夠補,推薦你們閱讀
來源:曉飛的算法工程筆記 公衆號git
論文: Deep Snake for Real-Time Instance Segmentationgithub
實例分割是許多計算機視覺任務中的重要手段,目前大多數的算法都採用在給定的bbox中進行pixel-wise分割的方法。受snake算法和Curve-GCN的啓發,論文采用基於輪廓的逐步調整策略,提出了Deep snake算法進行實時實例分割,該算法將初始輪廓逐漸優化爲目標的邊界,如圖1所示,達到很好的性能且依然保持很高的實時性(32.3fps)。
論文的主要貢獻以下:算法
Deep snake方法將初始輪廓逐漸優化爲目標的邊界來進行目標分割,即將物體輪廓做爲輸入,基於CNN主幹特徵預測每一個頂點的偏移量。爲了充分利用輪廓拓撲結構,論文使用循環卷積(circular convolution)進行頂點特徵的學習,有助於學習輪廓的優化,並基於deep snake提出了一套實時實例分割的流程。微信
傳統的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$爲可學習的卷積核,$*$爲標準卷積操做。app
循環卷積操做如圖2所示,與標準的卷積操做相似,能夠很簡單地集成到目前的網絡中。在特徵學習後,對每一個頂點使用3個$1\times 1$卷積層進行偏移的輸出,實驗中循環卷積的核大小固定爲9。函數
圖a展現了deep snake的細節結構,輸入爲初始輪廓,主幹包含8個"CirConv-Bn-ReLU"層,每層都使用殘差鏈接,Fusion block用於融合主幹網絡中的多尺度輪廓特徵,Prediction head使用3個$1\times 1$卷積輸出每一個頂點的偏移。性能
將deep snake加入到目標檢測模型中進行實例分割,流程如圖b所示。模型首先產生目標框,將其構建成菱形框,而後使用deep snake算法將菱形頂點調整爲目標極點,構造八邊形輪廓,最後進行迭代式deep snake輪廓調整獲得目標形狀學習
論文采用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}$的對應偏移優化
對八邊形平均採樣$N$個點,將上極點$x_1{ex}$做爲起點,一樣地,GT輪廓對物體邊緣平均採樣$N$個點,將靠近$x_1{ex}$的點做爲起點,$N$通常爲128。若是頂點離GT很遠,很難直接正確調整,因而採用迭代式地進行deep snake調整,實驗採用的迭代次數爲3次。
輪廓是目標空間位置的一種擴展表示方法,經過調整輪廓到物體邊緣可以幫助解決detector的定位偏差
因爲遮擋,一個實例可能包含多個組件,然而一個輪廓只能勾勒出bbox內的一個組件。爲了解決這個問題,使用RoIAlign來提取初始bbox特徵,而後配合detector來檢測組件的box,再對每一個box進行上述的輪廓調整,最後結合初始bbox內相同類別的組件輸出最終的物體形狀。
極點的損失函數如公式3,$\tilde{x}_i^{ex}$爲預測的極點。
迭代輪廓調整的損失函數如公式4,$\tilde{x}_i$爲調整後的頂點,$x_i^{gt}$爲對應的GT邊緣點。對於檢測部分,則採用跟原檢測函數同樣的損失函數。
使用CenterNet做爲檢測器,對於物體檢測,使用跟原來同樣的設定輸出類別相關的box,而對於組件檢測,則使用類不可知的CenterNet,對於$H\times W\times C$的特徵圖,輸出$H\times W\times 1$的中心點heatmap和$H\times W\times 2$的box大小特徵圖。
Baseline將輪廓視爲圖結構,而後使用GCN進行輪廓調整,初始輪廓爲圍繞bbox的橢圓,Arichitecture加入Fusion block,Initial proposal加入論文的輪廓初始化方法,最後是將GCN修改成循環卷積,能夠看到每一個步驟都對AP有提高。
論文也對比了卷積類型以及迭代次數對結構的影響,能夠看到循環卷積的結果比GCN要好。
論文在不一樣的數據集上都取得了不錯的效果,做者在每一個數據集上的訓練參數都有點不同,具體參數能夠看看原文
論文提出基於輪廓的實例分割方法Deep snake,輪廓調整是個很不錯的方向,引入循環卷積,不只提高了性能還減小了計算量,保持了實時性,可是Deep snake的大致結構不夠優雅,應該還有一些工做能夠補,推薦你們閱讀
若是本文對你有幫助,麻煩點個贊或在看唄~
更多內容請關注 微信公衆號【曉飛的算法工程筆記】