功能描述:
文章《Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks》是為了改進Fast R-CNN而提出來的。因為在Fast R-CNN文章中的測試時間是不包括search selective時間的,而在測試時很大的一部分時間要耗費在候選區域的提取上。(對于Fast R-CNN的詳細知識,請查看Fast R-CNN文章詳細解讀。)Faster R-CNN正是為解決這個問題而提出來的。
為了更好的理解Faster R-CNN的內容,先來看一下Faster R-CNN的整體結構,如下圖所示 :

通過上面兩張圖可以看出Faster R-CNN由四個部分組成:
1)卷積層(conv layers),用于提取圖片的特征,輸入為整張圖片,輸出為提取出的特征稱為feature maps
2)RPN網絡(Region Proposal Network),用于推薦候選區域,這個網絡是用來代替之前的search selective的。輸入為圖片(因為這里RPN網絡和Fast R-CNN共用同一個CNN,所以這里輸入也可以認為是featrue maps),輸出為多個候選區域,這里的細節會在后面詳細介紹。
3)RoI pooling,和Fast R-CNN一樣,將不同大小的輸入轉換為固定長度的輸出,輸入輸出和Faste R-CNN中RoI pooling一樣。
4)分類和回歸,這一層的輸出是最終目的,輸出候選區域所屬的類,和候選區域在圖像中的精確位置。
1.RPN
通過上述介紹可以知道,Faster R-CNN與Fast R-CNN最大的區別就是提出了一個叫RPN(Region Proposal Networks)的網絡,專門用來推薦候選區域的,RPN可以理解為一種全卷積網絡,該網絡可以進行end-to-end的訓練,最終目的是為了推薦候選區域,如下圖所示。
原文中RPN網絡為CNN后面接一個3*3的卷積層,再接兩個1*1的卷積層(原文稱這兩個卷積層的關系為sibling),其中一個是用來給softmax層進行分類,另一個用于給候選區域精確定位。
到這里其實有個疑問沒有說清楚,也算是理解這篇文章的重點,通過CNN得到的feature map怎么可以通過RPN得到與原圖對應的候選區域的,換句話說,RPN輸出的候選區域和softmax的結構怎么與原圖中的區域進行對應的。要解決這個疑問就得先理解anchors的概念。
2.anchors
anchors可以理解為一些預設大小的框,anchors的種類用k表示,在原文中k=9,由3種面積(12821282,25622562,51225122)和3種長寬比(1:1,1:2,2:1)組成,這里anchors的大小選取是根據檢測時的圖像定義,在檢測時會將最小邊縮放到600,最大邊不超過1000(我看的是tf版本的代碼)。生成anchors如下
1)在原文中使用的是ZF model中,其Conv Layers中最后的conv5層num_output=256,對應生成256張特征圖(feature maps),所以相當于feature map每個點都是256-dimensions
2)在conv5之后,做了rpn_conv/3x3卷積且num_output=256,相當于每個點又融合了周圍3x3的空間信息),同時256-d不變
3)假設在conv5 feature map中每個點上有k個anchor(原文如上k=9),而每個anhcor要分foreground和background,所以每個點由256d feature轉化為cls=2k scores;而每個anchor都有[x, y, w, h]對應4個偏移量,所以reg=4k coordinates(scores和coordinates為RPN的最終輸出)
4)補充一點,全部anchors拿去訓練太多了,訓練程序會在合適的anchors中隨機選取128個postive anchors+128個negative anchors進行訓練(至于什么是合適的anchors接下來RPN的訓練會講)
注意,在tf版本的代碼中使用的VGG conv5 num_output=512g,所以是512d,其他類似。
3.RPN訓練
RPN訓練中對于正樣本文章中給出兩種定義。第一,與ground truth box有最大的IoU的anchors作為正樣本;第二,與ground truth box的IoU大于0.7的作為正樣本。文中采取的是第一種方式。文中定義的負樣本為與ground truth box的IoU小于0.3的樣本。
訓練RPN的loss函數定義如下:
L({pi},{ti})=1Ncls∑iLcls(pi,p∗i)+λ1Nreg∑ip∗iLreg(ti,t∗i)L({pi},{ti})=1Ncls∑iLcls(pi,pi∗)+λ1Nreg∑ipi∗Lreg(ti,ti∗)
其中,i表示mini-batch中第i個anchor,pipi表示第i個anchor是前景的概率,當第i個anchor是前景時p∗ipi∗為1反之為0,titi表示預測的bounding box的坐標,t∗iti∗為ground truth的坐標。
看過Fast R-CNN文章詳細解讀文章的會發現,這部分的loss函數和Fast R-CNN一樣,除了正負樣本的定義不一樣,其他表示時一樣的。
4.RPN網絡與Fast R-CNN網絡的權值共享
RPN最終目的是得到候選區域,但在目標檢測的最終目的是為了得到最終的物體的位置和相應的概率,這部分功能由Fast R-CNN做的。因為RPN和Fast R-CNN都會要求利用CNN網絡提取特征,所以文章的做法是使RPN和Fast R-CNN共享同一個CNN部分。
Faster R-CNN的訓練方法主要分為兩個,目的都是使得RPN和Fast R-CNN共享CNN部分,如下圖所示
-
|