FCOS論文筆記

論文:FCOS: Fully Convolutional One-Stage Object Detection
論文鏈接:https://arxiv.org/abs/1904.01355
論文代碼:https://github.com/tianzhi0549/FCOS

Introduction

首先作者按照“慣例”說明了基於Anchor based
檢測器的缺點:

  • 基於Anchor的檢測算法,檢測效果受預選框尺寸和比例大小、以及檢測框數量的影響很大
  • Anchor的設置,如尺寸、比例固定,導致基於Anchor的檢測算法在處理尺度變化大或者小目標的時候存在一些問題
  • 基於Anchor的檢測算法,會導致正負樣本不平衡
  • 在訓練過程中,還需要候選框與GroundTruth的IoU這樣複雜的計算過程。

鑑於全卷積神經網絡的dense prediction在分割、關鍵點檢測等領域取得的成就,作者嘗試講全卷積神經網絡運用到檢測當中,對每個pixel進行預測。此前也不是沒有通過對每個pixel進行密集預測的檢測器(DenseBox、YOLOv1),但都存在不少的問題。對於DenseBox,它必須講候選框裁剪到固定的尺寸,才能輸入到網絡中。因此其必須使用圖像金字塔進行訓練。而對於YOLOv1由於是對每個pixel預測兩個候選框,其預測結果會嚴重遺漏候選框。在對pixel進行密集預測中,有一個問題必須要解決,即對於高度重合的候選框,同一個像素點要回歸到哪一個候選框是難以節點的。比如圖一中右圖,對於同一個像素點,是迴歸到橙色框還是藍色框,是pixel密集預測需要解決的問題

圖一

Method

Architecture

圖二

FCOS的整體框架圖如上圖所示,同樣的與FoveaBox一樣,是在RetinaNet的架構上作修改。和FoveaBox一樣將RetinaNet的輸出的兩個feature map的channel做了修改,輸出的用於分類feature map通道數從C * A改成了C[C表示數據集的類別數,A表示RetinaNet設置的anchor數量],而用於迴歸的feature map通道數則是從4 * A改成了4,完全摒棄了Anchor。其思路與FoveaBox一直,基於pixel的密集預測。對輸出的feature map 每個點(x, y)預測一個4維的向量
\(\boldsymbol{t}{*}=\left(l{}, t^{}, r^{}, b^{}\right)\)[見圖一],以及它的標籤c∗,在訓練過程通過將feature map該點的座標映射會原圖座標\( \left(\left\lfloor\frac{s}{2}\right\rfloor+ x s,\left\lfloor\frac{s}{2}\right\rfloor+ y s\right) \),其中s爲下采樣的倍數。若該點落在Groundtruth的框內,且預測的類別c*與GroundTruth的標籤c一直,則認爲該點(x,y)是正樣本,否則認爲該點是負樣本。如果同一個點(x,y)同時落入了多個Groundtruth區域,則該點應該選擇最小的Groundtruth作爲迴歸對象(即圖一右圖的情況,橙色的點應該回歸到藍色的框)。

Loss Function

L({px,y},{tx,y})=1Npos x,yLcls (px,y,cx,y)+λNpos x,y1{cx,y>0}Lreg (tx,y,tx,y) \begin{aligned} L\left(\left\{\boldsymbol{p}_{x, y}\right\},\left\{\boldsymbol{t}_{x, y}\right\}\right) &=\frac{1}{N_{\text {pos }}} \sum_{x, y} L_{\text {cls }}\left(\boldsymbol{p}_{x, y}, c_{x, y}^{*}\right) \\ &+\frac{\lambda}{N_{\text {pos }}} \sum_{x, y} \mathbb{1}_{\left\{c_{x, y}^{*}>0\right\}} L_{\text {reg }}\left(\boldsymbol{t}_{x, y}, \boldsymbol{t}_{x, y}^{*}\right) \end{aligned}

作者使用了上述公式作爲損失函數,\(L_{cls}\)爲Focal loss分類損失,\(L_{reg}\)則是IoU loss,且與其他檢測的損失函數一樣,只有當該點被判斷爲正樣本才計算迴歸損失。

Inference

測試階段就比較簡單,對feature map上的每個piexl預測它的\(p_{xy}\)和\(t_{xy}\),然後選擇\(p_{xy} > 0.05\)的點,將\(t_{xy}\)通過下面的公式擴展成候選框
l=xx0(i),t=yy0(i)r=x1(i)x,b=y1(i)y \begin{aligned} l^{*} &=x-x_{0}^{(i)}, \quad t^{*}=y-y_{0}^{(i)} \\ r^{*} &=x_{1}^{(i)}-x, \quad b^{*}=y_{1}^{(i)}-y \end{aligned}

Multi Level

