深度學習論文翻譯解析(九):Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition

戰爭熱誠發表於2020-07-07

論文標題:Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition  

    標題翻譯:用於視覺識別的深度卷積神經網路中的空間金字塔池

論文作者:Kaiming He, Xiangyu Zhang, Shaoqing Ren, and Jian Sun

論文地址:

SPP的GitHub地址:https://github.com/yueruchen/sppnet-pytorch

參考的SPP翻譯部落格:http://www.dengfanxin.cn/?p=403

宣告:小編翻譯論文僅為學習,如有侵權請聯絡小編刪除博文,謝謝!           

  小編是一個機器學習初學者,打算認真研究論文,但是英文水平有限,所以論文翻譯中用到了Google,並自己逐句檢查過,但還是會有顯得晦澀的地方,如有語法/專業名詞翻譯錯誤,還請見諒,並歡迎及時指出。

前言

  SPP-Net是出自2015年發表在IEEE上的論文-《Spatial Pyramid Pooling in Deep ConvolutionalNetworks for Visual Recognition》。這篇是接著RCNN繼續改進的。所以在學習這篇論文之前先回顧一下RCNN。

  RCNN的主要流程為:

  • 1,Extract Region Proposal (Selective Search)
  • 2,Compute CNN features(CNN)
  • 3,CLassify regions(SVM)
  • 4,Non-maxumum suppression
  • 5,Bounding box regression

  那RCNN的不足之處就是:

  • 1,每一張圖片會提取大約2千個候選區域(region Proposal),針對每個Region Proposal 都重複的使用 CNN提取特徵,因此會在特徵提取階段耗費大量的時間
  • 2,由於全連線層的輸入維度是固定的,所以必須 resize(crop/wrap),Region Proposal 才能進行特徵提取,結果會導致丟失影像資訊和圖片形變,影響特徵提取的準確率。

  所以SPPNet 針對R-CNN兩處不足做了改進:

  • 1,將Selective Search的Region Proposal不放入CNN進行特徵提取,而是直接把原圖片放入CNN進行特徵提取,然後根據 Region Proposal位置在 conv5 的 feature map 做一個特徵對映,再擷取出每一個Region Proposal 所對映的 feature map。這樣就避免了重複性用 CNN 對每個 Region Proposal 單獨提取特徵,減少了大量時間。
  • 2,SPPNet 在原來的CNN的conv5之後加入了 Spatial  Pyramid Pooling layer(空間金字塔池化層)替換掉原來的 Pooling5 layer,由於SPP layer 可以接受不同 size 的feature maps 並輸出相同 size 的feature maps,因此避免了 resize而導致的圖片形變問題。

  總結一下,SPP-net的初衷非常明晰,就是希望網路對輸入的尺寸更加靈活,分析到卷積網路對尺寸並沒有要求,固定尺寸的要求完全來源於全連線層部分,因而藉助空間金字塔池化的方法來銜接兩者,SPP-net 在檢測領域的重要貢獻是避免了R-CNN的變形,重複計算等問題,在效果不衰減的情況下,大幅提高了識別速度。

  由於論文比較長,所以這裡貼上一下目錄,讓自己有個大概的理解:

  下面開始翻譯論文。

摘要

  現有的深度卷積神經網路(CNNs)需要一個固定大小(如:224*224)的輸入影像。這一要求是“人為的”,可能會降低對任意大小/比例的影像或子影像的識別精度。在這項工作中,我們為網路配備了另一種池策略“空間金字塔池”,以消除上述要求。這種新的網路結構稱為 SPP-net,它可以生成固定長度的表示,而不考慮影像的大小/比例。金字塔對物件變形也很健壯。有了這些優勢,SPP-net 應該在總體上改進所有基於CNN的影像分類方法。在 ImageNet 2012資料集上,我們證明了SPP-net提高了各種 CNN 架構的準確性,儘管他們的設計不同,在PASCAL VOC 2007和 Caltech 101資料集上,SPP-net 使用單一的完整影像表示而無需微調就可以獲得最先進的分類結果。

  SPP-net 的功能在目標檢測中也具有重要意義。利用SPP-net,我們只需要從整個影像中計算一次,然後將任意區域(子圖)的特徵集合起來生成固定長度的表示,以訓練檢測器。該方法避免了重複計算卷積特徵。在處理測試影像時,我們的方法比R-CNN 方法快 24~102倍,同時在PASCAL VOC 2007 上獲得了更好或相當的精度。

  在2014年的ImageNet 大規模視覺識別挑戰賽(ILSVRC)中,我們的方法在所有38個參賽團隊中目標檢測取得了第二名,影像分類取得了第三名的成績。本文還介紹了為這次比賽所作的改進。

 

