目標檢測筆記一:演算法入門與優缺對比

RCNN-> SPP net -> Fast RCNN -> Faster RCNN

本文,簡述了從RCNN到Faster RCNN,四種目標檢測演算法的原理以及演算法逐步優化的思路。

R-CNN (Region-based CNN features)

性能:RCNN在VOC2007上的mAP是58%左右。

簡述:R-CNN要完成目標定位,其流程主要分為四步:

  • 0:輸入圖像,
  • 1:利用選擇性搜索(Selective Search)這樣的區域生成演算法提取Region Proposal 提案區域(2000個左右)
  • 2:將每個Region Proposal分別resize(因為訓練好的CNN輸入是固定的)後(也即下圖中的warped region,文章中是歸一化為227×227)作為CNN網路的輸入。
  • 3:CNN網路提取到經過resize的region proposal的特徵送入每一類的SVM分類器,判斷是否屬於該類。

RCNN的缺點:

  • 1:對於提取的每個Region Proposal,多數都是互相重疊,重疊部分會被多次重複提取feature),都要分別進行CNN前向傳播一次(相當於進行了2000吃提特徵和SVM分類的過程),計算量較大,。
  • 2:CNN的模型確定的情況下只能接受固定大小的輸入(也即wraped region的大小固定)

優化思路:

  • 既然所有的Region Proposal都在輸入圖像中,與其提取後分別作為CNN的輸入,為什麼不考慮將帶有Region Proposal的原圖像直接作為CNN的輸入呢?原圖像在經過CNN的卷積層得到feature map,原圖像中的Region Proposal經過特徵映射(也即CNN的卷積下採樣等操作)也與feature map中的一塊兒區域相對應。

SPP net

簡述:SPP net中Region Proposal仍然是在原始輸入圖像中選取的,不過是通過CNN映射到了feature map中的一片區域。

Spp-net的主要思想是:

  • 1:對卷積層的feature map上的Region Proposal映射區域分別劃分成1×1,2×2,4×4的窗口(window),
  • 2:在每個窗口內做max pooling,這樣對於一個卷積核產生的feature map,就可以由SPP得到一個(1×1+2×2+4×4)維的特徵向量。
  • 論文中採用的網路結構最後一層卷積層共有256個卷積核,所以最後會得到一個固定維度的特徵向量(1×1+2×2+4×4)×256維),並用此特徵向量作為全連接層的輸入後做分類。

相對於R-CNN,SPP-net的優勢是:

  • 1:使用原始圖像作為CNN網路的輸入來計算feature map(R-CNN中是每個Region Proposal都要經歷一次CNN計算),大大減少了計算量。
  • 2:R-cnn要resize,易於失真,
  • 3:而SPP-net 不需要,原因是,SPP net中Region Proposal仍然是通過選擇性搜索等演算法在輸入圖像中生成的,通過映射的方式得到feature map中對應的區域,並對Region Proposal在feature map中對應區域做空間金字塔池化。通過空間金字塔池化操作,對於任意尺寸的候選區域,經過SPP後都會得到固定長度的特徵向量。

SPP-net缺點是:

  • 1: 訓練分多個階段,步驟繁瑣(微調網路+訓練SVM+訓練邊框回歸器)
  • 2: SPP net在微調網路的時候固定了卷積層,只對全連接層進行微調

fast R-CNN

性能:在VOC2007上的mAP也提高到了68%

其效果是;

  • 1.:比R-CNN和SPP net更高的檢測精度(mAP)
  • 2:訓練過程是端到端的(Sigle-stage),並使用了一個多任務的損失函數(也即將邊框回歸直接加入到CNN網路中後,Fast R-CNN網路的損失函數包含了Softmax的損失和Regressor的損失)
  • 3. 訓練過程可以更新所有的網路層;

