天天看點

Fast rcnn and Faster rcnn 算法原理 思想 特征提取網絡 網絡參數訓練 分類與位置調整 實驗與結論 思想 區域生成網絡:結構 區域生成網絡:訓練 共享特征 實驗

轉載:

http://blog.csdn.net/shenxiaolu1984/article/details/51036677

http://blog.csdn.net/shenxiaolu1984/article/details/51152614

Girshick, Ross. “Fast r-cnn.” Proceedings of the IEEE International Conference on Computer Vision. 2015.

繼2014年的RCNN之後,Ross Girshick在15年推出Fast RCNN,構思精巧,流程更為緊湊,大幅提升了目标檢測的速度。在Github上提供了源碼。

同樣使用最大規模的網絡,Fast RCNN和RCNN相比,訓練時間從84小時減少為9.5小時,測試時間從47秒減少為0.32秒。在PASCAL VOC 2007上的準确率相差無幾,約在66%-67%之間.

思想

基礎:RCNN

簡單來說,RCNN使用以下四步實作目标檢測: 

a. 在圖像中确定約1000-2000個候選框 

b. 對于每個候選框内圖像塊,使用深度網絡提取特征 

c. 對候選框中提取出的特征,使用分類器判别是否屬于一個特定類 

d. 對于屬于某一特征的候選框,用回歸器進一步調整其位置 

更多細節可以參看這篇部落格。

改進:Fast RCNN

Fast RCNN方法解決了RCNN方法三個問題:

問題一:測試時速度慢 

RCNN一張圖像内候選框之間大量重疊,提取特征操作備援。 

本文将整張圖像歸一化後直接送入深度網絡。在鄰接時,才加入候選框資訊,在末尾的少數幾層處理每個候選框。

問題二:訓練時速度慢 

原因同上。 

在訓練時,本文先将一張圖像送入網絡,緊接着送入從這幅圖像上提取出的候選區域。這些候選區域的前幾層特征不需要再重複計算。

問題三:訓練所需空間大 

RCNN中獨立的分類器和回歸器需要大量特征作為訓練樣本。 

本文把類别判斷和位置精調統一用深度網絡實作,不再需要額外存儲。

以下按次序介紹三個問題對應的解決方法。

特征提取網絡

基本結構

圖像歸一化為224×224直接送入網絡。

前五階段是基礎的conv+relu+pooling形式,在第五階段結尾,輸入P個候選區域(圖像序号×1+幾何位置×4,序号用于訓練)?。 

Fast rcnn and Faster rcnn 算法原理 思想 特征提取網絡 網絡參數訓練 分類與位置調整 實驗與結論 思想 區域生成網絡:結構 區域生成網絡:訓練 共享特征 實驗
注:文中給出了大中小三種網絡,此處示出最大的一種。三種網絡基本結構相似,僅conv+relu層數有差别,或者增删了norm層。

roi_pool層的測試(forward)

roi_pool層将每個候選區域均勻分成M×N塊,對每塊進行max pooling。将特征圖上大小不一的候選區域轉變為大小統一的資料,送入下一層。 
Fast rcnn and Faster rcnn 算法原理 思想 特征提取網絡 網絡參數訓練 分類與位置調整 實驗與結論 思想 區域生成網絡:結構 區域生成網絡:訓練 共享特征 實驗

roi_pool層的訓練(backward)

首先考慮普通max pooling層。設 xi 為輸入層的節點, yj 為輸出層的節點。 

