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

上次我們介紹了R-CNN算法

這次介紹下SPP-Net算法

SPP-Net算法是在R-CNN的基礎上做了相關改進

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

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

2. R-CNN算法中,在通過CNN網絡進行特徵提取時,需要對每張圖片的2000個候選區域分別處理,而這些候選區域中,是有很多重複部分的,所以會導致有很多重複運算,嚴重影響了RCNN檢測的速度

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

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

我們知道,在RCNN時,需要對輸入的候選框的尺寸固定到224*224,為什麼需要限制呢?

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

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

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

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

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

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

論文中,作者將卷積模塊輸出的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種因為要確保輸入尺寸一致,而去縮放、扭曲圖片造成特徵的丟失,改變等問題。

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

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

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

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

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

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

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

其中S為CNN中所有strides(步長)的乘積(包含池化,卷積的strides)

四、SPP-Net總結

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

  1. 通過選擇性搜索,對待檢測的每張圖片,生成2000個候選框
  2. 直接將原始圖片輸入到CNN網絡中,進行特徵提取,得到對應feature maps,然後通過對應映射,在feature maps中找到所有候選框所對應的區域,,將對應的不同區域通過金字塔空間池化層生成固定長度的特徵向量
  3. 進行SVM分類以及Bounding-box迴歸


分享到:


相關文章: