前幾期我們一起學習了,R-CNN, SPP-Net, Fast RCNN等網絡,連結如下:
目標檢測算法Fast RCNN詳解
目標檢測算法SPP-Net詳解
目標檢測算法R-CNN詳解
由於每期都是逐步改進,重複的不在贅述,所以建議先閱讀前面的,這期我們繼續改進,學習一下Faster RCNN都做了哪些改進?
我們知道Fast RCNN的主要貢獻是將分類和回歸整合到了網絡中,雖然速度提升了不少,但是還是存在一個很大的問題,就是SS算法選擇候選框,因為這個算法很難在GPU上運行,所以Faster RCNN就將選擇候選框的方法也集成到了網絡中。從R-CNN, Fast RCNN到Faster RCNN,從框架上都做了哪些改變呢?如下表:
從上表中,可以看到在R-CNN時候三大步驟是獨立的,候選框選擇是SS算法,特徵提取是深度網絡,而分類和回歸是單獨的機器學習算法;Fast RCNN將分類回歸也整合到了網絡中;而今天要學的Faster RCNN將SS算法選擇候選,替換成了RPN(Region Proposal Network)深度網絡。接下來我們先一起看一下Faster RCNN的整體框架。
1. Faster RCNN整體框架我們先看看Faster RCNN的大致流程,主要流程跟前面的Fast RCNN都差不多,唯一不一樣的就是候選框的選取,在Fast RCNN的時候是用SS算法進行選取,而在Faster RCNN這裡用了RPN網絡,如下圖:
步驟如下:
將原始輸入圖像輸入到卷積網絡進行特徵提取,得到特徵圖。
對獲取到的特徵圖進行利用RPN網絡進行提取候選框。
利用特徵映射的方法將候選框的位置映射到特徵圖相應位置,並提取特徵。
將提取的特徵經過ROI Pooling層來固定特徵數量。
將經過ROI Pooling的的特徵輸入到共享全連接層。
最後將共享全連接層的輸出分別經過各自的全連接層利用softmax進行分類以及進行邊框回 歸。
核心改進在於利用的RPN網絡代替SS算法提取了候選框。其他地方跟之前的Fast RCNN大致相同。接下來,我們一起重點看一下RPN網絡長什麼樣子?
2. RPN網絡詳解通過上面的學習,我們知道Faster RCNN的重要改進在於RPN層,我們來一起看一下這個RPN層是怎麼實現網絡提取的,如下圖:
首先,我們經過卷積網絡得到特徵圖之後,假設特徵圖的尺寸為W*H*D,先將特徵圖經過一個3*3*256的卷積層,將特徵圖的深度固定為256。
接下來對W*H*256的特徵圖的每個像素都生成K個anchor boxes,映射到輸入圖像上,可以直接理解為,基於特徵圖生成了W*H*K個候選框。
稍後會一起看下如何生成候選框。
然後,利用特徵圖上的每個像素的256個特徵,對該像素產生到原圖上的候選框進行分類和回歸。
我們通過前面學的FCN知道全連接層就相當於是1x1的卷積操作。
所以這裡就直接用1x1的卷積層來直接對該像素產生的候選框進行分類,由於是提取候選框,所以該分類僅分兩類:
目標和背景,每個候選框有兩個得分,故而得到的分類結果就是一個W*H*2K的分類得分圖。
同樣,邊框回歸也利用1x1的卷積層代替全連接層,對映射到原圖上的候選框進行回歸,每個回歸結果由向量[x,y,w,h]組成,所以得到的回歸圖的尺寸為W*H*4K.
對於上面第二步說的特徵圖上的每個像素都產生K個anchor boxes,如下圖:
假如K=9的話,特徵圖上的一個像素產生的K個anchor boxes對應到原圖上就是上圖的9個候選框。分三組比例尺寸(1:1,1:2,2:1),三組size(128,256,512),共9個候選框,這樣總共產生W*H*K個候選框。
對RPN網絡的大致流程理解了,那麼具體該怎麼訓練網絡呢?
RPN網絡訓練我們以具體尺寸為例,來看下這個網絡該怎麼訓練,假如我們最後一層卷積層提取到的特徵圖尺寸為40*60*256,如下圖:
最後一個卷積層輸出的特徵圖再進行一次3*3的卷積操作得到新的特徵圖;
新特徵圖的平面上共有40x60=2400個點,每個點都可以對應到原始圖片上得到9個anchor,所以移動可以得到40x60x9大約20000個候選區域。
計算所有候選區域是否為目標的得分。
把所有超出圖片的候選區域都限制在圖片區域內,給置信度得分排序,選出得分最大的前12000個候選區域。
在選出的候選區域裡面,候選區域之間往往會有大量的重疊,這裡基於上一步的得分,採取非極大值抑制(NMS)。
NMS之後再選出score得分最大的前2000個,接著對這2000個候選區域進行標定,比如候選與某個標定區域的IoU大於0.7的記為正樣本,如果與任意一個標定框的IoU都小於0.3,那麼該候選區域記為負樣本,其餘的不作為樣本訓練。
在訓練RPN層分類回歸任務時,隨機抽取256個區域來訓練,正負樣本比例為1:1,如果正樣本數量小於128,則用負樣本填充。
在訓練整個Faster RCNN的分類回歸任務的時候,隨機抽取64個與真實類別標註框IoU大於等於0.5的區域作為前景,256-64個IoU大於0.1且小於0.5的區域作為背景來訓練具體類別。
到這裡,我們基本上介紹完了Faster RCNN的框架以及RPN網絡的流程。但是明白了原理不代表知道具體怎麼訓練,下期我們深入一步,去學下這個網絡的損失函數該怎麼構建。
好文章,我在看♥