【目標檢測】Faster RCNN算法詳解

Ren, Shaoqing, et al. “Faster R-CNN: Towards real-time object detection with region proposal networks.” Advances in Neural Information Processing Systems. 2015.

本文是繼RCNN,Fast RCNN之後,目標檢測界的領軍人物Ross Girshick團隊在2015年的又一力作。簡單網絡目標檢測速度達到17fps,在PASCAL VOC上準確率爲59.9%;複雜網絡達到5fps,準確率78.8%。

思想

從RCNN到Fast RCNN,再到本文的Faster RCNN,目標檢測的四個基本步驟(候選區域生成,特徵提取,分類,位置精修)終於被統一到一個深度網絡框架之內。所有計算沒有重複,完全在GPU中完成,大大提高了運行速度。
這裏寫圖片描述

這裏寫圖片描述

Faster-RCNN

Faster RCNN可以簡單地看做“區域生成網絡+Fast RCNN“的系統,用區域生成網絡(RPN)代替Fast RCNN中的Selective Search方法。本篇論文着重解決了這個系統中的三個問題:

  1. 如何設計區域生成網絡
  2. 如何訓練區域生成網絡
  3. 如何讓區域生成網絡和Fast RCNN網絡共享特徵提取網絡

區域生成網絡(Region Proposal Network)

RPN的核心思想是使用卷積神經網絡直接產生region proposal,使用的方法本質上就是滑動窗口。RPN的設計比較巧妙,RPN只需在最後的卷積層上滑動一遍,因爲anchor機制和邊框迴歸可以得到多尺度多長寬比的region proposal。我們通過如下VGG模型進行分析:
這裏寫圖片描述
以上是script_faster_rcnn_demo.m 代碼中使用的VGG網絡結構proposal + detection,我們輸入一張圖片375x500 (進行尺度縮放後爲600x800, 即對應於test_scales=600,短邊最短爲600,長邊最長不超過1000進行的縮放:Reference),然後將其處理成caffe輸入的blob格式im_blob: 800x600x3 輸入到proposal(RPN)網絡中:Reference,經過卷積操作後得到最後一層conv5_3的卷積特徵圖feature map(大小爲50x38,共有512個,ZF則有256個)。在這個特徵圖上使用3x3的卷積核(滑動窗口)與特徵圖進行卷積後,可以得到一個512維的特徵向量50x38x512,後面接 cls layerreg layer 分別用於分類和邊框迴歸(跟Fast R-CNN類似,只不過這裏的類別只有目標和背景兩個類別)。

  • cls layer即proposal_cls_score層 :輸出每一個位置上,9個anchor屬於前景和背景的概率(代碼中只取了每個位置屬於前景的概率:Reference,即 17100x1 = 50x38x9個anchors屬於前景的概率);
  • reg layer即 proposal_bbox_pred層 :輸出每一個位置上,9個anchor對應窗口應該平移縮放的參數(之後可使用該參數,對縮放後的原圖上的50x38x9個anchors進行邊框迴歸,修正每個anchor屬於前景的位置)

就局部來說,這兩層是全連接網絡;
就全局來說,由於網絡在所有位置(共50x38個)的參數相同,所以實際用尺寸爲1×1的卷積網絡實現。

這裏寫圖片描述
這樣設計的好處是什麼呢?雖然現在也是用的滑動窗口策略,但是:滑動窗口操作是在卷積層特徵圖上進行的,維度較原始圖像降低了16x16倍(中間經過了4次2x2的pooling操作);多尺度採用了9種anchor,對應了三種尺度和三種長寬比,加上後邊接了邊框迴歸,所以即便是這9種anchor外的窗口也能得到一個跟目標比較接近的region proposal。

候選區域(anchor)

我們通過RPN網絡,可以得到最後一個卷積層conv5_3的feature map大小50x38(因爲輸入的im_blob格式是width優先),我們取featuremap_size爲38x50,這是爲了與縮放後的原圖(height優先)600x800進行對應。然後我們計算該38x50個像素點對應於縮放後原圖中的位置,即將feature map中的每個像素點位置×conf.feat_stride,即可映射回縮放後原圖的位置(感受野的概念)。接着使用映射回縮放後原圖上的點,共38x50個位置,計算其在縮放後原圖上的9個anchors,即9個可能的候選窗口:三種面積 { 1282,2562,5122 } × 三種比例{ 1:1,1:2,2:1 } ,共可以計算得到38x50x9 = 17100個anchors,每個anchor就是一個候選框:Reference。這樣我們就粗略得到了輸入的一張圖片所擁有的anchors。(注意,這裏每個位置上的9個anchors尺寸,代碼中提前設計好了,對應於下圖中的conf.anchors)。
這裏寫圖片描述

我們使用一張測試圖片,將通過以上方法產生的anchors,維度爲17100x4(未進行Bounding boxes regression前的),取前9個和最後9個anchors,即對應於將feature map映射回縮放後原圖(600x800尺寸)上的最左上角的一點,和最右下角一點具有的9個anchors,繪製如下,以便更好的理解:

綠、藍、紅分別對應三種比例:{ 1:1,1:2,2:1 }
每一種顏色中又有三種面積: { 1282,2562,5122 }

這裏寫圖片描述

