讀論文系列:Object Detection SPP-net

本文爲您解讀SPP-net:網絡

Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition.net

Motivation

神經網絡在計算機視覺方面的成功得益於卷積神經網絡,然而,現有的許多成功的神經網絡結構都要求輸入爲一個固定的尺寸(好比224x224,299x299),傳入一張圖像,須要對它作拉伸或者裁剪,再輸入到網絡中進行運算。
image.pngblog

然而,裁剪可能會丟失信息,拉伸會使得圖像變形,這些因素都提升了視覺任務的門檻,所以,若是能有一種模型可以接收各類尺度的輸入,應當可以讓視覺任務更加容易完成。圖片

什麼限制了輸入的尺寸

深度卷積神經網絡中的核心組件有兩個,一個是CNN,一個是全鏈接層,卷積是用filter在圖像上平移與圖像的局部進行逐位乘法,多個filter則產生多個feature map(特徵/特徵圖),而後能夠用pooling操做進一步採樣,獲得更小的feature map;實際上,咱們並不在乎feature map有多大,不一樣圖像的feature map徹底能夠有不一樣的尺寸;可是在後邊的具體任務中,好比分類任務,爲了輸出softmax對應的one-hot層,須要輸出固定的尺寸,爲了讓不一樣的輸入能共用一套權重參數,要求全鏈接層的輸入尺寸是一致的,逆推回去也就限制了feature map的大小必須一致;而不一樣尺寸的輸入圖片在使用同一套卷積核(filter)的時候,會產生不一樣尺寸的feature map,所以才須要將不一樣尺寸的輸入圖片經過裁剪、拉伸調整爲相同的尺寸。get

Solution

所以突破口有兩個,源碼

  • 讓卷積層能爲不一樣尺寸的輸入產生相同尺寸的輸出(SPP)
  • 讓全鏈接層能爲不一樣尺寸的輸入產生相同尺寸的輸出(全卷積)

全卷積和卷積的區別在於最後不是用全鏈接層進行分類, 而是用卷積層,假設咱們要將一個16x16的feature map轉爲10x1的one-hot分類,則可使用10個1x1卷積核,每一個卷積覈對應一個分類,參數數量少了不少,可是…實驗結果代表還挺有效的,而且,全卷積+反捲積開闢了圖像分割的新思路,能夠說是一個開創新的工做了,感興趣的同窗能夠看這篇博客博客

這裏咱們詳細講一下SPP
SPP-netit

SPP中SP(Spatial Pyramid)的思想來源於SPM(Spatial Pyramid Matching),能夠參考這篇文章,正如論文Conclusion中說的, Our studies also show that many time-proven techniques/insights in computer vision can still play important roles in deep-networks-based recognition.io

SPM是在不一樣的分辨率(尺度)下,對圖片進行分割,而後對每一個局部提取特徵,將這些特徵整合成一個最終的特徵,這個特徵有宏觀有微觀(多尺度金字塔),保留了區域特性(不一樣的區域特徵不一樣),而後用特徵之間的類似度進行圖片間的匹配(matching)。先前咱們提到過,每一個filter會獲得一個feature map,SPP的輸入則是卷積後的這些feature map,每次將一個feature map在不一樣尺度下進行分割,尺度L將圖片分割爲2^L^個小格子(其實格子數也能夠本身定,不必定要分紅2^L^個),L爲0表明全圖;對每一個小格子的作pooling,論文中是max pooling, 實際中也能夠用其餘,這裏不像SPM須要作SIFT之類的特徵提取,由於feature map已是卷積層提取過的特徵了,將pooling獲得的結果拼接起來,就能夠獲得固定尺寸的feature map。ast

Spatial Pyramid

舉個例子,一個具備256個filter的卷積層,輸出了256個feature map,對於一個640x320的圖片,輸出的feature map多是32x16的,對於一個640x640的圖片,輸出的feature map多是32x32的,對256個feature map中的每一個feature map,咱們在4個尺度下對它們作切割,在最粗糙的尺度下切爲1個圖,次之切爲2個子圖,接下來是4個子圖,8個, 對每一個子圖作max pooling,獲得其中最大的數,放到最終的特徵裏,能夠獲得一個1+2+4+8=15這麼長的特徵,256個feature則能夠獲得最終256*15這麼長的特徵,能夠看到,最終的特徵尺寸只跟卷積層結構和SP尺度L有關,跟輸入圖片無關,從而保證了對不一樣尺寸的圖片都輸出同樣大小的特徵。

其實看到這裏,你可能發現了,對不一樣尺寸輸出相同尺寸特徵這個特性,是由pooling操做決定的,像max pooling,sum pooling這些,就是將多個輸入聚合爲一個值的運算;而Spatial Pyramid只是讓特徵有更好的組織形式而已。固然,能找到這種有效的特徵組織形式也是很值得確定的。但這裏有東西仍然值得商榷,max pooling實際上仍是丟了一些信息,雖然經過多層的特徵能夠將這些信息彌補回來。

實驗

而後做者就將這個結構應用到各類網絡結構和各類任務裏了,而且都取得了很好的效果(說的輕巧,復現一堆論文,改源碼,跑大量實驗,必定超級累);特別是在檢測任務對RCNN的改進上,這個地方比較有意思。在RCNN中,須要將每一個Region Proposal輸入卷積層判斷屬於哪一個分類,而region proposal是方形的,這就致使有不少區域作了重複的卷積運算。

在SPP-net的實驗中,

  • 整張圖只過一遍卷積層,從conv5獲得整張圖對應的feature map;
  • 而後將feature map中每一個region proposal對應的部分提取出來,這個位置計算量也不小,但比算卷積自己仍是要快不少,原圖中的一個區域惟一對應於feature map中的一個區域,不過feature map中的一個區域實際上對應原圖的範圍(所謂感覺野)要大於region proposal所在區域,從這個意義上來說,依然是接收了更多不相關信息,可是好在沒有裁剪或變形;
  • 因爲region proposal形狀不一,對應的feature map尺寸也不一致,這時SPP就能充分發揮其特性,將不一樣尺寸的feature map轉爲尺寸一致的feature,傳給全鏈接層進行分類
  • 原圖實際上能夠保持原圖的寬高比縮放到多種尺度(文中將寬或高縮放到{480, 576, 688, 864, 1200}這五個尺寸,),分別算一個特徵,將不一樣尺度的特徵拼接起來進行分類,這種combination的方式能必定程度上提升精度
  • 這裏還有一個小trick,能夠將原圖縮放到面積接近的範圍(文中是224x224),再輸入到網絡中,進一步提高精度,至於緣由…文中沒有提,玄學解釋是,輸入的尺度更接近,模型訓練更容易吧。

因爲整張圖只過了一遍卷積,因此比原來的RCNN快了不少,準確率也不差

Detection results (mAP) on Pascal VOC 2007

Summary

嚴格來說SPP-net不是爲detection而生的模型,可是SPP-net爲RCNN進化到Fast-RCNN起了很大的借鑑做用,值得一讀。SPP-net的想法頗有意思,SPP(Spatial Pyramid Pooling)是對網絡結構的一種改進,可能由於是華人寫的論文,感受很好讀,含金量我的感受沒有RCNN或者DPM的論文高,可是實驗很豐富,從分類任務和檢測任務上的各類網絡結構證實SPP的有效性

相關文章
相關標籤/搜索