轉載:
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,序号用于訓練)?。
注:文中給出了大中小三種網絡,此處示出最大的一種。三種網絡基本結構相似,僅conv+relu層數有差别,或者增删了norm層。roi_pool層的測試(forward)
roi_pool層将每個候選區域均勻分成M×N塊,對每塊進行max pooling。将特征圖上大小不一的候選區域轉變為大小統一的資料,送入下一層。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 個輸出節點。
∂L∂xi=Σr,jδ(i,r,j)∂L∂yrj
判決函數 δ(i,r,j) 表示i節點是否被候選區域r的第j個節點選為最大值輸出。代價對于 xi 的梯度等于所有相關的後一層梯度之和。
網絡參數訓練
參數初始化
網絡除去末尾部分如下圖,在ImageNet上訓練1000類分類器。結果參數作為相應層的初始化參數。 其餘參數随機初始化。分層資料
在調優訓練時,每一個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)。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 。
在實作時,相當于把一個全連接配接層拆分成兩個,中間以一個低維資料相連。
在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中完成,大大提高了運作速度。
faster RCNN可以簡單地看做“區域生成網絡+fast RCNN“的系統,用區域生成網絡代替fast RCNN中的Selective Search方法。本篇論文着重解決了這個系統中的三個問題:
1. 如何設計區域生成網絡
2. 如何訓練區域生成網絡
3. 如何讓區域生成網絡和fast 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示例。
在整個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 ,但要如何精調參數,使其同時滿足兩方的需求呢?本文講解了三種方法。
輪流訓練
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方法的目的性更明确。
- 使用更大的Microsoft COCO庫[7]訓練,直接在PASCAL VOC上測試,準确率提升6%。說明faster RCNN遷移性良好,沒有over fitting。
- 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. ↩
- Girshick, Ross. “Fast r-cnn.” Proceedings of the IEEE International Conference on Computer Vision. 2015. ↩
- M. D. Zeiler and R. Fergus, “Visualizing and understanding convolutional neural networks,” in European Conference on Computer Vision (ECCV), 2014. ↩
- K. Simonyan and A. Zisserman, “Very deep convolutional networks for large-scale image recognition,” in International Conference on Learning Representations (ICLR), 2015. ↩
- learning rate-控制增量和梯度之間的關系;momentum-保持前次疊代的增量;weight decay-每次疊代縮小參數,相當于正則化。 ↩
-
Jaderberg et al. “Spatial Transformer Networks”
NIPS 2015 ↩
- 30萬+圖像,80類檢測庫。參看http://mscoco.org/。 ↩