目標檢測網絡—SSPNet詳解

翻譯論文:Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition

概述

當前深度卷積神經網絡(CNNs)都需輸入固定的圖像尺寸(fixed-size),如224×224)。這種需要是“人爲”的,並且當面對任意尺寸或比例的圖像時,識別精度會降低。而論文中提出的**“空間金字塔池化”(spatial pyramid pooling)的池化策略**,可以有效消除上述限制。SPP-net結構能夠產生固定大小的特徵表示(fixed-length representation),而不關心輸入圖像的尺寸或比例。

SPP-net在物體檢測上也表現突出。用SPP-net,我們只需要從整張圖片計算一次特徵圖(feature map),然後對任意尺寸的區域(子圖像)進行特徵池化,以產生一個固定尺寸的表示(representation)用於訓練檢測器(detectors)。 這個方法避免了反覆計算卷積特徵。


在檢測或者分類時,流行的CNNs都需要輸入的圖像尺寸是固定的(比如224×224),這限制了輸入圖像的長寬比和縮放尺度。當遇到任意尺寸的圖像時,都是先將圖像適應成固定尺寸,方法包括裁剪(crop)和變形(wrap)。

但裁剪會導致信息的丟失,變形會導致位置信息的扭曲,就會影響識別的精度。另外,一個預先定義好的尺寸,在物體是縮放可變的時候就不適用了。

那麼,爲什麼CNNs需要一個固定的輸入尺寸呢?CNN主要由兩部分組成,卷積部分和其後的全連接部分。卷積部分通過滑窗進行計算,並輸出代表激活的空間排布的特徵圖(feature map)。事實上,卷積並不需要固定的圖像尺寸,他可以產生任意尺寸的特徵圖。而另一方面,根據定義,全連接層則需要固定的尺寸輸入。因此固定尺寸的問題來源於全連接層,也是網絡的最後階段。

SPPNet

爲了解決固定尺度對網絡的影響,論文提出了一種空間金字塔池化( spatial pyramid pooling,SPP)層。尤其是,將SPP層放在最後一個卷積層之後。SPP層對特徵進行池化,併產生固定長度的輸出,這個輸出再餵給全連接層(或其他分類器)。換句話說,在網絡層次的較後階段(也就是卷積層和全連接層之間)進行某種信息“彙總”,可以避免在最開始的時候就進行裁剪或變形。
在這裏插入圖片描述
黑色圖片代表卷積層之後的特徵圖,隨後我們以不同大小的塊來提取特徵,分別是4 * 4,2 * 2,1 * 1,將這三張網格放到下面這張特徵圖上,就可以得到16+4+1=21種不同的塊(Spatial bins)。我們從這21個塊中,每個塊提取出一個特徵,這樣剛好就是我們要提取的21維特徵向量。這種以不同的大小格子的組合方式來池化的過程就是空間金字塔池化。

比如,要進行空間金字塔最大池化,其實就是從這21個圖片塊中,分別計算每個塊的最大值,從而得到一個輸出單元,最終得到一個21維特徵的輸出。

網絡的訓練

1、單一尺寸的訓練,固定輸入尺寸—>SPP—>固定size輸出。
2、多尺度訓練(YOLOv2有所借鑑)—>SPP—>固定size輸出。
在這裏插入圖片描述
多尺寸訓練的主要目的是在保證已經充分利用現在被較好優化的固定尺寸網絡實現的同時,模擬不同的輸入尺寸。 除了上述兩個尺度的實現,我們也在每個epoch中測試了不同的s x s輸入,s是從180到224之間均勻選取的。後面將在實驗部分報告這些測試的結果。

RCNN、SPPNet對比

R-CNN

1、通過選擇性搜索,對待檢測的圖片進行搜索出~2000個候選窗口。
2、把這2k個候選窗口的圖片都縮放到227*227,然後分別輸入CNN中,每個proposal提取出一個特徵向量,(即:利用CNN對每個proposal進行提取特徵向量。)
3、把上面每個候選窗口的對應特徵向量,利用SVM算法進行分類識別。 可以看出R-CNN的計算量是非常大的,因爲2000個候選窗口都要輸入到CNN中,分別進行特徵提取。

SPP-Net

1、首先通過選擇性搜索,對待檢測的圖片進行搜索出2000個候選窗口。
2、特徵提取階段。區別!! 這一步驟的具體操作如下:把整張待檢測的圖片,輸入CNN中,進行一次性特徵提取,得到特徵圖,然後在特徵圖中找到各個候選框的區域,再對各個候選框採用空間金字塔池化,提取出固定長度的特徵向量。而R-CNN輸入的是每個候選框,然後在進入CNN,因爲SPP-Net只需要一次對整張圖片進行特徵提取,速度會大大提升。
3、最後一步,採用SVM算法進行特徵向量分類識別。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章