真正意义的Anchor-Free,FCOS目标检测算法了解一下
點擊上方“AI搞事情”關注我們
2019年目標檢測領域比較火的一個方向就是Anchor-Free,比如:CornerNet、ExtremeNet、CenterNet、FoveaBox等方法,所謂Anchor-Free,就是去掉了原來來目標檢測算法的Anchor機制,由region-level的視覺任務轉變為了pixel-level的類似于語義分割的任務。
相關資源
論文:https://arxiv.org/pdf/1904.01355.pdf
開源:https://github.com/tianzhi0549/FCOS
論文筆記
如網絡結構圖所示,FCOS由主干網(Backbone)?+ 特征金字塔(Feature Pyramid)+ 預測三分支(Classification + Center-ness + Regression)三部分組成。
(FCOS網絡結構圖)
01
全卷積單步檢測器
網絡前向同語義分割網絡FCN類似,以像素點為訓練樣本,每個像素被標上類別或者背景標簽,用以分類分支的訓練。
由于沒有了Anchor,回歸分支便不能使用偏移量作為回歸的目標,作者以目標框中每個像素點到目標框四條邊的距離作為目標值進行邊框回歸分支的訓練。
因此,網絡的輸出包含80維(COCO類別數)分類張量px,y?和4維的回歸張量tx,y ,推理時,?px,y?>?0.05判別為正樣本,將tx,y?逆處理得到目標邊框。從以上結構圖可以看出,作者在兩個分支上分別使用4層CNN進行兩個任務的學習。參照RetinaNet,作者運用多個二分類代替了多分類。
損失函數:
分類損失Lcls 采用??Focal Loss,回歸損失Lreg??采用?IOU Loss,Npos?表示正樣本數量,論文中,回歸權重λ值為1。
回歸目標:
02
FPN多尺度預測
作者使用了基于FPN的多尺度策略,主要是為了解決由于大步長下采樣導致的低召回率的問題。在Anchor-Based方法中,可以通過調整IOU的閾值做到召回率的平衡。
如結構圖所示,FCOS算法使用了{P3, P4, P5, P6, P7}這五個尺度的特征映射進行了分類與回歸。其中,P3、P4、 P5由backbone不同層特征圖 C3、C4、C5經1 * 1卷積和反向鏈接而得,而P6、P7則是接著P5進行了步長為2的卷積操作得到的(相當于池化),最終P3, P4, P5, P6, P7的步長分別為:8, 16, 32, 64 和 128。
為了更好地利用多尺度特征,每一個尺度的特征層需要回歸的邊界框范圍的都進行了限定,讓每個尺度特征各司其職,不同特征層預測不同大小范圍的目標。具體地:
a:計算所有層當前層級中的回歸目標:l?, t?, r??、b?
b:判斷是否滿足條件:max(l?, t?, r?, b?) > mi 或者 max(l?, t?, r?, b?) < mi -1。
c:若滿足,設為負樣本,不對此邊界框進行回歸預測。
其中,mi是作為第i尺度特征層的最大回歸距離,
{m2, m3, m4, m5, m6,?m7} 分別對應: {0, 64, 128, 256, 512 , ∞}
通過多尺度預測策略還能夠很好地解決不同大小目標重疊的情況,若一個像素點即使通過多尺度預測策略還是被分配到了多個目標框中(同一尺度上),選用區域面積最小的目標進行回歸訓練。
利用多尺度策略,不同的特征層需要回歸不同的尺寸范圍(例如:P3的尺寸范圍為[0, 64],P4的尺寸范圍為[64,128],因此,不同特征層使用相同的輸出激活是不合理的,所以,作者將標準的exp(x)替換為了帶有可訓練標量si的exp(si,x),通過si來調整第i層指數函數的基數。
03
Center-ness
在分類的分支上引入了center-ness的概念,主要是用來衡量中心點位置的好壞,限制產生一些低質量(偏離目標)的檢測框,提升定位的效果。
center-ness的值位于0~1之間,像素點越遠離目標中心center-ness值越小,通過交叉熵損失進行訓練。測試時,將center-ness得分與對應分類得分相乘,作為最后得分,這樣每個位置便有了邊框權重的得分,遠離目標中心的邊框就被削弱了,通過NMS就有效地過濾了低質量的定位邊框。
04
實驗
訓練數據采用COCO數據集,主干網:ResNet-50(ImageNet預訓練),超參數同RetinaNet一致:使用SGD迭代90K次,初始學習率:0.01,batch size為16,迭代60K和80K時,學習率除以10, 權重衰減(Weight decay):0.0001,動量(momentum):0.9,輸入圖像被縮放到最小邊為800,最大邊小于等于1333。
同其他模型對比,Anchor-Free思想對小目標仍是有效的。
(算法實驗結果對比)
通過實驗結果可以看出,FCOS在各類場景,包括擁擠、遮擋、重疊,大目標和小目標等都有很好的檢測效果。
(可視化實驗結果)
拿code搞事情
論文開源了pytorch代碼,基于maskrcnn-benchmark進行改進,因此它的安裝與原始的Mask R-CNN一致,源碼倉庫INSTALL.md有詳細安裝介紹。
配置環境:win10 + Anaconda3 + pytorch1.2.0?pytorch1.1.0+ CUDA10.0
安裝依賴庫:
pip install ninja yacs cython matplotlib tqdm opencv-python安裝C++編譯環境: cl.exe
安裝cocoapi
cd $INSTALL_DIR git?clone https://github.com/cocodataset/cocoapi.gitcd cocoapi/PythonAPI python setup.py build_ext install # 需要編譯 # 失敗的話,通過以下方式安裝 pip install git+https://github.com/philferriere/cocoapi.git#subdirectory=PythonAPI進入FCOS目錄,編譯fcos和fcos_core
python setup.py build develop --no-deps出現以下錯誤
據說是不支持pytorch1.2.0
重新配置虛擬環境安裝:
# 創建FCOS環境 conda create --name FCOS python=3.6 conda activate FCOS # 安裝pytorch 1.1.0 &?torchvision pip install https://download.pytorch.org/whl/cu100/torch-1.1.0-cp36-cp36m-win_amd64.whl pip install torchvision==0.2.1 # 重新上述步驟下載模型,執行demo
# assume that you are under the root directory of this project, # and you have activated your virtual environment if needed. wget https://cloudstor.aarnet.edu.au/plus/s/ZSAqNJB96hA71Yf/download -O FCOS_imprv_R_50_FPN_1x.pth python demo/fcos_demo.pyBingo,demo檢測結果如下:
接下來,就開始訓練自己的數據吧……
長按二維碼關注我們
有趣的靈魂在等你
留言請摁
總結
以上是生活随笔為你收集整理的真正意义的Anchor-Free,FCOS目标检测算法了解一下的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 国内AI视频课程资源盘点
- 下一篇: PolarMask:单阶段实例分割框架,