參考:https://blog.csdn.net/u011746554/article/details/74999010
(Region Proposal Network)區域生成網絡

RPN網絡中利用anchors和softmax初步提取出foreground anchors作為候選區域。
1)
layer {
name: “rpn_cls_score”
type: “Convolution”
bottom: “rpn/output”
top: “rpn_cls_score”
convolution_param {
num_output: 18 # 2(bg/fg) * 9(anchors)
kernel_size: 1 pad: 0 stride: 1
}
}
那麼為何要在softmax前後都接一個reshape layer?
便于softmax分類,
從caffe的實作形式說起,在caffe基本資料結構blob中以如下形式儲存資料:
blob=[batch_size, channel,height,width]
對應至上面的儲存bg/fg anchors的矩陣,其在caffe blob中的存儲形式為[1, 29, H, W]。
而在softmax分類時需要進行fg/bg二分類,是以reshape layer會将其變為[1, 2, 9H, W]大小,
即單獨“騰空”出來一個次元以便softmax分類,之後再reshape回複原狀。
caffe softmax_loss_layer.cpp的reshape函數的解釋,非常精辟:
"Number of labels must match number of predictions; "
"e.g., if softmax axis == 1 and prediction shape is (N, C, H, W), "
"label count (number of labels) must be NHW, "
“with integer values in {0, 1, …, C-1}.”;
2)
layer {
name: “rpn_bbox_pred”
type: “Convolution”
bottom: “rpn/output”
top: “rpn_bbox_pred”
convolution_param {
num_output: 36 # 4 * 9(anchors)
kernel_size: 1 pad: 0 stride: 1
}
}
生成anchors -> softmax分類器提取fg anchors -> bbox reg回歸fg anchors -> Proposal Layer生成proposals
Faster-RCNN = Fast-RCNN + RPN
RPN(FCN):
任意分辨率的圖像,經過RPN,得到一個feature map。
feature map上的每一個點映射回原圖,得到這些點的坐标。
然後這些點周圍取一些提前設定好的區域,如選取每個點周圍5x5的一個區域,這些選好的區域可以用來訓練RPN。
假設我們對feature map上的每個點選取了K個anchor,feature map的大小為HWC,那麼我們再對這個feature map做兩次卷積操作,輸出分别是HWnum_classK和HW4K,分别對應每個點每個anchor屬于每一類的機率以及它所對應的物體的坐标。
那麼怎麼訓練這個網絡呢?
網絡的loss function:一個用于分類的softmax loss、一個用于回歸的smooth L1 loss
輸出對應的ground truth也很好得到,對于每個anchor,如果它和圖檔中某個物體的IOU(面積的交/面積的并)大于一個門檻值,就認為它屬于這一類,否則認為是背景,對于那些是背景的anchor回歸的loss就是0,其他anchor位置的ground truth就是它們所對應的物體的位置。
RPN其實就是關鍵的地方就在于選取了一些anchor然後進行pixel-wise的學習
RPN缺點:
最大的問題就是對小物體檢測效果很差。
假設輸入為512512,經過網絡後得到的feature map是3232,那麼feature map上的一個點就要負責周圍至少是16*16的一個區域的特征表達,那對于在原圖上很小的物體它的特征就難以得到充分的表示,是以檢測效果比較差。
SSD: Single Shot MultiBox Detector很好的解決了這個問題。
SSD可以了解為multi-scale版本的RPN,它和RPN最大的不同在于RPN隻是在最後的feature map上預測檢測的結果,而最後一層的feature map往往都比較抽象,對于小物體不能很好地表達特征,而SSD允許從CNN各個level的feature map預測檢測結果,這樣就能很好地适應不同scale的物體,對于小物體可以由更底層的feature map做預測。這就是SSD和RPN最大的不同,其他地方幾乎一樣。