Faster R-CNN理论
前言
本文參考來源于b站up主霹靂吧啦Wz.原視頻.
Faster R-CNN是作者作者Ross Girshick繼Fast R-NN之后的又一力作。同樣使用VGG16作為網絡的backbone,推理速度在GPU上達到5fps(包括候選區域的生成),準確率也有進一步的提升。在2015年的ILSVRC以及COCO競賽中獲得多個項目的第一名。
文章目錄
- 前言
- 理論部分
- 1.Fast R-CNN簡介
- 2.Faster R-CNN簡介
- 3. RPN網絡
- 參數解釋
- anchor boxes解釋
- RPN訓練過程中正負樣本的選擇標準
- RPN Multi-task loss
- 分類損失
- Fast R-CNN Multi-task loss
- 4.Faster R-CNN訓練
- 5.Faster R-CNN框架
理論部分
1.Fast R-CNN簡介
在講Faster R-CNN之前我們先來簡單的看一下它的上一代算法:Fast R-CNN
Fast R-CNN算法的流程可以分為三個步驟:
- 通過使用Selective Search方法在一張圖片上生成1000~2000個候選區域(這種方法在Faster R-CNN中RPN網絡被替代)
- 將圖像輸入卷積網絡生成相應的特征圖,將SS算法生成的候選框投影到特征圖上獲得相應的特征矩陣。(也就是相當于有了一張特征圖,然后在特征圖上將ss算法掃到的區域框出來)
- 將每個特征矩陣通過ROI pooling層縮放到7x7大小的特征圖,接著將特征圖展平通過一系列全連接層得到預測結果
2.Faster R-CNN簡介
Faster R-CNN算法的流程可分為三個步驟:
- 將圖像輸入網絡得到相應的特征圖
- 使用RPN結構生成候選框,將RPN生成的候選框投影到特征圖上獲得相應的特征矩陣
- 將每個特征矩陣通過ROI pooling層縮放到7x7大小的特征圖,接著將特征圖展平通過一系列全連接層得到預測結果
實際上我們的Faster R-CNN可以看作是RPN+Fast R-CNN這個形式。Faster R-CNN和Fast R-CNN最主要的區別就在于:Faster R-CNN將候選框的推舉交給RPN網絡來實現(替代了SS算法)。
因此我們的研究重點就在于RPN網絡。
3. RPN網絡
參數解釋
首先,由上一步的conv layers生成了conv feature map。在這張特征圖上,我們使用一個滑動窗口進行滑動。每滑動到一個位置上時候,我們就生成一個1-dim向量。在這個向量基礎上再通過兩個全連接層,分別輸出目標概率和邊界框回歸參數。其中:
- 256-d:因為我們前面的backbone網絡使用的是ZF網絡,它所輸出的特征圖是256-d。如果使用VGG-16,生成的特征圖就是512-d。
- 2k:是指k個anchor boxes,每個anchor boxes生成兩個概率(前景和背景)。所以k個anchor boxes會生成2k個scores。
- 4k:對每個anchor boxes我們會生成4個邊界框回歸參數。所以k個anchor boxes會生成4k個coordinates。
anchor boxes解釋
首先明確上圖的含義,左邊是原圖,右邊是相應的特征圖,我們使用一個3*3滑動窗口在特征圖上進行滑動的時候,特征圖會存在一個中心點,通過推算出該中心點在原圖上的對應位置,在原圖上以這個中心點為中心,生成一系列anchor boxes。舉個例子,就是如下這種效果:
對于k個anchor boxes,存在2k個scores。兩個兩個為一組(前景和背景的概率),一共k組。比如第一組:
- 0.1代表其中一個anchor boxes框選(比如是圖中的正方形框)的內容是背景的概率是0.1;
- 0.9代表其中一個anchor boxes框選(比如是圖中的正方形框)的內容是前景的概率是0.9;
這里只是對它進行背景還是前景的預測,并沒有進行分類!
對于k個anchor boxes,存在4k個coordinates。每四個為一組,共k組。
- dx,dyd_x,d_ydx?,dy?是anchor中心點的坐標;
- dw,dhd_w,d_hdw?,dh?是anchor的寬和高的調整參數;
論文里面給出了三種尺度(面積)的anchor(1282,2562,5122128^2,256^2 ,512^21282,2562,5122),三種比例(1:1,1:2,3:1),每個位置(每個滑動窗口)在原圖上都對應3?33*33?3,9個anchor。
這里有個點需要注意:
對于ZF感受野為171;對于VGG感受野為228??墒俏覀儚纳厦婵梢灾?#xff0c;生成的anchor有256和512的,那么感受野還沒有這個anchor大,我們能進行判斷嘛?
如上圖:作者給出了相應的解釋,作者認為一個比較小的感受野(也就是看見一個物體的一部分),我們也可以大概的知道這個物體是什么。(有種窺一斑也可以知全豹的感覺)。實際使用的時候也證明這樣是有效的。
對于一張1000x600x3的圖像,大約有 60x40x9(20k)個anchor,忽略跨越邊界的 anchor以后,剩下約6k個anchor。對于RPN 生成的候選框之間存在大量重疊,基于候選框的cls得分,采用非極大值抑制,IoU 設為0.7,這樣每張圖片只剩2k個候選框。
RPN訓練過程中正負樣本的選擇標準
通過滑動窗口在特征圖上進行滑動,我們得到了上萬個anchor,這些anchor不能都用來訓練RPN網絡。在原論文中作者說每張圖片我們隨機的采樣256個anchor。這256個anchor是由正樣本和負樣本組成。正負樣本的比例為1:1。如果正樣本不足一半,我們就用負樣本來填充。
下面是正負樣本的選擇標準:
正樣本的選擇標準:
負樣本的選擇標準:
We assign a negative label to a non-positive anchor if its IoU ratio is lower than 0.3 for all ground-truth boxes.
丟棄掉的anchor:
Anchors that are neither positive nor negative do not contribute to the training objective.
RPN Multi-task loss
其中:
i: the index of an anchor in a mini-batch
pip_ipi?:第i個anchor預測為object的概率
pi?:p_i^*:pi??:當為正樣本時候為1,當為負樣本時候為0
tit_iti?: 表示預測第i個anchor的邊界框回歸參數
ti?t_i^*ti??:表示第i個anchor對應的GT Box的邊界框回歸參數
NclsN_{cls}Ncls?:表示一個mini-batch中的所有樣本數量256
NregN_{reg}Nreg?:表示anchor位置的個數(不是anchor個數)約2400(60*40)
λ\lambdaλ=10
分類損失
按多類別交叉熵損失來理解:
按二值交叉熵損失理解:
Fast R-CNN Multi-task loss
4.Faster R-CNN訓練
直接采用RPN Loss+ Fast R-CNN Loss的聯合訓練方法
原論文中采用分別訓練RPN以及Fast R-CNN的方法:
5.Faster R-CNN框架
Faster R-CNN應用了端對端的思想,將Region proposal;Feature extraction;Classification;Bounding-box regression都融合進了CNN網絡。
Faster R-CNN與前代算法框架的比較:
總結
以上是生活随笔為你收集整理的Faster R-CNN理论的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 写一个简单的 django_post
- 下一篇: virtualenv模块使用