論文提出anchor-free和proposal-free的one-stage的目標檢測算法FCOS,再也不須要anchor相關的的超參數,在目前流行的逐像素(per-pixel)預測方法上進行目標檢測,根據實驗結果來看,FCOS可以與主流的檢測算法相比較,達到SOTA,爲後面的大熱的anchor-free方法提供了很好的參考
來源:【曉飛的算法工程筆記】 公衆號算法
論文: FCOS: Fully Convolutional One-Stage Object Detection微信
大多目標檢測網絡都是anchor-based,雖然anchor能帶來很大的準確率提高,但也會帶來一些缺點:網絡
近期,FCNs在各視覺任務中都有不錯的表現,但目標檢測因爲anchor的存在,不能進行純逐像素預測,因而論文拋棄anchor,提出逐像素全卷積目標檢測網絡FCOS網絡,總結以下:app
讓$F_i\in \mathbb{R}^{H\times W\times C}$爲層$i$的特徵圖,$s$爲層的總stride,輸入的GT爲${B_i}$,$B_i=(x_0{(i)},y_0{(i)},x_1{(i)},y_1{(i)},c^{(i)})\in \mathbb{R}^4\times {1,2...C }$分別爲box的左上角和右下角座標以及類別,$C$爲類別數。特徵圖$F_i$的每一個位置$(x,y)$,能夠經過$(\lfloor\frac{s}{2}\rfloor + xs, \lfloor\frac{s}{2}\rfloor + ys)$映射回原圖,FCOS直接預測相對於當前像素的box位置,而不是anchor的那樣將像素做爲中心再回歸ide
當像素$(x,y)$落在GT中則認爲是正樣本,將類別$c*$設置爲目標類別,不然設置爲0。除了類別,還有4D向量$t=(l*,t,r*,b*)$做爲迴歸目標,分別爲box的四條邊與像素的距離。當像素落在多個GT中時,直接選擇區域最小的做爲迴歸目標。相對於anchor-based的IOU判斷,FCOS能生成更多的正樣原本訓練迴歸器性能
網絡最終輸出80D分類標籤向量$p$和4D box座標向量$t=(l,t,r,b)$,訓練$C$個二分類器而不是多分類器,在最後特徵後面分別接4個卷積層用於分類和定位分支,在定位分支使用$exp(x)$保證結果爲正,總體輸出比anchor-based少9x倍測試
$L_{cls}$爲focal loss,$L_{reg}$爲UnitBox中的IOU loss,$N_{pos}$爲正樣本數,$\lambda$爲平衡權重,公式2計算特徵圖上的全部結果blog
對於輸入圖片,推理獲得特徵圖$F_i$的分類分數$p_{x,y}$以及迴歸預測$t_{x,y}$,而後取$p_{x,y}>0.05$的做爲正樣本,公共公式1獲得預測框位置圖片
下面講下FCOS如何使用FPN來解決以前提到的問題:ci
如圖2,FPN使用${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$卷積以及top-down connection生成,$P_6$和$P_7$則是分別經過$P_5$和$P_6$進行stride爲2的$1\times1$卷積生成,各特徵的stride分別爲8,16,32,64和128
anchor-based方法對不一樣的層使用不一樣的大小,論文則直接限制每層的bbox迴歸範圍。首先計算$l*$,$t$,$r*$和$b$,若是知足$max(l*,t,r8,b)>m_i$或$max(l*,t,r8,b)<m_{i-1}$,則設爲負樣本,不須要進行bbox迴歸。$m$爲層$i$的最大回歸距離,$m_2$,$m_3$,$m_4$,$m_5$,$m_6$和$m_7$分別爲0,64,128,256,512和$\infty$。若是在這樣設置下,像素仍存在歧義,則選擇區域最小的做爲迴歸目標,從實驗來看,這樣設定的結果很好
最後,不一樣層間共享head,不只減小參數,還能提升準確率。而因爲不一樣的層負責不一樣的尺寸,因此不該該使用相同的head,所以,論文將$exp(x)$改成$exp(s_ix)$,添加可訓練的標量$s_i$來自動調整不一樣層的指數基底
使用FPN後,FCOS與anchor-based detector仍然存在差距,主要來源於低質量的預測box,這些box的大多由距離目標中心點至關遠的像素產生。所以,論文提出新的獨立分支來預測像素的center-ness,用來評估像素與目標中心點的距離
center-ness的gt計算如公式3,取值$(0,1]$,使用二值交叉熵進行訓練。在測試時,最終的分數是將分類分數與center-ness進行加權,低質量的box分數會下降,最後可能經過NMS進行過濾
center-ness的另外一種形式是在訓練時僅用目標框的中心區域像素做爲正樣本,這會帶來額外的超參數,目前已經驗證性能會更好
best possible recall(BPR)定義爲檢測器可以迴歸的gt比例,若是gt被賦予某個預測結果,即爲可以迴歸。從表1看來,不用FPN的FCOS直接有95.55%,而anchor-based的經典實現只有86.82%,加上FPN後就提升到98.40%
在原始FCOS中,正樣本中歧義目標的比例爲23.16%,使用FPN後可以下降到7.14%。這裏論文提到,同類別目標的歧義是不要緊的,由於無論預測爲哪一個目標,都是正確的,預測漏的目標能夠由其它更靠近他的像素來預測。因此,只考慮不一樣類別的歧義比例大概爲17.84%,使用FPN後可降爲3.75%。而在最終結果中,僅2.3%的框來自於歧義像素,考慮不一樣類別的歧義,則僅有1.5%的,因此歧義不是FCN-based FCOS的問題
center-ness分支可以將AP從33.5%升爲37.1%,比直接從迴歸結果中計算的方式要好
相對於RetinaNet,以前FCOS使用了分組卷積(GN)和使用$P_5$來產生$P_6$和$P_7$,爲了對比,去掉以上的改進進行實驗,發現準確率依舊比anchor-based要好
將anchor-based的RPNs with FPN替換成FCOS,可以顯著提升$AR{100}$和$AR{1k}$
論文提出anchor-free和proposal-free的one-stage的目標檢測算法FCOS,再也不須要anchor相關的的超參數,在目前流行的逐像素(per-pixel)預測方法上進行目標檢測,根據實驗結果來看,FCOS可以與主流的檢測算法相比較,達到SOTA,爲後面的大熱的anchor-free方法提供了很好的參考
若是本文對你有幫助,麻煩點個贊或在看唄~
更多內容請關注 微信公衆號【曉飛的算法工程筆記】