1,引言

  我們正在目睹計算機視覺領域的快速的,革命性的變化,這主要是由深卷積神經網路(CNN)[1]和大規模訓練資料的可用性[2]引起的。基於深度網路的方法最近在影像分類 [3],[4],[5],[6],物件檢測 [7],[8],[5] 和其他識別任務 [9],[10],[11],[12],甚至是非識別任務都表現出了明顯的效能提升。

  但是在CNN的訓練和測試中存在一個技術問題:普遍的CNN需要固定的輸入影像尺寸(例如224*224),這限制了輸入影像的長寬比和縮放尺度。當應用於任意大小的影像時,當前方法大多數通過裁剪[3],[4]或者通過變形[13],[7] 將輸入影像調整為固定大小,如圖1所示。但是裁剪區域可能不會包含整個物件,而扭曲的內容可能會導致不必要的幾何編寫。由於內容丟失或失真。可能會損害識別精度。此外,當物件比例變換時,預定比例可能不合適。固定輸入大小會忽略涉及刻度的問題。

  那麼,為什麼CNN需要固定的輸入大小?CNN主要由兩部分組成:卷積層和其後的全連線層。卷積層以滑動視窗的方式操作,並輸出表示啟用的空間排列的特徵圖(feature map)(圖2)。實際上,卷積層不需要固定的影像尺寸大小,並且可以生成任何大小的特徵圖。另一方面,全連線層根據其定義需要具有固定的大小/長度輸入。因此,固定大小約束僅來自存在於網路較深階段的全連線層。也是網路的最後階段。

 

  本文引入一種空間金字塔池化(Spatial pyramid pooling,SPP)層以移除對網路固定尺寸的限制。特別地,將SPP層放在最後一個卷積層之後。SPP層對特徵圖進行池化,併產生固定長度的輸出,這個輸出再喂入全連線層(或其他分類器)。換句話說,在網路層次的較後階段(也就是卷積層和全連線層之間)進行某種資訊“彙總”,可以避免在最開始的時候就進行裁剪 crop或變形wrap。圖1(下)展示了引入SPP層之後的網路結構變化。我們稱這種新型的網路結構為 SPP-net。

  空間金字塔池化[14] [15](普遍稱謂:空間金字塔匹配 Spatial Pyramid Matching, SPM[15]),是詞袋模型(Bag-of-Words, BoW)的擴充套件,SPP模型是計算機視覺領域最成功的的方法之一。它將影像劃分為從更細到更粗的級別,並聚合他們的區域性特徵。在CNN之前,SPP一致是個大分類比賽[17] [18] [19] 和檢測比賽(比如[20])的冠軍系統中的核心元件,對於深度 CNNs 而言,SPP有幾個突出的優點:(1)SPP能在輸入尺寸任意的情況下產生固定大小的輸出,而以前的深度網路[3] 中的滑動池化(Sliding window pooling)則不能;(2)SPP使用了多層空間箱(bin),而滑動視窗池化則只用了一個視窗尺寸。多級池化對於物體的變形有十分強的魯棒性[15],(3)由於對其輸入的靈活性,SPP可以池化從各種尺度抽取出來的特徵。通過實驗,我們將施展所有提升深度網路最終識別精度的因素。

 

  SPP-net 不僅僅讓測試階段允許任意尺寸的輸入能夠產生表示(representations),也允許訓練階段的影像有各種尺寸和縮放尺度。實驗各種尺寸的影像進行訓練可以提高尺度不變性,以及減少過擬合。我們開發了一個簡單的多尺度訓練方法。為了實現一個單一網路能夠接受各種輸入遲鈍,我們使用多個共享所有權重(Parameters)的網路來近似得到這種效果,不過,這裡的每個網路分別使用固定輸入尺寸進行訓練,每個epoch使用固定的尺寸訓練這個網路,下一輪使用另一個尺寸來訓練。實驗表明,這種多尺度的訓練與傳統的單體型訓練的收斂速度是一樣的,但是帶來更好的測試精度。

  SPP的優點是與各類CNN設計是正交的。通過在 ImageNet 2012 資料集上進行的一系列可控的實驗,我們發現SPP對[3] [4] [5] 這些不同的 CNN架構都有提升。這些架構有不同的特徵數量,尺寸,滑動距離(strides),深度或者其他的設計。所以我們有理由推測 SPP 可以幫助提升更復雜的(更大,更深)的卷積架構。SPP-net 也做到了Caltech101 [21] 和 PASCAL VOC 2007[22] 上的最好結果,而且只使用了一個全影像表示,且沒有調優。

 

 

  在目標檢測方面,SPP-net 也表現優異。目前領先的方法是R-CNN[7],候選視窗的特徵是藉助深度神經網路進行抽取的。此方法在 VOC 和 ImageNet 資料集上都表現出了出色的檢測精度。但R-CNN的特徵計算非常耗時,因為它對每張圖片中的上千個變形後的區域的畫素反覆呼叫CNN。本文中,我們展示了我們只需要在整張圖片上執行一次卷積網路層(不管視窗的數量多少),然後再使用 SPP-net 在特徵圖上提取特徵。這個方法相對於 RCNN縮減了上百倍的耗時。在特徵圖(而不是region  proposal)上訓練和執行檢測器是一個很受歡迎的想法[23] [24] [20] [5] 。但是 SPP-net 延續了深度CNN特徵圖的優勢,也結合了SPP相容任意視窗大小的靈活性,所以做到了出色的精度和效率。我們的實驗中,基於SPP-net的系統(建立在R-CNN流水線上)比R-CNN計算卷積特徵要快 24~120倍,而精度卻更高。我們進一步提出了一個單模型結合方法EdgeBoxes[25],來提升在 PASCAL VOC 2007 detection task 的結果。

 

  該手稿的初步版本已釋出在 ECCV 2014上,基於這項工作,我們參加了 ILSVRC 2014 的競賽[26],在目標檢測中排名第二,在影像分類中排名第三(均僅提供資料),在所有的 38個團隊中,ILSVRC 2014進行了修改。我們現實,SPP網路可以增強比無SPP同行更深,更大的各種網路(第3.1 .2~3.1.4節)。此外,在我們的檢測框架的驅動下,我們發現在具有靈活定位/大小的視窗的特徵圖上進行多檢視測試(第3.1.5節)可以提高分類的準確性。該手稿還提供這些修改的詳細資訊。

  我們已經發布了該程式碼以方便將來的研究(http://research.microsoft.com/en-us/um/people/kahe/)。

 

 

2,基於空間金字塔池化的深度網路

2.1  卷積層和特徵圖

  在頗受歡迎的七層架構中[3] [4] ,前五層是卷積層,其中一些後面跟著池化層。從他們也使用滑動視窗的角度來看,池化層也可以認為是“卷積層”。最後兩層是全連線的,跟著一個 N路Softmax輸出,其中N是類別的數量。

  上述的深度網路需要一個固定大小的影像尺寸。然後,我們注意到,固定尺寸的要求僅僅是因為全連線層的存在導致的。另一方面,卷積層接受任意尺寸的輸入。卷積層使用滑動的特徵過濾器,他們的輸出基本保持了原始輸入的比例關係。他們的輸出就是特徵圖[1]——他們不僅涉及響應的強度,還包括空間位置。

  圖2中,我們視覺化了一些特徵圖。這些特徵圖來自於 conv5層的一些過濾器。圖2(c)顯示了 ImageNet資料集中啟用最強的若干影像。可以看到一個過濾器能夠被一些語義內容啟用。例如,第55個過濾器(圖2,左下)對圓形非常敏感;第66層(圖2,右上)對a^形狀特別敏感;第118個過濾器(圖2,右下)對a_形狀特別敏感。這些輸入影像中的形狀會啟用相應位置的特徵圖(圖2中的箭頭)。

 

  值得注意的是,圖2中生成的特徵圖並不需要固定的輸入尺寸。這些由深度卷積層生成的特徵圖和傳統的方法[27] [28] 中的特徵圖很相似。這些傳統方法中,SIFT向量 [29] 或者影像碎片 [28] 被密集的抽取出來,在通過向量量化 [16] [15] [30],稀疏化[17] [18] 或 Fisher核函式 [19] 進行編碼。這些編碼後的特徵構成了特徵圖,然後通過詞袋(BoW)[16] 或者空間金字塔[14] [15] 進行池化。類似的深度卷積的特徵也可以這樣做。

2.2  空間金字塔池化層

  卷積層接受任意輸入大小,但是他們產生可變大小的輸出。分類器(SVM/Softmax)或完全連線的層需要固定長度的向量。可以通過將特徵集合在一起的詞袋(BoW)方法[16] 生成此類向量。空間金字塔池化 [14] , [15]改進了BoW,因為他可以通過在區域性空間箱中池化來維護空間資訊。這些空間倉的大小與圖片大小成正比,因此無論影像大小如何,倉的數量都是固定的。這與之前的深層網路 [3] 的滑動視窗池形成對比,後者的滑動視窗數量取決於輸入大小。

  為了讓我們的神經網路適應任意尺寸的影像輸入,我們用一個空間金字塔池化層替換掉了最後一個池化層(最後一個卷積層之後的 pool5)。圖3示例了這種方法。在每個空間塊中,我們池化每一個過濾器的響應(本文中採用了最大池化法)。空間金字塔的輸出是一個 kM維向量,M代表塊的數量,k代表最後一層卷積層的過濾器的數量。這個固定維度的向量就是全連線層的輸入。

  有了空間金字塔池化,輸入影像就可以是任意尺寸了。不但允許任意比例關係,而且支援任意縮放。我們可以將輸入影像的大小調整為任意比例(例如 min(w, h) = 180,  224, ...),並應用相同的深度網路。當輸入影像的比例不同時,帶有相同大小的卷積核的網路就可以在不同的尺度上抽取特徵。跨多個尺度在傳統方法中十分重要,比如 SIFT 向量就經常在多個尺度上進行抽取 [29]  [27](受碎片和高斯過濾器的大小所決定)。我們接下來會說明多尺度在深度網路精度方面的重要作用。

  有趣的是,最粗糙的金字塔等級有一個覆蓋整個影像的容器。實際上,這是一個“全域性池”操作,在多項並行工作中也對此進行了研究。在[31],[32]中,使用全域性平均池來減少模型大小並減少過度擬合。在 [33]中,在所有 fc層之後的測試階段使用全域性平均池來提高準確性;在[34]中,全域性最大池用於弱監督物件識別。全域性池化操作對應於傳統的單詞袋方法。

  上圖中黑色圖片代表卷積之後的特徵圖,接著我們以不同大小的塊來提取特徵,分別是 4*4, 2*2,1*1,將這三張網路放到下面這張特徵圖上,就可以得到 16+4+1=21種不同的塊(Spatial bins),我們從這 21個塊 中,每個塊提出一個特徵,這樣剛好就是我們要提取的21維特徵向量。這種以不同的大小格子的組合方式來池化的過程就是空間金字塔池化(SPP)。比如,要進行空間金字塔最大池化,其實就是從這21個圖片塊中,分別計算每個塊的最大值,從而得到一個輸出單元,最終得到一個21維特徵的輸出。所以上圖中Conv5 計算出的 feature map也是任意大小的,現在經過 SPP之後,就可以變成固定大小的輸出了。所以上圖最終得到的特徵為(16+4+1)*256。

  總體而言,當網路輸入的是一張任意大小的圖片,這個時候我們可以一直進行池化,卷積,知道網路的倒數幾層的時候,也就是我們即將與全連線層連線的時候,就要使用金字塔池化,使得任意大小的特徵圖都能夠轉換成固定大小的特徵向量,這就是空間金字塔池化的意義(多尺度特徵提取出固定大小的特徵向量)

 

2.3 用空間金字塔池層訓練網路

  理論上,將上述網路結構可以用標註的反向傳播進行訓練[1],與影像的大小無關。但實踐中,GPU的實現(如cuda-convnet [3] 和 Caffe [34])更適合執行在固定輸入影像上。接下來,我們描述我們的訓練方法能夠在保持空間金字塔池化行為的同時還能充分利用 GPU的優勢。

單尺度訓練

  如前人的工作一樣,我們首先考慮接受裁剪成 224*224 影像的網路。裁剪的目的是資料增強。對於一個給定尺度的影像,我們先計算空間金字塔池化所需要的塊(bins)的大小。考慮一個尺寸為 a*a(也就是13*13)的 conv5 之後特徵圖。對 n*n塊的金字塔層的塊 bins,我們將這個池level作為一個滑動視窗池來實現,視窗的大小 win = [a/n]和步長 s=[a/n]。用 I級的金字塔,我們實現 I 這樣的層(With an /-level pyramid,we implement /such layers)。下一個完全連線的層(fc6)將連線著這 I 個輸出。如下圖4顯示了一個三級金字塔池(3*3, 2*2, 1*1)的示例配置。

  我們的單一規模訓練的主要目的是實現多級池行為。實驗表明,這是提高精度的一個原因。

  在Conv5之後的特徵圖為 13*13(a*a),金字塔層bins:n*n,將pooling層作為Sliding Window Pooling。windows_size = [a / n] 向上取整,stride_size = [a / n] 向下取整。對於上面 pool3*3:SizeX = 5的計算公式為: [13 / 3] 向上取整=5,stride = 4 的計算公式是: [13 / 3] 向下取整=4。

多尺度訓練

  帶有SPP的網路可以應用於任意尺寸,為了解決不同影像尺寸的訓練問題,我們考慮一些預設好的尺寸。現在考慮這兩個尺寸:180*180, 224*224。我們使用縮放而不是裁剪,將前述的 224 的區域影像變成 180大小。這樣,不同尺度的區域僅僅是解析度上的不同,而不是內容和佈局上的不同。對於接受 180 輸入的網路,我們實現另一個固定尺度的網路。本例中,conv5輸出的特徵圖尺寸是 a*a = 10*10,。我們仍然使用win = 上取整 [a / n] ,str = 下取整 [a / n],實現每個金字塔池化層,這個 180網路的空間金字塔層的輸出的大小就和 224網路的一樣了。這樣,這個180網路就和 224網路擁有一樣的引數了。換句話說,訓練過程中,我們通過共享引數的兩個固定尺度的網路實現了不同輸入尺寸的 SPP-net。

  為了減少從一個網路(例如224個)切換到另一個網路(例如180個)的開銷,我們在一個網路上訓練每個完整的epoch,然後切換到另一個網路(保持所有的權重)進行下一個完整的epoch訓練。這是迭代的。在實驗中,我們發現這種多尺度訓練的收斂速度與上述單尺度訓練相似。

  多尺度訓練的主要目的是在保證已經充分利用現在被較好優化的固定尺度網路實現的同時,模擬不同的輸入尺寸。除了上述兩個尺度的實現,我們也在每個 epoch中測試了不同的 S*S 輸入,s是從 180到224之間均勻選取的。後面講在實驗部分報告這些測試的結果。

  請注意:上述的單/多尺度解決方案僅僅用於訓練,在測試階段,將SPP-net應用於任何尺度的影像都是很簡單的。

  總結一下,多尺度訓練就是使用兩個尺度(224*224 和 180*180)進行訓練。訓練的時候,224*224是 crop得到的,180*180的圖片是通過縮放224*224的圖片得到的。之後迭代訓練,即用224的圖片訓練一個 epoch,之後180的圖片訓練一個 epoch,交替進行。兩種尺度下,在SPP-net之後,輸出的維度都是(9+4+1)* 256 ,引數是共享的,之後接全連線層即可,論文提到這樣的好處是可以更快的收斂。

 

3,SPP-net 用於影像分類

3.1 在ImageNet 2012 的分類實驗

  我們在1000個類別的 ImageNet 2012訓練集上訓練了網路,我們的訓練演算法參照了前人的實踐工作 [3], [4] , [36],影像會被縮放,以便較小的維度是 256,再從中間四個角裁出224*224.影像會通過水平翻轉和顏色變換[3]進行資料增強。最後兩層全連線層會使用 Dropout層[3],learning rate 的起始值為 0.01,當錯誤率停滯後就除以10。我們的實現基於公開的 cuda-convert 原始碼 [3]和 Caffe [35]。所有的網路都是在單一的 GeForce GTX Titan GPU(6G 記憶體)耗時二到四周訓練的。

 

3.1.1  基準網路架構

  SPP-net的優勢是和使用的卷積神經網路無關。我研究了四種不同的網路架構 [3] [4] [5] (或者他們的修改版),對這些網路架構,SPP-net都提升了準確度。基準架構如表1,簡單介紹如下:

  • ——ZF-5:基於Zeiler和Fergus的“快速”模式[4] 的網路架構。數字5代表五層卷積網路
  • ——Convnet*-5:基於Krizhevsky等人工作[3]的修改。我們在 Conv2 和 Conv3(而不是conv1 和 conv2)之後加入兩個池化層。這樣,每一層之後的特徵圖就和 ZF-5的尺度一樣了。
  • ——OverFeat-5/7:基於Overfeat論文[5],使用了[6]的修改。對於ZF-5/Convnet8-5,這個架構在最後一個池化層產生了更大的特徵圖(18*18而不是13*13)。還在Conv3和後續的卷積層使用了更多的過濾器(512)。我們也研究了七層網路,其中conv3和conv7結構一樣。

  在基準模型中,最後卷積層之後的池化層會產生6*6的特徵圖,然後跟著兩個 4096維度的全連線層,和一個1000路的softmax層。這些基準網路的表現參見表2(a),我們針對ZF-5 進行70個epoch,而其他的用了90個epoch,ZF-5的表現比 [4]中報告的那個要好,增益主要來源於角落crop裁剪來源於整張圖片。

 

3.1.2  多層次池化提升準確率

  表2(b)我們顯示了使用單尺寸訓練的結果。訓練和測試尺寸都是 224*224,這些網路中,卷積網路都和他們的基準網路有相同的結果,只是最後卷積層之後的池化層,被替換成了 SPP層。表2中的結果我們使用了四層金字塔,{6*6, 3*3, 2*2, 1*1}(總共五十個塊)。為了公平比較,我們仍然使用標準的10-view 預測法,每個 view 都是一個 224*224 的裁剪。表2(b)中的結果顯示了明顯的效能提升。有趣的是,最大的提升(top-1 error, 1.65%)來自於精度最高的網路架構,既然我們一直使用相同的 10個裁剪 view。這些提升只能是來自於多層次池化。

  值得注意的是多層次池化帶來的提升不只是因為更多的引數:而是因為多層次池化對物件的變形和空間佈局更加魯棒 [15]。為了說明這個,我們使用一個不同的四層金字塔(4*4, 3*3, 2*2, 1*1)共有30個塊訓練另外一個 ZF-5 網路。這個網路有更少的引數,因為他的全連線層 fc6 有30*256維輸入而不是 36*256維。網路的 top-1/top-5 錯誤率分別是 35.06/14.04 和 50塊的金字塔網路相近,明顯好於非SPP基準網路(35.99/14.76)。

 

 

  表2(c)展示了多尺寸訓練的結果。訓練尺寸是 224和180,測試尺寸為 224.我們還使用標準的 10-view 預測法。所有架構的 top-1/top-5錯誤率進一步下降,SPP-net(Overfeat)的top-1 錯誤率降到  29.68%,比非SPP網路低了 2.33%,比單尺寸訓練降低了 0.68%。

  除了使用180和224兩個尺寸,我們還隨機選了 [180, 224] 之間多個尺寸。SPP-net(Overfeat-7)的top1/5 錯誤率 30.06%/10.96%。Top-1錯誤率比兩尺寸版本有所下降,可能因為 224這個尺寸(測試時用的尺寸)被更少的訪問到。但結果仍然比單一尺寸版本要好。

  之前的CNN 解決方案 [5] [36] 也處理了不同尺寸問題,但是他們主要是基於測試。在Overfeat [5] 和 Howard 的方法 [36] 中,單一網路在測試解決被應用於不同的尺度,然後將分支平均。Howard進一步在低/高兩個解析度影像區域上訓練了兩個不同的網路,然後平均分支。據我們所知,我們是第一個對不同尺寸訓練單一網路的方法。

3.1.4  全影像表示提升準確度

  接下來我們研究全影像視覺的準確度。我們將影像保持比例不變的情況下縮放到 min(w; h)=256。SPP-net 應用到一整張影像上。為了公平比較,我們也計算中央 224*224 裁剪這單一檢視(上述評估都用過)的準確度。單檢視比較的準確度見表3。驗證了ZF-5/Overfeat-7, top-1 錯誤率再全檢視表示中全部下降。這說明保持完整內容的重要性。即使網路訓練只使用了正方形影像,卻也可以很好地適應其他的比例。

  對比表2 和 表3我們發現,結合多種檢視大體上要好於全影像檢視。然而全檢視影像的表示仍然有價值。首先,經驗上看,我們發現(下節會討論)即使結合幾十個檢視,額外增加兩個全影像視角(帶翻轉)仍然可以提高準確度大約 0.2%。其次,全影像檢視從方法論上講與傳統方法 [15] [17] [19] 保持了一致,這些方法中對整張影像進行編碼的  SIFT 向量會被池化在一起。第三,在與其他一些應用中,比如影像恢復 [37],相似度評分需要影像表示而不是分類得分。一個全影像的表示就會成為首選。

 

3.1.5  在特徵圖上的多檢視測試

  受我們的檢測演算法的啟發(在下一節中介紹),我們進一步提出了在特徵對映上的多檢視測試方法。感謝SPP的靈活性,我們可以從卷積特徵對映中輕鬆地從任意大小的視窗(檢視)中提取特徵。

  在測試階段,我們調整影像的大小,使 min(w; h) =  s ,其中 s 代表預定義比例(如 256)。然後我們計算整個影像的卷積特徵圖。對於翻轉檢視的使用,我們還計算翻轉影像的特徵對映。給定影像中的任何檢視(視窗),我們將這個視窗對映到特徵對映(對映的方法在附錄中),然後使用 SPP 從這個視窗彙集特徵(參見圖 5)。彙集的特徵然後被饋送到 fc 層以計算該視窗的 softmax 分數。這些分數是最終預測的平均值。對於標準的 10-view,我們使用 s = 256,並角落或中心的檢視是 224*224 視窗。實驗表明,特徵對映上 10-view 預測的前五位誤差在影像上的原始 10-view 預測誤差附近為 0.1% 以內作物。

  我們進一步應用此方法從多尺度中提取多個檢視。我們將影像調整為六個尺度 s 屬於 { 224, 256, 300, 360, 448, 560} 並計算每個尺度下的整個影像的特徵對映。我們使用 224*224 作為任何比例的試圖大小,因此這些檢視在不同比例下在原始影像上具有不同的相對大小。我們為每個比例使用 18 個檢視:一個在中心,四個在角,四個在每邊的中間,有/沒有翻轉(當 s = 224時有6個不同的檢視)。這 96 個檢視的組合將前5個錯誤從 10.95% 降低到9.36%。結合兩個完整影像檢視(帶翻轉)進一步將前五個錯誤減少到 9.14%。

   在Overfeat論文 [5] 中,檢視也是從卷積特徵圖中提取的,而不是影像裁剪。但是,他們的試圖不能有任意大小;相反,視窗是哪些彙集的特性與所需維度相匹配的視窗。根據經驗,我們發現這些受限視窗不如我們靈活定位/大小的視窗有利。

 

 

3.1.6  ILSVRC 2014 的摘要和結果

  在表4中,我們與以前的最新方法進行了比較,Krizhevsky等人的論文 [3] 是 ILSVRC 2012的獲獎方法;Overfeat [5] Howard [36] 以及 Zeiler和Fergus的 [4] 是ILSVRC 2013 的領先方法。我們僅考慮單網路效能進行可比較的比較。

  我們最好的單個網路在驗證集上實現了 9.14%的top-5 錯誤。這正是我們提交給 ILSVRC 2014 [26] 的單一模型條目。測試集上的前5個錯誤為 9.08%(ILSVRC 2014 具有有 ILSVRC 2012 相同的訓練/驗證/測試資料)。在組合 11 種模型之後,我們的團隊的結果(8.06%)在參加 ILSVRC 2014的所有38個團隊中排名第3(表5)。由於SPPNet的優勢通常應該是獨立於體系結構,因此我們希望它會進一步改善更深,更大的卷積體系結構 [33],[32]。

 

 

3.2  在VOC 2007上的分類實驗

  我們的方法可以生成全檢視影像表示。通過在 ImageNet 上對上述網路進行預訓練,我們從目標資料集中的影像提取這些表示並重新訓練SVM分類器[38]。在SVM訓練中,我們有意不使用任何資料擴充(翻轉/多檢視)。我們對SVM訓練的功能進行歸一化。

  Pascal VOC 2007 [22] 中的分類任務涉及到 20種類別的 9963張圖片。 5011張圖片用於訓練,其餘圖片用於測試。通過mAP評估效能。表6總結了結果。

  我們從表6(a)中的基線開始,模型是不帶SPP的ZF-5.要應用此模型,我們調整影像大小,使其較小的尺度為 224,並裁剪中心為 224*224 區域。SVM通過層的特徵進行訓練。在此資料集上,層越深,結果越好。在表6(b)中,我們用SPP網路替換了無SPP網路。作為第一部的比較,我們仍然將 SPP網路應用於中心 224*224 的裁剪。全連線層的結果有所改善,此增益主要歸因於多層池。

  表6(c)顯示了我們在完整影像上的結果,其中將影像調整大小以便使較短的一面是 224.我們發現結果得到了顯著改善(78.39%  vs 76.45%)。這是由於保留了完整內容的全影像表示。

  因為我們網路的使用不取決於比例,所以我們調整影像的大小,使較小的尺寸為 s 並且使用相同的網路來提取特徵。我們發現,基於驗證集, s=392 可獲得最佳結果(表6(d))。這主要是因為物件在 VOC 2007 中佔據較小的區域,而在ImageNet 中佔據較大的區域,因此兩組之間的相對物件比例不同。這些結果表明分類任務中存在規模問題,SPP-net 可以不分解決此“規模不匹配”的問題。

  在表6(e)中,網路架構被我們的最佳模型(Overfeat-7 ,經過多尺度訓練)取代,並且 mAP 增至 82.44%。表8總結了我們的結果以及與先進方法的對比。在這些方法中,VQ[15] , LCC[18] 和FK [10] 均基於空間金字塔匹配。 [13] , [4] , [34] ,[6] 基於深度網路。在這些結果中,Oquab等人(77.7%)和 Chatfield等人(82.42%)是通過網路微調和多檢視測試獲得的。我們的結果與現有技術相當,僅使用單個完整影像表示而無需微調。

 

 

  Caltech 101 資料集 [21] 包含了102 個類別(一個背景)中的9144張圖片,我們為每個類別隨機的抽取30張圖片進行訓練,為每個類別最多抽取50張影像進行測試。我們重複10次隨機分割並取平均值。表7總結了我們的結果。

  在PASCAL VOC  2007 和 Caltech 101的結果中有一些常見的觀察結果:SPP-net優於 非 SPP-net(表7(b ) vs (a)),並且全視角表示優於裁剪的((c)與(b))。但是 Caltech101中的結果與PASCAL VOC 有一些差異。完全連線層的精度較差,SPP層較好。這可能是因為Caltech 101中的物件類別與 ImageNet中的物件類別相關性較小,而更深的層則具有類別的專用線。此外,我們發現在此資料集上測試的比例規模中,比例224具有最佳效能。這主要是因為 Caltech 101 中的物件也佔據了影像的較大區域,就像 ImageNet一樣。

  除了裁剪以外,我們也評估了使影像變形以適合 224*224 尺寸的情況。詞解決方案保留了完整的內容,但引入了扭曲(distortion),在SPP(ZF-5)模型上,使用SPP層作為特徵的精度為 89.91%,低於在未扭曲的完整影像上使用相同模型的 91.44%。

  表8總結了我們的結果,並與Caltech 101上最新的方法進行了比較。我們的結果(93.42%)比之前的記錄(88.54%)大幅提高(4.88%)。

  深度網路已經被用於物體檢測。我們簡要回顧一下最先進的 R-CNN [7]。R-CNN首先使用選擇性搜尋 [20]從每個影像中選出2000個候選視窗。然後將每個視窗中的影像區域變形到固定大小 227*227.一個事先訓練好的深度網路被用於抽取每個視窗的特徵。然後用二分類的 SVM 分類器在這些特徵上針對檢測進行訓練。R-CNN 產生的引人注目的成果,並且大大優於以前的方法。但R-CNN在一張影像的 2000個視窗上反覆應用深度卷積網路,十分耗時。在測試階段的特抽取是主要的耗時瓶頸。

  我們將 SPP-net 應用於物體檢測。只在整張影像上抽取一次特徵。然後在每個特徵圖的候選視窗上應用空間金字塔池化,形成這個視窗的一個固定長度表示(見圖5)。因為只應用一次卷積網路,我們的方法要快的多。

  我們的方法是從特徵圖中直接抽取特徵,而R-CNN則要從影像區域抽取。之前的一些工作中,可變性部件模型(Deformabel Part Model,DPM)從 HOG [24]特徵圖的視窗中抽取影像,選擇性搜尋方法 [20] 從 SIFT 編碼後的特徵圖的視窗中抽取特徵。Overfeat也是從卷積特徵圖中抽取特徵,但需要預定義的視窗尺寸。作為對比,我們的特徵抽取可以在任意尺寸的深度卷積特徵圖視窗上。

 

  我們使用選擇性搜尋 [20] 的 “fast”模式對每張圖片產生 2000個候選視窗。然後縮放圖形以滿足 min(w; h) = s,並且從整張影像中抽取特徵。我們暫且使用 ZF-5 的SPP-net 模型(單一尺寸訓練)。在每個候選視窗,我們使用一個4級空間金字塔(1*1, 2*2,3*3,6*6,總共50塊)。每個視窗將產生一個 12800 (256*50)維的表示。這些表示傳遞給網路的全連線層。然後我們針對每個分類訓練一個二分線性SVM分類器。

  我們的SVM實現追隨著 [20]  [7],我們使用真實標註的視窗去生成正例。負例是哪些與正例視窗重疊不超過 30%的視窗(使用 IoU比例)。如果一個負例與另一個負例重疊超過 70% 就會被移除。我們使用標準的難負例挖掘演算法(standard hard negative mining [23])訓練SVM。這個步驟只迭代一次。對於全部 20個分類訓練 SVM小於1個小時。測試階段,訓練器用來對候選視窗進行打分。然後在打分視窗上使用最大值抑制 [23] 演算法(30% 的閾值)。

  通過多尺度特徵提取,我們的方法可以得到改進。將影像縮放成 min(w; h) = s \ belongs S={480; 576; 688; 864; 1200},然後針對每個尺度計算 conv5的特徵圖。一個結合這些不同尺度特徵的策略是逐個 channel的池化。但我們從經驗上發現另一個策略有更好的效果。對於每個候選視窗,我們選擇一個單一尺度 s \ belongs S ,令縮放後的候選窗後的畫素數量接近於 224*224.然後我們從這個尺度抽取的特徵圖去計算視窗的特徵。如果這個預定義的尺度足夠密集,視窗近似於正方形。我們的方法粗略的等效於將視窗縮放到 224*224,然後再從中抽取特徵。但我們的方法在每個尺度只計算一次特徵圖,不管有多少個候選窗。

  我們參照 [7] 對預訓練的網路進行了調優。由於對於任意尺寸的視窗,我們都是從 conv5 的特徵圖中畫出特徵來,為了簡單起見,我們只調優全連線層。本例中,資料層接受 conv5之後的固定長度的池化後的特徵,後面跟著 fc_{6, 7} 和一個新的 21路(有一個負例類別) fc8層。fc8層的權重使用高斯分佈進行初始化 theta = 0.01.我們修正所有的 learning rate 是 1e-4。再將全部三層調整為 1e-5。調優過程中正例是與標註視窗重疊度達到 [0.5, 1] 的視窗,負例是重疊度為 [0.1,  0.5]的。每個 min-batch,25%是整理。我們使用學習率 1e-4 訓練了 250K 個 minbatch,然後使用 1e-5 訓練 20K個 minbatch。因為我們只調優 fc層,所以訓練非常的塊。在GPU上只需要 2個小時,不包括預快取特徵圖所需要的1個小時。另外,遵循[7],我們使用了約束框迴歸來後處理預測視窗。用於迴歸的特徵也是 conv5之後的池化後的特徵。用於迴歸訓練的是那些與標註視窗至少重疊 50%的視窗。

 

4.2  檢測結果

  我們在PASCAL VOC2007資料集的檢測任務上,評測了我們的方法。表9展示了我們的不同層的結果,使用了1-scale(s=688)或5-scale。R-CNN的結果見[7],他們使用了5個卷積層的 AlexNet [3]。使用 pool5層我們的結果是 44.9%,R-CNN的結果是 44.2%。但使用未調優的 fc6層,我們的結果就不好。可能是我們的 fc層針對影像區域進行了預訓練,在檢測案例中,他們用於特徵圖區域。而特徵圖區域在視窗框附近會有較強的啟用,而影像的區域就不會這樣了。這種用法的不同是可以通過調優解決的。使用調優後的 fc層,我們的結果就比 R-CNN稍勝一籌。經過約束框迴歸,我們的 5-scale 結果(59.2%)比 R-CNN (58.5%)高 0.7%,而 1-scale 結果(58.0%)要差 0.5%。

  表10中,我們進一步使用相同預訓練的 SPP-net模型(ZF-5)和 R-CNN進行比較。本例中,我們的方法和 R-CNN 有相當的平均成績。R-CNN的結果也是通過預訓練模型進行提升的。這是因為 ZF-5比 AlexNet 有更好的架構,而且 SPP-net 是多層次池化(如果使用非 SPP的 ZF-5,R-CNN 的結果就會下降)。表11 表明了每個類別的結果。

  表11 也包含了其他方法。選擇性搜尋(SS) [20] 在 SIFT特徵圖上應用空間金字塔匹配。DPM [23] 和Rgeionlet [39] 都是基於 HOG特徵的 [24]。Regionlet方法通過結合包含 Conv5 的同步特徵可以提升到 46.1%。DetectorNet [40] 訓練一個深度網路,可以輸出像畫素級的物件遮罩,這個方法僅僅需要對整張圖片應用深度網路一次,和我們的方法一樣。但他們的方法mAP比較低(30.9%)

 

 

 

 

  儘管具有相當的準確性,但是我們的方法比R-CNN要快得多。R-CNN中有2000個視窗的卷積特徵計算的複雜度為 O(n*227^2),我們的方法中尺度為s的複雜度為O(r*s^2),其中 r 為窗寬比。假設 r 大約為 4/3,在 s = 688 的單一尺度版本中,它的複雜度約為R-CNN的 1/24。

  在表10中,我們對使用相同 SPP(ZF-5)模型的特徵計算時間進行了公平的比較。RCNN的實現來源於作者在Caffe中的實現程式碼 [35],我們還在C啊啊分中實現了我們的特徵計算。在表10中,我們使用GPU評估了100張隨機VOC影像的平均時間。RCNN每捲影像需要 14.37s的卷積,而我們的一階版本每張影像只需要 0.053s。因此,我們的速度比 R-CNN快 270倍。我們的5-scale 版本做卷積每張圖形只花費 0.293s,所以比R-CNN快 49倍。我們的卷積特徵計算是如此之快,並且全連線層的計算時間佔據了相當大的一部分。表10顯示了計算 4096維度的全連線層7功能的 GPU時間為每張圖片 0.089s,考慮到卷積和全連線層的特徵,我們的1-scale版本比R-CNN快 102倍,而準確率只低 1.2%;我們的5-scale 版本速度提高了 38倍,而且準確率相當。

  我們還比較了表9中的執行時間,其中 R-CNN與原始論文一樣使用 AlexNet[3],我們的方法快 24倍~64倍。請注意,這裡的AlexNet[3]在每個轉換層上的過濾器數量與 ZF-5相同。AlexNet速度更快,因為它在某些層上使用了拆分,這是 [3]中為兩個 GPU設計的。

  在最近的推薦視窗方法的幫助下,我們進一步實現了高效的完整系統 [25],選擇性搜尋(SS)提議 [20]在CPU上每張圖形大約需要 1~2s,EdgeBoxes [25] 的方法僅需要大約0.2s。請注意,僅在測試期間使用快速推薦方法即可。使用於上述訓練相同的模型(使用 SS),我們僅測試EdgeBoxes生成的建議。mAP為 52.8。無邊界框迴歸。考慮到EdgeBoxes不用於訓練,這是合理的。然後,我們在訓練階段將SS和EdgeBoxes用作推薦,而在測試階段僅採用EdgeBoxes。在沒有邊界框迴歸的情況下,mAP為 56.3,由於附加訓練樣本,該結果優於 55.2(表10)。在這種情況下,包括所有步驟(推薦和識別)的每張影像的總測試時間約為 0.5s,這使得我們的方法適合用於實際應用。

4.4  用於檢測的多模型結合

  模型結合對於提升CNN為基礎的分類準確度有重要提升作用 [3]。我們提出一種簡單的用於檢測的結合方法。

  首先在ImageNet上預訓練另一個網路,使用的結構都相同,只是隨機初始化不同。然後我們重複上述的檢測演算法。表12(SPP-net)顯示了這個網路的結果。他們的mAP可以和第一名的網路相媲美(59.1% VS 59.2%),並且在11 個類別上要好於第一個網路。

  給定兩個模型,我們首先使用每個模型對測試影像的候選框進行打分。然後對並聯的兩個候選框集合上應用非極大值抑制,一個更加可信的視窗會壓制另一個不太可信的視窗。通過這個的結合,mAP提升到了 60.9%(表12)。結合方法在20類中的17個要好於單個模型。這意味著雙模型是互補的。

  我們進一步發現這個互補性主要是因為卷積層。我們嘗試結合卷積模型完全相同的兩個模型,在沒有任何效果。

 

4.5  ILSVRC 2014 檢測

  在ILSRC 2014 檢測 [26] 任務中涉及 200個類別。訓練/驗證/測試集中約有 450K/20K/40K影像。我們專注於僅提供資料的跟蹤任務(不允許使用1000類的CLS訓練資料)。

  檢測(DET)和分類(CLS)訓練資料集之間存在三個主要差異,這極大的影響了訓練前的質量。首先,DET訓練資料僅僅為 CLS的 1/3訓練資料。這似乎是僅提供資料的 DET任務的根本挑戰。其次,DET的目錄是 CLS的1/5。為了解決這個問題,我們利用提供的子類別標籤進行預訓練。總共有 499個不重疊的子類別(即,提供的類別層次結構中的葉結點)。因此,我們在 DET 訓練集中預訓練了 499類網路。第三, DET/CLS 訓練集之間物件尺度的分佈是不同的。CLS中的主要物件比例約為影像長度的 0.8,而 DET 中的比例約為 0.5。為了解決規模差異,我們將每個訓練影像的大小調整為 min(w,  h) = 400(而不是256),並且隨機裁剪 224*224 的影像作為訓練。僅當crop圖片與真實物體的重疊至少為 0.5 時才使用裁剪。

  我們驗證了預訓練對 PASCAL VOC 2007的影響,對於CLS預訓練基線,我們考慮 Pool5功能(表9中的mAP 43.0%),取而代之的是在 DET 上預先訓練的 200個類別的網路,mAP 明顯下降到 32.7%。499類預訓練網路將結果提高到 35.9%。有趣的是,即使訓練資料沒有增強,訓練更多類別的網路也可以提高功能質量。最後,用 min(w, h) = 400 而不是 256進行訓練可以將 mAP進一步提高到 37.8%。即使這樣,我們讓然看到與 CLS 預訓練結果讓然有很大差距,這表明大資料對深度學習的重要性。

  對於 ILSVRC 2014,我們訓練了499類 Overfeat-7 SPP網路。其餘步驟與 VOC 2007 案例相似。根據[7],我們使用驗證集生成正/負樣本,並使用選擇性搜尋快速模式建議的視窗。訓練集僅使用真實視窗貢獻正樣本。我們微調 fc層,然後使用驗證集和訓練集中的樣本訓練 SVM。在驗證集上訓練邊界框迴歸。

  在 ILSVRC 2014,測試集中,我們的單一模型的 mAP為 31.84% [26]。我們使用本文介紹的策略組合了六個類似的模型。測試集中的 mAP為 35.11%[26]。該結果再 ILSVRC 2014中提供的資料中排名第二(表13)[26]。NUS使用上下文資訊的獲勝結果為 37.21%。

  對於該資料集,我們的系統在速度上仍然顯示出很大的優勢。從GPU提取所有5個尺度的卷積特徵,每個測試影像需要我們的單個模型 0.6s(對於conv的時間為0.5s,對於fc層的時間為0.1s,並不包括建議)。使用相同的額模型,以RCNN的方式每張影像花費32s。對於40k 的測試影像,我們的方法需要8個 GPU小時才能計算卷積特徵,而RCNN需要15天的GPU。

5,結論

  SPP 對於處理不同的尺度,尺寸和長寬比是十分靈活的解決方案。這些問題在視覺識別是非常重要,但深度網路中大家卻很少考慮這個問題。我們建議使用空間金字塔池化層來訓練深度網路。這種SPP-net 在分類和檢測任務上都表現出了出色的精度並顯著地加速了 DNN 為基礎的檢測任務。我們的研究也表明很多 cv領域成熟的技術在基於深度網路的識別中任然可以發揮重要的作用。

 

附錄A

  在附錄中,我們描述了一些實現的細節:

均值減法

  224*224 裁剪的訓練/測試影像通常通過減去每畫素均值進行預處理[3]。當輸入影像為任何大小時,固定大小的均值影像不能直接應用。在ImageNet資料集中,我們將 224*224 的均值影像壓縮到所需的大小,然後將其減去。在PASCAL VOC 2007和Caltech 101中,我們在所有實驗中均使用常數平均值(128)。

 

池化箱(bins)的實現

  在應用網路的時候,我們可以使用以下實現來處理所有的bins。用whe h來表示 Conv5特徵圖的寬度和高度(可以是完整影像或視窗)。對於具有 n*n 個 bins 的金字塔級別,第(i, j)個 bin在(.....)的範圍內。直觀的,如果需要舍入,我們在左/上邊界進行下移操作,在右/下邊界進行上限。

 

將視窗對映到特徵圖中

  在檢測演算法(以及對特徵圖的多檢視測試)中,在影像域中提供了一個視窗,我們使用它來裁剪已經多次取樣的卷積特徵圖(例如 Conv5),因此,我們需要在特徵圖上對其視窗。

  在我們的實現中,我們將視窗的角點投影到特徵圖中的一個畫素上,以使影像域中的這個角點最接近該特徵影像素的接受場的中心。所有卷積核池化層的填充使對映變得複雜。為了簡化實現,在部署期間,我們將  [p/2] 的畫素填充到過濾器大小為 p 的層中。這樣,對於以(x',  y')為中心的響應,其在影像域中的有效接受區域以 (x, y) = (Sx', Sy')為中心,其中S是所有前步伐的乘積。在我們的模型中,對於conv5上的 ZF-5,s = 16,對於 conv5/7上的Overfeat-5/7 ,S = 12。給定影像域中的視窗,我們將左(頂部)邊界投影為: x' = [x/S] +1 ,而右(底部)邊界投影 x' = [x/S] +1,如果填充不是 [p/2],我們需要為 x 新增適當的偏移量。

 

相關文章