RCNN學習筆記(5):faster rcnn
reference link:【目標檢測】Faster RCNN演算法詳解實時的神經網路:Faster-RCNN技術分析目標檢測——從RCNN到Faster 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)。Region Proposal Networks的設計和訓練思路上圖是RPN的網路流程圖,即也是利用了SPP的映射機制,從conv5上進行滑窗來替代從原圖滑窗。
不過,要如何訓練出一個網路來替代selective search相類似的功能呢?實際上思路很簡單,就是先通過SPP根據一一對應的點從conv5映射回原圖,根據設計不同的固定初始尺度訓練一個網路,就是給它大小不同(但設計固定)的region圖,然後根據與ground truth的覆蓋率給它正負標籤,讓它學習裡面是否有object即可。這就又變成介紹RCNN之前提出的traditional method,訓練出一個能檢測物體的網路,然後對整張圖片進行滑窗判斷,不過這樣子的話由於無法判斷region的尺度和scale ratio,故需要多次放縮,這樣子測試,估計判斷一張圖片是否有物體就需要很久。(傳統hog+svm->dpm)如何降低這一部分的複雜度?要知道我們只需要找出大致的地方,無論是精確定位位置還是尺寸,後面的工作都可以完成,這樣子的話,與其說用小網路,簡單的學習(這樣子估計和蒙差不多了,反正有無物體也就50%的概率),還不如用深的網路,固定尺度變化,固定scale ratio變化,固定採樣方式(反正後面的工作能進行調整,更何況它本身就可以對box的位置進行調整)這樣子來降低任務複雜度呢。這裡有個很不錯的地方就是在前面可以共享卷積計算結果,這也算是用深度網路的另一個原因吧。而這三個固定,我估計也就是為什麼文章叫這些proposal為anchor的原因了。這個網路的結果就是卷積層的每個點都有有關於k個achor boxes的輸出,包括是不是物體,調整box相應的位置。這相當於給了比較死的初始位置(三個固定),然後來大致判斷是否是物體以及所對應的位置.這樣子的話RPN所要做的也就完成了,這個網路也就完成了它應該完成的使命,剩下的交給其他部分完成。候選區域(anchor)
特徵可以看做一個尺度51*39的256通道圖像,對於該圖像的每一個位置,考慮9個可能的候選窗口:三種面積{1282,2562,5122}× 三種比例{1:1,1:2,2:1} 。
這些候選窗口稱為anchors。下圖示出51*39個anchor中心,以及9種anchor示例。
關於anchor的問題:這裡在詳細解釋一下:(1)首先按照尺度和長寬比生成9種anchor,這9個anchor的意思是conv5 feature map 3x3的滑窗對應原圖區域的大小.這9個anchor對於任意輸入的圖像都是一樣的,所以只需要計算一次. 既然大小對應關係有了,下一步就是中心點對應關係,接下來(2)對於每張輸入圖像,根據圖像大小計算conv5 3x3滑窗對應原圖的中心點. 有了中心點對應關係和大小對應關係,映射就顯而易見了.在整個faster RCNN演算法中,有三種尺度。
原圖尺度:原始輸入的大小。不受任何限制,不影響性能。 歸一化尺度:輸入特徵提取網路的大小,在測試時設置,源碼中opts.test_scale=600。anchor在這個尺度上設定。這個參數和anchor的相對大小決定了想要檢測的目標範圍。 網路輸入尺度:輸入特徵檢測網路的大小,在訓練時設置,源碼中為224*224。
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Region Proposal Networks
RPN的目的是實現"attention"機制,告訴後續的扮演檢測識別分類角色的Fast-RCNN應該注意哪些區域,它從任意尺寸的圖片中得到一系列的帶有 objectness score 的 object proposals。
具體流程是:使用一個小的網路在已經進行通過卷積計算得到的feature map上進行滑動掃描,這個小的網路每次在一個feature map上的一個窗口進行滑動(這個窗口大小為n*n----在這裡,再次看到神經網路中用於縮減網路訓練參數的局部感知策略receptive field,通常n=228在VGG-16,而作者論文使用n=3),滑動操作後映射到一個低維向量(例如256D或512D,這裡說256或512是低維,Q:n=3,n*n=9,為什麼256是低維呢?那麼解釋一下:低維相對不是指窗口大小,窗口是用來滑動的!256相對的是a convolutional feature map of a size W × H (typically ~2,400),而2400這個特徵數很大,所以說256是低維.另外需要明白的是:這裡的256維里的每一個數都是一個Anchor(由2400的特徵數滑動後操作後,再進行壓縮))最後將這個低維向量送入到兩個獨立平行的全連接層:box回歸層(a box-regression layer (reg))和box分類層(a box-classification layer (cls))
Translation-Invariant Anchors
在計算機視覺中的一個挑戰就是平移不變性:比如人臉識別任務中,小的人臉(24*24的解析度)和大的人臉(1080*720)如何在同一個訓練好權值的網路中都能正確識別. 傳統有兩種主流的解決方式:
第一:對圖像或feature map層進行尺度寬高的採樣;第二,對濾波器進行尺度寬高的採樣(或可以認為是滑動窗口). 但作者的解決該問題的具體實現是:通過卷積核中心(用來生成推薦窗口的Anchor)進行尺度、寬高比的採樣。如上圖右邊,文中使用了3 scales and 3 aspect ratios (1:1,1:2,2:1), 就產生了 k = 9 anchors at each sliding position. -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------窗口分類和位置精修
分類層(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. 前景樣本的窗口位置偏差超參數
原始特徵提取網路使用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類檢測庫。參看COCO - Common Objects in Context
來自:Alanyannick
本文由 Alanyannick 發佈於RCNN學習筆記(5):faster rcnn
推薦閱讀:
※華為路由器無線橋接水星路由器
※怎麼看待網路購物趨於理性?
※計算機網路(筆記)03--計算機網路結構
※香格里拉遊記隨想
TAG:計算機網路 |