Faster R-CNN论文详解
原文鏈接:http://lib.csdn.net/article/deeplearning/46182
paper鏈接:Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks
&創新點
設計Region Proposal Networks【RPN】,利用CNN卷積操作后的特征圖生成region proposals,代替了Selective Search、EdgeBoxes等方法,速度上提升明顯;
訓練Region Proposal Networks與檢測網絡【Fast R-CNN】共享卷積層,大幅提高網絡的檢測速度。
?
&問題是什么
?
繼Fast R-CNN后,在CPU上實現的區域建議算法Selective Search【2s/image】、EdgeBoxes【0.2s/image】等成了物體檢測速度提升上的最大瓶頸。
?
?
&如何解決問題
測試過程
Faster R-CNN統一的網絡結構如下圖所示,可以簡單看作RPN網絡+Fast R-CNN網絡。?
注意:上圖Fast R-CNN中含特有卷積層,博主認為不是所有卷積層都參與共享。
解釋分析
RPN網絡結構是什么?實現什么功能?具體如何實現??
單個RPN網絡結構如下圖:?
注意:上圖中卷積層/全連接層表示卷積層或者全連接層,作者在論文中表示這兩層實際上是全連接層,但是網絡在所有滑窗位置共享全連接層,可以很自然地用n×n卷積核【論文中設計為3×3】跟隨兩個并行的1×1卷積核實現,文中這么解釋的,博主并不是很懂,尷尬。
功能:實現attention機制,如圖所示,RPN在CNN卷積層后增加滑動窗口操作以及兩個卷積層完成區域建議功能,第一個卷積層將特征圖每個滑窗位置編碼成一個特征向量,第二個卷積層對應每個滑窗位置輸出k個區域得分和k個回歸后的區域建議,并對得分區域進行非極大值抑制后輸出得分Top-N【文中為300】區域,告訴檢測網絡應該注意哪些區域,本質上實現了Selective Search、EdgeBoxes等方法的功能。
具體實現:?
①首先套用ImageNet上常用的圖像分類網絡,本文中試驗了兩種網絡:ZF或VGG-16,利用這兩種網絡的部分卷積層產生原始圖像的特征圖;
② 對于①中特征圖,用n×n【論文中設計為3×3,n=3看起來很小,但是要考慮到這是非常高層的feature map,其size本身也沒有多大,因此9個矩形中,每個矩形窗框都是可以感知到很大范圍的】的滑動窗口在特征圖上滑動掃描【代替了從原始圖滑窗獲取特征】,每個滑窗位置通過卷積層1映射到一個低維的特征向量【ZF網絡:256維;VGG-16網絡:512維,低維是相對于特征圖大小W×H,typically~60×40=2400】后采用ReLU,并為每個滑窗位置考慮k種【論文中k=9】可能的參考窗口【論文中稱為anchors,見下解釋】,這就意味著每個滑窗位置會同時預測最多9個區域建議【超出邊界的不考慮】,對于一個W×H的特征圖,就會產生W×H×k個區域建議;
③步驟②中的低維特征向量輸入兩個并行連接的卷積層2:reg窗口回歸層【位置精修】和cls窗口分類層,分別用于回歸區域建議產生bounding-box【超出圖像邊界的裁剪到圖像邊緣位置】和對區域建議是否為前景或背景打分,這里由于每個滑窗位置產生k個區域建議,所以reg層有4k個輸出來編碼【平移縮放參數】k個區域建議的坐標,cls層有2k個得分估計k個區域建議為前景或者背景的概率.
Anchors是什么?有什么用??
Anchors是一組大小固定的參考窗口:三種尺度{128^2,256^2,512^2}×三種長寬比{1:1,1:2,2:1},如下圖所示,表示RPN網絡中對特征圖滑窗時每個滑窗位置所對應的原圖區域中9種可能的大小,相當于模板,對任意圖像任意滑窗位置都是這9中模板。繼而根據圖像大小計算滑窗中心點對應原圖區域的中心點,通過中心點和size就可以得到滑窗位置和原圖位置的映射關系,由此原圖位置并根據與Ground Truth重復率貼上正負標簽,讓RPN學習該Anchors是否有物體即可。?
?
作者在文中表示采用Anchors這種方法具有平移不變性,就是說在圖像中平移了物體,窗口建議也會跟著平移。同時這種方式也減少了整個模型的size,輸出層512×(4+2)×9=2.8×10^4個參數【512是前一層特征維度,(4+2)×9是9個Anchors的前景背景得分和平移縮放參數】,而MultiBox有1536×(4+1)×800=6.1×10^6個參數,而較小的參數可以在小數據集上減少過擬合風險。
當然,在RPN網絡中我們只需要找到大致的地方,無論是位置還是尺寸,后面的工作都可以完成,這樣的話采用小網絡進行簡單的學習【估計和猜差不多,反正有50%概率】,還不如用深度網絡【還可以實現卷積共享】,固定尺度變化,固定長寬比變化,固定采樣方式來大致判斷是否是物體以及所對應的位置并降低任務復雜度。
Anchors為什么考慮以上三種尺度和長寬比??
文中對Anchors的尺度以及長寬比選取進行了實驗,如下圖所示:?
?
實驗實在VGG-16模型下,采用PASCAL VOC 2007訓練集和PASCAL VOC 2007測試集得到。相比于只采用單一尺度和長寬比,單尺度多長寬比和多尺度單長寬比都能提升mAP,表明多size的anchors可以提高mAP,作者在這里選取了最高mAP的3種尺度和3種長寬比。
如何處理多尺度多長寬比問題?即如何使24×24和1080×720的車輛同時在一個訓練好的網絡中都能正確識別??
文中展示了兩種解決多尺度多長寬比問題:一種是使用圖像金字塔,對伸縮到不同size的輸入圖像進行特征提取,雖然有效但是費時;?
另一種是使用濾波器金字塔或者滑動窗口金字塔,對輸入圖像采用不同size的濾波器分別進行卷積操作,這兩種方式都需要枚舉圖像或者濾波器size;?
作者提出了一種叫Anchors金字塔的方法來解決多尺度多長寬比的問題,在RPN網絡中對特征圖滑窗時,對滑窗位置中心進行多尺度多長寬比的采樣,并對多尺度多長寬比的anchor boxes區域進行回歸和分類,利用Anchors金字塔就僅僅依賴于單一尺度的圖像和特征圖和單一大小的卷積核,就可以解決多尺度多長寬比問題,這種對推薦區域采樣的模型不管是速度還是準確率都能取得很好的性能。
同傳統滑窗方法提取區域建議方法相比,RPN網絡有什么優勢??
傳統方法是訓練一個能檢測物體的網絡,然后對整張圖片進行滑窗判斷,由于無法判斷區域建議的尺度和長寬比,所以需要多次縮放,這樣找出一張圖片有物體的區域就會很慢;?
雖然RPN網絡也是用滑動窗口策略,但是滑動窗口實在卷積層特征圖上進行的,維度較原始圖像降低了很多倍【中間進行了多次max pooling 操作】,RPN采取了9種不同尺度不同長寬比的anchors,同時最后進行了bounding-box回歸,即使是這9種anchors外的區域也能得到一個跟目標比較接近的區域建議。
?
訓練過程
RPN網絡預訓練
| ? ? ? ?樣本來源 ? ? ? ?? | ? ? ? ? ?ILSVRC 20XX ? ? ? ?? |
?
?樣本中只有類別標簽;?
文中一帶而過RPN網絡被ImageNet網絡【ZF或VGG-16】進行了有監督預訓練,利用其訓練好的網絡參數初始化;?
用標準差0.01均值為0的高斯分布對新增的層隨機初始化。
Fast R-CNN網絡預訓練
| ? ? ? ?樣本來源 ? ? ? ?? | ? ? ? ? ?ILSVRC 20XX ? ? ? ?? |
?
樣本中只有類別標簽;?
文中一帶而過Fast R-CNN網絡被ImageNet網絡【ZF或VGG-16】進行了有監督預訓練,利用其訓練好的網絡參數初始化。
RPN網絡微調訓練
| 樣本 | 來源:PASCAL VOC |
| 正樣本 | 與Ground Truth相交IoU最大的anchors【以防后一種方式下沒有正樣本】+與Ground Truth相交IoU>0.7的anchors |
| 負樣本 | 與Ground Truth相交IoU<0.3的anchors |
?
?
?
PASCAL VOC 數據集中既有物體類別標簽,也有物體位置標簽;?
正樣本僅表示前景,負樣本僅表示背景;?
回歸操作僅針對正樣本進行;?
訓練時棄用所有超出圖像邊界的anchors,否則在訓練過程中會產生較大難以處理的修正誤差項,導致訓練過程無法收斂;?
對去掉超出邊界后的anchors集采用非極大值抑制,最終一張圖有2000個anchors用于訓練【詳細見下】;?
對于ZF網絡微調所有層,對VGG-16網絡僅微調conv3_1及conv3_1以上的層,以便節省內存。
SGD mini-batch采樣方式:同Fast R-CNN網絡,采取”image-centric”方式采樣,即采用層次采樣,先對圖像取樣,再對anchors取樣,同一圖像的anchors共享計算和內存。每個mini-batch包含從一張圖中隨機提取的256個anchors,正負樣本比例為1:1【當然可以對一張圖所有anchors進行優化,但由于負樣本過多最終模型會對正樣本預測準確率很低】來計算一個mini-batch的損失函數,如果一張圖中不夠128個正樣本,拿負樣本補湊齊。
訓練超參數選擇:在PASCAL VOC數據集上前60k次迭代學習率為0.001,后20k次迭代學習率為0.0001;動量設置為0.9,權重衰減設置為0.0005。
?
Fast R-CNN網絡微調訓練
| 樣本 | 來源:PASCAL VOC |
| 正樣本 | Ground Truth +與Ground Truth相交IoU>閾值的區域建議 |
| 負樣本 | 與Ground Truth相交IoU<閾值的區域建議 |
?
?
?
PASCAL VOC 數據集中既有物體類別標簽,也有物體位置標簽;?
正樣本表示每類物品的Ground Truth以及與Ground Truth重疊度超過某一閾值的區域建議,負樣本表示同Ground Truth重疊度小于某一閾值的區域建議;?
回歸操作僅針對正樣本進行。
RPN網絡、Fast R-CNN網絡聯合訓練?
訓練網絡結構示意圖如下所示:?
?
如上圖所示,RPN網絡、Fast R-CNN網絡聯合訓練是為了讓兩個網絡共享卷積層,降低計算量。?
文中通過4步訓練算法,交替優化學習至共享特征:?
① 進行上面RPN網絡預訓練,和以區域建議為目的的RPN網絡end-to-end微調訓練;?
② 進行上面Fast R-CNN網絡預訓練,用第①步中得到的區域建議進行以檢測為目的的Fast R-CNN網絡end-to-end微調訓練【此時無共享卷積層】;?
③ 使用第②步中微調后的Fast R-CNN網絡重新初始化RPN網絡,固定共享卷積層【即設置學習率為0,不更新】,僅微調RPN網絡獨有的層【此時共享卷積層】;?
④ 固定第③步中共享卷積層,利用第③步中得到的區域建議,僅微調Fast R-CNN獨有的層,至此形成統一網絡如上圖所示。
?
解釋分析
RPN網絡中bounding-box回歸怎么理解?同Fast R-CNN中的bounding-box回歸相比有什么區別??
對于bounding-box回歸,采用以下公式:
?
其中,x,y,w,h表示窗口中心坐標和窗口的寬度和高度,變量x,xa和x?分別表示預測窗口、anchor窗口和Ground Truth的坐標【y,w,h同理】,因此這可以被認為是一個從anchor窗口到附近Ground Truth的bounding-box 回歸;
RPN網絡中bounding-box回歸的實質其實就是計算出預測窗口。這里以anchor窗口為基準,計算Ground Truth對其的平移縮放變化參數,以及預測窗口【可能第一次迭代就是anchor】對其的平移縮放參數,因為是以anchor窗口為基準,所以只要使這兩組參數越接近,以此構建目標函數求最小值,那預測窗口就越接近Ground Truth,達到回歸的目的;
文中提到, Fast R-CNN中基于RoI的bounding-box回歸所輸入的特征是在特征圖上對任意size的RoIs進行Pool操作提取的,所有size RoI共享回歸參數,而在Faster R-CNN中,用來bounding-box回歸所輸入的特征是在特征圖上相同的空間size【3×3】上提取的,為了解決不同尺度變化的問題,同時訓練和學習了k個不同的回歸器,依次對應為上述9種anchors,這k個回歸量并不分享權重。因此盡管特征提取上空間是固定的【3×3】,但由于anchors的設計,仍能夠預測不同size的窗口。
文中提到了三種共享特征網絡的訓練方式??
① 交替訓練?
訓練RPN,得到的區域建議來訓練Fast R-CNN網絡進行微調;此時網絡用來初始化RPN網絡,迭代此過程【文中所有實驗采用】;
② 近似聯合訓練?
如上圖所示,合并兩個網絡進行訓練,前向計算產生的區域建議被固定以訓練Fast R-CNN;反向計算到共享卷積層時RPN網絡損失和Fast R-CNN網絡損失疊加進行優化,但此時把區域建議【Fast R-CNN輸入,需要計算梯度并更新】當成固定值看待,忽視了Fast R-CNN一個輸入:區域建議的導數,則無法更新訓練,所以稱之為近似聯合訓練。實驗發現,這種方法得到和交替訓練相近的結果,還能減少20%~25%的訓練時間,公開的python代碼中使用這種方法;
③ 聯合訓練?
需要RoI池化層對區域建議可微,需要RoI變形層實現,具體請參考這片paper:Instance-aware Semantic Segmentation via Multi-task Network Cascades。
圖像Scale細節問題??
文中提到訓練和檢測RPN、Fast R-CNN都使用單一尺度,統一縮放圖像短邊至600像素;?
在縮放的圖像上,對于ZF網絡和VGG-16網絡的最后卷積層總共的步長是16像素,因此在縮放前典型的PASCAL圖像上大約是10像素【~500×375;600/16=375/10】。
網上關于Faster R-CNN中三種尺度這么解釋:?
原始尺度:原始輸入的大小,不受任何限制,不影響性能;?
歸一化尺度:輸入特征提取網絡的大小,在測試時設置,源碼中opts.test_scale=600。anchor在這個尺度上設定,這個參數和anchor的相對大小決定了想要檢測的目標范圍;?
網絡輸入尺度:輸入特征檢測網絡的大小,在訓練時設置,源碼中為224×224。?
以上6行博主并不懂,還需要仔細研究源碼。
理清文中anchors的數目。?
文中提到對于1000×600的一張圖像,大約有20000(~60×40×9)個anchors,忽略超出邊界的anchors剩下6000個anchors,利用非極大值抑制去掉重疊區域,剩2000個區域建議用于訓練;?
測試時在2000個區域建議中選擇Top-N【文中為300】個區域建議用于Fast R-CNN檢測。
總結
以上是生活随笔為你收集整理的Faster R-CNN论文详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用pycaffe读取caffemode
- 下一篇: Faster-RCNN学习