1. 程式人生 > >SPP(Spatial Pyramid Pooling)詳解

SPP(Spatial Pyramid Pooling)詳解

orm 基於 合並 由於 pla 提高 平方和 dpm 全連接

一直對Fast RCNN中ROI Pooling層不解,不同大小的窗口輸入怎麽樣才能得到同樣大小的窗口輸出呢,今天看到一篇博文講得挺好的,摘錄一下,方便查找。

Introduction

在一般的CNN結構中,在卷積層後面通常連接著全連接。而全連接層的特征數是固定的,所以在網絡輸入的時候,會固定輸入的大小(fixed-size)。但在現實中,我們的輸入的圖像尺寸總是不能滿足輸入時要求的大小。然而通常的手法就是裁剪(crop)和拉伸(warp)。

技術分享圖片

這樣做總是不好的:圖像的縱橫比(ratio aspect) 和 輸入圖像的尺寸是被改變的。這樣就會扭曲原始的圖像。而Kaiming He在這裏提出了一個SPP(Spatial Pyramid Pooling)層能很好的解決這樣的問題, 但SPP通常連接在最後一層卷基層。

技術分享圖片

SPP 顯著特點

1) 不管輸入尺寸是怎樣,SPP 可以產生固定大小的輸出
2) 使用多個窗口(pooling window)
3) SPP 可以使用同一圖像不同尺寸(scale)作為輸入, 得到同樣長度的池化特征。

其它特點

1) 由於對輸入圖像的不同縱橫比和不同尺寸,SPP同樣可以處理,所以提高了圖像的尺度不變(scale-invariance)和降低了過擬合(over-fitting)
2) 實驗表明訓練圖像尺寸的多樣性比單一尺寸的訓練圖像更容易使得網絡收斂(convergence)
3) SPP 對於特定的CNN網絡設計和結構是獨立的。(也就是說,只要把SPP放在最後一層卷積層後面,對網絡的結構是沒有影響的, 它只是替換了原來的pooling層)
4) 不僅可以用於圖像分類而且可以用來目標檢測

使用SPP的CNN

Convolutional Layers and Feature Maps

技術分享圖片

作者使用上圖意在說明保留原圖片的尺寸對實驗的特征提取和結果都很重要

The Spatial Pyramid Pooling Layer

技術分享圖片

為什麽會得固定大小的輸出?
註意我們上面曾提到使用多個窗口(pooling窗口,上圖中藍色,青綠,銀灰的窗口, 然後對feature maps 進行pooling,將分別得到的結果進行合並就會得到固定長度的輸出), 這就是得到固定輸出的秘密原因。
我們接下來用一個例子來弄懂這張圖

Single-size network

我們先假定固定輸入圖像的尺寸s=224s=224, 而此網絡卷積層最後輸出

256256層feature-maps, 且每個feature-map大小為13×13(a=13)13×13(a=13),全連接層總共256×(9+4+1)256×(9+4+1)個神經元, 即輸全連接層輸入大小為256×(9+4+1)256×(9+4+1)。即我們需要在每個feature-map的到一個數目為(f=9+4+1f=9+4+1)的特征。
由於pooling窗口(w×ww×w)很明顯如果我們用一個pooling窗口怎麽也很難得到f=9+4+1f=9+4+1,再加上如果輸入圖像尺度變化的話,是根本不可能。
這裏用了3個pooling窗口(w×ww×w), 而對應的pooling stride 為tt, 經多這3個窗口pooling池化得到3個n×n,n=3,2,1n×n,n=3,2,1的結果。
餅畫好了,怎麽得到我們的窗口大小ww和stride tt呢?

w=?a/n?=?13/3?=5w=?a/n?=?13/3?=5 t=?a/n?=?13/3?=4t=?a/n?=?13/3?=4

n=2,n=1n=2,n=1以此類推,將3個pooling後的結果合並,很容易發現和我們的期望一致。

技術分享圖片

muti-size training(證明其可能性)

有這一公理以及其推理:
公理: 任何一個數都可以寫成若幹個數的平方和。

技術分享圖片

推理: 任何一個數的平方(為一個數)可以表達成若幹個數的平方和

技術分享圖片

由於我們的輸入圖像尺寸是多樣的,致使我們在最後一層得到的每個featrue-map大小為a×b(ab大小是可變的)且feature-maps數為c,我們全連接層的輸入為c×f, 也就是我們每個feature-map 要得到f個特征。
由公理可得

技術分享圖片

技術分享圖片

SPP分類

作者在分類的時候得到如下幾個結果
1) 多窗口的pooling會提高實驗的準確率
2) 輸入同一圖像的不同尺寸,會提高實驗準確率(從尺度空間來看,提高了尺度不變性(scale invariance))
3) 用了多View(multi-view)來測試,也提高了測試結果
4)圖像輸入的尺寸對實驗的結果是有影響的(因為目標特征區域有大有有小)
5)因為我們替代的是網絡的Poooling層,對整個網絡結構沒有影響,所以可以使得整個網絡可以正常訓練。

SPP目標檢測

是基於RCNN而改進的,現在有比其更快的Fast-RCNN, 和Faster-RCNN。我們在這裏主要提出論文中的重要的點。
  1) 在目標檢測中,許多實驗可以從feature-maps中使用窗口,來提取目標特征。見原文描述:
regions of the feature maps, while R-CNN extracts directly from image regions. In previous works, the Deformable Part Model (DPM) [23] extracts features from windows in HOG [24] feature maps, and the Selective Search (SS) method [20] extracts from win- dows in encoded SIFT feature maps. The Overfeat detection method [5] also extracts from windows of deep convolutional feature maps, but needs to pre- define the window size. On the contrary, our method enables feature extraction in arbitrary windows from the deep convolutional feature maps.
  2)接下來分析目標檢測的整體過程:

技術分享圖片

從上面的描述,我們應該懂了作者的意思。作者是整體先對整張圖片進行卷積然後,在把其中的目標窗口拿出來Pooling,得到的結果用作全連接層的輸入。
特點:只需要計算一次卷積層,訓練速度快。

文章轉自: https://blog.csdn.net/yzf0011/article/details/75212513

SPP(Spatial Pyramid Pooling)詳解