論文提出基於輪廓的例項分割方法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的大體結構不夠優雅,應該還有一些工作可以補,推薦大家閱讀
參考內容
- Snakes: Active Contour Models - http://www.cs.ait.ac.th/~mdailey/cvreadings/Kass-Snakes.pdf
- Fast Interactive Object Annotation with Curve-GCN - https://arxiv.org/pdf/1903.06874.pdf
如果本文對你有幫助,麻煩點個贊或在看唄~
更多內容請關注 微信公眾號【曉飛的演算法工程筆記】