天天看點

Faster R-CNN 簡單梳理Faster R-CNN 簡單梳理

Faster R-CNN 簡單梳理

作者:xg123321123

出處:http://blog.csdn.net/xg123321123/article/details/53073388

聲明:版權所有,轉載請聯系作者并注明出處

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

三個架構的示意圖如下:

Faster R-CNN 簡單梳理Faster R-CNN 簡單梳理

1 亮點

Faster R-CNN可以看做“區域生成網絡+Fast R-CNN“的系統,其中區域生成網絡代替了Fast RCNN中的Selective Search方法。

Faster R-CNN解決了三個問題:

  • 如何設計區域生成網絡
  • 如何訓練區域生成網絡
  • 如何讓區域生成網絡和Fast R-CNN網絡共享特征提取網絡

2 區域生成網絡(RPN)

先使用VGG等現有模型提取特征,然後使用一個小的網絡在卷積最後得到的這個特征圖上進行滑動掃描,這個滑動的網絡每次與特征圖上n*n 的視窗全連接配接,然後映射到一個低維向量,最後将這個低維向量送入到兩個全連接配接層,對特征圖上所有可能的候選框進行分類和回歸。

特征提取

原始特征提取包含若幹層Conv+ReLu,直接套用ImageNet上常見的分類模型即可(Faster R-CNN試驗了兩種網絡:5層的ZF,16層的VGG-16)。

然後“額外”添加一個conv+relu層,輸出256維的特征。

Faster R-CNN 簡單梳理Faster R-CNN 簡單梳理

anchor生成

為友善舉例,由VGG等現有模型提取的特征圖,在這裡我們将其看做尺度為51*39的256通道的圖像,然後在這個特征圖上進行滑窗操作。

在特征圖上進行的滑窗操作,相當于映射回原圖後,Sliding Window中心對應的原圖上的中心,在不同尺寸和比例的anchor區域中進行特征提取(這個對應關系是在實作代碼裡事先确定好的);同時值得一提的是,作者實驗指出,映射回原圖的anchor比Sliding Window相應的感受野大一點也是可以的,因為有可能像人一樣有預測邊緣的能力。(感受野計算,見這裡)

另一方面,Sliding Window的尺寸為3*3的滑窗操作可以看做3*3的卷積核與特征圖進行卷積操作(也就是那“額外”的conv+relu層),那麼這個3*3的區域卷積後可以獲得一個256維的特征向量。

這個256維的向量提取的特征就對應着一個Sliding Window中心映射回原圖後,9個anchor所在的區域。

當然我們知道,Sliding Window在不斷滑動,是以還有很多這樣的256維向量。

Faster R-CNN 簡單梳理Faster R-CNN 簡單梳理

論文中,3*3滑窗中心點位置,對應預測輸入圖像3種尺度{ 1282,2562,5122 },3種長寬比{1:1,1:2,2:1}共9個可能的候選視窗。

這些候選視窗就稱為anchors。

下圖示出51*39個anchor中心,以及9種anchor示例。

Faster R-CNN 簡單梳理Faster R-CNN 簡單梳理

視窗分類和位置精修

分類層(cls_score)輸出每一個位置上,9個anchor屬于前景和背景的機率;

視窗回歸層(bbox_pred)輸出每一個位置上,9個anchor對應視窗應該平移縮放的參數。

對于每一個位置的Sliding Window(沒個都生成一個256維特征向量)來說,分類層從256維特征中輸出屬于前景和背景的機率,是以對應的最後一層卷積numout為18;視窗回歸層從256維特征中輸出4個平移縮放參數,是以對應的最後一層卷積numout為36。

就局部來說,這兩層是全連接配接網絡;

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

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

訓練樣本

對于訓練集中每張圖像:

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

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

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

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

3 共享特征&網絡訓練

如果分别訓練兩種不同任務的網絡,即使它們的結構、參數完全一緻,但各自的卷積層内的卷積核也會向着不同的方向改變,導緻無法共享網絡權重。

為了實作網絡權重的共享,Faster R-CNN提出了一個複雜但是有效的訓練方式。

首先,區域生成網絡(RPN)和Fast R-CNN都需要一個原始特征提取網絡(下圖灰色方框)。這個網絡使用ImageNet的模型得到初始參數 W0 。

Faster R-CNN 簡單梳理Faster R-CNN 簡單梳理

然後,用交替優化來學習共享的特征,主要有4步:

第一步: 用ImageNet模型初始化,得到 W0 ,從W0開始,獨立訓練一個RPN網絡,用RPN提取訓練集上的候選區域;

第二步: 仍然用ImageNet模型初始化,得到 W0 ,從 W0 開始,獨立訓練一個Fast R-CNN網絡,但是使用上一步RPN網絡産生的proposal作為輸入,得到的網絡權重為 W1 ,此時,兩個網絡每層的參數完全不共享;

第三步:使用第二步的Fast R-CNN網絡權重 W1 初始化一個新的RPN網絡,但是把RPN和Fast R-CNN共享的那些卷積層的learning rate設定為0,也就是不更新,僅僅更新RPN特有的那些網絡層,重新訓練,此時,兩個網絡已經共享了所有公共的卷積層;

第四步:仍然固定共享的那些網絡層,把Fast R-CNN特有的網絡層也加入進來,隻微調 Fast R-CNN 特有的網絡層形成一個unified network,繼續訓練;此時,該網絡已經實作我們設想的目标,即網絡内部預測proposal并實作檢測的功能。

回顧

Faster R-CNN最大貢獻是把proposal部分從網絡外邊嵌入了網絡裡邊,從此一個網絡模型即可完成end-to-end的檢測任務而不需要我們在前面手動先執行一遍proposal的搜尋算法。

幾年前比較流行的檢測算法,比如HOG+SVM和DPM之類的,同樣是需要用分類器逐個對一些矩形框裡提取出來的特征進行分類,隻不過那時是全圖設定好stride、scale等參數然後搜尋,不像selective search這些算法會去對圖像進行内容分析,然後輸出一些可疑的矩形候選框。

本篇部落客要參考自

《RCNN, Fast-RCNN, Faster-RCNN的一些事》

《Faster RCNN算法詳解》

《RCNN,Fast-RCNN,Faster-RCNN》

《faster-rcnn 之 RPN網絡的結構解析》

繼續閱讀