在整個Faster RCNN算法中,有三種尺度。
原圖尺度:原始輸入的大小。不受任何限制,不影響性能。
歸一化尺度(縮放後的原圖):輸入特徵提取網絡的大小,在測試時設置,源碼中opts.test_scale=600。anchor是在這個尺度上設定的,具體如上所述。這個參數和anchor的相對大小決定了想要檢測的目標範圍。
網絡輸入尺度:輸入特徵檢測網絡的大小,在訓練時設置,源碼中爲224x224。

窗口分類和位置精修

將以上計算得到的anchors,結合上面RPN網絡proposal_bbox_pred層所輸出的平移縮放參數進行邊框迴歸,得到pred_boxes,然後將這些anchors按歸一化尺度縮放回對應於原圖尺寸375x500,並把anchors超過原圖375x500邊界的部分都減去,得到最終的pred_boxes:即得到輸入的一張原圖內所擁有的所有anchors:Reference;以及每個anchors屬於前景和背景的得分 (proposal_cls_score層 所輸出的,代碼中只取了其屬於前景的得分)。

測試階段

通過RPN網絡得到了該張圖片的50x38x9=17100個anchors,以及每個anchors屬於前景的分數,然後將anchors根據分數進行排序,選取得分最高的6000個anchors,然後再使用NMS(Non-Maximum Suppression)留下比較好的約2000個左右候選框。之後,再將這些候選框anchors boxes做爲rois輸入到Fast-RCNN detection test網絡,並輸入RPN網絡conv5_3輸出的feature map做爲data,進行後續的Softmax分類+Boundingboxes迴歸。

因此,Faster-RCNN和RCNN, Fast-RCNN一樣,屬於2-stage的檢測算法。

區域生成網絡:訓練

樣本

考察訓練集中的每張圖像:
a. 對每個標定的真值候選區域,與其重疊比例最大的anchor記爲前景樣本
b. 對a)剩餘的anchor,如果其與某個標定重疊比例大於0.7,記爲前景樣本;如果其與任意一個標定的重疊比例都小於0.3,記爲背景樣本
c. 對a),b)剩餘的anchor,棄去不用。
d. 跨越圖像邊界的anchor棄去不用

代價函數

同時最小化兩種代價:
a. 分類誤差
b. 前景樣本的窗口位置偏差
具體參看Fast RCNN中的“分類與位置調整”段落
(實質是一樣的,只是公式表達的方式不同而已)

超參數

原始特徵提取網絡使用ImageNet的分類樣本初始化,其餘新增層隨機初始化。
每個mini-batch包含從一張圖像中提取的256個anchor,前景背景樣本1:1.
前60K迭代,學習率0.001,後20K迭代,學習率0.0001。
momentum設置爲0.9,weight decay設置爲0.0005。

共享特徵

區域生成網絡(RPN)和Fast RCNN都需要一個原始特徵提取網絡(下圖灰色方框)。這個網絡使用ImageNet的分類庫得到初始參數 W0 ,但要如何精調參數,使其同時滿足兩方的需求呢?本文講解了三種方法。
這裏寫圖片描述

輪流訓練

​ (1) 使用在ImageNet上預訓練的模型初始化網絡參數,微調RPN網絡;
​ (2) 使用(1)中RPN網絡提取region proposal訓練Fast R-CNN網絡;
​ (3) 使用(2)的Fast R-CNN網絡重新初始化RPN, 固定卷積層進行微調;
​ (4) 固定(2)中Fast R-CNN的卷積層,使用(3)中RPN提取的region proposal微調網絡。

權值共享後的RPN和Fast R-CNN用於目標檢測精度會提高一些。如Ross Girshick在ICCV 15年的講座Training R-CNNs of various velocities中所述,採用此方法沒有什麼根本原因,主要是因爲”實現問題,以及截稿日期“。需要注意的是,最新的版本已經將RPN網絡和Fast R-CNN網絡結合到了一起——將RPN獲取到的proposal直接連到ROI pooling層,這纔是一個真正意義上的使用一個CNN網絡實現端到端目標檢測的框架。

近似聯合訓練

直接在上圖結構上訓練。在backward計算梯度時,把提取的ROI區域當做固定值看待;在backward更新參數時,來自RPN和來自Fast RCNN的增量合併輸入原始特徵提取層。
此方法和前方法效果類似,但能將訓練時間減少20%-25%。公佈的python代碼中包含此方法。

聯合訓練

直接在上圖結構上訓練。但在backward計算梯度時,要考慮ROI區域的變化的影響。推導超出本文範疇,請參看15年NIP論文。

實驗

除了開篇提到的基本性能外,還有一些值得注意的結論

  • 與Selective Search方法(黑)相比,當每張圖生成的候選區域從2000減少到300時,本文RPN方法(紅藍)的召回率下降不大。說明RPN方法的目的性更明確
    這裏寫圖片描述
  • 使用更大的Microsoft COCO庫訓練,直接在PASCAL VOC上測試,準確率提升6%。說明Faster RCNN遷移性良好,沒有over fitting。
    這裏寫圖片描述

Reference:

https://blog.csdn.net/shenxiaolu1984/article/details/51152614
https://blog.csdn.net/qq_17448289/article/details/52871461
http://noahsnail.com/2018/01/03/2018-01-03-Faster%20R-CNN%E8%AE%BA%E6%96%87%E7%BF%BB%E8%AF%91%E2%80%94%E2%80%94%E4%B8%AD%E6%96%87%E7%89%88/

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