0.摘要
作者:何凱明
ILSVRC2014比賽上物體檢測上排名第2,在物體分類上排名第3,是一篇十分很好的論文,展現了何凱明深厚的數學功底,有一些啟發:比如多尺度池化是否可以加入注意力機制,多尺度的思想是否可以應用到特征提取階段(類似densenet、或者多尺度放縮進行資料增強再進行交替訓練強化網絡)。
SPP 顯著特點
- 使用多個視窗(pooling window)
- SPP 可以使用同一圖像不同尺寸(scale)作為輸入, 但是得到同樣長度的池化特征。
在一般的CNN結構中,在卷積層後面通常連接配接着全連接配接。而全連接配接層的特征數是固定的,是以在網絡輸入的時候,會固定輸入的大小,是以會采取一些裁剪(crop)和拉伸(warp)的手段。
圖像的縱橫比(ratio aspect) 和 輸入圖像的尺寸是被改變的。這樣就會扭曲原始的圖像一般空間金子塔池化層,都是放在卷積層到全連接配接層之間的一個網絡層。SPP層對特征進行池化,并産生固定長度的輸出,這個輸出再喂給全連接配接層

2.基于空間金字塔池化的深度網絡
2.1卷積層和特征圖
作者實驗了一下一些filer提取的fmap可視化,實驗結果很有意思,結論的譯文和原文如下。
圖2(c)顯示了ImageNet資料集中激活最強的若幹圖像。可以看到一個過濾器能夠被一些語義内容激活。例如,第55個過濾器(圖2,左下)對圓形十分敏感;第66層(圖2,右上)對上尖尖形狀特别敏感;第118個過濾器(圖2,右下)對下尖尖形狀非常敏感。這些輸入圖像中的形狀會激活相應位置的特征圖(圖2中的箭頭)
In Figure 2, we visualize some feature maps. They are generated by some filters of the conv5layer. Figure 2© shows the strongest activated images of these
filters in the ImageNet dataset. We see a filter can be activated by some semantic content. For example, the 55-th filter (Figure 2, bottom left) is most activated by a circle shape; the 66-th filter (Figure 2, top right) is most activated by a ∧-shape; and the 118-th filter (Figure 2, bottom right) is most activated by a ∨-shape .These shapes in the input images (Figure 2(a)) activate the feature maps at the corresponding positions (the arrows in Figure 2).
2.2 空間金字塔池化層
卷積層接受任意輸入大小,但它們也産生可變大小的輸出。分類器(SVM / softmax)或全連接配接層需要固定長度的矢量。這些向量可以通過将特征彙集在一起的Bag-of-Words方法生成:
2.2.1 Bag-of-Words
BoW模型最初應用于文本處理領域,用來對文檔進行分類和識别。在應用BoW模型來表述圖像時,圖像被看作是文檔,而圖像中的關鍵特征被看作為“單詞”,其應用于圖像分類時主要包括三個步驟:
第一步:利用SIFT算法從不同類别的圖像中提取視覺詞彙向量,這些向量代表的是圖像中局部不變的特征點(類似卷積層);
第二步:将所有特征點向量集合到一塊,利用K-Means算法合并詞義相近的視覺詞彙,構造一個包含K個詞彙的單詞表(類似池化層);
第三步:統計單詞表中每個單詞在圖像中出現的次數,進而将圖像表示成為一個K維數值向量(類似全連接配接層)
bow缺點是沒有位置(空間)資訊,因為圖檔都被完全切割了。Spatial Pyramid Matching是帶位置資訊的bow。也是spp借鑒的思想之一,都是遠古傳統機器學習的論文。空間金字塔池化改進了BoW,因為它可以通過在局部空間中pooling來維護空間資訊。
2.2.2單個輸入大小空間金字塔池化
如上圖所示,當我們輸入一張圖檔的時候,我們利用不同大小的刻度,對一張圖檔進行了劃分。上面示意圖中,利用了三種不同大小的刻度,對一張輸入的圖檔進行了劃分,最後總共可以得到16+4+1=21個塊,我們即将從這21個塊中,每個塊提取出一個特征,這樣剛好就是我們要提取的21維特征向量。
第一張圖檔,我們把一張完整的圖檔,分成了16個塊,也就是每個塊的大小就是(w/4,h/4);
第二張圖檔,劃分了4個塊,每個塊的大小就是(w/2,h/2);
第三張圖檔,把一整張圖檔作為了一個塊,也就是塊的大小為(w,h)
空間金字塔最大池化的過程,其實就是從這21個圖檔塊中,分别計算每個塊的最大值,進而得到一個輸出神經元。最後把一張任意大小的圖檔轉換成了一個固定大小的21維特征。上面的三種不同刻度的劃分,每一種刻度我們稱之為:金字塔的一層,每一個圖檔塊大小我們稱之為:windows size了。如果你希望,金字塔的某一層輸出n*n個特征,那麼你就要用windows size大小為:(w/n,h/n)進行池化了。
最粗糙的金字塔會覆寫整個圖像。這實際上是一個“全局池化”操作,全局平均池化用于減小模型大小并減少過度拟合,弱監督對象識别中全局最大池化也有優勢。
本文中input層是224224,之後con5之後變成了1313,對于nxn塊(bins),L層的金字塔級,要實作一個滑窗池化過程,視窗大小為win = 上取整[13/n],步幅str = 下取整[13/n]
論文中全連接配接層總共256×(9+4+1)個神經元, 即輸全連接配接層輸入大小為256×(9+4+1)。由于pooling視窗(w×w)很明顯如果我們用一個pooling視窗怎麼也很難得到f=9+4+1=14,再加上如果輸入圖像尺度變化的話,是根本不可能,是以這裡用了3個pooling視窗,如下:。
将3個pooling後的結果合并,很容易發現和我們的期望一緻
2.2.3多個輸入大小空間金字塔池化
前提:每個數均可表示成若幹個完全平方數,完全平方數是可以重複的。
基于此條公理,我們合理的調控win和str兩個數值就可以再任意輸入(任意但沒完全任意)的情況下,都可以獲得等規模的全連接配接層的輸入,及使得任意大小的特征圖都能夠轉換成固定大小的特征向量,這就是空間金字塔池化的作用(多尺度特征提取出固定大小的特征向量)
本文中作者考慮兩種尺寸:除了224×224之外還有180×180。我們将上述224×224區域的大小resize為180×180,而不是裁剪較小的180×180區域。是以,兩種尺度的區域僅在分辨率不同,但在内容和位置資訊上是一樣的。
2.3目标檢測
利用SPP-Net進行物體檢測識别的具體算法的大體流程如下:
1、首先通過選擇性搜尋,對待檢測的圖檔進行搜尋出2000個候選視窗。這一步和R-CNN一樣。
2、特征提取階段。這一步就是和R-CNN最大的差別了,同樣是用卷積神經網絡進行特征提取,但是SPP-Net用的是金字塔池化。這一步驟的具體操作如下:把整張待檢測的圖檔,輸入CNN中,進行一次性特征提取,得到feature maps,然後在feature maps中找到各個候選框的區域,再對各個候選框采用金字塔空間池化,提取出固定長度的特征向量。而R-CNN輸入的是每個候選框,然後在進入CNN,因為SPP-Net隻需要一次對整張圖檔進行特征提取,速度是大大地快啊。因為R-CNN就相當于周遊一個CNN兩千次,而SPP-Net隻需要周遊1次。
rcnn:把這2k個候選視窗的圖檔都縮放到227*227,然後分别輸入CNN中,每個候選窗台提取出一個特征向量,也就是說利用CNN進行提取特征向量。
3、最後一步也是和R-CNN一樣,采用SVM算法進行特征向量分類識别。
3.結果
由于是老論文,而且是也是易插拔子產品是以就不展示實驗結果和網絡結構了,複述一下作者的結論吧:
1.多視窗的pooling會提高實驗的準确率
輸入同一圖像的不同尺寸,會提高實驗準确率(資料增強)
2.圖像輸入的尺寸對實驗的結果是有影響的
替代的是網絡的Poooling層,對整個網絡結構沒有影響,是以可以使得整個網絡可以正常訓練
3.也可以當作目标檢測