1. 程式人生 > >對faster rcnn 中rpn層的理解

對faster rcnn 中rpn層的理解

height 圖片 http 預測 解決辦法 tar mat proposal 而是

1.介紹

技術分享圖片

圖為faster rcnn的rpn層,接自conv5-3


技術分享圖片

圖為faster rcnn 論文中關於RPN層的結構示意圖

2 關於anchor:

一般是在最末層的 feature map 上再用3*3的窗口去卷積特征。當3*3的卷積核滑動到特征圖的某一個位置時,以當前滑動窗口中心為中心映射到原圖的一個區域(註意 feature map 上的一個點是可以映射到原圖的一個區域的,這個很好理解,感受野起的作用啊~...),以原圖上這個區域的中心對應一個尺度和長寬比,就是一個anchor了。fast rcnn 使用3種尺度和3種長寬比(1:1;1:2;2:1),則在每一個滑動位置就有 3*3 = 9 個anchor。

3 關於結構如圖1所示:

以VGG-16改造的faster r-cnn為例。py-faster r-cnn的/model/pascal-voc/VGG16/faster_rcnn_alt_opt/faster_rcnn_test.pt的RPN部分。這部分是在原來的VGG16的conv5_3之後添加的。
1、conv5_3->rpn_conv/3*3->rpn_relu對應於文中進行n*n的卷積。這裏輸出的維數(output)為512,高H和寬W為輸入的圖像原始大小的1/16。(1,512,H,W)(前面有四個池化層)
2、rpn_relu->rpn_cls_score->rpn_cls_score_reshape->rpn_cls_prob->rpn_cls_prob_reshape
這裏是預測每個點的前景背景概率。rpn_cls_score實際上就是一個1*1的卷積層而已。
如果有A個anchor,每個anchor都有一個前景概率一個背景概率(2*A),輸出的大小為(1,2*A,H,W)。
這裏的reshape只是為了利用softmax層進行概率的計算而已。
3、rpn_relu->rpn_bbox_pred
這裏就是預測每個點的boundingbox。同樣的,rpn_bbox_pred也是一個1*1的卷積層而已。輸出大小為(1,4*A,H,W) 。

關鍵在此,這裏輸出的並不是一個boundingbox的左上右下坐標,而是一個修改量(boundingbox regression)。

在r-cnn的supplementary material中,給出了下面幾個公式

技術分享圖片這裏面的技術分享圖片就是的anchor(高、寬、中心),而裏面的技術分享圖片是rpn_bbox層輸出的四個值,技術分享圖片就是修改之後的高、寬、中心。
4、(rpn_bbox_pred+rpn_cls_prob_reshape)->proposal_layer
這裏的proposal_layer就完成了上述修正,並且進行NMS(非極大抑制)以及概率排序等獲得最終的boundingbox。這樣就完成了在同一個點上獲得不同尺度不同比例的包圍盒。
輸出大小為:(N,4),這裏的 N與NMS以及概率排序閾值有關,得到的就是boundingbox的四個坐標。

4 關於FRCNN box回歸為什麽采用smooth L1 loss

對於邊框的預測是一個回歸問題。通常可以選擇平方損失函數(L2損失)$f(x)=x^2$。但這個損失對於比較大的誤差的懲罰很高。我們可以采用稍微緩和一點絕對損失函數(L1損失)$f(x)=|x|$,它是隨著誤差線性增長,而不是平方增長。

但這個函數在0點處不可導,因此可能會影響收斂。一個通常的解決辦法是在0點附近使用平方函數使得它更加平滑。它被稱之為平滑L1損失函數。它通過一個參數$\sigma$來控制平滑的區域。

對faster rcnn 中rpn層的理解