深度影象檢測演算法總結與對比(2)
2. SPP-Net : Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition)
傳統CNN和SPP-Net流程對比如下圖所示(引自http://www.image-net.org/challenges/LSVRC/2014/slides/sppnet_ilsvrc2014.pdf)
SPP-net具有以下特點:
1.傳統CNN網路中,卷積層對輸入影象大小不作特別要求,但全連線層要求輸入影象具有統一尺寸大小。因此,在R-CNN中,對於selective search方法提出的不同大小的proposal需要先通過Crop操作或Wrap操作將proposal區域裁剪為統一大小,然後用CNN提取proposal特徵。相比之下,SPP-net在最後一個卷積層與其後的全連線層之間添加了一個SPP (spatial pyramid pooling) layer,從而避免對propsal進行Crop或Warp操作。總而言之,SPP-layer適用於不同尺寸的輸入影象,通過SPP-layer對最後一個卷積層特徵進行pool操作併產生固定大小feature map,進而匹配後續的全連線層。
2.由於SPP-net支援不同尺寸輸入影象,因此SPP-net提取得到的影象特徵具有更好的尺度不變性,降低了訓練過程中的過擬合可能性。
3.R-CNN在訓練和測試是需要對每一個影象中每一個proposal進行一遍CNN前向特徵提取,如果是2000個propsal,需要2000次前向CNN特徵提取。但SPP-net只需要進行一次前向CNN特徵提取,即對整圖進行CNN特徵提取,得到最後一個卷積層的feature map,然後採用SPP-layer根據空間對應關係得到相應proposal的特徵。SPP-net速度可以比R-CNN速度快24~102倍,且準確率比R-CNN更高(下圖引自SPP-net原作論文,可以看到SPP-net中spp-layer前有5個卷積層,第5個卷積層的輸出特徵在位置上可以對應到原來的影象,例如第一個圖中左下角車輪在其conv5的圖中顯示為“^”的啟用區域,因此基於此特性,SPP-net只需要對整圖進行一遍前向卷積,在得到的conv5特徵後,然後用SPP-net分別提取相應proposal的特徵)。
SPP-Layer原理:
在RNN中,conv5後是pool5;在SPP-net中,用SPP-layer替代原來的pool5,其目標是為了使不同大小輸入影象在經過SPP-Layer後得到的特徵向量長度相同。其原理如圖如下所示
SPP與金字塔pooling類似,即我們先確定最終pooling得到的featuremap大小,例如4*4 bins,3*3 bins,2*2 bins,1*1 bins。那麼我們已知conv5輸出的featuremap大小(例如,256個13*13的feature map).那麼,對於一個13*13的feature map,我們可以通過spatial pyramid pooling (SPP)的方式得到輸出結果:當window=ceil(13/4)=4, stride=floor(13/4)=3,可以得到的4*4 bins;當window=ceil(13/3)=5, stride=floor(13/3)=4,可以得到的3*3 bins;當window=ceil(13/2)=7, stride=floor(13/2)=6,可以得到的2*2 bins;當window=ceil(13/1)=13, stride=floor(13/1)=13,可以得到的1*1 bins.因此SPP-layer後的輸出是256*(4*4+3*3+2*2+1*1)=256*30長度的向量。不難看出,SPP的關鍵實現在於通過conv5輸出的feature map寬高和SPP目標輸出bin的寬高計算spatial pyramid pooling中不同解析度Bins對應的pooling window和pool stride尺寸。
原作者在訓練時採用兩種不同的方式,即1.採用相同尺寸的影象訓練SPP-net 2.採用不同尺寸的影象訓練SPP-net。實驗結果表明:使用不同尺寸輸入影象訓練得到的SPP-Net效果更好。
SPP-Net +SVM訓練:
採用selective search可以提取到一系列proposals,由於已經訓練完成SPP-Net,那麼我們先將整圖代入到SPP-Net中,得到的conv5的輸出。接下來,區別於R-CNN,新方法不需要對不同尺寸的proposals進行Crop或Wrap,直接根據proposal在圖中的相對位置關係計算得到proposal在整圖conv5輸出中的對映輸出結果。這樣,對於2000個proposal,我們事實上從conv1--->conv5只做了一遍前向,然後進行2000次conv5 featuremap的集合對映,再通過SPP-Layer,就可以得到的2000組長度相同的SPP-Layer輸出向量,進而通過全連線層生成最終2000個proposal的卷積神經網路特徵。接下來就和R-CNN類似,訓練SVMs時對於所有proposal進行嚴格的標定(可以這樣理解,當且僅當一個候選框完全包含ground truth區域且不屬於ground truth部分不超過e.g,候選框區域的5%時認為該候選框標定結果為目標,否則位背景),然後將所有proposal經過CNN處理得到的特徵和SVM新標定結果輸入到SVMs分類器進行訓練得到分類器預測模型。
當然,如果覺得SVM訓練很麻煩,可以直接在SPP-Net後再加一個softmax層,用好的標定結果去訓練最後的softmax層引數。