∂L∂xi={0∂L∂yjδ(i,j)=falseδ(i,j)=true

其中判決函數 δ(i,j) 表示i節點是否被j節點選為最大值輸出。不被選中有兩種可能: xi 不在 yj 範圍内,或者 xi 不是最大值。

對于roi max pooling,一個輸入節點可能和多個輸出節點相連。設 xi 為輸入層的節點, yrj 為第 r 個候選區域的第 j 個輸出節點。 

Fast rcnn and Faster rcnn 算法原理 思想 特征提取網絡 網絡參數訓練 分類與位置調整 實驗與結論 思想 區域生成網絡:結構 區域生成網絡:訓練 共享特征 實驗

∂L∂xi=Σr,jδ(i,r,j)∂L∂yrj

判決函數 δ(i,r,j) 表示i節點是否被候選區域r的第j個節點選為最大值輸出。代價對于 xi 的梯度等于所有相關的後一層梯度之和。

網絡參數訓練

參數初始化

網絡除去末尾部分如下圖,在ImageNet上訓練1000類分類器。結果參數作為相應層的初始化參數。 
Fast rcnn and Faster rcnn 算法原理 思想 特征提取網絡 網絡參數訓練 分類與位置調整 實驗與結論 思想 區域生成網絡:結構 區域生成網絡:訓練 共享特征 實驗
其餘參數随機初始化。

分層資料

在調優訓練時,每一個mini-batch中首先加入N張完整圖檔,而後加入從N張圖檔中選取的R個候選框。這R個候選框可以複用N張圖檔前5個階段的網絡特征。 

實際選擇N=2, R=128。

訓練資料構成

N張完整圖檔以50%機率水準翻轉。 

R個候選框的構成方式如下:

類别 比例 方式
前景 25% 與某個真值重疊在[0.5,1]的候選框
背景 75% 與真值重疊的最大值在[0.1,0.5)的候選框

分類與位置調整

資料結構

第五階段的特征輸入到兩個并行的全連層中(稱為multi-task)。 
Fast rcnn and Faster rcnn 算法原理 思想 特征提取網絡 網絡參數訓練 分類與位置調整 實驗與結論 思想 區域生成網絡:結構 區域生成網絡:訓練 共享特征 實驗

cls_score層用于分類,輸出K+1維數組 p ,表示屬于K類和背景的機率。 

bbox_prdict層用于調整候選區域位置,輸出4*K維數組 t ,表示分别屬于K類時,應該平移縮放的參數。

代價函數

loss_cls層評估分類代價。由真實分類 u 對應的機率決定: 

Lcls=−logpu

loss_bbox評估檢測框定位代價。比較真實分類對應的預測參數 tu 和真實平移縮放參數為 v 的差别: 

Lloc=Σ4i=1g(tui−vi)

g為Smooth L1誤差,對outlier不敏感: 

g(x)={0.5x2|x|−0.5|x|<1otherwise

總代價為兩者權重和,如果分類為背景則不考慮定位代價: 

L={Lcls+λLlocLclsu為前景u為背景

源碼中bbox_loss_weights用于标記每一個bbox是否屬于某一個類

全連接配接層提速

分類和位置調整都是通過全連接配接層(fc)實作的,設前一級資料為 x 後一級為 y ,全連接配接層參數為 W ,尺寸 u×v 。一次前向傳播(forward)即為: 

y=Wx

計算複雜度為 u×v 。

将 W 進行SVD分解,并用前t個特征值近似: 

W=UΣVT≈U(:,1:t)⋅Σ(1:t,1:t)⋅V(:,1:t)T

原來的前向傳播分解成兩步: 

y=Wx=U⋅(Σ⋅VT)⋅x=U⋅z

計算複雜度變為 u×t+v×t 。 

在實作時,相當于把一個全連接配接層拆分成兩個,中間以一個低維資料相連。 

Fast rcnn and Faster rcnn 算法原理 思想 特征提取網絡 網絡參數訓練 分類與位置調整 實驗與結論 思想 區域生成網絡:結構 區域生成網絡:訓練 共享特征 實驗
在github的源碼中,這部分似乎沒有實作。

實驗與結論

實驗過程不再詳述,隻記錄結論 

- 網絡末端同步訓練的分類和位置調整,提升準确度 

- 使用多尺度的圖像金字塔,性能幾乎沒有提高 

- 倍增訓練資料,能夠有2%-3%的準确度提升 

- 網絡直接輸出各類機率(softmax),比SVM分類器性能略好 

- 更多候選窗不能提升性能

同年作者團隊又推出了Faster RCNN,進一步把檢測速度提高到準實時,可以參看這篇部落格。 

關于RCNN, Fast RCNN, Faster RCNN這一系列目标檢測算法,可以進一步參考作者在15年ICCV上的講座Training R-CNNs of various velocities。

Ren, Shaoqing, et al. “Faster R-CNN: Towards real-time object detection with region proposal networks.” Advances in Neural Information Processing Systems. 2015.

本文是繼RCNN[1],fast RCNN[2]之後,目标檢測界的領軍人物Ross Girshick團隊在2015年的又一力作。簡單網絡目标檢測速度達到17fps,在PASCAL VOC上準确率為59.9%;複雜網絡達到5fps,準确率78.8%。

作者在github上給出了基于matlab和python的源碼。對Region CNN算法不了解的同學,請先參看這兩篇文章:《RCNN算法詳解》,《fast RCNN算法詳解》。

思想

從RCNN到fast RCNN,再到本文的faster RCNN,目标檢測的四個基本步驟(候選區域生成,特征提取,分類,位置精修)終于被統一到一個深度網絡架構之内。所有計算沒有重複,完全在GPU中完成,大大提高了運作速度。 

Fast rcnn and Faster rcnn 算法原理 思想 特征提取網絡 網絡參數訓練 分類與位置調整 實驗與結論 思想 區域生成網絡:結構 區域生成網絡:訓練 共享特征 實驗

faster RCNN可以簡單地看做“區域生成網絡+fast RCNN“的系統,用區域生成網絡代替fast RCNN中的Selective Search方法。本篇論文着重解決了這個系統中的三個問題: 

1. 如何設計區域生成網絡 

2. 如何訓練區域生成網絡 

3. 如何讓區域生成網絡和fast RCNN網絡共享特征提取網絡

區域生成網絡:結構

基本設想是:在提取好的特征圖上,對所有可能的候選框進行判别。由于後續還有位置精修步驟,是以候選框實際比較稀疏。 

Fast rcnn and Faster rcnn 算法原理 思想 特征提取網絡 網絡參數訓練 分類與位置調整 實驗與結論 思想 區域生成網絡:結構 區域生成網絡:訓練 共享特征 實驗

特征提取

原始特征提取(上圖灰色方框)包含若幹層conv+relu,直接套用ImageNet上常見的分類網絡即可。本文試驗了兩種網絡:5層的ZF[3],16層的VGG-16[4],具體結構不再贅述。 

額外添加一個conv+relu層,輸出51*39*256維特征(feature)。

候選區域(anchor)

特征可以看做一個尺度51*39的256通道圖像,對于該圖像的每一個位置,考慮9個可能的候選視窗:三種面積 {1282,2562,5122}× 三種比例 {1:1,1:2,2:1} 。這些候選視窗稱為anchors。下圖示出51*39個anchor中心,以及9種anchor示例。 

Fast rcnn and Faster rcnn 算法原理 思想 特征提取網絡 網絡參數訓練 分類與位置調整 實驗與結論 思想 區域生成網絡:結構 區域生成網絡:訓練 共享特征 實驗

在整個faster RCNN算法中,有三種尺度。 

原圖尺度:原始輸入的大小。不受任何限制,不影響性能。 

歸一化尺度:輸入特征提取網絡的大小,在測試時設定,源碼中opts.test_scale=600。anchor在這個尺度上設定。這個參數和anchor的相對大小決定了想要檢測的目标範圍。 

網絡輸入尺度:輸入特征檢測網絡的大小,在訓練時設定,源碼中為224*224。

視窗分類和位置精修

分類層(cls_score)輸出每一個位置上,9個anchor屬于前景和背景的機率;視窗回歸層(bbox_pred)輸出每一個位置上,9個anchor對應視窗應該平移縮放的參數。 

對于每一個位置來說,分類層從256維特征中輸出屬于前景和背景的機率;視窗回歸層從256維特征中輸出4個平移縮放參數。

就局部來說,這兩層是全連接配接網絡;就全局來說,由于網絡在所有位置(共51*39個)的參數相同,是以實際用尺寸為1×1的卷積網絡實作。

需要注意的是:并沒有顯式地提取任何候選視窗,完全使用網絡自身完成判斷和修正。

區域生成網絡:訓練

樣本

考察訓練集中的每張圖像: 

a. 對每個标定的真值候選區域,與其重疊比例最大的anchor記為前景樣本 

b. 對a)剩餘的anchor,如果其與某個标定重疊比例大于0.7,記為前景樣本;如果其與任意一個标定的重疊比例都小于0.3,記為背景樣本 

c. 對a),b)剩餘的anchor,棄去不用。 

