論文通讀
Abstract
在此之前的CNN的輸入必須是固定大小的圖片。而SPPnet能接受任何大小的圖片,并都能產生同一個尺寸的特征向量。SPPnet還有一個很大的好處就是快速并且檢測精度高。快速在于:對于全部的圖片,我們只需要計算一次Feature map,然后在任意一個區域(子區域)池化這個Feature得到同一個大小的表達式。最后進入訓練的探測器。這一步,避免了重復計算卷積特征。這篇文章介紹的方法在Pascal VOC 2007,和ILSVRC上都取得了很好的效果。
1.Introuction
是在卷積層和全連接層之間添加spatial pyramid pooling層。
之前SPM(spatial pyramid matching)作為Bag-of-Words (BoW) 模型的衍生版在機器視覺的領域中十分成功。
SPPnet有一下三點很好的性質:
1.不管輸入的尺寸大小,輸出總是固定尺寸的特征向量。
2.使用多尺度容器,這時滑窗池化只用單一尺寸。多尺度的池化可以提高精度。
3.可以在不同的尺度上對特征進行池化。
我們采用多個共享權重的網絡結構,來處理不同尺寸的輸入,但是對于某一個網絡我們采用固定大小的輸入。
文章中在不同的4個CNN的構架上使用SPP結構,發現效果都有了很大的提升。
R-CNN不行在于對于一個未處理過的來自圖片的像素,他總是重復的調用卷積神經網絡進行計算。
2 DEEP NETWORKS WITH SPATIAL PYRAMID POOLING
2.1 Convolutional Layers and Feature Maps
文章之前也討論過,真正需要固定大小輸入的是全連接層,卷積層是不需要固定大小的輸入(因為滑動窗口的存在)。卷積層的輸出稱之為Feature map ,它不僅包括對目標的反映的強度,而且還包含位置信息。具有很豐富的語義信息。
2.2 The Spatial Pyramid Pooling Layer
因為這個卷積層可以接受任意尺寸的輸入,那么卷積層的輸出也是任意結構的。但是后面的全連接層確是需要固定大小的尺寸。為此我們在卷積層的最后一層中,把pooling層用空間金字塔pooling層代替。
具體地,在一個CNN里,把最以后一次池化層去掉,換成一個SPP去做最大池化操作(max pooling).如果最后一次卷積得到了k個feature map,也就是有k個filter,SPP有M個bin,那經過SPP得到的是一個kM維的向量.我的理解是,比如上圖中第一個feature map有16個bin,一共有256個feature map,每一個經過16個bin的max pooling得到16個數,那256個feature map就是16x256的向量了.SPP的bin大小可以選擇多個,所以經過SPP還能產生4x256,1x256維的向量.
bin的size是和輸入圖像size成比例的,而bin的個數是不變的。如果我們把bin當成另一種滑窗來看待的話,比較好理解。
我們可以對不同比例,不同大小的圖片進行處理,而且使用同一個CNN,只是對不同大小的圖片,在最后的SPP里,bin的大小不同,但最后得到的特征確實相同維度.
這樣,我們把一張圖片resize成不同尺度,放到同一個CNN里訓練,就能得到不同尺度下的特征,就和SIFT類似了.
上圖中單獨的Bin起到了全局信息的作用,從另一方面也減少了過擬合的問題。
2.3 Training the Network
如何在GPU上實現空間金字塔的卷積層。
Single-size training
對于一張給定尺寸的的輸入圖片,我們可以提前計算Bin的尺寸。
Multi-size training
對于多尺寸的訓練,我們依據輸入的大小來更改spp-net的size大小,使得輸出的特征向量size相同。
文中多尺度訓練采用的是在一個epoch內采用同一尺度(如224),在另一個epoch使用另外一個尺度(如180)。
把單個size中的224*224圖片,縮小到180*180,而不是在原圖上從新提取一個新的180*180的圖片,這樣可以保證兩張圖片內容一致。通過調整SPP的pooling 窗口和間隔距離得到相同的輸出。
在訓練中為了避免頻繁更換網絡的麻煩,采用先用224*224迭代訓練一遍,然后復制參數用180*180的網絡訓練,如此循環。
3 SPP-NET FOR IMAGE CLASSIFICATION
3.1 Experiments on ImageNet 2012 Classification
本文實在整個圖片上取4個角和中心,進行網絡訓練(和Alex-net中在256*256上去法不同)。
本文采用的是以ZF fast作為基本框架,具體結構如下:
Input(224,224,3)→96F(7,7,3,2)→LRN→max-p(3,3,2)→256F(5,5,96,5)→LRN→max-p(3,3,2)→384(3,3,256,1) →384F(3,3,384,1) →256F(3,3,384,1) →max-p(3,3,2) →4096fc→4096fc-1000softmax
測試階段采用10-view方法:
e2采用SPP-4,4個分級,分別為4*4,3*3,2*2,1*1? 共計30維
e3采用SPP-6,,4個分級,分別為6*6,3*3,2*2,1*1? 共計50維
結果分析:
1:(e1)獲得了top-1 35.99%的錯誤率;比原論文中報告的38.4%降低了近3%,說明這種在原圖像上截取224*224訓練圖片的方法比較好。
2:top-1,e3>e2>e1 ;top-5,e2>e3>e1;說明spp結構確實很有用,而且對比ZF-net,spp-4有更少的參數,最后一個特征層特征圖,ZF為6*6=36,spp-4為30個,說明spp結構對于物體的空間位置和形變具有魯棒性。
3:e4在180*180和224*224兩種scale上訓練網絡,在224*224上測試分類,top-5結果達到了13.64%。所以multi-scale訓練的方式很重要;根據ZF可視化論文中對平移和縮放不變形的探討中,使用multi-scale可以增加網絡對于平移和縮放的不變性。
4:e5,作者用原始整個圖像(水平翻轉)替換10-view中的連個中心剪裁圖片,使得top-5達到了13.57%,這說明輸入圖片和物體的匹配程度確實影響分類結果(和OverFeat中使用offset和sliding window的原因相同,匹配的越好,分類月準確)
5:對比OverFeat中的fast和accurate兩個模型對比來看,僅僅就分類來說,本文在沒有采取更加復雜的網絡情況下,沒有使用sliding window和offset的情況下,利用一些相對簡單的方法獲得了較好的結果。
3.2 3.3在Pascal VOC 2007和Caltech 101上實驗
通過在ImageNet上訓練的特征提取器,應用在其他數據及上,在新的訓練集上用SVM作為分類器,進行訓練。作者刷新了這兩個數據集VOC 2007上結果是80.1%,Caltech101上結果是91.44%
實驗結果證明網絡越深越好,SPP結構比一般的網絡結構好;在全圖上結構比剪裁的結果好;在不同比例上圖片上訓練會有不通過結果。說明卷積網絡對于圖像的scale有些敏感,SPPnet能夠部分地解決問題。
4 SPP-NET FOR OBJECT DETECTION
傳統的R-CNN慢的原因在于:對于與每一張輸入圖片,我們都會產生2000張的候選區域,對于每一個候選區域,我們都要喂進我們的cnn模型中進行特征的抽取。換句話說,對于每一張輸入圖片,我們都要進行2000次的cnn。這個大大增加了實踐的消耗。
SPP-net比較快的原因在于:對弈每一張的輸入圖片,我們只需要進行一次的cnn,抽取到一個featuremap即可。而在spatail pyramid pooling層,我們再對2000個候選區域的feature map進行處理即可。
4.1 Detection Algorithm
模型
1.用了快速選擇性搜索對于每一張圖片都產生2000個候選區域。
2.然后我們調整圖片使得min(w,h)=s,然以對于一整張圖片我們進入卷積層抽取他的feature map.
3.對于每個候選窗,我們使用四階空間金字塔(1+2*2+3*3+4*4=50)50個bin去池化這個feature map 。來產生12800(256*50)維的表達式。
4.進入全連接層.
5.對于每一個類別,我們都訓練一個二值的線性SVM的分類器。
訓練
1.我們用真實的框,來產生正負候選區域的樣本。(IoU)
2.我們用standard hard negative miming的方法來訓練SVM.
測試
SVM用于給每一個類別一個分數。然后用非極大值抑制來判定。
多尺度特征抽取
對于每一個候選窗口我們都在集合{480,576,688,864,1200}中選一個尺度s.使得min(w,h)=s,使得這個窗口的像素個數接近224*224。
對于傳統的R-CNN,SPP-net對其進行了結構的微調和bounding box regression 的處理。
4.2 Detection Results?
4.3 Complexity and Running Time
4.4 Model Combination for Detection
對于不同的初始化方式(其余相同),在訓練一個網絡。SPP-net(2)。發現性能和(1)差不多。在測試時,用分別來自兩個網絡的分數,采用非極大值抑制的方法來最終采取判斷。發現,結果有了顯著的提升。
4.5 ILSVRC 2014 Detection
總之通過spp-net的方法比R-CNN的方法要快很多,但是和OverFeat比較作者沒有給出,此外本文是在VOC 2007數據集上做的測試,OverFeat實在ILSVRC 2013的數據集上做的測試。兩種方法都是使用回歸的方法來預測bounding box。