SPP-net
論文:Spatial
Pyramid Pooling in Deep Convolutional Networks for Visual Recognition
在R-CNN中,要求輸入固定大小的圖片,因此需要對圖片進行crop、wrap變換。此外,對每一個圖像中每一個proposal進行一遍CNN前向特徵提取,如果是2000個propsal,需要2000次前向CNN特徵提取,這無疑將浪費很多時間。
該論文對R-CNN中存在的缺點進行了改進,基本思想是,輸入整張圖像,提取出整張圖像的特徵圖,然後利用空間關係從整張圖像的特徵圖中,在spatial pyramid pooling layer提取各個region proposal的特徵。
-------------------------------------------------------------------------------------------------------------------------------------------------------
spatial pyramid pooling layer
在傳統的CNN中,卷積層不需要輸入固定大小的圖像,並能產生任意大小的特徵圖,但是全連接層要求輸入固定大小的圖像。因此,該論文提出了將最後一個卷積層後的池化層替換爲spatial pyramid pooling layer(SPP層), 該層能夠生成長度固定的特徵,並輸入到全連接層。因此,SPP-net適合輸入大小不同的圖像。
spatial pyramid pooling layer的結構如下圖,類似於金字塔:
-----------------------------------------------------------------------------------------------------------------------------------------------------
多尺度訓練
爲了能夠輸入任意大小的圖像,在訓練網絡時,採用了多尺度輸入,如:224*224, 180*180,其中,180*180圖像是從224*224圖像變換的到的。構建兩種CNN模型,一種模型的輸入大小爲224*224,另一種模型的輸入大小爲180*180,而且這兩個模型共享參數。
------------------------------------------------------------------------------------------------------------------------------------------------------
將圖像ROI映射到feature map上
SPP-net
是把原始ROI的左上角和右下角映射到 feature map上的兩個對應點。有了feature map上的兩個角點,就確定了對應的 feature map 區域,如下圖:
該模型從第一個卷積層到最後一個卷積層,包括中間的池化層,計算各個層stride的乘積s ; (x’, y’)表示特徵圖上的座標點,(x , y)表示原輸入圖片上的座標點,那麼每個矩形候選框的左上角、右下角在特徵圖上的對應點:
左上角: x’= ⌊x/s⌋ + 1 y’= ⌊y/s⌋ + 1
右下角: x’= ⌈x/s⌉ + 1 y’= ⌈y/s⌉ + 1