FPN-Feature Pyramid Networks for Object Detection


FPN-Feature Pyramid Networks for Object Detection

標簽(空格分隔): 深度學習 目標檢測


這次學習的論文是FPN,是關於解決多尺度問題的一篇論文。記錄下論文筆記,歡迎交流。轉載請注明網址:http://www.cnblogs.com/alanma/p/6884121.html

動機
特征金字塔是多尺度目標檢測系統的一個基本組成部分。但是,在最近的深度學習目標檢測上,考慮到特征金字塔花費的計算和存儲代價,都選擇避免使用特征金字塔。問題的關鍵是尋找特征金字塔對多尺度問題帶來的准確率和代價的trade-off,這也就是這篇文章的研究目的。

整體思想
因為深度卷積神經網絡具有內在的多尺度性質(池化帶來的不同size的feature map),網絡由淺即深,分辨率越來越粗糙,但是語義信息越來越豐富。相似的思想利用在FCN的skip layer。要識別多尺度的目標,也需要利用不同level的feature map。作者利用了這種內在多尺度性質,設計出FPN。結構如下圖:


到這,應該已經了解了FPN基本思想,就是想利用不同level的feature map預測不同尺度的目標。尺寸小的物體因不斷的池化會在較深的層消失,所以利用淺層檢測小目標,但是淺層不如深層具備豐富的語義特征,所以還需要淺層融合深層的特征。
總結來說,FPN = top-down的融合(skip layer) + 在金字塔各層進行prediction。


這部分比較FPN和其他多尺度方法,說明為什么FPN代價較小

下面是對比圖:

圖(a)是相當常見的一種多尺度方法,稱為featurized image pyramid,這種方法在較早的人工設計特征(DPM)時被廣泛使用,在CNN中也有人使用過。就是對input iamge進行multi scale,通過設置不同的縮放比例實現。這種可以解決多尺度,但是相當於訓練了多個模型(假設要求輸入大小固定),即便允許輸入大小不固定,但是也增加了存儲不同scale圖像的內存空間。

圖(b)就是CNN了,cnn相比人工設計特征,能夠自己學習到更高級的語義特征,同時CNN對尺度變化魯棒,因此如圖,從單個尺度的輸入計算的特征也能用來識別,但是遇到明顯的多尺度目標檢測時,還是需要金字塔結構來進一步提升准確率。
從現在在imageNet和COCO數據集上領先的的一些方法來看,在測試的時候都用到了featurized image pyramid方法,即結合(a),(b)。 說明了特征化圖像金字塔的每一級的好處在於,產生了多尺度的特征表示,每一級的特征都有很強的語義(因為都用cnn生成的特征),包括高分辨率的一級(最大尺度的輸入圖像)。
但是這種模式有明顯的弊端,相比於原來方法,時間增長了4倍,很難在實時應用中使用,同樣,也增大了存儲代價,這就是為什么只是在測試階段使用image pyramid。但是如果只在測試階段使用,那么訓練和測試在推斷的時候會不一致。所以,最近的一些方法干脆舍棄了image pyramid。

但是image pyramid不是計算多尺度特征表示的唯一方法。deepCNN能夠層次化的特征,而且因為池化的作用,會產生金字塔形的特征,具有一種內在的多尺度。但是問題在於,高分辨率的map(淺層)具有low-level的特征,所以淺層的目標識別性能較弱。這也是不同level融合的目的。
如圖(c),SSD較早嘗試了使用CNN金字塔形的層級特征。理想情況下,SSD風格的金字塔 重利用了前向過程計算出的來自多層的多尺度特征圖,因此這種形式是不消耗額外的資源的。但是SSD為了避免使用low-level的特征,放棄了淺層的feature map,而是從conv4_3開始建立金字塔,而且加入了一些新的層。因此SSD放棄了重利用更高分辨率的feature map,但是這些feature map對檢測小目標非常重要。這就是SSD與FPN的區別

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

FPN與FCN的區別:
FPN在金字塔的所有層都進行prediction。FCN同樣進行了融合,但是最后是在單個層進行的prediction。

精度和速度:FPN作為一個通用的特征提取器,可以放入到其他網絡中,實驗展示了FPN帶來的明顯提升。FPN+faster r-cnn在coco數據集檢測任務中碾壓了所有現有的單模型方法。同時FPN+faster r-cnn的檢測速度為5fps,因此也是一種可以實用的方法。

代碼:作者還沒放出...


FPN在RPN和fast rcnn上的使用

  • 任意尺度的輸入(全卷積)。輸出是多層,成比例的(池化步長)的feature map。主體網絡結構可任意,如ResNet
  • Bottom-up
    排除conv1(考慮到內存),產生相同大小feature map尺寸的layer算做一個stage,其實就是以pool層為界。那特征金字塔的層的尺寸步長就是pool步長2。取每個stage的最后一層feature map作為特征金字塔的層,因為越深的層的特征語義信息越好。
  • top-dowm和橫向連接
    就是執行融合過程。首先上層上采樣2倍(最近鄰上采樣),淺層進行1x1的卷積保證兩層的維度相同,最后進行相加進行融合,得到更具有語義信息的淺層。最后,特征金子塔的每一級都進行3x3的卷積,免除上采樣產生的混疊效應。
  • 最后,所有的特征金字塔的層都要確保通道數一致(d =256),因為它們最后在進行預測的時候,要共享最后的分類器(在RPN和fast rcnn中,共享了box的分類器和box的回歸器)。
  • RPN:因為特征金字塔的不同層已經代表着不同的尺度,所以在產生anchor的時候,在特定層只考慮不同的形狀比,而不考慮不同的scale。然后特征金字塔的所有層共享box分類器和回歸器。
  • Fast rcnn: fast rcnn就是一個基於區域的目標檢測器。以往它的輸入是單尺度的。現在考慮FPN多尺度。因為我們可以將CNN的特征金字塔看成是來自於image pyramid.這個不難理解,因為CNN的每層對應不同大小的感受野。那么多尺度需要將不同大小的roi,對應到特征金字塔的不同的層(因為我們要將CNN的特征金字塔看成是來自於image pyramid.)。論文給出了計算公式:

    根據公式很容易理解,文章把224224大小的ROI對應到ResNet faster rcnn的C4, 如果有一個roi大小是224224的1/4,也就是更小的目標,應該對應到比C4更淺的層去。再根據池化的步長,很容易推測出對應到C3,那么檢測112*112大小的roi,就到C3層檢測。
    同RPN一樣,后面也共用box分類器和box回歸器。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM