機器學習-Faster RCNN中的RPN網絡

Faster R-CNN最突出的貢獻在於提出Region Proposal Network(RPN)替換了選擇性搜索(Selective Search),在保證對象檢測的準確率的條件下,將檢測時間降低了10倍左右,實現了實時的對象檢測。

機器學習-Faster RCNN中的RPN網絡

從上表中可以看出,SS平均耗費約1.5s來計算Proposal,而Faster R-CNN的Proposal+Detection過程耗費198ms,通過共享卷積特徵層,RPN獲取Proposal的過程僅僅耗時10ms。

RPN網絡

RPN網絡生成Region Proposal的過程如下:

we slide a small network over the conv feature map output by the last shared conv layer。

機器學習-Faster RCNN中的RPN網絡

Region Proposal Network

RPN網絡結構:3x3的卷積層 + 兩個1x1的卷積網絡(reg + cls)。

conv layer,slim.conv2d的激活函數是ReLU:

rpn = slim.conv2d(net_conv,

cfg.RPN_CHANNELS,

[3, 3],

trainable=is_training,

weights_initializer=initializer,

scope="rpn_conv/3x3")

cls layer:

rpn_cls_score = slim.conv2d(rpn,

self._num_anchors * 2,

[1, 1],

trainable=is_training,

weights_initializer=initializer,

padding='VALID',

activation_fn=None,

scope='rpn_cls_score')

reg layer:

rpn_bbox_pred = slim.conv2d(rpn,

self._num_anchors * 4,

[1, 1],

trainable=is_training,

weights_initializer=initializer,

padding='VALID',

activation_fn=None,

scope='rpn_bbox_pred')

由於採用滑動窗口的模式,所以整個Feature Map共享相同的參數。

RPN生成ROI

RPN的Anchor機制相當於對暴力窮舉,論文中,設置stride=16,那麼1000x16的圖片就生成大約60x40x9=20000個Anchor Boxes,如此多的Anchor Boxes,需要經過一定篩選機制,剔除重複和無效的Anchor Boxes,以得到更好的Region Proposal。

機器學習-Faster RCNN中的RPN網絡

_proposal_layer:

通過神經網絡產生的rpn_bbox_pred是參數化的Bounding Box,首先需要轉換到圖像座標框,並且裁剪掉超出邊界的部分。

機器學習-Faster RCNN中的RPN網絡

parameterization of the bounding box coordinate

然後採用nms(非最大值抑制),按照Score大小返回前Top N的rois;

非最大值抑制(NMS)

非最大值抑制的過程如下,將所有的Proposal按照score排序,然後去除重疊區域大於閾值的候選框。

機器學習-Faster RCNN中的RPN網絡

_anchor_target_layer:

該函數過濾在圖片範圍之外的Anchor,通過IoU計算正負樣本,最終返回rpn_labels, rpn_bbox_targets, rpn_bbox_inside_weights,和rpn_bbox_outside_weights.

_proposal_target_layer:

訓練過程中每個Batch輸入一張圖片,在一張圖片中包含需要許多正樣本和負樣本的Anchors,一般情況下,不會把所有的樣本都參與訓練,因為通常都是負樣本佔據多數,會誤導整個網絡。論文中,會隨機的在一張圖片中採樣256個Anchor(正樣本和負樣本數量為1:1),如果正樣本的數量少於128個,會用負樣本來補充。該函數會所有的ROI、用於迴歸的Box以及用於Loss計算的bbox_inside_weights和bbox_outside_weights。


分享到:


相關文章: