天天看點

論文閱讀四:結合mmdetection代碼了解FCOS目标檢測算法一、網絡整體架構二、feature map原圖映射點,get_points函數三、根據gt_boxes将points分為正負樣本點,并計算正樣本點與gt_boxes的偏移量,get_target函數四 計算centerness分支的target值,即centerness_target函數五 三個分支的訓練loss六 總結

FCOS: Fully Convolutional One-Stage Object Detection,全卷積一階目标檢測,但是與經典的one_stage檢測器,例如ssd,yolo不一樣的是,FCOS擺脫了anchor框的限制,即anchor_free。本博文以mmdetection中的fcos代碼為走向,來介紹這個檢測器。

一、網絡整體架構

C3,C4,C5是基礎網絡輸出的feature map,P3,P4,P5是FPN的結構,P6由P5下采樣得到,P7則由P6下采樣獲得,P3,P4,P5,P6,P7 是用來做分類和回歸的特征層。

下圖是輸入圖檔是800x1024的情況下的網絡尺寸,從網絡輸出有三個分支,從上到下依次是cls_scores分支,centerness分支和box_pred分支。

論文閱讀四:結合mmdetection代碼了解FCOS目标檢測算法一、網絡整體架構二、feature map原圖映射點,get_points函數三、根據gt_boxes将points分為正負樣本點,并計算正樣本點與gt_boxes的偏移量,get_target函數四 計算centerness分支的target值,即centerness_target函數五 三個分支的訓練loss六 總結

二、feature map原圖映射點,get_points函數

P3、P4、P5、P6、P7這5個級别的特征圖按照

論文閱讀四:結合mmdetection代碼了解FCOS目标檢測算法一、網絡整體架構二、feature map原圖映射點,get_points函數三、根據gt_boxes将points分為正負樣本點,并計算正樣本點與gt_boxes的偏移量,get_target函數四 計算centerness分支的target值,即centerness_target函數五 三個分支的訓練loss六 總結

的映射關系,将特征圖上的坐标(x,y)映射到原圖上的相應坐标,其中s是每個級别層上的stride,例如P3層,stride是8,坐标(0,0)映射到原圖為(4,4)。

論文閱讀四:結合mmdetection代碼了解FCOS目标檢測算法一、網絡整體架構二、feature map原圖映射點,get_points函數三、根據gt_boxes将points分為正負樣本點,并計算正樣本點與gt_boxes的偏移量,get_target函數四 計算centerness分支的target值,即centerness_target函數五 三個分支的訓練loss六 總結

P3到P7的預測點為100x128+50x64+25x32+13x16+7x8=17064個點,到映射到原圖上。

mmdetection中擷取point的代碼如下:

論文閱讀四:結合mmdetection代碼了解FCOS目标檢測算法一、網絡整體架構二、feature map原圖映射點,get_points函數三、根據gt_boxes将points分為正負樣本點,并計算正樣本點與gt_boxes的偏移量,get_target函數四 計算centerness分支的target值,即centerness_target函數五 三個分支的訓練loss六 總結

三、根據gt_boxes将points分為正負樣本點,并計算正樣本點與gt_boxes的偏移量,get_target函數

計算所有的points與每個gt_boxes的位置偏移量,即(l,t,r,b)例如下圖黃色框是gt_box,其左上角坐标為 ( x m i n , y m i n ) (x_{min}, y_{min}) (xmin​,ymin​),右下角的坐标為 ( x m a x , y m a x ) (x_{max}, y_{max}) (xmax​,ymax​),黃色圓點是point預測點,坐标為 ( x , y ) (x, y) (x,y)。計算公式如下:

l = x − x m i n l = x - x_{min} l=x−xmin​ t = y − y m i n t = y - y_{min} t=y−ymin​ r = x m a x − x r = x_{max} - x r=xmax​−x b = y m a x − y b = y_{max} - y b=ymax​−y

論文閱讀四:結合mmdetection代碼了解FCOS目标檢測算法一、網絡整體架構二、feature map原圖映射點,get_points函數三、根據gt_boxes将points分為正負樣本點,并計算正樣本點與gt_boxes的偏移量,get_target函數四 計算centerness分支的target值,即centerness_target函數五 三個分支的訓練loss六 總結

但是,并不是所有的17064個point點都是正樣本,是以正樣本point有兩個條件:1、point在gt_boxes内部,即(l,t,r,b)最小值大于0;2、限制回歸值在每層的回歸範圍内,P3層到P7層的回歸範圍依次是(-1, 64), (64, 128), (128, 256), (256, 512),(512, INF),即(l,t,r,b)最大值要在目前層的範圍内。剩下的都看作是負樣本點。當然,在兩個條件後,有些正樣本點對應多個gt_boxes,我們選擇面積最小的那個gt_boxe和該點比對。