作者同樣使用了FPN來做一個multi level的多層級預測,之所以這麼考慮是基於以下兩點:

  • 如果像分類一樣僅使用下采樣倍數最大的一層做檢測(感受野過大),會導致大部分小物體漏檢
  • 若不使用multi level,對於高度重疊的矩形框不太好處理。

這裏作者提出了一個觀點,大部分重疊的框,都不在同一個尺寸的。只有較少部分是同樣尺寸的候選框相互重疊。針對不同尺寸的重疊候選框,利用multi level可以比較好的解決該情況。即不同尺寸的通過不同層級的feature map來回歸獲得,而針對相同尺寸的候選框重疊,則選擇那個面積更小的作爲迴歸。

那作者是如何判斷哪個尺寸的候選框由哪個層級的feature map來預測呢,此處作者並未像FoveaBox和FPN一樣,而是直接利用迴歸的結果來判斷,即
\(m_{i-1}<\max \left(l^{}, t^{}, r^{}, b^{}\right)<m_{i}\)。
在文章中\(m_{2}\),\(m_{3}\),\(m_{4}\),\(m_{5}\),\(m_{6}\),\(m_{7}\)are set as 0, 64, 128, 256, 512 and ∞.

Center-ness for FCOS

在使用了上述技巧後,作者發現實驗得到的結果仍然未達到RetinaNet的實驗效果,在分析了實驗結果後,作者發現部分誤檢框離真實框的中心點距離較大,也就是說這部分其實是錯得比較離譜的誤檢,因此作者用一種比較簡單的方式減少這種誤檢,這個方法的核心就是將分類支路的輸出乘以一個權重圖得到最終的分類置信度。
圖三
從圖三可以看到,光憑classification得到的score(即前面的\(p_{xy}\))會出現很多的誤檢框,這些誤檢框大部分是離中心點距離較大,因此加入了一個分類置信度,輸入則是迴歸支路的得到的結果\(\boldsymbol{t}{*}=\left(l{}, t^{}, r^{}, b^{}\right)\),通過以下公式得到。
centerness=min(l,r)max(l,r)×min(t,b)max(t,b) centerness ^{*}=\sqrt{\frac{\min \left(l^{*}, r^{*}\right)}{\max \left(l^{*}, r^{*}\right)} \times \frac{\min \left(t^{*}, b^{*}\right)}{\max \left(t^{*}, b^{*}\right)}}
通過公式,可以比較清楚的瞭解到,當偏離中心點較大時,centerness的值則較小,因此最後分類得到的置信度也會變小。從而減少了誤檢框的個數。

Experiment

Summary

在近期閱讀了一些Anchor free的方法後,做一些總結;

Anchor free的方法大致可以分爲:
1)基於關鍵點檢測沿升到目標檢測,其主要解決的問題在於

  • 需要尋找哪些關鍵點?
    CornerNet 需要找到左上角點與右下角點,CenterNet(華爲)同樣需要找到左上角點與右下角點以及中心點,CenterNet(Objects as points)只需要中心點,ExtremeNet則是找到4個極點與中心點
  • 關鍵點如何轉換成矩形框?
    CornerNet、CenterNet(華爲)通過計算左上角點與右下角點Embedding Vector的距離,
    CenterNet(Objects as points)通過中心點與迴歸出來的長寬構成矩形框,ExtremeNet則是通過極點的組合是否包括中心點來判斷是否組成矩形框。
  • 後處理過程
    通過一系列操作,刨除誤檢框,CenterNet(華爲)通過中心點判斷其框是否屬於誤檢框等。

2)基於feature map的每個pixel進行dense prediction,其主要解決的問題在於

  • 如何定義正負樣本點?
    FoveaBox 通過設置參數,選取Groundtruth中心點某個範圍(參數1)內的點作爲正樣本點,某個範圍外(參數2)的點全部是負樣本點,FCOS則是落入Grondtruth中的點均爲正樣本點,其餘的點都爲負樣本。(FCOS認爲這樣增加了正樣本的數量,而FoveaBox則認爲應該選擇更精細的點作爲正樣本)
  • 如何解決同一個點回歸不同的矩形框?
    都是採用多層級預測(FPN)來實現,只是兩者判斷不同尺寸的物體應該由哪一層的特徵圖來預測的方式不同。

Note

  1. 作者在將預測點的迴歸值,轉換成候選框的時候(x,y)似乎還是feature map上的座標,而非原圖的座標,是作者的筆誤,還是作者原本就想回歸這些偏移量?
  2. 在Multi Lelve判斷時候,直接使用預測的點來判斷,是不是沒有和GroundTruth聯繫起來啊?
  3. centerness是如何訓練的?label是否是將原圖縮小stride倍,然後根據公式計算得到centerness的真值?
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章