《FCOS: Fully Convolutional One-Stage Object Detection》論文詳解

《FCOS: Fully Convolutional One-Stage Object Detection》發(fā)表于ICCV2019

代碼地址:https://github.com/tianzhi0549/FCOS/

這篇文章主要是覺得現(xiàn)有的基于anchor的目標檢測器存在一些缺點:

  1. 檢測結(jié)果對于anchor的大小,尺度比例,數(shù)量比較敏感
  2. 即使認真的調(diào)好的上述參數(shù),檢測器對于GT變化較大,特別是小物體效果較差
  3. 為了獲得較高的召回率,基于anchor的檢測器需要大量的anchor
  4. anchor會涉及一些復雜的計算,比如計算anchor與GT的IoU

一、網(wǎng)絡結(jié)構(gòu)

該文章的網(wǎng)絡結(jié)構(gòu)如下圖所示


1.png

可以看出,網(wǎng)絡結(jié)構(gòu)還是backbone+fpn的結(jié)構(gòu)。文中backbone采用的是resnet50。FPN結(jié)構(gòu)中,\{P_3, P_4, P_5, P_6, P_7\}P_3, P_4, P_5分別是C_3, C_4, C_5分別接一個1\times 1的卷積接上上一層的結(jié)果(這里的連接要看具體實現(xiàn),可能是concate也可能是加),P_6, P_7分別是P_5, P_6通過一個stride為2的卷積得到。這樣得到的\{P_3, P_4, P_5, P_6, P_7\}對應原圖縮小的尺度分別是8,16,32,64,128。

網(wǎng)絡的輸入下面詳解介紹GT的產(chǎn)生。網(wǎng)絡的輸出的head部分有三個分支,其中classification和regression分支與其它檢測器是一樣的,另外網(wǎng)絡還加了一個叫Center-ness的分支,要了解這個分支要先知道網(wǎng)絡的GT是什么,下面先介紹網(wǎng)絡的標簽生成。

二、網(wǎng)絡的標簽生成

2.1 樣本的標簽生成

不同于基于anchor的方法(通過回歸anchor的坐標點來獲得預測框),本文的做法是通過直接回歸對應點到GT的四條邊的距離來獲得預測框。

上述FPN輸出的feature map這里用F_i表示,在F_i上坐標為(x,y)的點,對應到原圖的坐標為(\lfloor \frac{s}{2}\rfloor + xs, \lfloor \frac{s}{2}\rfloor + ys),如果該點在標注框內(nèi),我們將它定義為正樣本,否則為負樣本。

對于一個標注框{B_i}來說,這里B_i = (x^{i}_0, y^{i}_0, x^{i}_1, y^{i}_1, c^{i}),其中(x^{i}_0, y^{i}_0)表示標注框的左上角,(x^{i}_1, y^{i}_1)表示標注框的右下角,c^i表示標注框的所屬類別。對于一個圖像中(注意這里是圖像中,不是上述的featuremap中),一個在標注框內(nèi)坐標為(x,y)的正樣本,GT用下述公式表示:
l^* = x - x^i_0, t^* = y - y^i_0
r^* = x^i_1 - x, b^* = y^i_1 - y
類別標簽對于正樣本來說就是c^i,對于負樣本來說為0。
回歸目標(l^*, t^*, r^*, b^*)如下圖所示

2.png

2.2 正負樣本在不同F(xiàn)PN層的分配

因為采用了FPN的結(jié)構(gòu),在基于anchor的算法中,通過anchor的大小,將anchor分配給不同的FPN輸出層。對于本文算法來說將正樣本分配給不同F(xiàn)PN層的規(guī)則如下:
如果(l^*, t^*, r^*, b^*)>m_i(l^*, t^*, r^*, b^*)<m_(i-1),那么F_i上滿足條件的為負樣本。換句話說就是在F_i上滿足m_(i-1)<(l^*, t^*, r^*, b^*)<m_i條件的點位正樣本。文章規(guī)定m_2, m_3, m_4, m_5, m_6, m_7大小為0, 64, 128, 256, 512, \infty。

2.3 模棱兩可的正樣本分配問題

在實際情況中,框可能存在重疊問題,那么就會有重疊區(qū)域的像素可以對應于兩個或者多個標注框,文章將這種模棱兩可的正樣本分配給面積小的框,即這類的點用來回歸小框。

三、網(wǎng)絡的loss函數(shù)

與其他的目標檢測類似,網(wǎng)絡的loss函數(shù)可以用下式表示:
L(\{p_{x,y}\},\{t_{x,y}\}) = \frac{1}{N}\sum_{x,y}L_{cls}(P_{x,y}, c^*_{x,y}) + \frac{\lambda}{N_{pos}}\sum_{x,y}1_{\{c^*_{x,y}>0\}L_{reg}(t_{x,y}, t^*_{x,y})}

其中L_{cls}使用的是focal loss,L_{reg}使用的是IOU loss,N_{pos}表示的是正樣本的個數(shù),這里\lambda取1,1_{c^*_i>0}表示當c^*_i > 0時值取1否則取0。

這里只使用了兩個分支,通過上述結(jié)構(gòu)和loss實驗發(fā)現(xiàn)FCOS的結(jié)果與基于anchor的方法的結(jié)果還是存在一些差距。觀察發(fā)現(xiàn),造成這種現(xiàn)象的原因是一些遠離標注框中心的點預測出來的框質(zhì)量較低,為了改善這一現(xiàn)象,文中提出了centerness的概念。

centerness就是在原網(wǎng)絡分類分支上加了一個sibling分支,這個分支的作用是來描述正樣本點對于待預測的標注框中心點的歸一化距離的大小。對于這個分支待預測的目標,也就是該分支的GT為
centerness* = \sqrt{\frac{min(l^*, r^*)}{max(l^*, r^*)}\times \frac{min(t^*, b^*)}{max(t^*, b^*)}}
這個目標值的范圍為0-1,所以這個分支的loss采用交叉熵loss計算。

對于測試階段,預測框的分數(shù)為分類分支的結(jié)果乘以centerness分支預測的結(jié)果,這樣對于離標注框中心較遠的點預測的分數(shù)有一定的權(quán)重衰減,從而提高最終網(wǎng)絡的輸出質(zhì)量。centerness的預測目標如下圖所示,圖中紅色表示1藍色表示0,其它顏色在0-1之間。


3.png

到這里FCOS算法就介紹完了,詳細的實驗結(jié)果可以查看原文了解。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容