mmdetection中計算box_target的代碼如下:

論文閱讀四:結合mmdetection代碼了解FCOS目标檢測算法一、網絡整體架構二、feature map原圖映射點,get_points函數三、根據gt_boxes将points分為正負樣本點,并計算正樣本點與gt_boxes的偏移量,get_target函數四 計算centerness分支的target值,即centerness_target函數五 三個分支的訓練loss六 總結

四 計算centerness分支的target值,即centerness_target函數

fcos雖然也使用了多層預測,但是fcos和anchor_base的檢測器還是有性能的差距,主要是因為,正樣本點中,在目标框中心的正樣本點的要比偏離中心點的正樣本點品質好,那些低品質的正樣本點影響了回歸的準确率。于是提出center_ness的政策來抑制低品質的檢測框。

計算centerness_target是為了訓練centerness分支,centerness_target的計算方式,直接反映了該分支的作用:

論文閱讀四:結合mmdetection代碼了解FCOS目标檢測算法一、網絡整體架構二、feature map原圖映射點,get_points函數三、根據gt_boxes将points分為正負樣本點,并計算正樣本點與gt_boxes的偏移量,get_target函數四 計算centerness分支的target值,即centerness_target函數五 三個分支的訓練loss六 總結

center_ness即中心點度量的意思,通過上面的公式,來度量樣本點距離中心點的距離,centerness的值範圍是(0,1),接近1時,說明該point在目标框的中心點附近,接近0時,說明距離中心點很遠,那些些距離中心點很遠的都是低品質的預測邊界框,是以,centerness相當于樣本點的權重來使用。

在訓練時,centerness分支是回歸loss的權重,在測試時,centreness分支與score分支相乘,作為最終的目标框分數。

論文閱讀四:結合mmdetection代碼了解FCOS目标檢測算法一、網絡整體架構二、feature map原圖映射點,get_points函數三、根據gt_boxes将points分為正負樣本點,并計算正樣本點與gt_boxes的偏移量,get_target函數四 計算centerness分支的target值,即centerness_target函數五 三個分支的訓練loss六 總結

上圖是center_ness的熱力圖,紅色、藍色、中間色分别代表1,0,0到1的其他值,可以看到,靠近中心點的正樣本的center_ness值區域1,偏離中心點的趨于0。

mmdetection中計算centerness_target的代碼如下:

論文閱讀四:結合mmdetection代碼了解FCOS目标檢測算法一、網絡整體架構二、feature map原圖映射點,get_points函數三、根據gt_boxes将points分為正負樣本點,并計算正樣本點與gt_boxes的偏移量,get_target函數四 計算centerness分支的target值,即centerness_target函數五 三個分支的訓練loss六 總結

五 三個分支的訓練loss

cls_scores分支,采用focal_loss;

bbox_pred分支,采用iou_loss,centerness值為權值

center_ness分支,采用CrossEntropyLos

論文閱讀四:結合mmdetection代碼了解FCOS目标檢測算法一、網絡整體架構二、feature map原圖映射點,get_points函數三、根據gt_boxes将points分為正負樣本點,并計算正樣本點與gt_boxes的偏移量,get_target函數四 計算centerness分支的target值,即centerness_target函數五 三個分支的訓練loss六 總結

六 總結

anchor_base的檢測器中,anchor相當于預先設定的滑動框,分類器的正負樣本是基于anchor框的,然後在正樣本anchor框的基礎上,回歸目标框的位置。anchor框需要很多參數來設定,不同的檢測場景,需要調整anchor框的參數來提高檢測召回率。除此之外,正負樣本的判斷是anchor框和gt框的iou值是否大于門檻值,門檻值的設定,對檢測結果的設定影響也很大。另外anchor_base的檢測器,是在預定anchor的基礎上進行回歸操作的,這種回歸,anchor框的設定直接影響結果。

fcos是anchor_free檢測器,不需要在樣本點上預先設定anchor框,而是直接在樣本點上進行回歸,正負樣本點的判斷是根據該樣本點是否在目标框中,而不在依據樣本點上的anchor框與gt框的iou來判定。雖然沒有anchor框寬高的設定,但是設定了每層的回歸範圍,例如P3層的回歸範圍是(-1,64)。anchor框類似于離散的寬和高,回歸範圍類似于連續的(-1,64)

繼續閱讀