SPPnet
R-CNNvsSPP net:

SPP net的優(yōu)勢:
1.SPP可以生成固定大小的向量,以此適應fc層所要求的固定輸入
2.多個pooling窗口,可以取出不同層次的特征
3.可以不再限制輸入圖片的尺寸
4.對于每張圖片只需要跑一遍CNN
SPP net的大體步驟:
1.假設原圖輸入是224*224,5個conv layers(以5層卷積為例)卷積出來的輸出是13*13*256(因為最后一層共256個filter),即13*13大小的共256張feature maps;
2.spp一共分3層:
第一層是對整張feature map做池化(最大、均值等);
第二層是將整張feature map劃分為2*2=4個塊,分別對每個塊做池化;
第三層是將整張feature map劃分為4*4=16個塊,分別對每個塊做池化。

注意!以上步驟每一步的max pooling的window size和stride都不同,具體的計算公式是:win= a/n(上舍入), str = a/n(下舍入),其中a是原圖經(jīng)過5層卷積后得到的feature map的大小,如果是第三層那么n = 3,以此類推。
舉個栗子:當a = 13時,win = 13/3 = 4.333 ~=5(因為上舍入),str = 13/3 = 4.3333 ~=4(因為下舍入)。所以了第三層的max pooling的sliding window大小就是5*5,stride就是4*4。以此類推。
當然了,每一張圖的max pooling也不一樣。
舉個栗子:當輸入圖像大小= 180*180時,經(jīng)過5層卷積后得到的feature map的大小就是10*10。那么第三層的max pooling的sliding window大小就是a/n = 10/3 = 3.333~=4,stide就是3。以此類推。
具體內容請參考原文:
當輸入是224*224大小的圖像時,5層conv后得到13*13:


當輸入是180*180大小的圖像時,5層conv后得到10*10:

通過以上步驟,最后可獲得1+4+16=21個池化后的特征。
總的來說,在固定spp層數(shù)的前提下,就是根據(jù)圖像的具體大小來設計具體的max pooling。最終保證輸入到fc層的結果是相同維度大小的。