Faster RCNN 的細節補充


一、faster rcnn的結構

 

 

 通過上面的結構,我們知道該faster rcnn前面以VGG16為框架,加入RPN層,最后做分類層。

采用VGG16相對ZF來說慢一點,但是精度也高一點。

 

二、RPN結構

RPN層的引入,極大提升檢測框的生成速度。RPN是指以下結構:

前面的卷積結果過來后,分兩路來前進,上面是分類路徑(2×9),下面是坐標回歸路徑(4×9)。RPN屬於FCN網絡。

PRN的引入屬於創新性變化,我們在訓練的時候對RPN進行了兩次訓練,一次是使用gt+data 對其訓練,保存產生的proposal,沒有共用卷積層的訓練;

一次是共享卷積層的訓練,具體設置共享卷據層的lr=0,這樣就對RPN單獨訓練了。

還有就是我們訓練RPN時,隨機采樣256的anchors來,以正負1:1來訓練,初始化權重使用高斯隨機初始化新層權重,舊層使用預訓練的imageNet來初始化。

具體的訓練步驟:

 

 

三、anchors

這里每個像素點為中心產生9個anchor,每個anchor對應一個分類分數和回歸分數。256是圖片經過前面的卷積后得到的特征的維度,這里是ZF得到的256維度特征,VGG是512。對該特征

進行reshape成2×9和4×9。

圖片的左上角產生9個anchors后,以滑窗的形式遍歷整個圖,對於1000×600的圖片來說就產生20000個anchors,忽略跨界anchor大概剩下6000個anchors。注意這里訓練時忽略跨界anchors,但測試時不忽略,而采取剪切到邊界的方法。

生成anchors -> softmax分類器提取fg anchors -> bbox reg回歸fg anchors -> Proposal Layer生成proposals

這里Proposal Layer生成proposals的過程為:

Proposal Layer forward(caffe layer的前傳函數)按照以下順序依次處理:

  1. 生成anchors,利用[d_{x}(A),d_{y}(A),d_{w}(A),d_{h}(A)]對所有的anchors做bbox regression回歸(這里的anchors生成和訓練時完全一致)
  2. 按照輸入的foreground softmax scores由大到小排序anchors,提取前pre_nms_topN(e.g. 6000)個anchors,即提取修正位置后的foreground anchors。
  3. 限定超出圖像邊界的foreground anchors為圖像邊界(防止后續roi pooling時proposal超出圖像邊界)
  4. 剔除非常小(width<threshold or height<threshold)的foreground anchors
  5. 進行nonmaximum suppression
  6. 再次按照nms后的foreground softmax scores由大到小排序fg anchors,提取前post_nms_topN(e.g. 300)結果作為proposal輸出。

 

四、bounding box regression原理

綠色是gt box,紅色是anchor,由圖可知anchor的預測不好,沒有包含飛機翼。那么我們現在就對該紅框使用回歸技術使其盡量擬合綠框。注意這里只有當紅色靠近綠框才使用回歸,太遠的誤差大,屬非線性回歸。

給動(Px,Py,Pw,Ph)尋找一種映射使f(Px,Py,Pw,Ph)=(Gxˆ,Gyˆ,Ghˆ,Gwˆ)≈(Gx,Gy,Gh,Gw)

先做平移

再做尺度縮放

回歸就是學習dx(p),dy(P),dw(P),dh(P)四個變換。

輸入是P=(Px,Py,Pw,Ph)和gt的t=(tx,ty,tw,th)

而gt與proposal的真正平移量和尺度縮放量是

那么目標函數是d(P)=wΦ(P), Φ(P)是輸入proposal的特征向量,w是要學習的參數,d(P)是預測值,我們要使預測值d(P)和真實偏差值t的差距最小,使用平方差函數有

函數優化就是針對該目標函數進行最小化

 

使用梯度下降求解w。

 

那么補充下:

1、為什么寬高尺度會設計成這種形式:tx,ty除以寬高,th,tw含log?

因為CNN具有尺度不變性

 

圖片經上面變化后,t的值不變。如果直接學習坐標差,則就前后發生了改變,即x1-p1不等於x2-p2。

而尺度變化中尺度必須大於0,自然想到exp函數,反過來就是log函數的來源了。

 

2、為什么anchor靠近gt時,即IOU較大時,才認為是線性變換?

tx和ty顯然是線性組合。而tw和th中含有log,我們回憶下

高數里面:

因此:

我們看這公式,當且僅當Gw-Pw=0時,才會是線性函數,即gt的寬高和anchor的寬高必須近似相等。

 

五、損失函數

正標簽:IOU最大 + 與gt重疊>0.7 的框,一個gt框會為多個anchors添加正標簽,負標簽是<0.3的框。

 

pi是類的概率(只取1/0,當為1時才對正標簽激活后面的坐標回歸函數),ti是坐標向量,用這兩個量來定義函數(分類得分+回歸得分)。

Ncls和Nreg是歸一化因子,減少遞歸時間並規范化模型。

λ的選取經實驗得10的時候對結果最好。

上面的分類使用對數log損失,下面的回歸使用L1平滑函數損失。回歸為什么不使用平方函數損失呢?

因為平方函數隨着x的增加,平方函數的懲罰會越來越大,所以使用較為平緩的 |x| ; 但 |x| 在0點出不可導,所以要設計成平滑。

最終的L1平滑函數成這樣子:

 

 六、RoI Pooling

 輸入的圖片大小不一樣,為了統一圖片的格式,使用ROI Pooling,保留了全圖的特征,而不用crop或wrap掉部分特征。

RoI Pooling layer forward過程:在之前有明確提到: 是對應MxN尺度的,所以首先使用spatial_scale參數將其映射回(M/16)x(N/16)大小的feature maps尺度;之后將每個proposal水平和豎直分為pooled_w和pooled_h份,對每一份都進行max pooling處理。這樣處理后,即使大小不同的proposal,輸出結果都是 大小,實現了fixed-length output(固定長度輸出)。

 

引用:https://zhuanlan.zhihu.com/p/31426458

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM