天天看點

Faster R-CNN 了解

參考博文: 知乎傳送門

Faster R-CNN 了解
Faster R-CNN 了解

1. Conv layers。作為一種CNN網絡目标檢測方法,Faster R-CNN首先使用一組基礎的conv+relu+pooling層提取image的feature maps。該feature maps被共享用于後續RPN層和全連接配接層。(maps 的 s 解釋下.)

Faster R-CNN 了解

因為conv結構後的feature map有256或512張(上圖是256張), 是以相當于feature map每個點都是256-dimensions。是以是feature maps.. 并且上圖可知,對256張feature maps做3x3的filter,卷積核的尺寸其實是 3x3x256 (即output number 也是256.)

2. Region Proposal Networks。RPN網絡用于生成region proposals。該層通過softmax判斷anchors屬于foreground或者background,再利用bounding box regression修正anchors獲得精确的proposals。(包涵foreground和backrround的判斷和bboxregression兩步.)

Faster R-CNN 了解

RPN網絡實際分為2條線,上面一條通過softmax分類anchors獲得foreground和background,下面一條用于計算對于anchors的bounding box regression偏移量,以獲得精确的proposal ( bbox regression的輸入僅是個:1x1 後的 map)。 最後的Proposal 層負責綜合foreground anchors和bounding box regression偏移量擷取proposals,同時剔除太小和超出邊界的proposals。其實整個網絡到了Proposal Layer這裡,就完成了相當于目标定位的功能。解釋下im_info,im_info是proposal 層的輸入。對于一副任意大小PxQ圖像,傳入Faster RCNN前首先reshape到固定

Faster R-CNN 了解

,im_info=[M, N, scale_factor] 則儲存了此次縮放的所有資訊。然後經過Conv Layers,經過4次pooling變為

Faster R-CNN 了解

大小,其中feature_stride=16則儲存了該資訊,用于計算anchor偏移量。

對bbx 的 regression,我參考的知乎文章寫的很清楚,我這裡就直接搬過來:

  • 給定:anchor
    Faster R-CNN 了解
    Faster R-CNN 了解
  • 尋找一種變換F,使得:
    Faster R-CNN 了解
    ,其中
    Faster R-CNN 了解

那麼經過何種變換F才能從圖10中的anchor A變為G'呢? 比較簡單的思路就是:

  • 先做平移
Faster R-CNN 了解
  • 再做縮放
Faster R-CNN 了解

觀察上面4個公式發現,需要學習的是

Faster R-CNN 了解

這四個變換。當輸入的anchor A與GT相差較小時,可以認為這種變換是一種線性變換, 那麼就可以用線性回歸來模組化對視窗進行微調(注意,隻有當anchors A和GT比較接近時,才能使用線性回歸模型,否則就是複雜的非線性問題了 。。。有待好好了解...)。

接下來的問題就是如何通過線性回歸獲得

Faster R-CNN 了解

了。線性回歸就是給定輸入的特征向量X, 學習一組參數W, 使得經過線性回歸後的值跟真實值Y非常接近,即

Faster R-CNN 了解

。對于該問題,輸入X是一張經過卷積獲得的feature map,定義為Φ;同時還有訓練傳入的GT,即

Faster R-CNN 了解

。輸出是

Faster R-CNN 了解

四個變換。那麼目标函數可以表示為:

Faster R-CNN 了解

其中Φ(A)是對應anchor的feature map組成的特征向量,w是需要學習的參數,d(A)是得到的預測值(*表示 x,y,w,h,也就是每一個變換對應一個上述目标函數)。為了讓預測值

Faster R-CNN 了解

與真實值差距最小,設計損失函數:

Faster R-CNN 了解

函數優化目标為:

Faster R-CNN 了解

需要說明,隻有在GT與需要回歸框位置比較接近時,才可近似認為上述線性變換成立。

說完原理,對應于Faster RCNN原文,foreground anchor與ground truth之間的平移量

Faster R-CNN 了解

與尺度因子

Faster R-CNN 了解

如下:

Faster R-CNN 了解

對于訓練bouding box regression網絡回歸分支,輸入是cnn feature Φ,監督信号是Anchor與GT的差距

Faster R-CNN 了解

,即訓練目标是:輸入 Φ的情況下使網絡輸出與監督信号盡可能接近。

那麼當bouding box regression工作時,再輸入Φ時,回歸網絡分支的輸出就是每個Anchor的平移量和變換尺度

Faster R-CNN 了解

,顯然即可用來修正Anchor位置了。

RPN網絡的總結:生成anchors -> softmax分類器提取fg anchors -> bbox reg回歸fg anchors -> Proposal Layer生成proposals

3. RoI Pooling。該層收集輸入的feature maps和proposals,綜合這些資訊後提取proposal feature maps,送入後續全連接配接層判定目标類别。

RoI pooling層主要是解決上述得到的各個 proposals size 各不相同的問題。它們這樣的不同size直接resize是會破壞特征的,如:

Faster R-CNN 了解

RoI pooling 具體操作:

将每個proposal水準和豎直分為pooled_w和pooled_h份(本文是7 和 7),對每一份都進行max pooling處理。這樣處理後,即使大小不同 size 的proposal,輸出結果都是

Faster R-CNN 了解

大小,實作了fixed-length output(固定長度輸出)。 caffe layer 參數:

layer {
  name: "roi_pool5"
  type: "ROIPooling"
  bottom: "conv5_3"
  bottom: "rois"
  top: "pool5"
  roi_pooling_param {
    pooled_w: 7
    pooled_h: 7
    spatial_scale: 0.0625 # 1/16
  }
}
           
Faster R-CNN 了解

4. Classification。利用proposal feature maps計算proposal的類别,同時再次bounding box regression獲得檢測框最終的精确位置。(進行目标具體類别識别.并在一次bbox regression,精準目标坐标.)

Classification部分利用已經獲得的proposal feature maps,通過full connect層與softmax計算每個proposal具體屬于那個類别(如人,車,電視等),輸出cls_prob機率向量;同時再次利用bounding box regression獲得每個proposal的位置偏移量bbox_pred,用于回歸更加精确的目标檢測框。Classification部分網絡結構如圖:

Faster R-CNN 了解

從PoI Pooling擷取到7x7=49大小的proposal feature maps後,送入後續網絡,可以看到做了如下2件事:

1. 通過全連接配接和softmax對proposals進行分類,這實際上已經是識别的範疇了

2. 再次對proposals進行bounding box regression,擷取更高精度的rect box

這裡來看看全連接配接層InnerProduct layers,簡單的示意圖如圖:

Faster R-CNN 了解

其計算公式如下:

Faster R-CNN 了解

其中W和bias B都是預先訓練好的,即大小(次元)是固定的,當然輸入X和輸出Y也就是固定大小。是以,這也就印證了之前Roi Pooling的必要性。 RoI 的必要性!!!

更所細節,移步知乎傳送門,大神寫的真心良心!!!

繼續閱讀