SPPNet(特征金字塔池化)學習筆記


SPPNet

首先介紹最為傳統的alexNet,本文以及R-CNN有基於該網絡上進行改進

1.輸入224*224的圖片,經過卷積池化等操作后在最后的卷積層會變成13*13的圖片
2.后面接兩個全連接層
3.最后接一個softmax進行打分分類(分成1000類是因為ImageNet上的圖片總類為1000類)

SPPNet的介紹

  • 之前的卷積神經網絡只能輸入固定的尺寸進去因此不得不裁剪/變形。如圖所示:
  • 本文作者提出對於輸入圖片的尺寸要求只需要在全連接層,對於卷積層沒有要求,所以為了能夠在輸入的時候能夠輸入任意大小的圖片作者在最后一層卷積層和全連接層之間加了一個特征金字塔池化層
  • 具體如下圖所示:第一個為傳統的CNN結構,下面為加了SPPNet的網絡結構

作者為什么要這么加?

  1. 對於分類任務這樣做就可以在輸入圖片使輸入多尺度圖片(將原圖片變大變小等)擴充數據集
  2. 對於后面的目標檢測任務可以改進傳統的R-CNN,傳統的R-CNN需要將圖片通過select search選出大概兩千個區域再通過CNN卷積層,非常耗時。而加上SPPNet后可以輸入整張圖片進入卷積層,節省時間
  • 形象理解如下圖所示:

進入之后框如何畫?

  • 作者發現,卷積后對應的位置並不會發生改變,每個卷積層會匹配響應的區域。如下圖所示:
1.上圖顯示,車輪在原圖中的位置在特征圖上也會出現在響應的位置
2.上圖卷積核匹配的響應的(輪廓,顏色,紋理)與(c)匹配的也相似
3.這樣在目標檢測使可以根據特征圖畫出該物體的位置,也就可以畫出具體的框了

SPPNet的具體工作原理?

  • SPPNet需要在最后的卷積層將不同的尺寸的特征圖變化到統一尺寸大小具體使怎么做的呢?
  • 在讀論文使作者說到最大池化,我剛開始誤解為是和前面的池化層一樣通過滑動窗口實現。然而並不是。具體如何請看下圖:
  1. 對於分類任務提取特征時:
  2. 對於目標檢測任務提取特征時
1. 例如上圖,特征池化層分別為(4*4,2*2,1*1)
2. 將4*4的池化層等比例映射到特征圖中,然后再取16格中的每個小格的最大值,再將其拉伸為16*1的vector
3. 同理可得,將2*2的池化層等比例映射到特征圖中,再取4格,最后將其拉伸為4*1的vector
4. 1*1的將其拉伸成1*1的vector
5. 最后形成的時(16+4+1)*256(256是深度)的向量

更為具體的如下圖所示:

1.左邊是8*8的特征圖的池化層的划分和將其拉伸成一維向量
2.右邊是任意尺度的特征圖的划分
  • 綜上所述:任意尺度的特征圖都可以划分維固定大小的維度

總覽:



免責聲明!

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



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