Faster-RCNN算法精讀

轉載自:https://blog.csdn.net/hunterlew/article/details/71075925

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

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

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

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

 

一、 RPN網絡結構

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

 

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

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

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

二、 anchor機制

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

 

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

三、 訓練

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,具體計算如下:

 

四、 聯合訓練

作者採用四步訓練法:

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分以上的結果)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章