FCOS : 找到訣竅了,anchor-free的one-stage目標檢測演算法也可以很準 | ICCV 2019
論文提出anchor-free和proposal-free的one-stage的目標檢測演算法FCOS,不再需要anchor相關的的超引數,在目前流行的逐畫素(per-pixel)預測方法上進行目標檢測,根據實驗結果來看,FCOS能夠與主流的檢測演算法相比較,達到SOTA,為後面的大熱的anchor-free方法提供了很好的參考
來源:【曉飛的演算法工程筆記】 公眾號
論文: FCOS: Fully Convolutional One-Stage Object Detection
- 論文地址:https://arxiv.org/abs/1904.01355
Introduction
大多目標檢測網路都是anchor-based,雖然anchor能帶來很大的準確率提升,但也會帶來一些缺點:
- 準確率對anchor的尺寸、長寬比和數量較為敏感,這些超參都會人工細調
- anchor的尺寸和長寬是固定的,如果目標的相關屬性相差較大,會比較難預測
- 為了高召回,通常會使用密集的anchor佈滿輸入,大多為負樣本,導致訓練不平衡
- anchor需要如IOU的複雜計算
近期,FCNs在各視覺任務中都有不錯的表現,但目標檢測由於anchor的存在,不能進行純逐畫素預測,於是論文拋棄anchor,提出逐畫素全卷積目標檢測網路FCOS網路,總結如下:
- 效仿前期的FCNs-based網路,如DenseBox,每個畫素迴歸一個4D向量指代預測框相對於當前畫素位置的偏移,如圖1左
- 為了預測不同尺寸的目標,DenseBox會縮放或剪裁生成影象金字塔進行預測,而且當目標重疊時,會出現畫素不知道負責預測哪個目標的問題,如圖1右。在對問題進行研究後,論文發現使用FPN能解決以上問題,後面會細講
- 由於預測的結果會產生許多低質量的預測結果,論文采用center-ness分支來預測當前畫素與對應目標中心點的偏離情況,用來去除低質量預測結果以及進行NMS
Our Approach
Fully Convolutional One-Stage Object Detector
讓$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的那樣將畫素作為中心再回歸
當畫素$(x,y)$落在GT中則認為是正樣本,將類別$c*$設定為目標類別,否則設定為0。除了類別,還有4D向量$t=(l*,t,r*,b*)$作為迴歸目標,分別為box的四條邊與畫素的距離。當畫素落在多個GT中時,直接選擇區域最小的作為迴歸目標。相對於anchor-based的IOU判斷,FCOS能生成更多的正樣本來訓練迴歸器
-
Network Outputs
網路最終輸出80D分類標籤向量$p$和4D box座標向量$t=(l,t,r,b)$,訓練$C$個二分類器而不是多分類器,在最後特徵後面分別接4個卷積層用於分類和定位分支,在定位分支使用$exp(x)$保證結果為正,整體輸出比anchor-based少9x倍
-
Loss Function
$L_{cls}$為focal loss,$L_{reg}$為UnitBox中的IOU loss,$N_{pos}$為正樣本數,$\lambda$為平衡權重,公式2計算特徵圖上的所有結果
-
Inference
對於輸入圖片,推理得到特徵圖$F_i$的分類分數$p_{x,y}$以及迴歸預測$t_{x,y}$,然後取$p_{x,y}>0.05$的作為正樣本,公共公式1得到預測框位置
Multi-level Prediction with FPN for FCOS
下面講下FCOS如何使用FPN來解決之前提到的問題:
- 由於large stride,通常最後的特徵圖都會面臨較低的最大可能召回(best possible recall, BPR)問題。在anchor based detector中,可以通過降低IOU閾值來彌補,而實驗發現,FCN-based的FCOS本身就能在large stride情況下還有更好的BPR,加上FPN,BPR則會更高
- 目標框重疊會導致難解的歧義,例如不知道畫素對應哪個迴歸目標,論文使用多層預測來解決這個問題,甚至FCN-based效果比anchor-based要好
如圖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$來自動調整不同層的指數基底
Center-ness for FCOS
使用FPN後,FCOS與anchor-based detector仍然存在差距,主要來源於低質量的預測box,這些box的大多由距離目標中心點相當遠的畫素產生。因此,論文提出新的獨立分支來預測畫素的center-ness,用來評估畫素與目標中心點的距離
center-ness的gt計算如公式3,取值$(0,1]$,使用二值交叉熵進行訓練。在測試時,最終的分數是將分類分數與center-ness進行加權,低質量的box分數會降低,最後可能通過NMS進行過濾
center-ness的另一種形式是在訓練時僅用目標框的中心區域畫素作為正樣本,這會帶來額外的超引數,目前已經驗證效能會更好
Experiments
Ablation Study
-
Multi-level Prediction with FPN
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的問題
-
With or Without Center-ness
center-ness分支能夠將AP從33.5%升為37.1%,比直接從迴歸結果中計算的方式要好
-
FCOS vs. Anchor-based Detectors
相對於RetinaNet,之前FCOS使用了分組卷積(GN)和使用$P_5$來產生$P_6$和$P_7$,為了對比,去掉以上的改進進行實驗,發現準確率依舊比anchor-based要好
-
Comparison with State-of-the-art Detectors
Extensions on Region Proposal Networks
將anchor-based的RPNs with FPN替換成FCOS,能夠顯著提高$AR{100}$和$AR{1k}$
Class-agnostic Precision-recall Curves
Visualization for Center-ness
CONCLUSION
論文提出anchor-free和proposal-free的one-stage的目標檢測演算法FCOS,不再需要anchor相關的的超引數,在目前流行的逐畫素(per-pixel)預測方法上進行目標檢測,根據實驗結果來看,FCOS能夠與主流的檢測演算法相比較,達到SOTA,為後面的大熱的anchor-free方法提供了很好的參考
如果本文對你有幫助,麻煩點個贊或在看唄~
更多內容請關注 微信公眾號【曉飛的演算法工程筆記】
相關推薦
FCOS : 找到訣竅了,anchor-free的one-stage目標檢測演算法也可以很準 | ICCV 2019
論文提出anchor-free和proposal-free的one-stage的目標檢測演算法FCOS,不再需要anchor相關的的超引數,在目前流行的逐畫素(per-pixel)預測方法上進行目標檢測,根據實驗結果來看,FCOS能夠與主流的檢測演算法相比較,達到SOTA,為後面的大熱的anchor-fre
【C#公共幫助類】JsonHelper 操作幫助類, 以後再也不用滿地找Json了,拿來直接用
using System; using System.Collections.Generic; using System.Text; using System.Data; using System.Linq; using System.Web.Script.Serialization; usi
黑馬程式設計師_終於找全了,Eclipse使用技巧!!!
1. ctrl+shift+r:開啟資源 這可能是所有快捷鍵組合中最省時間的了。這組快捷鍵可以讓你開啟你的工作區中任何一個檔案,而你只需要按下檔名或mask名中的前幾個字母,比如applic*.xml。美中不足的是這組快捷鍵並非在所有檢視下都能用。 2.
現在越來越喜歡用ajax傳值了,這樣能讓網站的體驗性很好,今天就總結了一下常用的
click put nbsp index.php 常用 體驗 code size .get 這是不用循環的方法 就是傳過來的是一位數組 //編輯黨建分類 function gk_bj(id){ $.post("{:U(‘Luser/lei_edlt
Relation-Network目標檢測演算法詳細總結分析(one/two-stage)(深度學習)(CVPR 2018)
論文名稱:《 Single-Shot Refinement Neural Network for Object Detection 》 論文下載:https://arxiv.org/abs/1711.06897 論文程式碼:https://github.com/sfzhang1
Faster R-CNN 目標檢測演算法詳細總結分析(two-stage)(深度學習)(NIPS 2015)
論文名稱:《 Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks 》 論文下載:https://papers.nips.cc/paper/5638-faster-r-cnn-t
Fast R-CNN 目標檢測演算法詳細總結分析(two-stage)(深度學習)(ICCV 2015)
論文名稱:《 Fast R-CNN 》 論文下載:https://arxiv.org/pdf/1504.08083.pdf 論文程式碼:https://github.com/rbgirshick/fast-rcnn 一、 網路結構:
R-CNN 目標檢測演算法詳細總結分析(two-stage)(深度學習)(CVPR 2014)
論文名稱:《 Rich feature hierarchies for accurate object detection and semantic segmentation 》 論文下載:https://arxiv.org/pdf/1311.2524.pdf 論文程式碼:ht
YOLOv3 目標檢測演算法詳細總結分析(one-stage)(深度學習)(CVPR 2018)
論文名稱:《 YOLOv3: An Incremental Improvement 》 論文下載:https://pjreddie.com/media/files/papers/YOLOv3.pdf 論文程式碼: https://github.com/pjredd
YOLOv2 目標檢測演算法詳細總結分析(one-stage)(深度學習)(CVPR 2017)
論文名稱:《 YOLO9000: Better, Faster, Stronger 》 論文下載: https://arxiv.org/abs/1612.08242 論文程式碼: http://pjreddie.com/yolo9000/ 一、演算法
YOLOv1目標檢測演算法詳細總結分析(one-stage)(深度學習)(CVPR 2016)
論文名稱: 《 You Only Look Once: Unified, Real-Time Object Detection 》 論文連線:https://github.com/pjreddie/darknet 程式碼連線:http://arxiv.or
RFBNet目標檢測演算法詳細總結分析(one/two-stage)(深度學習)(ECCV 2018)
論文名稱:《 Receptive Field Block Net for Accurate and Fast Object Detection 》 論文下載:https://arxiv.org/pdf/1711.07767.pdf 論文程式碼:https://github.co
SSD 目標檢測演算法詳細總結分析(one-stage)(深度學習)(ECCV 2016)
論文名稱:《 SSD: Single Shot MultiBox Detector 》 論文下載:https://arxiv.org/pdf/1512.02325.pdf 論文程式碼:https://github.com/weiliu89/caffe/tree/ssd
Soft-NMS目標檢測演算法詳細總結分析(one/two-stage)(深度學習)(ICCV 2017)
論文:《 Improving Object DetectionWith One Line of Code 》 論文下載:https://arxiv.org/abs/1704.04503 論文程式碼:https://github.com/bharatsingh430/soft-nms
YOLT目標檢測演算法詳細總結分析(one-stage)(深度學習)(CVPR 2018)
論文名稱:《 You Only Look Twice: Rapid Multi-Scale Object Detection In Satellite Imagery 》 論文下載:https://arxiv.org/abs/1805.09512 論文程式碼:https://g
目標檢測演算法另一分支的發展(one stage檢測演算法):YOLO、SSD、YOLOv2/YOLO 9000、YOLOv3
目標檢測可以理解為是物體識別和物體定位的綜合,不僅僅要識別出物體屬於哪個分類,更重要的是得到物體在圖片中的具體位置。 目前的目標檢測演算法分為兩類: 一類是two-stage,two-stage檢測演算法將檢測問題劃分為兩個階段,首先產生候選區域(region proposals),然後
目標檢測演算法的演進(two-stage檢測演算法):R-CNN、SPP-Net、Fast R-CNN、Faster R-CNN、Mask R-CNN
什麼是目標檢測(object detection): 目標檢測(object detection),就是在給定的一張圖片中精確找到物體所在的位置,並標註出物體的類別。所以,目標檢測要解決的問題就是物體在哪裡以及是什麼的整個流程問題。 但是,在實際照片中,物體的尺寸變化範圍很大,擺放物體的
論文筆記:目標檢測演算法(R-CNN,Fast R-CNN,Faster R-CNN,YOLOv1-v3)
R-CNN(Region-based CNN) motivation:之前的視覺任務大多數考慮使用SIFT和HOG特徵,而近年來CNN和ImageNet的出現使得影象分類問題取得重大突破,那麼這方面的成功能否遷移到PASCAL VOC的目標檢測任務上呢?基於這個問題,論文提出了R-CNN。 基本步驟:如下圖
基於深度學習的目標檢測演算法綜述(二)—Two/One stage演算法改進之R-FCN
基於深度學習的目標檢測演算法綜述(一):https://blog.csdn.net/weixin_36835368/article/details/82687919 目錄 1、Two stage 1.1 R-FCN:Object Detection via Region-based
深度學習(目標檢測)---從RCNN到SSD,這應該是最全的一份目標檢測演算法盤點
目標檢測是很多計算機視覺任務的基礎,不論我們需要實現影象與文字的互動還是需要識別精細類別,它都提供了可靠的資訊。本文對目標檢測進行了整體回顧,第一部分從RCNN開始介紹基於候選區域的目標檢測器,包括Fast R-CNN、Faster R-CNN 和 FPN等。第二部分則重點討