【Feature Pyramid Networks for Object Detection】--- 閱讀筆記

轉自https://blog.csdn.net/xiamentingtao/article/details/78598027


1. FPN解決了什麼問題?

答: 在以往的faster rcnn進行目標檢測時,無論是rpn還是fast rcnn,roi 都作用在最後一層,這在大目標的檢測沒有問題,但是對於小目標的檢測就有些問題。因爲對於小目標來說,當進行卷積池化到最後一層,實際上語義信息已經沒有了,因爲我們都知道對於一個roi映射到某個feature map的方法就是將底層座標直接除以stride,顯然越後,映射過去後就越小,甚至可能就沒有了。 所以爲了解決多尺度檢測的問題,引入了特徵金字塔網絡


  • FPN是爲了自然地利用CNN層級特徵的金字塔形式,同時生成在所有尺度上都具有強語義信息的特徵金字塔。所以FPN的結構設計了top-down結構和橫向連接,以此融合具有高分辨率的淺層layer和具有豐富語義信息的深層layer。這樣就實現了從單尺度的單張輸入圖像,快速構建在所有尺度上都具有強語義信息的特徵金字塔,同時不產生明顯的代價。

相似的網絡:


  • 上面一個帶有skip connection的網絡結構在預測的時候是在finest level(自頂向下的最後一層)進行的,簡單講就是經過多次上採樣並融合特徵到最後一步,拿最後一步生成的特徵做預測。
  • 下面的FPN網絡結構和上面的類似,區別在於預測是在每一層中獨立進行的。後面的實驗證明finest level的效果不如FPN好,原因在於FPN網絡是一個窗口大小固定的滑動窗口檢測器,因此在金字塔的不同層滑動可以增加其對尺度變化的魯棒性。

另外雖然finest level有更多的anchor,但仍然效果不如FPN好,說明增加anchor的數量並不能有效提高準確率。

自下而上的路徑

CNN的前饋計算就是自下而上的路徑,特徵圖經過卷積覈計算,通常是越變越小的,也有一些特徵層的輸出和原來大小一樣,稱爲“相同網絡階段”(same network stage )。對於本文的特徵金字塔,作者爲每個階段定義一個金字塔級別, 然後選擇每個階段的最後一層的輸出作爲特徵圖的參考集。 這種選擇是很自然的,因爲每個階段的最深層應該具有最強的特徵。具體來說,對於ResNets,作者使用了每個階段的最後一個殘差結構的特徵激活輸出。將這些殘差模塊輸出表示爲{C2, C3, C4, C5},對應於conv2,conv3,conv4和conv5的輸出,並且注意它們相對於輸入圖像具有{4, 8, 16, 32}像素的步長。考慮到內存佔用,沒有將conv1包含在金字塔中。

自上而下的路徑和橫向連接

自上而下的路徑(the top-down pathway )是如何去結合低層高分辨率的特徵呢?方法就是,**把更抽象,語義更強的高層特徵圖進行上取樣,然後把該特徵橫向連接(lateral connections )至前一層特徵,因此高層特徵得到加強。**值得注意的是,橫向連接的兩層特徵在空間尺寸上要相同。這樣做應該主要是爲了利用底層的定位細節信息。

下圖顯示連接細節。把高層特徵做2倍上採樣(最鄰近上採樣法,可以參考反捲積),然後將其和對應的前一層特徵結合(前一層要經過1 × 1的卷積核才能用,目的是改變channels,應該是要和後一層的channels相同),結合方式就是做像素間的加法。重複迭代該過程,直至生成最精細的特徵圖。迭代開始階段,作者在C5層後面加了一個1 × 1的卷積核來產生最粗略的特徵圖,最後,作者用3 × 3的卷積核去處理已經融合的特徵圖(爲了消除上採樣的混疊效應),以生成最後需要的特徵圖。爲了後面的應用能夠在所有層級共享分類層,這裏坐着固定了3×3卷積後的輸出通道爲d,這裏設爲256.因此所有額外的卷積層(比如P2)具有256通道輸出。這些額外層沒有用非線性。

{C2, C3, C4, C5}層對應的融合特徵層爲{P2, P3, P4, P5},對應的層空間尺寸是相通的。


2.應用Faster R-CNN+Resnet-101

直接理解就是把Faster-RCNN中原有的VGG網絡換成ResNet-101,ResNet-101結構如下:


Faster-RCNN利用conv1到conv4-x的91層爲共享卷積層,然後從conv4-x的輸出開始分叉,一路經過RPN網絡進行區域選擇,另一路直接連一個ROI Pooling層,把RPN的結果輸入ROI Pooling層,映射成7 * 7的特徵。然後所有輸出經過conv5-x的計算,這裏conv5-x起到原來全連接層(fc)的作用。最後再經分類器和邊框迴歸得到最終結果。整體框架用下圖表示:


RPN中的特徵金字塔網絡

RPN是Faster R-CNN中用於區域選擇的子網絡,RPN是在一個13 * 13 * 256的特徵圖上應用9種不同尺度的anchor,本篇論文另闢蹊徑,把特徵圖弄成多尺度的,然後固定每種特徵圖對應的anchor尺寸,很有意思。也就是說,作者在每一個金字塔層級應用了單尺度的anchor,{P2, P3, P4, P5, P6}分別對應的anchor尺度爲{32^2, 64^2, 128^2, 256^2, 512^2 },當然目標不可能都是正方形,本文仍然使用三種比例{1:2, 1:1, 2:1},所以金字塔結構中共有15種anchors。這裏,博主嘗試畫一下修改後的RPN結構:


從圖上看出各階層共享後面的分類網絡。這也是強調爲什麼各階層輸出的channel必須一致的原因,這樣才能使用相同的參數,達到共享的目的。

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

Fast R-CNN 中的特徵金字塔網絡

Fast R-CNN 中很重要的是ROI Pooling層,需要對不同層級的金字塔制定不同尺度的ROI。
ROI Pooling層使用region proposal的結果和中間的某一特徵圖作爲輸入,得到的結果經過分解後分別用於分類結果和邊框迴歸。
然後作者想的是,不同尺度的ROI使用不同特徵層作爲ROI pooling層的輸入,大尺度ROI就用後面一些的金字塔層,比如P5;小尺度ROI就用前面一點的特徵層,比如P4。那怎麼判斷ROI改用那個層的輸出呢?這裏作者定義了一個係數Pk,其定義爲:


224是ImageNet的標準輸入,k0是基準值,設置爲5,代表P5層的輸出(原圖大小就用P5層),w和h是ROI區域的長和寬,假設ROI是112 * 112的大小,那麼k = k0-1 = 5-1 = 4,意味着該ROI應該使用P4的特徵層。k值應該會做取整處理,防止結果不是整數。
然後,因爲作者把conv5也作爲了金字塔結構的一部分,那麼從前全連接層的那個作用怎麼辦呢?這裏採取的方法是增加兩個1024維的輕量級全連接層,然後再跟上分類器和邊框迴歸,認爲這樣還能使速度更快一些。

最後,博主根據自己的理解畫了一張草圖,猜想整個網絡經FPN修改後的樣子,也就是Faster R-CNN with FPN。


3.總結

作者提出的FPN(Feature Pyramid Network)算法同時利用低層特徵高分辨率和高層特徵的高語義信息,通過融合這些不同層的特徵達到預測的效果。並且預測是在每個融合後的特徵層上單獨進行的,這和常規的特徵融合方式不同。

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