目標檢測算法(2)SPP-net

本文是使用深度學習進行目標檢測系列的第二篇,主要介紹SPP-net:Spatial Pyramid Pooling in Deep ConvolutionalNetworks for Visual Recognition,即空間金字塔池化網絡,用以解決卷積神經網絡中固定輸入大小的問題。es6

1、算法動機及嘗試解決的問題

1. 傳統的卷積神經網絡的輸入一般是一個固定大小(好比\(224x224\)的圖像,所以當咱們任意輸入一張圖像時須要對其進行縮放,做者認爲這種手動的縮放可能會下降識別精度;算法

2. 在目標識別方面,使用深度神經網絡對每一個候選區域(如RCNN)抽取特徵的時候,都須要重複的丟進網絡裏,即每來一個候選區域都進行warp(上文中RCNN用的方法,能夠當作對候選區域進行縮放)操做獲得相同的輸入,放進CNN裏抽取新的特徵,這樣致使計算量很是大:對於一張原始圖像的候選區域有接近2000個,無疑開銷很大。網絡

3. 做者認爲在卷積神經網絡中卷積層並不須要固定大小的輸入,而在全鏈接階段須要保證輸入具備固定的大小。這一點比較比較好理解,由於卷積層僅僅對圖像進行局部鏈接,無論輸入怎麼能進行卷積操做,只是讓特徵圖輸出的大小和輸入有關係;可是全鏈接層就不同了,若是輸入大小不固定確定會出現矩陣維數不匹配的狀況。ide

圖1 傳統的「crop」和「warp」方法與SPP的作法進行對比學習

爲了展現卷積濾波器對於不一樣尺寸圖像的做用狀況,做者作了一個實驗,使用AlexNet可視化第五個卷積層中某些濾波器獲得的特徵圖的語義特徵,如圖2所示,圖中(a)是Pascal VOC2007中的兩張圖像,(b)是某些濾波器獲得的特徵圖,藍色的箭頭表示特徵圖中激活值比較強烈的區域以及對應的原始圖像中的區域;(c)是使用相同的濾波器在ImageNet的圖像中的響應狀況,綠色框表示濾波器強烈的區域對應的感覺野,這裏的實驗並無輸入一樣大小的圖像尺寸,可是能夠看出這些濾波器依然可以反映出語義內容,好比左圖的兩個濾波器分別對車窗上方或者相似的區域、車胎附近圓形的或者相似的區域有強烈的反應;右圖則對衣服的腋下或者相似的區域、盒子拐角處或者相似的區域有強烈的反應。測試

 圖2 特徵圖可視化es5

基於以上幾點,做者設計了一個SPP層從最後的卷積層中提取特徵,並統一處理大小使其適配全鏈接層的輸入。spa

2、SPP具體作法

1.Spatial Pyramid Pooling層

 如第一部分所說,CNN中卷積層可以接受任意尺寸大小的輸入,可是全鏈接層不能夠,所以做者提出在CNN的最後一個卷積層後接入一個SPP(Spatial Pyramid Pooling)層代替咱們日常使用的Max pooling層,SPP最主要的做用是接受任意尺寸的特徵圖,而後把特徵圖的像素按比例轉化爲一些固定數量的bin(能夠),而後在這些bins裏面進行池化。具體能夠參見圖3:設計

圖3 SPP層示意blog

從圖中能夠發現,SPP用了三種不一樣方式來進行pooling,即對每張輸入的特徵圖分別分紅16個bins、4個bins和1個bins,而後再對每一個bin裏作池化,把這三種池化後的特徵組合在一塊兒就拼接成了一個新向量。有意思的是這裏的1個bins剛好是某些paper中提到的「global pooling」層,可以起到降維、防止過擬合、提高精度等等做用。SPP層進行多尺度提取特徵的方式其實借鑑了一些傳統,好比SIFT;同時SPP自己也借鑑了BOW(Bag of Words,圖像詞袋模型)、SPM(Spatial Pyramid Matching)方法,這些其實不少多年前使用到的傳統的特徵提取或者匹配方法。

 2.SPP用於目標檢測

原始的RCNN進行檢測時間開銷的最大瓶頸在於特徵提取階段:對selective search抽取的約2000個候選框都須要重複的丟進整個網絡;相比較而言,SPP對於整張圖像在特徵抽取階段只須要作一次,即完整的圖像先丟進網絡,而後在特徵圖層面對selective search選取的候選區域使用SPP層進行池化,獲取固定大小的維數,而後再進行全鏈接的計算,如圖4所示,須要注意的是圖4和圖3很是像,實際上做者同時介紹了SPP在分類和目標檢測中的應用,圖3的示意更適用於分類,即對整張圖像進行SPP池化獲取統一的輸出維度丟進全鏈接層;而圖4更適用於目標檢測,即在特徵圖層面對某個候選區域進行SPP池化,也就是圖中的這個「window」。

圖4 SPP層用於目標檢測示意

 

能夠看出SPP進行目標檢測時須要進行原始圖像中候選區域的位置和特徵圖中候選區域位置的一個映射關係。爲簡化計算過程,簡單來講,對於某一層大小爲\(p\)的濾波器,進行\(\left \lfloor \frac{p}{2} \right \rfloor\)(符號的意思是進行向下取整)的填充,那麼對於特徵圖中響應中心座標\((x{}',y{}')\),其對應原始圖像中的座標\((x,y)=(Sx{}',Sy{}')\),其中\(S\)爲前面那些層的stride步伐的乘積。而對於給定的圖像中的區域,獲取特徵圖響應的左上角座標爲\(x{}'=\left \lfloor \frac{x}{s} \right \rfloor+1\),右下角座標爲\(x{}'=\left \lceil \frac{x}{s} \right \rceil-1\),而在padding不是\(\left \lfloor \frac{p}{2} \right \rfloor\)的狀況下須要添加關於\(x\)的偏移量。

3.SPP用於目標檢測的具體過程

SPP在基於RCNN的基礎上改進進行目標檢測,具體以下:

(1)使用「fast」模式的selective search對每張圖像生成2000左右的候選區域;

(2)對每一個候選區域利用SPP進行4個級別bins的池化,分別是\(1\times1\)、\(2\times2\)、\(3\times3\)及\(6\times6\)的總共50個bins進行池化,如此對於最後一個特徵圖的256個卷積核能夠獲得\(256\times50\)的特徵表示;

(3)把第二步中獲得的特徵接到全鏈接層中,而後對全鏈接層的輸出使用二分類的SVM進行分類。

在訓練SVM過程當中,SVM的正類樣本是真實的物體,而負類樣本定義爲和正類樣本的IOU比最高不超過30%而且和其餘的負類不超過70%的樣本,和RCNN相似,SPP也選擇使用hard negative mining模式的SVM進行訓練,整個用於20個類訓練SVM的時間小於1個小時;在測試階段使用訓練好的SVM爲候選區域打分,最後使用閾值爲0.3的NMS進行過濾。

3.網絡訓練

在訓練網絡的過程當中,分爲前面的特徵圖的預訓練和後接入的全鏈接層的微調,對於預訓練部分做者提到了使用多尺度輸入的訓練方法,即resize原始圖像成爲不一樣尺度的輸入\(min(w,h)=s\inS={480,576,688,864,1200}\),而後獲得第五個卷積層的特徵圖,接着進行特徵融合再進行SPP池化;另一種更好的方式是選擇候選區域大小最接近\(240\times240\)的那張圖像進行輸入並進行SPP提取特徵。

爲簡化訓練過程,微調僅針對全鏈接層。在第五個卷積層以後接入兩個全鏈接層,最後再接入一個全鏈接層進行分類,類別數爲21,即20+1,1是背景;對於最後一個全鏈接層使用標準差爲0.01的高斯分佈初始化參數,學習率由\(1e-4\)浮動到\(1e-5\);在微調階段的正類樣本定義爲那些和真實的目標區域IOU比爲\([0.5,1)\)的樣本,負類爲\([0.1,0.5)\)的樣本,在每輪的mini-batch包含25%的正類樣本;最後相似於RCNN也使用了bounding box迴歸進行誤差修正。最後做者給出了在VOC2007上的實驗結果,如圖5所示,其中sc表示做者使用的多尺度的訓練方式,下圖是做者在SPP的預訓練模型上進行訓練獲得的結果(即做者先使用了SPP進行分類,而後拿分類的網絡模型來進行檢測微調)。能夠看出SPP相比較RCNN最大的特色是訓練速度的巨大提高。

圖5 VOC上SPP和RCNN實驗比較

另外做者還針對試驗中的其餘對比方法進行了時間複雜度的分析,這裏再也不細說,參見原始paper。

3、總結

SPP用於目標檢測實際是在RCNN的基礎上進行改進的,能夠看出主要的目的是在時間上的巨大提高,可是從本質來看算法的精度並無什麼提高。須要注意的是SPP一樣能夠用於分類,做者花了很大篇幅討論分類的SPP方法,考慮到本文是目標檢測系列因此沒有介紹到,下一篇主要介紹一個比較大的改進方法fast-rcnn。

相關文章
相關標籤/搜索