Faster-RCNN 算法解讀(轉)

論文:《Faster R-CNN: Towards Real-Time ObjectDetection with Region Proposal Networks》算法

摘要:算法主要解決兩個問題:網絡

一、提出區域建議網絡RPN,快速生成候選區域;ide

二、經過交替訓練,使RPN和Fast-RCNN網絡共享參數。函數

 

1、 RPN網絡結構學習

RPN網絡的做用是輸入一張圖像,輸出一批矩形候選區域,相似於以往目標檢測中的Selective Search一步。網絡結構是基於卷積神經網絡,但輸出包含二類softmax和bbox迴歸的多任務模型。網絡結果以下(以ZF網絡爲參考模型):測試

 

其中,虛線以上是ZF網絡最後一層卷積層前的結構,虛線如下是RPN網絡特有的結構。首先是3*3的卷積,而後經過1*1卷積輸出分爲兩路,其中一路輸出是目標和非目標的機率,另外一路輸出box相關的四個參數,包括box的中心座標x和y,box寬w和長h。spa

(至於以前爲何要用3*3的卷積核,我以爲是和感覺野大小相對應的。在原來的ZF模型中,3*3卷積覈對應map比例是3/13,至關於在型如1000*600的圖片中採用180左右的感覺野。對於1000*600的圖片中大部分目標而言,這個大小的感覺野是比較合適的吧。).net

從卷積運算自己而言,卷積至關於滑窗。假如輸入圖像是1000*600,則通過了幾回stride後,map大小縮小了16倍,最後一層卷積層輸出大約爲60*40大小,那麼至關於用3*3的窗口滑窗(注意有padding),對於左邊一支路而言,輸出18個通道,每一個通道map大小仍爲60*40,表明每一個滑窗中心對應感覺野內存在目標與否的機率。右支路同理。blog

2、 anchor機制圖片

anchor是rpn網絡的核心。剛剛說到,須要肯定每一個滑窗中心對應感覺野內存在目標與否。因爲目標大小和長寬比例不一,須要多個尺度的窗。Anchor即給出一個基準窗大小,按照倍數和長寬比例獲得不一樣大小的窗。例如論文中基準窗大小爲16,給了(八、1六、32)三種倍數和(0.五、一、2)三種比例,這樣可以獲得一共9種尺度的anchor,如圖(摘自http://blog.csdn.net/shenxiaolu1984/article/details/51152614)。

 

所以,在對60*40的map進行滑窗時,以中心像素爲基點構造9種anchor映射到原來的1000*600圖像中,映射比例爲16倍。那麼總共能夠獲得60*40*9大約2萬個anchor。

3、 訓練

RPN網絡訓練,那麼就涉及ground truth和loss function的問題。對於左支路,ground truth爲anchor是否爲目標,用0/1表示。那麼怎麼斷定一個anchor內是否有目標呢?論文中採用了這樣的規則:1)假如某anchor與任一目標區域的IoU最大,則該anchor斷定爲有目標;2)假如某anchor與任一目標區域的IoU>0.7,則斷定爲有目標;3)假如某anchor與任一目標區域的IoU<0.3,則斷定爲背景。所謂IoU,就是預測box和真實box的覆蓋率,其值等於兩個box的交集除以兩個box的並集。其它的anchor不參與訓練。

因而,代價函數定義爲:

 

代價函數分爲兩部分,對應着RPN兩條支路,即目標與否的分類偏差和bbox的迴歸偏差,其中Leg(ti,ti*) = R(ti-ti*)採用在Fast-RCNN中提出的平滑L1函數,做者認爲其比L2形式的偏差更容易調節學習率。注意到迴歸偏差中Leg與pi相乘,所以bbox迴歸只對包含目標的anchor計算偏差。也就是說,若是anchor不包含目標,box輸出位置無所謂。因此對於bbox的groundtruth,只考慮斷定爲有目標的anchor,並將其標註的座標做爲ground truth。此外,計算bbox偏差時,不是比較四個角的座標,而是tx,ty,tw,th,具體計算以下:

 

4、 聯合訓練

做者採用四步訓練法:

1) 單獨訓練RPN網絡,網絡參數由預訓練模型載入;

2) 單獨訓練Fast-RCNN網絡,將第一步RPN的輸出候選區域做爲檢測網絡的輸入。具體而言,RPN輸出一個候選框,經過候選框截取原圖像,並將截取後的圖像經過幾回conv-pool,而後再經過roi-pooling和fc再輸出兩條支路,一條是目標分類softmax,另外一條是bbox迴歸。截止到如今,兩個網絡並無共享參數,只是分開訓練了;

3) 再次訓練RPN,此時固定網絡公共部分的參數,只更新RPN獨有部分的參數;

4) 那RPN的結果再次微調Fast-RCNN網絡,固定網絡公共部分的參數,只更新Fast-RCNN獨有部分的參數。

至此,網絡訓練結束,網絡集檢測-識別於一體,測試階段流程圖以下:

 

 

 

 

有一些實現細節,好比RPN網絡獲得的大約2萬個anchor不是都直接給Fast-RCNN,由於有不少重疊的框。文章經過非極大值抑制的方法,設定IoU爲0.7的閾值,即僅保留覆蓋率不超過0.7的局部最大分數的box(粗篩)。最後留下大約2000個anchor,而後再取前N個box(好比300個)給Fast-RCNN。Fast-RCNN將輸出300個斷定類別及其box,對類別分數採用閾值爲0.3的非極大值抑制(精篩),並僅取分數大於某個分數的目標結果(好比,只取分數60分以上的結果)。

相關文章
相關標籤/搜索