FPN: Feature Pyramid Networks for Object Detection

https://github.com/kaiminghe/deep-residual-networks

https://github.com/rbgirshick/py-faster-rcnn

https://github.com/caffe2/caffe2

https://github.com/facebookresearch/deepmask

 

1 Introduction

高分辨率特徵圖有低級特徵, 阻礙目標識別的表示能力.

SSD: 他的金字塔構造是重複在前向傳遞中不同層的多層特徵圖.但爲了避免低級特徵, SSD放棄了重新使用已經計算的層, 而是從網絡中的高位開始構建金字塔, 然後添加一些新層.

本文欲創造一個特徵金字塔有很強的的語義性在所有的層. 爲了這個目標, 依賴合併低分辨率語義強和高分辨率語義弱的特徵相結合, 通過自上而下的路徑橫向連接.

相比於圖2top, 這些模型是生成一個高級特徵圖, 然後預測, 本文是每一層獨立預測, 並且使用resnet呈現結果.

 

2 Related work

 

3 Feature pyramid network

輸入任意大小, 在每一層輸出適當大小的特徵圖, 以一個全卷積的方式. 這個過程和主幹卷積獨立, 並且使用ResNet呈現結果. 本文金字塔涉及一個bottom-up pathway, a top-down pathway, lateral connections

 

bottom-up pathway.

相同大小的層稱之爲同一網絡stage. 每一個stage就是金字塔的一層. 每一個stage的最後一層作爲特徵圖的參考集合. 具體來說,對於ResNets [16],我們使用每個階段的最後一個殘差塊輸出的特徵激活。對於conv2,conv3,conv4和conv5輸出,我們將這些最後殘餘塊的輸出表示爲{C2,C3,C4,C5},並注意它們具有{4,8,16,32}的步幅 相對於輸入圖像的像素。由於內存佔用大,我們不會將conv1包含在金字塔中。

 

top-down pathway and lateral connections.

連接塊如圖3所示, top-down map進行2倍上採樣(使用nearest neighbor upsampling), 然後和bottom-up map對應像素相加(bottom-up先進行1X1conv, 爲了維度匹配, C5也有使用, (後來固定通道之後這個也保留下來了應該??)). 合併之後的特徵圖使用3X3的conv生成最終的特徵圖, 爲了混淆上採樣的影響(這個最終的特徵圖應該也是向下迭代的特徵圖). 最終特徵圖{P2,P3...}和{C2,C3...}通道數一一對應.

 

本文固定所有通道數d=256, 發現精度影響可以忽略.

 

4 Application

貼一個ResNet的結構圖:這裏作者採用Conv2,CONV3,CONV4和CONV5的輸出。因此類似Conv2就可以看做一個stage。

 

作者一方面將FPN放在RPN網絡中用於生成proposal,原來的RPN網絡是以主網絡的某個卷積層輸出的feature map作爲輸入,簡單講就是隻用這一個尺度的feature map。但是現在要將FPN嵌在RPN網絡中,生成不同尺度特徵並融合作爲RPN網絡的輸入。在每一個scale層,都定義了不同大小的anchor,對於P2,P3,P4,P5,P6這些層,定義anchor的大小爲32^2,64^2,128^2,256^2,512^2,另外每個scale層都有3個長寬對比度:1:2,1:1,2:1。所以整個特徵金字塔有15種anchor。

 

正負樣本的界定和Faster RCNN差不多:如果某個anchor和一個給定的ground truth有最高的IOU或者和任意一個Ground truth的IOU都大於0.7,則是正樣本。如果一個anchor和任意一個ground truth的IOU都小於0.3,則爲負樣本。

 

看看加入FPN的RPN網絡的有效性,如下表Table1。網絡這些結果都是基於ResNet-50。評價標準採用AR,AR表示Average Recall,AR右上角的100表示每張圖像有100個anchor,AR的右下角s,m,l表示COCO數據集中object的大小分別是小,中,大。feature列的大括號{}表示每層獨立預測。


從(a)(b)(c)的對比可以看出FRN的作用確實很明顯。另外(a)和(b)的對比可以看出高層特徵並非比低一層的特徵有效。

(d)表示只有橫向連接,而沒有自頂向下的過程,也就是僅僅對自底向上(bottom-up)的每一層結果做一個1*1的橫向連接和3*3的卷積得到最終的結果,有點像Fig1的(b)。從feature列可以看出預測還是分層獨立的。作者推測(d)的結果並不好的原因在於在自底向上的不同層之間的semantic gaps比較大。

(e)表示有自頂向下的過程,但是沒有橫向連接,即向下過程沒有融合原來的特徵。這樣效果也不好的原因在於目標的location特徵在經過多次降採樣和上採樣過程後變得更加不準確。

(f)採用finest level層做預測(參考Fig2的上面那個結構),即經過多次特徵上採樣和融合到最後一步生成的特徵用於預測,主要是證明金字塔分層獨立預測的表達能力。顯然finest level的效果不如FPN好,原因在於PRN網絡是一個窗口大小固定的滑動窗口檢測器,因此在金字塔的不同層滑動可以增加其對尺度變化的魯棒性。另外(f)有更多的anchor,說明增加anchor的數量並不能有效提高準確率。

 

另一方面將FPN用於Fast R-CNN的檢測部分。除了(a)以外,分類層和卷積層之前添加了2個1024維的全連接層。細節地方可以等代碼出來後再研究。

實驗結果如下表Table2,這裏是測試Fast R-CNN的檢測效果,所以proposal是固定的(採用Table1(c)的做法)。與Table1的比較類似,(a)(b)(c)的對比證明在基於區域的目標卷積問題中,特徵金字塔比單尺度特徵更有效。(c)(f)的差距很小,作者認爲原因是ROI pooling對於region的尺度並不敏感。因此並不能一概認爲(f)這種特徵融合的方式不好,博主個人認爲要針對具體問題來看待,像上面在RPN網絡中,可能(f)這種方式不大好,但是在Fast RCNN中就沒那麼明顯。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章