d. 跨越圖像邊界的anchor棄去不用

代價函數

同時最小化兩種代價: 

a. 分類誤差 

b. 前景樣本的視窗位置偏差 

具體參看fast RCNN中的“分類與位置調整”段落。

超參數

原始特征提取網絡使用ImageNet的分類樣本初始化,其餘新增層随機初始化。 

每個mini-batch包含從一張圖像中提取的256個anchor,前景背景樣本1:1. 

前60K疊代,學習率0.001,後20K疊代,學習率0.0001。 

momentum設定為0.9,weight decay設定為0.0005。[5]

共享特征

區域生成網絡(RPN)和fast RCNN都需要一個原始特征提取網絡(下圖灰色方框)。這個網絡使用ImageNet的分類庫得到初始參數 W0 ,但要如何精調參數,使其同時滿足兩方的需求呢?本文講解了三種方法。 

Fast rcnn and Faster rcnn 算法原理 思想 特征提取網絡 網絡參數訓練 分類與位置調整 實驗與結論 思想 區域生成網絡:結構 區域生成網絡:訓練 共享特征 實驗

輪流訓練

a. 從 W0 開始,訓練RPN。用RPN提取訓練集上的候選區域 

b. 從 W0 開始,用候選區域訓練Fast RCNN,參數記為 W1  

