【目标检测】Fast RCNN算法详解
轉(zhuǎn)載自:http://blog.csdn.net/shenxiaolu1984/article/details/51036677
Girshick, Ross. “Fast r-cnn.” Proceedings of the IEEE International Conference on Computer Vision. 2015.
繼2014年的RCNN之后,Ross Girshick在15年推出Fast RCNN,構(gòu)思精巧,流程更為緊湊,大幅提升了目標檢測的速度。在Github上提供了源碼。
同樣使用最大規(guī)模的網(wǎng)絡,Fast RCNN和RCNN相比,訓練時間從84小時減少為9.5小時,測試時間從47秒減少為0.32秒。在PASCAL VOC 2007上的準確率相差無幾,約在66%-67%之間.
思想
基礎:RCNN
簡單來說,RCNN使用以下四步實現(xiàn)目標檢測:
a. 在圖像中確定約1000-2000個候選框
b. 對于每個候選框內(nèi)圖像塊,使用深度網(wǎng)絡提取特征
c. 對候選框中提取出的特征,使用分類器判別是否屬于一個特定類
d. 對于屬于某一特征的候選框,用回歸器進一步調(diào)整其位置
更多細節(jié)可以參看這篇博客。
改進:Fast RCNN
Fast RCNN方法解決了RCNN方法三個問題:
問題一:測試時速度慢
RCNN一張圖像內(nèi)候選框之間大量重疊,提取特征操作冗余。
本文將整張圖像歸一化后直接送入深度網(wǎng)絡。在鄰接時,才加入候選框信息,在末尾的少數(shù)幾層處理每個候選框。
問題二:訓練時速度慢
原因同上。
在訓練時,本文先將一張圖像送入網(wǎng)絡,緊接著送入從這幅圖像上提取出的候選區(qū)域。這些候選區(qū)域的前幾層特征不需要再重復計算。
問題三:訓練所需空間大
RCNN中獨立的分類器和回歸器需要大量特征作為訓練樣本。
本文把類別判斷和位置精調(diào)統(tǒng)一用深度網(wǎng)絡實現(xiàn),不再需要額外存儲。
以下按次序介紹三個問題對應的解決方法。
特征提取網(wǎng)絡
基本結(jié)構(gòu)
圖像歸一化為224×224直接送入網(wǎng)絡。
前五階段是基礎的conv+relu+pooling形式,在第五階段結(jié)尾,輸入P個候選區(qū)域(圖像序號×1+幾何位置×4,序號用于訓練)?。
注:文中給出了大中小三種網(wǎng)絡,此處示出最大的一種。三種網(wǎng)絡基本結(jié)構(gòu)相似,僅conv+relu層數(shù)有差別,或者增刪了norm層。
roi_pool層的測試(forward)
roi_pool層將每個候選區(qū)域均勻分成M×N塊,對每塊進行max pooling。將特征圖上大小不一的候選區(qū)域轉(zhuǎn)變?yōu)榇笮〗y(tǒng)一的數(shù)據(jù),送入下一層。
roi_pool層的訓練(backward)
首先考慮普通max pooling層。設x?i??為輸入層的節(jié)點,y?j??為輸出層的節(jié)點。
其中判決函數(shù)δ(i,j)?表示i節(jié)點是否被j節(jié)點選為最大值輸出。不被選中有兩種可能:x?i??不在y?j??范圍內(nèi),或者x?i??不是最大值。
對于roi max pooling,一個輸入節(jié)點可能和多個輸出節(jié)點相連。設x?i??為輸入層的節(jié)點,y?rj??為第r?個候選區(qū)域的第j?個輸出節(jié)點。
判決函數(shù)δ(i,r,j)?表示i節(jié)點是否被候選區(qū)域r的第j個節(jié)點選為最大值輸出。代價對于x?i??的梯度等于所有相關的后一層梯度之和。
網(wǎng)絡參數(shù)訓練
參數(shù)初始化
網(wǎng)絡除去末尾部分如下圖,在ImageNet上訓練1000類分類器。結(jié)果參數(shù)作為相應層的初始化參數(shù)。
其余參數(shù)隨機初始化。
分層數(shù)據(jù)
在調(diào)優(yōu)訓練時,每一個mini-batch中首先加入N張完整圖片,而后加入從N張圖片中選取的R個候選框。這R個候選框可以復用N張圖片前5個階段的網(wǎng)絡特征。
實際選擇N=2, R=128。
訓練數(shù)據(jù)構(gòu)成
N張完整圖片以50%概率水平翻轉(zhuǎn)。
R個候選框的構(gòu)成方式如下:
| 前景 | 25% | 與某個真值重疊在[0.5,1]的候選框 |
| 背景 | 75% | 與真值重疊的最大值在[0.1,0.5)的候選框 |
分類與位置調(diào)整
數(shù)據(jù)結(jié)構(gòu)
第五階段的特征輸入到兩個并行的全連層中(稱為multi-task)。
cls_score層用于分類,輸出K+1維數(shù)組p?,表示屬于K類和背景的概率。
bbox_prdict層用于調(diào)整候選區(qū)域位置,輸出4*K維數(shù)組t?,表示分別屬于K類時,應該平移縮放的參數(shù)。
代價函數(shù)
loss_cls層評估分類代價。由真實分類u?對應的概率決定:
loss_bbox評估檢測框定位代價。比較真實分類對應的預測參數(shù)t?u??和真實平移縮放參數(shù)為v?的差別:
g為Smooth L1誤差,對outlier不敏感:
總代價為兩者加權(quán)和,如果分類為背景則不考慮定位代價:
存疑:bbox_loss_weights數(shù)據(jù)塊的作用是?
全連接層提速
分類和位置調(diào)整都是通過全連接層(fc)實現(xiàn)的,設前一級數(shù)據(jù)為x?后一級為y?,全連接層參數(shù)為W?,尺寸u×v?。一次前向傳播(forward)即為:
計算復雜度為u×v?。
將W?進行SVD分解,并用前t個特征值近似:
原來的前向傳播分解成兩步:
計算復雜度變?yōu)?span id="ze8trgl8bvbq" class="MathJax_Preview">u×t+v×t?。
在實現(xiàn)時,相當于把一個全連接層拆分成兩個,中間以一個低維數(shù)據(jù)相連。
在github的源碼中,這部分似乎沒有實現(xiàn)。
實驗與結(jié)論
實驗過程不再詳述,只記錄結(jié)論
- 網(wǎng)絡末端同步訓練的分類和位置調(diào)整,提升準確度
- 使用多尺度的圖像金字塔,性能幾乎沒有提高
- 倍增訓練數(shù)據(jù),能夠有2%-3%的準確度提升
- 網(wǎng)絡直接輸出各類概率(softmax),比SVM分類器性能略好
- 更多候選窗不能提升性能
同年作者團隊又推出了Faster RCNN,進一步把檢測速度提高到準實時,可以參看這篇博客。
關于RCNN, Fast RCNN, Faster RCNN這一系列目標檢測算法,可以進一步參考作者在15年ICCV上的講座Training R-CNNs of various velocities。
總結(jié)
以上是生活随笔為你收集整理的【目标检测】Fast RCNN算法详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【目标检测】RCNN算法详解
- 下一篇: 【目标检测】Faster RCNN算法详