fasterrcnn详解_faster RCNN
Jetbrains全系列IDE穩定放心使用
paper:Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks
Tensorflow-faster r-cnn github:Tensorflow Faster RCNN for Object Detection
前言
faster rcnn是何凱明等大神在2015年提出目標檢測算法,該算法在2015年的ILSVRV和COCO競賽中獲得多項第一。該算法在fast rcnn基礎上提出了RPN候選框生成算法,使得目標檢測速度大大提高。
R CNN系列算法比較
R-CNN:
(1)image input;
(2)利用selective search 算法在圖像中從上到下提取2000個左右的Region Proposal;
(3)將每個Region Proposal縮放(warp)成227*227的大小并輸入到CNN,將CNN的fc7層的輸出作為特征;
(4)將每個Region Proposal提取的CNN特征輸入到SVM進行分類;
(5)對于SVM分好類的Region Proposal做邊框回歸,用Bounding box回歸值校正原來的建議窗口,生成預測窗口坐標.
缺陷:
(1) 訓練分為多個階段,步驟繁瑣:微調網絡+訓練SVM+訓練邊框回歸器;
(2) 訓練耗時,占用磁盤空間大;5000張圖像產生幾百G的特征文件;
(3) 速度慢:使用GPU,VGG16模型處理一張圖像需要47s;
(4) 測試速度慢:每個候選區域需要運行整個前向CNN計算;
(5) SVM和回歸是事后操作,在SVM和回歸過程中CNN特征沒有被學習更新.
FAST-RCNN:
(1)image input;
(2)利用selective search 算法在圖像中從上到下提取2000個左右的建議窗口(Region Proposal);
(3)將整張圖片輸入CNN,進行特征提取;
(4)把建議窗口映射到CNN的最后一層卷積feature map上;
(5)通過RoI pooling層使每個建議窗口生成固定尺寸的feature map;
(6)利用Softmax Loss(探測分類概率) 和Smooth L1 Loss(探測邊框回歸)對分類概率和邊框回歸(Bounding box regression)聯合訓練.
相比R-CNN,主要兩處不同:
(1)最后一層卷積層后加了一個ROI pooling layer;
(2)損失函數使用了多任務損失函數(multi-task loss),將邊框回歸直接加入到CNN網絡中訓練
改進:
(1) 測試時速度慢:R-CNN把一張圖像分解成大量的建議框,每個建議框拉伸形成的圖像都會單獨通過CNN提取特征.實際上這些建議框之間大量重疊,特征值之間完全可以共享,造成了運算能力的浪費.
FAST-RCNN將整張圖像歸一化后直接送入CNN,在最后的卷積層輸出的feature map上,加入建議框信息,使得在此之前的CNN運算得以共享.
(2) 訓練時速度慢:R-CNN在訓練時,是在采用SVM分類之前,把通過CNN提取的特征存儲在硬盤上.這種方法造成了訓練性能低下,因為在硬盤上大量的讀寫數據會造成訓練速度緩慢.
FAST-RCNN在訓練時,只需要將一張圖像送入網絡,每張圖像一次性地提取CNN特征和建議區域,訓練數據在GPU內存里直接進Loss層,這樣候選區域的前幾層特征不需要再重復計算且不再需要把大量數據存儲在硬盤上.
(3) 訓練所需空間大:R-CNN中獨立的SVM分類器和回歸器需要大量特征作為訓練樣本,需要大量的硬盤空間.FAST-RCNN把類別判斷和位置回歸統一用深度網絡實現,不再需要額外存儲.
(4) 由于ROI pooling的提出,不需要再input進行Corp和wrap操作,避免像素的損失,巧妙解決了尺度縮放的問題.
FASTER -RCNN:
(1)輸入測試圖像;
(2)將整張圖片輸入CNN,進行特征提取;
(3)用RPN先生成一堆Anchor box,對其進行裁剪過濾后通過softmax判斷anchors屬于前景(foreground)或者后景(background),即是物體or不是物體,所以這是一個二分類;同時,另一分支bounding box regression修正anchor box,形成較精確的proposal(注:這里的較精確是相對于后面全連接層的再一次box regression而言)
(4)把建議窗口映射到CNN的最后一層卷積feature map上;
(5)通過RoI pooling層使每個RoI生成固定尺寸的feature map;
(6)利用Softmax Loss(探測分類概率) 和Smooth L1 Loss(探測邊框回歸)對分類概率和邊框回歸(Bounding box regression)聯合訓練.
相比FASTER-RCNN,主要兩處不同:
(1)使用RPN(Region Proposal Network)代替原來的Selective Search方法產生建議窗口;
(2)產生建議窗口的CNN和目標檢測的CNN共享
改進:
(1) 如何高效快速產生建議框?
FASTER-RCNN創造性地采用卷積網絡自行產生建議框,并且和目標檢測網絡共享卷積網絡,使得建議框數目從原有的約2000個減少為300個,且建議框的質量也有本質的提高.
Faster R CNN結構詳解
從上面的三張圖可以看出,Faster R CNN由下面幾部分組成:
1.數據集,image input
2.卷積層CNN等基礎網絡,提取特征得到feature map
3-1.RPN層,再在經過卷積層提取到的feature map上用一個3×3的slide window,去遍歷整個feature map,在遍歷過程中每個window中心按rate,scale(1:2,1:1,2:1)生成9個anchors,然后再利用全連接對每個anchors做二分類(是前景還是背景)和初步bbox regression,最后輸出比較精確的300個ROIs。
3-2.把經過卷積層feature map用ROI pooling固定全連接層的輸入維度。
4.然后把經過RPN輸出的rois映射到ROIpooling的feature map上進行bbox回歸和分類。
概念詳解
SPP-NET
SPP-Net是出自論文《Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition》
由于一般的網絡結構中都伴隨全連接層,全連接層的參數就和輸入圖像大小有關,因為它要把輸入的所有像素點連接起來,需要指定輸入層神經元個數和輸出層神經元個數,所以需要規定輸入的feature的大小。而SPP-NET正好解決了這個問題。
如果原圖輸入是224×224,對于conv5出來后的輸出,是13x13x256的,可以理解成有256個這樣的filter,每個filter對應一張13×13的activation map.如果像上圖那樣將activation map pooling成4×4 2×2 1×1三張子圖,做max pooling后,出來的特征就是固定長度的(16+4+1)x256那么多的維度了.如果原圖的輸入不是224×224,出來的特征依然是(16+4+1)x256;直覺地說,可以理解成將原來固定大小為(3×3)窗口的pool5改成了自適應窗口大小,窗口的大小和activation map成比例,保證了經過pooling后出來的feature的長度是一致的.
總結而言,當網絡輸入的是一張任意大小的圖片,這個時候我們可以一直進行卷積、池化,直到網絡的倒數幾層的時候,也就是我們即將與全連接層連接的時候,就要使用金字塔池化,使得任意大小的特征圖都能夠轉換成固定大小的特征向量,這就是空間金字塔池化的意義(多尺度特征提取出固定大小的特征向量)。
ROI pooling
ROI pooling layer實際上是SPP-NET的一個精簡版,SPP-NET對每個proposal使用了不同大小的金字塔映射,而ROI pooling layer只需要下采樣到一個7×7的特征圖.對于VGG16網絡conv5_3有512個特征圖,這樣所有region proposal對應了一個77512維度的特征向量作為全連接層的輸入.
為什么要pooling成7×7的尺度?是為了能夠共享權重。Faster RCNN除了用到VGG前幾層的卷積之外,最后的全連接層也可以繼續利用。當所有的RoIs都被pooling成(512×7×7)的feature map后,將它reshape 成一個一維的向量,就可以利用VGG16預訓練的權重,初始化前兩層全連接.
Bbox 回歸
那么經過何種變換才能從圖11中的窗口P變為窗口呢?比較簡單的思路就是:
注意:只有當Proposal和Ground Truth比較接近時(線性問題),我們才能將其作為訓練樣本訓練我們的線性回歸模型,否則會導致訓練的回歸模型不work(當Proposal跟GT離得較遠,就是復雜的非線性問題了,此時用線性回歸建模顯然不合理).這個也是G-CNN: an Iterative Grid Based Object Detector多次迭代實現目標準確定位的關鍵. 線性回歸就是給定輸入的特征向量X,學習一組參數W,使得經過線性回歸后的值跟真實值Y(Ground Truth)非常接近.即.那么Bounding-box中我們的輸入以及輸出分別是什么呢?
RPN
Feature Map進入RPN后,先經過一次33的卷積,同樣,特征圖大小依然是6040,數量512,這樣做的目的應該是進一步集中特征信息,接著看到兩個全卷積,即kernel_size=11,p=0,stride=1;
如上圖中標識:
① rpn_cls:6040512-d ⊕ 1151218 > 604092 逐像素對其9個Anchor box進行二分類
② rpn_bbox:6040512-d ⊕ 1151236>60409*4 逐像素得到其9個Anchor box四個坐標信息
逐像素對Anchors分類標記
① 去除掉超過1000*600這原圖的邊界的anchor box
② 如果anchor box與ground truth的IoU值最大,標記為正樣本,label=1
③ 如果anchor box與ground truth的IoU>0.7,標記為正樣本,label=1
④ 如果anchor box與ground truth的IoU<0.3,標記為負樣本,label=0
剩下的既不是正樣本也不是負樣本,不用于最終訓練,label=-1
逐像素Bbox回歸糾正
除了對anchor box進行標記外,另一件事情就是計算anchor box與ground truth之間的偏移量
令:ground truth:標定的框也對應一個中心點位置坐標x*,y和寬高w,h*
anchor box: 中心點位置坐標x_a,y_a和寬高w_a,h_a
所以,偏移量:
△x=(x*-x_a)/w_a △y=(y*-y_a)/h_a
△w=log(w*/w_a) △h=log(h*/h_a)
通過ground truth box與預測的anchor box之間的差異來進行學習,從而是RPN網絡中的權重能夠學習到預測box的能力
接著進一步對Anchors進行越界剔除和使用nms非最大值抑制,剔除掉重疊的框;比如,設定IoU為0.7的閾值,即僅保留覆蓋率不超過0.7的局部最大分數的box(粗篩)。最后留下大約2000個anchor,然后再取前N個box(比如300個);這樣,進入到下一層ROI Pooling時region proposal大約只有300個。
參考文獻:
- faster-rcnn原理及相應概念解釋
- Faster RCNN 學習筆記
總結
以上是生活随笔為你收集整理的fasterrcnn详解_faster RCNN的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ACM-ICPC 2019 山东省省赛
- 下一篇: ACM-ICPC 2019 山东省省赛总