1. 程式人生 > >faster rcnn 中核心部分RPN網路的整理與理解

faster rcnn 中核心部分RPN網路的整理與理解

學習fasterrcnn檢測已經有一段時間了,最近才把核心的RPN部分進行的理解和整理,理解的偏差還請各位大神指正, 

RPN(RegionProposal Network)區域生成網路

 1.  在五層conv,poolling,relu之後,取出conv5的輸出,送給RPN網路;

layer {

 name: "rpn_conv1"

 type: "Convolution"

 bottom: "conv5"

 top: "rpn_conv1"

 param { lr_mult: 1.0 }

 param { lr_mult: 2.0 }

 convolution_param {

   num_output: 256

   kernel_size: 3 pad: 1 stride: 1

   weight_filler { type: "gaussian" std: 0.01 }

   bias_filler { type: "constant" value: 0 }

  }

}

layer {

 name: "rpn_relu1"

 type: "ReLU"

 bottom: "rpn_conv1"

 top: "rpn_conv1"

}

我們只需要一個3*3*256*256這樣的一個4維的卷積核,就可以將每一個3*3的sliding window 卷積成一個256維的向量,相當於feature map每個點都是256-d。

   anchors

。按照尺度變換(128×128, 256*256,512*512,2:1, 1:1, 1:2)計算這256維向量每個畫素的9個anchor,所謂anchors,實際上就是一組由rpn/generate_anchors.py生成的矩形。直接執行generate_anchors.py得到以下輸出:

[[ -84.  -40.  99.   55.]

 [-176.  -88.  191. 103.]

 [-360. -184.  375.  199.]

 [ -56.  -56.  71.   71.]

 [-120. -120.  135.  135.]

 [-248. -248.  263.  263.]

 [ -36.  -80.  51.   95.]

 [ -80. -168.   95. 183.]

 [-168. -344.  183.  359.]]。

2.

計算每個畫素256-d的9個尺度下的值,得到9個anchor,我們給每個anchor分配一個二進位制的標籤(前景背景)。我們分配正標籤前景給兩類anchor:1)與某個ground truth(GT)包圍盒有最高的IoU重疊的anchor(也許不到0.7),2)與任意GT包圍盒有大於0.7的IoU交疊的anchor。注意到一個GT包圍盒可能分配正標籤給多個anchor。我們分配負標籤(背景)給與所有GT包圍盒的IoU比率都低於0.3的anchor。非正非負的anchor對訓練目標沒有任何作用,由此輸出維度為(2*9)18-d,anchor(label和概率)一共18維。

layer {

 name: "rpn_cls_score"

 type: "Convolution"

 bottom: "rpn_conv1"

 top: "rpn_cls_score"

 param { lr_mult: 1.0 }

 param { lr_mult: 2.0 }

 convolution_param {

   num_output: 18   # 2(bg/fg) *9(anchors)

   kernel_size: 1 pad: 0 stride: 1

   weight_filler { type: "gaussian" std: 0.01 }

   bias_filler { type: "constant" value: 0 }

  }

}

對前景anchor使用softmax進行分類,得到anchor類別以及softmax score。

3.

前2.)中已經計算出foreground anchors,使用bounding box regression迴歸得到預設anchor-box到ground-truth-box之間的變換引數,即平移(dx和dy)和伸縮引數(dw和dh),由此得到初步確定proposal。

4.

將預proposal利用feat_stride和im_info將anchors映射回原圖,判斷預proposal是否大範圍超過邊界,剔除嚴重超出邊界的。

按照softmax score進行從大到小排序,提取前2000個預proposal,對這個2000個進行NMS(非極大值抑制),將得到的再次進行排序,輸出300個proposal。

繼續:

對300個proposal進行ROIpooling提取出固定長度的特徵送入全連線層

再進行softmax分類計算得分,進行boundingbox regression得到精確位置。

附上參考的連線,


如理解有偏差請留言指正!謝謝