c. 從 W1 開始,訓練RPN… 

具體操作時,僅執行兩次疊代,并在訓練時當機了部分層。論文中的實驗使用此方法。 

如Ross Girshick在ICCV 15年的講座Training R-CNNs of various velocities中所述,采用此方法沒有什麼根本原因,主要是因為”實作問題,以及截稿日期“。

近似聯合訓練

直接在上圖結構上訓練。在backward計算梯度時,把提取的ROI區域當做固定值看待;在backward更新參數時,來自RPN和來自Fast RCNN的增量合并輸入原始特征提取層。 

此方法和前方法效果類似,但能将訓練時間減少20%-25%。公布的python代碼中包含此方法。

聯合訓練

直接在上圖結構上訓練。但在backward計算梯度時,要考慮ROI區域的變化的影響。推導超出本文範疇,請參看15年NIP論文[6]。

實驗

除了開篇提到的基本性能外,還有一些值得注意的結論

  • 與Selective Search方法(黑)相比,當每張圖生成的候選區域從2000減少到300時,本文RPN方法(紅藍)的召回率下降不大。說明RPN方法的目的性更明确。 
    Fast rcnn and Faster rcnn 算法原理 思想 特征提取網絡 網絡參數訓練 分類與位置調整 實驗與結論 思想 區域生成網絡:結構 區域生成網絡:訓練 共享特征 實驗
  • 使用更大的Microsoft COCO庫[7]訓練,直接在PASCAL VOC上測試,準确率提升6%。說明faster RCNN遷移性良好,沒有over fitting。 
    Fast rcnn and Faster rcnn 算法原理 思想 特征提取網絡 網絡參數訓練 分類與位置調整 實驗與結論 思想 區域生成網絡:結構 區域生成網絡:訓練 共享特征 實驗
  1. Girshick, Ross, et al. “Rich feature hierarchies for accurate object detection and semantic segmentation.” Proceedings of the IEEE conference on computer vision and pattern recognition. 2014. ↩
  2. Girshick, Ross. “Fast r-cnn.” Proceedings of the IEEE International Conference on Computer Vision. 2015. ↩
  3. M. D. Zeiler and R. Fergus, “Visualizing and understanding convolutional neural networks,” in European Conference on Computer Vision (ECCV), 2014. ↩
  4. K. Simonyan and A. Zisserman, “Very deep convolutional networks for large-scale image recognition,” in International Conference on Learning Representations (ICLR), 2015. ↩
  5. learning rate-控制增量和梯度之間的關系;momentum-保持前次疊代的增量;weight decay-每次疊代縮小參數,相當于正則化。 ↩
  6. Jaderberg et al. “Spatial Transformer Networks” 

    NIPS 2015 ↩

  7. 30萬+圖像,80類檢測庫。參看http://mscoco.org/。 ↩

繼續閱讀