優化處是:

  • Fast R-CNN引入了RoI 池化層(相當於是一層SPP),對於圖像中的Region Poposal(也即RoI),通過映射關係(圖中的RoI projection)可以得到feature map中Region Proposal對應的區域。
  • RoI Pooling層的操作是將feature map上的RoI區域劃分為7×7的窗口,在每個窗口內進行max pooling,然後得到(7×7)×256的輸出,最後連接到全連接層得到固定長度的RoI特徵向量。
  • 前面得到的RoI特徵向量再通過全連接層作為Softmax和Regressor的輸入。

小結:

在前面三種目標檢測框架中(R-CNN,SPP net,Fast R-CNN),Region Proposal都是通過區域生成的演算法(選擇性搜索等)在原始輸入圖像中產生的,不過在SPP net及Fast R-CNN中都是輸入圖像中的Region Proposal通過映射關係映射到CNN中feature map上再操作的。Fast R-CNN中RoI池化的對象是輸入圖像中產生的proposal在feature map上的映射區域

Faster R-CNN

性能:Fater-RCNN速度更快了,而且用VGG net作為feature extractor時在VOC2007上mAP能到73%。

優化處:

  • Faster R-CNN相比於Fast R-CNN做的改進則是利用RPN來產生候選區域(也即通過RPN產生的Region Proposal映射到feature map中再作為RoI池化層的輸入
  • RPN網路產生Region Proposal的方式是在feature map中採用滑動窗口的方式在每個滑動位置上產生大小及長寬比不同的9個錨點框(其實就是在原始輸入圖像上)。3×3的滑動窗口對應的每個特徵區域同時預測輸入圖像3種尺度3種長寬比的Region Proposal,這種映射機制稱為anchor。
  • 詳細點說就是這個RPN由兩部分構成:一個卷積層,一對全連接層分別輸出分類結果(cls layer)以及 坐標回歸結果(reg layer)。卷積層:stride為1,卷積核大小為3*3,輸出256張特徵圖(這一層實際參數為3*3*256*256)。相當於一個sliding window 探索輸入特徵圖的每一個3*3的區域位置。當這個13*13*256特徵圖輸入到RPN網路以後,通過卷積層得到13*13個 256特徵圖。也就是169個256維的特徵向量,每一個對應一個3*3的區域位置,每一個位置提供9個anchor。於是,對於每一個256維的特徵,經過一對 全連接網路(也可以是1*1的卷積核的卷積網路),一個輸出 前景還是背景的輸出2D;另一個輸出回歸的坐標信息(x,y,w,h,4*9D,但實際上是一個處理過的坐標位置)。於是,在這9個位置附近求到了一個真實的候選位置。

簡述:

  • Fater-RCNN中的region proposal netwrok實質是一個Fast-RCNN,這個Fast-RCNN輸入的region proposal的是固定的(把一張圖片劃分成n*n個區域,每個區域給出9個不同ratio和scale的proposal),
  • 輸出的是對輸入的固定proposal是屬於背景還是前景的判斷和對齊位置的修正(regression)。
  • Region proposal network的輸出再輸入第二個Fast-RCNN做更精細的分類和Boundingbox的位置修正

如下圖:

五種主流演算法對比:

主要參考:

[1] R-CNN: Girshick R, Donahue J, Darrell T, et al. Rich feature hierarchies for accurate object detection and semantic segmentation[C], CVPR, 2014.

[2] SPPNET: He K, Zhang X, Ren S, et al. Spatial pyramid pooling in deep convolutional networks for visual recognition[C], ECCV, 2014.

[3] Fast-RCNN: Girshick R. Fast R-CNN[C]. ICCV, 2015.

[4] Fater-RCNN: Ren S, He K, Girshick R, et al. Faster r-cnn: Towards real-time object detection with region proposal networks[C]. NIPS, 2015.

原創文章,轉載請註明: 轉載自URl-team

本文鏈接地址: 目標檢測領域筆記一:四種演算法入門與優缺對比


推薦閱讀:

通俗 Python 設計模式——享元模式
python 解碼錯誤提示的位置?
python anaconda 怎麼安裝?

TAG:深度学习DeepLearning | Python | 目标检测 |