掃碼關注下方公眾號:"Python編程與深度學習",領取配套學習資源,並有不定時深度學習相關文章及代碼分享。
今天分享一篇發表在MICCAI 2020上的論文:CircleNet: Anchor-Free Glomerulus Detection with Circle Representation (原文鏈接:[1],github:[2])。
1 研究背景
目標檢測分享中,anchor-based方法(Faster-RCNN等)通常會產生較高的模型復雜度和較低的靈活性,因為每一個位置需要采用多個anchor進行表達以及優化。因此最近有越來越多的anchor-free檢測方法涌現,它們具有更簡單的網絡設計、更少的超參數卻可能具有更好的性能。但是直接采用自然場景下的目標檢測算法運用到病例圖像的目標檢測上可能不太適用,例如下圖(Fig.1),對於腎小球的檢測,如果采用bounding box框住目標,單病理圖像旋轉的時候,對應的bounding box形狀也會變化,而如果采用bounding circle來框住目標,就可以確保檢測對象的旋轉不變性。
有了上述的這個分析,網絡可以大大簡化,從學習bounding box轉變成學習bounding circle的表達。因此,文中提出了一種基於circle表達的anchor-free目標檢測算法,叫做CircleNet,以用來檢測腎小球。
這篇文章有如下幾點貢獻:
- 優化了病例目標檢測算法:第一個采用基於circle的anchor-free方法進行腎小球的目標檢測;
- circle表達:提出用bounding circle來框住物體,使得模型只用學習半徑這一個維度(bounding box需要學習長和高兩個維度),並且定義了cIOU (circle intersection over union)來衡量檢測的性能;
- 旋轉一致性:CircleNet在腎小球任務上實現了更好的旋轉一致性。
2 方法
如上圖(Fig.2)所示,整體流程為:通過特征提取網絡提取圖像的特征,而后分別采用三個輸出模塊預測(1)heatmap,用來表示circle的中心點;(2)local offset,用來修正circle的中心點位置;(3)circle radius:用來表達circle的半徑。
2.1 Anchor Free骨干網絡
骨干網絡是基於CenterNet的實現。假設輸入圖像$I$的維度為$I\in R^{W\times H\times 3}$,則heatmap的維度為$\hat{Y}\in [0,1]^{\frac{W}{R}\times \frac{H}{R}\times C}$,$C$表示待識別的類別數,$R$表示模型的下采樣率。目標中心點的標簽由2D的高斯核描述:
$$Y_{xyc}=exp\left (-\frac{(x-\tilde{p}_x)^2+(y-\tilde{p}_y)^2}{2\sigma_p^2}\right ),$$
其中$\tilde{p}_x$和$\tilde{p}_y$是目標中心點經過下采樣之后的位置,$\sigma_p$是高斯核的標准差,預測的heatmap采用像素級別的focal loss進行優化:
$$L_k=\frac{-1}{N}\sum_{xyc}\left\{\begin{matrix}(1-\hat{Y}_{xyc})^{\alpha}log(\hat{Y}_{xyc})\ if\ Y_{xyc}=1\\(1-Y_{xyc})^{\beta}(\hat{Y}_{xyc})^{\alpha}\ otherwise\\log(1-\hat{Y}_{xyc}))\ otherwise\end{matrix}\right.$$
其中$\alpha$和$\beta$是focal loss的超參數。
而后使用$\mathcal l_1-norm$偏移預測損失$L_{off}$來修正預測坐標,這部分和CenterNet中一致。
2.2 從中心點到Bounding Circle
一旦heatmap被預測出來,只需要取heatmap中前$n$個峰值就可以表示$n$個檢測對象的中心點,定義為$\hat{\mathcal P}=\{(\hat{x}_i,\hat{y}_i)\}_{i=1}^n$。而后通過解析$\hat{Y}_{x,y,c}$和$L_k$便可以得到中心點的精確坐標:
$$\hat{p}=(\hat{x}_i+\delta\hat{x}_i,\hat{y}_i+\delta\hat{y}_i),$$
然后在半徑預測圖$\hat{R}\in\mathcal R^{\frac{W}{R}\times\frac{H}{R}\times 1}$中找到對應位置的值就可以得到該中心點對應的半徑:
$$\hat{r}=\hat{R}_{\hat{x}_i,\hat{y}_i},$$
預測半徑的損失計算:
$$L_{radius}=\frac{1}{N}\sum_{k=1}^N\left | \hat{R}_{p_k}-r_k\right |,$$
綜上,對於第$k$個circle目標的損失函數可以表示為:
$$L_{det}=L_k+\lambda_{radius}L_{radius}+\lambda_{off}L_{off},$$
文中將上述超參設置為$\lambda_{radius}=0.1$和$\lambda_{off}=1$。
2.3 Circle IOU
如上圖(Fig.3)所示,類似IOU的計算,文中把cIOU定義為:
$$cIOU=\frac{Area(A\cap B)}{Area(A\cup B)},$$
其中$A$和$B$分別表示兩個cicles。將它們的中心點表示為$(A_x,A_y)$和$(B_x,B_y)$,如下:
$$A_x=\hat{x}_i+\delta\hat{x}_i,A_y=\hat{y}_i+\delta\hat{y}_i$$
$$B_x=\hat{x}_j+\delta\hat{x}_j,B_y=\hat{y}_j+\delta\hat{y}_j$$
那么兩個中心點之間的距離可以定義為:
$$d=\sqrt{(B_x-A_x)^2+(B_y-A_y)^2}$$
$$L_x=\frac{r_A^2-r_B^2+d^2}{2d},L_y=\sqrt{r_A^2-L_x^2}$$
最終cIOU可以通過如下公式計算:
$$Area(A\cap B)=r^2_A sin^{-1}\left (\frac{L_y}{r_A}\right )+r^2_B sin^{-1}\left (\frac{L_y}{r_B}\right )-L_y\left (L_x+\sqrt{r_A^2-r_B^2+L_x^2}\right )$$
$$Area(A\cup B)=\pi r_A^2+\pi r_B^2-Area(A\cap B)$$
3 實驗結果
這里我只給出論文中的部分實驗結果,具體的實驗結果分析以及實驗和參數的設置請看原文。
4 參考資料
[1] https://link.springer.com/chapter/10.1007/978-3-030-59719-1_4
[2] https://github.com/hrlblab/CircleNet