機器不學習:深度學習與Object Detection · SPP Net目標檢測

機器不學習 www.jqbxx.com : 深度聚合機器學習、深度學習算法及技術實戰

Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition

Motivation

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

機器不學習:深度學習與Object Detection · SPP Net目標檢測

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

什麼限制了輸入的尺寸

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

Solution

因此突破口有兩個,

  • 讓卷積層能為不同尺寸的輸入產生相同尺寸的輸出(SPP)
  • 讓全連接層能為不同尺寸的輸入產生相同尺寸的輸出(全卷積)

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

這裡我們詳細講一下SPP

機器不學習:深度學習與Object Detection · SPP Net目標檢測

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.

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。

機器不學習:深度學習與Object Detection · SPP Net目標檢測

舉個例子,一個具有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快了很多,準確率也不差

機器不學習:深度學習與Object Detection · SPP Net目標檢測

Summary

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


分享到:


相關文章: