【目標檢測算法系列】2、SPP-Net算法

上次咱們介紹了R-CNN算法juejin.im/post/5d3d3f…算法

此次介紹下SPP-Net算法網絡

SPP-Net算法是在R-CNN的基礎上作了相關改進機器學習

咱們知道,R-CNN算法有幾個缺點:ide

1. 因爲CNN網絡對輸入圖像尺寸的固定,因此對於每張圖片生成的2000個候選區域,須要進行縮放、扭曲等操做來resize到CNN網絡所要求的輸入尺寸(224*224),這樣就會致使一些特徵的丟失,改變,從而影響精確度post

2. R-CNN算法中,在經過CNN網絡進行特徵提取時,須要對每張圖片的2000個候選區域分別處理,而這些候選區域中,是有不少重複部分的,因此會致使有不少重複運算,嚴重影響了RCNN檢測的速度學習

SPP-Net針對RCNN的上述兩個問題作了對應改進,從而提升了模型的精度和速度優化

1、CNN網絡中對輸入尺寸的固定問題

咱們知道,在RCNN時,須要對輸入的候選框的尺寸固定到224*224,爲何須要限制呢?
3d

深層卷積網絡中包含兩個大的模塊,一個是卷積模塊,一個是全鏈接模塊,對於卷積模塊,其實並不須要限制圖像輸入尺寸,由於對於卷積模塊中的全部filter來講,都是在與圖像進行局部卷積操做,輸入圖像的不一樣尺寸,並不會影響filter的尺寸和個數,因此卷積層並不會限制圖像尺寸,只是不一樣尺寸的圖像,最後經過卷積模塊後,輸出的feature map(特徵圖)的尺寸則不相同,最後會生成不一樣長度的特徵向量。cdn

深層卷積網絡中的全鏈接模塊,則對於輸入特徵向量的尺寸是要求固定的。由於全鏈接層中的權重參數個數,是和每一層的神經元密切相關的,因此爲了共用一套權重參數,方便進行前向和後向傳播算法,對應輸入的特徵向量,須要固定長度大小,因此也就須要卷積模塊輸出相同尺寸的feature map,最終,就須要固定整個CNN網絡的輸入尺寸blog

2、空間金字塔池化(Spatial Pyramid Pooling)

經過上面的說明,咱們知道其實是卷積網絡中的全鏈接層,須要固定輸入尺寸。因此,咱們能夠不固定CNN網絡開始的圖像輸入尺寸,只固定後面的全鏈接層輸入的特徵向量的長度。這樣的話,咱們就須要將不一樣的輸入圖像尺寸通過卷積層輸出的feature map通過某種轉換,轉換爲相同尺寸的特徵向量,來輸入到全鏈接層中,那具體怎麼轉換呢?這就須要用到空間金字塔池化(Spatial Pyramid Pooling)

SPP-Net中,在CNN網絡的卷積層最後,加上了一個空間金字塔池化層,來將不一樣的feature map轉換爲相同長度的特徵向量。



論文中,做者將卷積模塊輸出的feature map分別經過4*4,2*2,1*1這三種不一樣大小的塊來提取特徵。假設總共輸出了m個feature map。每一個feature map的尺寸爲w*h*256(256即爲最後輸出的每一個feature map的通道數,也就是最後一層卷積層的filter個數)

對於4*4的塊來講,對於一個feature map,將分紅4*4的塊,對於每一個塊,經過最大池化來提取一個特徵,則總共提取出來了16*256個特徵,同理,對於2*2的塊來講,則提取出來了4*256個特徵,1*1的塊,則提取出來了1*256個特徵。因此,一個feature map通過空間金字塔池化層後,提取出來了21*256個特徵,而後轉換成特徵向量,輸入到後面的全鏈接層中。因此,無論輸入的圖像尺寸是多大,最後通過空間金字塔池化層後生成的特徵向量長度都是必定的。這樣就解決了RCNN種由於要確保輸入尺寸一致,而去縮放、扭曲圖片形成特徵的丟失,改變等問題。

3、特徵圖與原圖之間的映射

經過卷積的特性,咱們知道,圖片中的某個物體,在通過多層卷積後,它在feature map中的相對位置,與在原圖中的相對位置是保持不變的。一樣的,對於一張圖片中的候選框,再通過通過多層卷積後,位置相對於原圖依舊保持不變。

上面提到,RCNN中,還有個明顯的問題就是須要將每張圖片的2000個候選框分別喂入CNN網絡中來提取feature map, 這裏面會有不少重複運算,因此咱們想到,可否直接將整張圖片直接喂入CNN網絡來生成feature map,而後再從feature map中去找到對應候選框所對應在feature map中的位置,經過上面一段的描述,咱們知道這種方案是可行的,咱們須要知道的是如何將原始圖片中的候選框映射到對應feature map上。

設(X', Y')爲特徵圖上的一個點,它多對應的是輸入圖片上的座標點爲 (X,Y),則有以下映射關係:

其中S爲CNN中全部strides(步長)的乘積(包含池化,卷積的strides)

4、SPP-Net總結

上述就是SPP-Net所作的主要優化,這塊,完整總結下SPP-Net的流程:

  1. 經過選擇性搜索,對待檢測的每張圖片,生成2000個候選框

  2. 直接將原始圖片輸入到CNN網絡中,進行特徵提取,獲得對應feature maps,而後經過對應映射,在feature maps中找到全部候選框所對應的區域,,將對應的不一樣區域經過金字塔空間池化層生成固定長度的特徵向量

  3. 進行SVM分類以及Bounding-box迴歸


歡迎關注個人我的公衆號 AI計算機視覺工坊,本公衆號不按期推送機器學習,深度學習,計算機視覺等相關文章,歡迎你們和我一塊兒學習,交流。

相關文章
相關標籤/搜索