1. 程式人生 > >目標檢測演算法之——FPN(Feature Pyramid Networks)

目標檢測演算法之——FPN(Feature Pyramid Networks)

        以往多數的object detection演算法都是只採用頂層特徵做預測,但我們知道低層的特徵語義資訊比較少,但是目標位置準確;高層的特徵語義資訊比較豐富,但是目標位置比較粗略。另外雖然也有些演算法採用多尺度特徵融合的方式,但是一般是採用融合後的特徵做預測,而本文不一樣的地方在於預測是在不同特徵層獨立進行的。這篇文章,作者利用了深度卷積神經網路固有的多尺度、多層級的金字塔結構去構建特徵金字塔網路,使用一種自上而下的側邊連線,在所有尺度構建了高階語義特徵圖,這種結構就叫特徵金字塔網路(FPN)。其在特徵提取上改進明顯,把FPN用在Faster R-CNN上,在COCO資料集上,一舉超過了目前所有的單模型(single-model)檢測方法。


4種特徵map的使用形式: 
(a)影象金字塔,即將影象做成不同的scale,然後不同scale的影象生成對應的不同scale的特徵。這種方法的缺點在於增加了時間成本。有些演算法會在測試時候採用影象金字塔。 
(b)像SPP net,Fast RCNN,Faster RCNN是採用這種方式,即僅採用網路最後一層的特徵。 
(c)像SSD(Single Shot Detector)採用這種多尺度特徵融合的方式,沒有上取樣過程,即從網路不同層抽取不同尺度的特徵做預測,這種方式不會增加額外的計算量。作者認為SSD演算法中沒有用到足夠低層的特徵(在SSD中,最低層的特徵是VGG網路的conv4_3),而在作者看來足夠低層的特徵對於檢測小物體是很有幫助的。 
(d)本文作者是採用這種方式,頂層特徵通過上取樣和低層特徵做融合,而且每層都是獨立預測的。
                  
上面一個帶有skip connection的網路結構在預測的時候是在finest level(自頂向下的最後一層)進行的,簡單講就是經過多次上取樣並融合特徵到最後一步,拿最後一步生成的特徵做預測。而下面一個網路結構和上面的類似,區別在於預測是在每一層中獨立進行的。主網路採用ResNet。 一個自底向上的線路,一個自頂向下的線路,橫向連線(lateral connection)。圖中放大的區域就是橫向連線,這裡1*1的卷積核的主要作用是減少卷積核的個數,也就是減少了feature map的個數,並不改變feature map的尺寸大小。
整個特徵圖包含兩個過程:自底向上
前向傳播過程:在前向過程中,feature map的大小在經過某些層後會改變,而在經過其他一些層的時候不會改變,作者將不改變feature map大小的層歸為一個stage,因此每次抽取的特徵都是每個stage的最後一個層輸出,這樣就能構成特徵金字塔。 自頂向下上取樣(upsampling):而橫向連線則是將上取樣的結果和自底向上生成的相同大小的feature map進行融合。在融合之後還會再採用3*3的卷積核對每個融合結果進行卷積,目的是消除上取樣的混疊效應(aliasing effect)。並假設上取樣生成的特徵圖是P2,P3,P4,P5,和原來自底向上的卷積特徵圖C2,C3,C4,C5之間一一對應對應。

Faster R-CNN+Resnet-101

把Faster-RCNN中原有的VGG網路換成ResNet-101



Faster R-CNN with FPN