【目標檢測】: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次卷積運算,對於時間而言很是不划算。spa

4.最後使用SVM分類器將候選區域當中的全部圖片經過全鏈接層進行分類,查看看是否爲咱們所須要檢測的目標,而且輸出其名稱,如:人,飛機,電視機等等。同時進行bounding box的迴歸,這樣可使得預測的bounding box的大小和位置更加準確。在論文當中bounding-box的迴歸公式以下:設計

 最後使用SVM分類器而沒有使用softmax分類器的緣由是在RCNN當中使用SVM後分類結果的準確率會更高(根據實驗得知),論文當中的說明以下:3d

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

那麼咱們的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層的特徵圖發現了汽車的輪胎這一個特徵,在特徵圖當中也高亮了出來。這也是最後咱們在金字塔池化層作最大池化的緣由,由於最大池化就會將高亮的地方的特徵提取出來,咱們只提取圖像當中具備物體的特徵,從而忽略掉其餘沒有無體的地方的特徵,最後再全鏈接神經網絡當中進行特徵融合並歸類,就能夠獲得目標檢測的結果了!是否是很神奇呢?

終於寫完啦,若是以爲讀了小編的文章您有收穫的話,不要忘記了點擊下方的「推薦」哦!您的支持就是對小編創做最大的動力!

相關文章
相關標籤/搜索