【目標檢測】:SPP-Net深入理解(從R-CNN到SPP-Net)


一. 導論

SPP-Net是何凱明在基於R-CNN的基礎上提出來的目標檢測模型,使用SPP-Net可以大幅度提升目標檢測的速度,檢測同樣一張圖片當中的所有目標,SPP-Net所花費的時間僅僅是RCNN的百分之一,而且檢測的准確率甚至會更高。那么SPP-Net是怎么設計的呢?我們要想理解SPP-Net,先來回顧一下RCNN當中的知識吧。下圖為SPP-Net的結構:

二. RCNN

rcnn進行目標檢測的框架如下:

 因此RCNN步驟如下:

1.將圖像輸入計算機當中

2.利用selective search算法找到圖片當中屬於同一個物體的區域,並使用Bounding Box圈起來。這個算法不屬於深度學習的算法,而是一種傳統算法,這個算法不能夠在GPU上運行,只能在CPU上運行,因此相比於SPP-Net具有一定的局限性。它是根據圖像當中的各個部位的顏色,輪廓,紋理等將圖像當中的事物進行分類。一共篩選出1-2k個候選區域,用region proposal來表示。

3. 將得到的候選區域全部進行剪裁或者縮放將其變為統一的大小,這樣才可以使用圖像分類神經網絡(AlexNet/Google InceptionNet/VGG)對每一個候選區域進行圖像識別。因此這一步我們需要進行1-2k次卷積運算,對於時間而言非常不划算。

4.最后使用SVM分類器將候選區域當中的所有圖片通過全連接層進行分類,查看看是否為我們所需要檢測的目標,並且輸出其名稱,如:人,飛機,電視機等等。同時進行bounding box的回歸,這樣可以使得預測的bounding box的大小和位置更加准確。在論文當中bounding-box的回歸公式如下:

 最后使用SVM分類器而沒有使用softmax分類器的原因是在RCNN當中使用SVM后分類結果的准確率會更高(根據實驗得知),論文當中的說明如下:

mAP的大小表示的是目標檢測的准確率,是目標檢測領域中一種重要的評價指標。整體而言R-CNN的實現還是頗為簡單的,也很容易被人們所想到,這個算法在當時也是非常優越的,使用selective search的方法代替了之前做目標檢測所使用的滑動窗口法來生成候選區域,不然的話使用滑動窗口法針對每個圖像進行卷積運算我們可能不僅僅要進行1-2K次運算,最后運算的次數很可能是10k-50k次,這在時間上來說太不划算了,而且使用滑動窗口法還可能滑動的窗口沒有框到目標,因此會丟失掉准確率。SVM分類最后的輸出是每個圖像bounding box的形狀大小,位置以及每一個bounding box內圖像分類的結果以及概率。

那么我們的SPP-Net在這之上做了哪些改進呢?

三. SPP-Net

SPP-Net發現在RCNN當中使用selective search的方法生成候選區域實在是太耗費時間了,因為所有生成的候選區域都要進行一次卷積運算來進行圖像分類,那么我們能不能夠直接只計算一次卷積而非1-2k次卷積呢?因此在SPP-Net當中我們省略掉了生成候選區域這一步,直接將圖像做一次卷積運算,並且在卷積神經網絡CNN之后增加了圖像空間金字塔池化(SSP-Spatial Pyramid Pooling)的結構,這樣就可以根據圖像的特征將圖像當中的目標區域進行分類。SPP-Net和RCNN的區別如下圖所示:

可以從上看出,圖像輸入到網絡中之后,RCNN將候選區域進行了剪裁和縮放,然后再把剪裁好的區域“喂”入到CNN當中,而spp-net則直接將整張圖片放入了卷積神經網絡當中,然后使用spatial pytamid pooling(空間金字塔池化)提取卷積之后的特征,最后使用全連接神經網絡連同最后的輸出和空間金字塔池化層。在整個spp-net當中最為重要的結構則是我們用紅色字體標注出的spatial pytamid pooling(空間金字塔池化層)了。那么整個結構是如何實現的呢?

四.空間金字塔池化結構

空間金字塔池化層的結構如上所示,Image經過一次卷積之后會得到256個特征圖,也就是上面圖中最下面的一連串黑色堆疊圖,這是整個卷積神經網絡的第五層嗎,因此稱為conv5。然后我們使用SSP結構對這256個特征圖進行處理,將這256張特征圖分別進行1*1,2*2,4*4的最大池化,也就是分別選取這256個特征圖當中的最大值,然后最后的輸出也是256個每一層特征圖的最大值。比如我們做空間金字塔池化最右邊的那個1*1池化,計算機僅僅會選取這256個特征圖當中最大的值作為輸出的結果作為圖像的語義特征,這也就是最大池化,2*2的最大池化同理,但我們會做完2*2的最大池化之后會得到4個數值,每一個數值都代表這圖像某一區域的特征。因此最后我們會得到21(21=4*4+1*1+2*2)*256=5376個數值作為圖像高度抽象的特征。之后將這5376個特征送入全連接神經網絡(fc6和fc7,一共兩層全連接神經網絡,這個完全看研究員自己的喜好來設定了,可以沒有,也可以多層),最后用SVM分類器輸出bounding box的x,y,w,h以及每一個bounding box的圖象分類的結果。小編在網上查看了很多教程都沒有把空間金字塔池化結構解釋清楚,也是自己想了很久認真研讀了論文好幾遍才明白,畢竟論文上這一點其實也沒講得多清楚。最后輸出的結果如下圖所示:

 那么為什么我們可以作這樣的處理呢?我們來看看論文當中是怎么說的,下圖來自於spp-net的論文:

在圖的左邊,(a)代表了我們進行目標檢測的圖像,(b)上面的那張圖是卷積神經網絡的第175層輸出的結果,我們將其可視化了,下面的那張特征圖是卷積神經網絡第55層的輸出結果,我們也將其可視化了。我們發現汽車的窗戶正好在第175層的conv layer發現了這個特征,並且高亮的了出來是白色,在圖像上表示為這個區域的灰度是很大的(有0-255個數字,因此這個高亮的地方數值可能在200以上)。這個時候第55層的特征圖發現了汽車的輪胎這一個特征,在特征圖當中也高亮了出來。這也是最后我們在金字塔池化層做最大池化的原因,因為最大池化就會將高亮的地方的特征提取出來,我們只提取圖像當中具有物體的特征,從而忽略掉其他沒有無體的地方的特征,最后再全連接神經網絡當中進行特征融合並歸類,就可以得到目標檢測的結果了!是不是很神奇呢?

終於寫完啦,如果覺得讀了小編的文章您有收獲的話,不要忘記了點擊下方的“推薦”哦!您的支持就是對小編創作最大的動力!

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM