Faster R CNN
Faster R CNN
3 FASTER R-CNN
我們的Faster R CNN 由兩個模塊組成,第一個模塊是 proposes regions 的全卷積網絡,第二個是使用 proposed regions 的 Faster R CNN 檢測器。
3.1 Region Proposal Networks
RPN以一個圖像作為輸入,并輸出一組矩形object proposal 每個提案都有 客觀的score,我們用一個完全卷積的我網絡對這個過程進行建模。由于我們的最終目標是與faster r cnn 目標檢測網絡共享計算,我們假設這兩個網絡共享一組公共的卷積層。
為了產生proposal region 我們在最后一個共享卷積層輸出的卷積特征圖上滑動了一個小網絡。該小網絡采用輸入卷積特征的 nxn 空間窗口作為輸入。每個滑動窗口映射到一個低維特征。這個特征被輸入到兩個完全連接的同級層:一個boxes回歸層, 一個box分類層。本文使用n=3,輸入圖像上的有效感受野很大。由于迷你網絡以滑動的方式工作,全連接層是在所有空間位置共享的。該體系結構自然由nxn卷積層和兩個1x1卷積層(分別用于reg和cls)實現。
3.1.1 Anchors
在每個滑動窗口位置,我們同時預測多個region proposal,其中每個位置最大可能方案數為k,因此reg層有4k輸出編碼k個框的坐標,cls輸出2k分數,估計每個proposal region的的對象概率和非對象概率。
anchor位于滑動窗口的中心,默認情況下,我們使用3個尺度和3個縱橫比,一共9個anchor,對于W×H的feature map 來說,一共有WHk個anchor。
Translation-Invariant Anchors
我們的方法保證了平移不變性。我們的方法有(4 + 2)× 9 維卷積輸出層,因此我們的proposal 層的參數很少。
Multi-Scale Anchors as Regression References
我們的anchor解決了多尺度的挑戰。對于多尺度,第一種,圖像/特征金字塔的方法非常費時,如DPM,第二種,在feature map上使用多尺度的滑動窗口,使用不同的filter尺寸來訓練不同長徑比的模型。基于anchor的方法,依賴單一尺度的圖像和feature map,并且使用單一大小的filter。可以很好的解決多尺度和大小問題。
3.1.2 Loss Function
我們給兩種anchors指定正標簽(1)與ground truth的IoU最高的anchor(2)IoU大于0.7的anchor,一個單一的ground truth 可以為多個anchor指定正標簽。利用這些定義,我們對圖像的loss函數定義為:
其中,pi時anchor作為一個對象的預測概率,如果anchor is positive,即IoU滿足以上兩個條件之一,那么ground truth 的標簽值pi為1。ti是表示預測bounding boxes的4個坐標的參數,ti是與positive anchor 相關聯的ground truth的向量。分類損失是兩個類上的log loss,我們使用
R是robust loss function(smooth L1)。前面乘了p*i表示回歸loss只對positive anchors激活,否則為0。
對于bounding box regression,我們采用以下4個坐標的參數化:
其中帶* *號的是用于groud truth的坐標,不帶 *號的是是anchor和predicted boxes,然而,我們實現bounding box 的方法不同于以往RoI的方法。在我們的公式中,用于回歸的feature在feature map 上有相同的空間大小(3x3)。
為了解釋不同的尺寸,學習了k個bounding box regressors,每個regressor負責一個尺度和縱橫比,他們互相不共享權值。
3.1.3 Training RPNs
每一個mini-batch都是由一張圖像產生的,它包含很多positive的anchor和negative的anchor,可以對所有anchor的loss函數進行優化,但這將偏向負樣本,因為它們的量遠大于正樣本,所以,我們在圖像中隨機抽樣256個anchor,其中采樣的正樣本和負樣本比例為1:1,如果正樣本不足128,則用負樣本填充。
3.2 Sharing Features for RPN and Fast R-CNN
4-Step Alternating Training.
我們采用了一種使用的四步訓練算法,通過交替優化學習共享特征,第一步,我們訓練RPN,使用ImageNet預訓練。第二步, 我們使用RPN產生的proposal region,通過快速R-CNN來訓練一個單獨的檢測器網絡,該網絡進行預訓練,此時,這兩個網絡不共享卷積層。第三步,我們使用檢測器網絡來初始化RPN訓練,但是我們fix共享卷積層,只對unique layer of RPN進行微調,此時,這兩個網絡共享卷積層。第四步,保持共享卷積層的固定,我們微調unique layers of fast R-CNN。
還有一個更為簡單的方法,就是end-to-end的訓練方法,將RPN和Fast R-CNN結合起來一起訓練。
補充RoI pooling
ROI pooling具體操作如下:
(1)根據輸入image,將ROI映射到feature map對應位置;
(2)將映射后的區域劃分為相同大小的sections(sections數量與輸出的維度相同);
(3)對每個sections進行max pooling操作;
這樣我們就可以從不同大小的方框得到固定大小的相應 的feature maps。值得一提的是,輸出的feature maps的大小不取決于ROI和卷積feature maps大小。ROI pooling 最大的好處就在于極大地提高了處理速度。
參考:https://blog.csdn.net/AUTO1993/article/details/78514071
有一些實現細節,比如RPN網絡得到的大約2萬個anchor不是都直接給Fast-RCNN,因為有很多重疊的框。文章通過非極大值抑制的方法,設定IoU為0.7的閾值,即僅保留覆蓋率不超過0.7的局部最大分數的box(粗篩)。最后留下大約2000個anchor,然后再取前N個box(比如300個)給Fast-RCNN。Fast-RCNN將輸出300個判定類別及其box,對類別分數采用閾值為0.3的非極大值抑制(精篩),并僅取分數大于某個分數的目標結果(比如,只取分數60分以上的結果)
關于RPN:
https://blog.csdn.net/qq_36269513/article/details/80421990
關于nms:
https://www.cnblogs.com/makefile/p/nms.html
總結
以上是生活随笔為你收集整理的Faster R CNN的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 100万补贴!东湖高新区知识产权运营服务
- 下一篇: 移动端 Retina屏 各大主流网站1p