參考文獻算法
[1]Rich feature hierarchies for accurate object detection and semantic segmentation網絡
[2]Fast R-CNN框架
[3]Faster R-CNN: towards real-time object detection with region proposal networks性能
1. 概述學習
圖像分類,檢測及分割是計算機視覺領域的三大任務。圖像分類模型是將圖像劃分爲單個類別,一般對應於圖像中最突出的物體。可是現實世界的不少圖片一般包含不僅一個物體,此時若是使用圖像分類模型爲圖像分配一個單一標籤實際上是很是粗糙的,並不許確。對於這樣的狀況,就須要目標檢測模型,目標檢測模型能夠識別一張圖片的多個物體,並能夠定位出不一樣物體(給出邊界框)。目標檢測在不少場景有用,如無人駕駛,人臉識別等。測試
目標檢測模型的主要性能指標是檢測準確度和速度,對於準確度,目標檢測還要考慮物體的定位準確性,而不僅僅是分類準確度。目前主流的目標檢測算法主要是基於深度學習模型,其能夠分紅兩大類:(1)two-stage檢測算法,其將檢測問題劃分爲兩個階段,首先產生候選區域,而後對候選區域進行校訂和分類,這類算法的典型表明是基於候選區域的R-CNN系算法,如R-CNN,Fast R-CNN,Faster R-CNN等;(2)one-stage檢測算法,其不須要region proposal階段,直接產生物體的類別機率和位置座標值,比較典型的算法如YOLO和SSD。本文是介紹的是第一類two-stage檢測算法中的R-CNN系算法——R-CNN,Fast R-CNN,Faster R-CNN,在通常狀況下,two-stage算法準確度要優於one-stage檢測算法。優化
R-CNN,即Regions with CNN features,R-CNN是基於候選區域方法的目標檢測算法系列開山之做,論文首次將CNN方法引入目標檢測領域,大大提升了目標檢測效果,也改變了目標檢測領域的主要研究思路,以後的Fast R-CNN、Faster R-CNN都是以它爲基礎。編碼
在R-CNN中,每一個候選區域都要單獨送入CNN模型計算特徵向量,這是很是費時的,爲了減小候選區域使用CNN模型提取特徵向量所消耗的時間,Fast R-CNN只對整張圖像全區域進行一次特徵提取,Fast R-CNN最大的貢獻是讓人們看到了在Region Proposal+CNN這一框架下對目標進行實時檢測的但願,也爲後來的Faster R-CNN作下了鋪墊。spa
對於Fast R-CNN,其仍然須要selective search方法來生產候選區域,這是很是費時的。爲了解決這個問題,Faster R-CNN模型引入了RPN (Region Proposal Network)直接產生候選區域。Faster R-CNN能夠當作是RPN和Fast R-CNN模型的組合體。設計
2. R-CNN
在R-CNN未提出以前,對象檢測這一問題基本是遵循着「設計手工特徵(Hand-crafted feature)+分類器」的思路,並且因爲存在着區域搜索的步驟,因此能夠認爲是計算機用一個小的矩形窗口不斷在圖像上滑動、縮放,而後用分類器預測當前滑動窗口所在區域是否存在一個感興趣的對象。R-CNN利用圖片通過CNN模型獲得的特徵向量代替傳統手工計算特徵,對目標檢測能獲得更好的結果。
R-CNN目標檢測系統由三個模塊組成。 第一個模塊生成類別獨立候選區域。這些候選區域定義了咱們的檢測器可用的候選邊界框集合。第二個模塊是從各個區域提取固定長度特徵向量的大型卷積神經網絡。 第三個模塊是一組類別特定的線性SVM分類器。
對於一張圖片,R-CNN基於selective search方法大約生成2000個候選區域,selective search方法是一種啓發式搜索算法。它先經過簡單的區域劃分算法將圖片劃分紅不少小區域,而後經過層級分組方法按照必定類似度合併它們,最後的剩下的就是候選區域,它們可能包含一個物體。生成的每一個候選區域被修正成固定大小(227×227)並送入一個CNN模型中,最後獲得一個4096維的特徵向量。而後這個特徵向量被送入一個多類別SVM分類器中,預測出候選區域中所含物體的屬於每一個類的機率值。每一個類別訓練一個SVM分類器,從特徵向量中推斷其屬於該類別的機率大小。R-CNN最後又訓練了一個邊界框迴歸模型,使用迴歸模型精細修正候選框位置,提高定位的準確性。
R-CNN網絡對比傳統的目標識別算法把檢測問題轉化爲了分類問題,採用CNN模型進行特徵提取,效果要比傳統的手工提取特徵方法更好。但R-CNN網絡中,一張圖經由selective search算法提取約2000個候選區域,每一個候選區域都要單獨送入CNN模型計算特徵向量,這個操做是很是費時的。R-CNN網絡訓練過程分爲提取候選區域、提取CNN特徵、SVM分類和Bounding-box 迴歸等步驟,過於繁瑣。R-CNN模型要求輸入CNN網絡進行提取特徵的候選區域是固定尺寸,但其實像AlexNet CNN等網絡在提取特徵過程當中對圖像的大小並沒有要求,只是在提取完特徵進行全鏈接操做的時候才須要固定特徵尺寸,這部分也能夠進行優化。
3. Fast R-CNN
針對R-CNN網絡從候選區域提取特徵向量耗時的問題,Fast R-CNN規避了R-CNN中冗餘的特徵提取操做,只對整張圖像全區域進行一次特徵提取,用RoI pooling層取代最後一層max pooling層,對於每一個候選區域, RoI pooling層能夠從CNN特徵圖中獲得一個固定長和寬的特徵圖(長和寬是超參數,論文中選用的尺寸爲7×7),RoI pooling的原理很簡單,其根據候選區域按比例從CNN特徵圖中找到對應的特徵區域,而後將其分割成幾個子區域(根據要輸出的特徵圖的大小),而後在每一個子區域應用max pooling,從而獲得固定大小的特徵圖。Fast R-CNN網絡使用SVD對全鏈接層進行分解,使用了兩個不一樣的全鏈接層並行操做,可同時輸出分類結果和窗口迴歸結果,減小了計算複雜度,加快檢測速度,實現除特徵提取階段外端到端的訓練模式,全部的特徵都暫存在顯存中,不須要額外的磁盤空間。
對Fast R-CNN網絡輸入一張任意大小的圖片,基於selective search方法大約生成2000個候選區域,將圖片輸入CNN網絡,通過若干卷積層與池化層,獲得特徵圖,根據原圖中候選區域到特徵圖映射關係,在特徵圖中找到每一個候選區域對應的特徵框,並在RoI池化層中將每一個特徵框池化到H×W(論文中採用的是7×7)的尺寸,H×W大小的特徵框通過全鏈接層獲得固定大小的特徵向量,所獲得的特徵向量再經由SVD分解實現的不一樣全鏈接層並行操做,分別獲得兩個輸出向量:一個是softmax的分類得分,一個是Bounding-box窗口迴歸,利用窗口得分分別對每一類物體進行非極大值抑制剔除重疊的候選區域,最終獲得每一個類別中迴歸修正後的得分最高的窗口。
Fast R-CNN相比於R-CNN網絡訓練速度獲得了提升,準確度也略有提高,但其中採用selective search算法提取候選區域,佔用了模型大量時間,(selective search算法候選區域提取須要2~3s,而提特徵分類只須要0.32s),這仍是沒法知足目標檢測在實時應用中的需求,並且Fast R-CNN網絡並無實現真正意義上的端到端訓練模式。
4. Faster R-CNN
針對Fast R-CNN,使用selective search方法來生產候選區域,很是費時的問題。Faster R-CNN模型引入了區域生成網絡RPN (Region Proposal Network),直接在特徵圖中提取候選區域,將特徵提取,候選區域提取,Bounding-box窗口迴歸,分類都整合在了一個網絡中,實現了端到端的檢測模式,雖然訓練階段仍然要分多步,可是檢測階段很是方便快捷。Faster R-CNN能夠當作是RPN和Fast R-CNN模型的組合體,RPN的主要思想是經過對應關係把特徵圖的點映射回原圖,在每個對應的原圖設計不一樣的固定尺度窗口,根據該窗口與真實值的IOU給它正負標籤,讓它學習裏面是否有目標。
對Fast R-CNN網絡輸入一張任意大小的圖片,經過卷積和池化獲得特徵圖。而後在這個特徵圖上採用一個N×N(文中是3×3)的卷積核,把每一個卷積映射位置編碼爲一個短的(例如256維)特徵向量,對於每一個位置映射回原圖的感覺野的中心點當成一個基準點,而後圍繞這個基準點選取k個不一樣大小的候選區域。輸出候選區域的分類得分和迴歸邊界。對於分類層,其輸出大小是2k,表示各個候選區域包含物體或者是背景的機率值,而回歸層輸出4k個座標值,表示各個候選區域的位置。對於每一個滑窗位置,這兩個全鏈接層是共享的。RPN採用卷積層來實現:首先是一個n×n卷積獲得低維特徵,而後是兩個1×1的卷積,分別用於分類與迴歸。
Fast R-CNN拋棄了傳統的滑動窗口和基於selective search的方法生成候選區域,直接使用RPN網絡,能極大提高候選區域的生成速度,使得利用CNN在線對目標進行識別成爲可能。
5. 數據集
目標檢測經常使用的數據集包括PASCAL VOC,ImageNet,MS COCO等數據集,這些數據集用於研究者測試算法性能或者用於競賽。目標檢測的性能指標既要考慮檢測物體位置的準確性也要考慮預測類別的準確性。
PASCAL VOC(The PASCAL Visual Object Classification)是目標檢測,分類,分割等領域一個有名的數據集。從2005到2012年,共舉辦了8個挑戰賽。PASCAL VOC包含約10,000張圖片用於訓練和驗證。可是,PASCAL VOC數據集僅包含20個類別,所以其被當作目標檢測問題的一個基準數據集。
ImageNet在2013年給出的包含邊界框的目標檢測數據集。訓練數據集包含500,000張圖片,包含200類物體。因爲數據集太大,訓練所需計算量很大,於是不多使用。同時,因爲類別數也比較多,目標檢測的難度也至關大。
另一個有名的數據集是Microsoft公司創建的MS COCO(Common Objects in COntext)數據集。這個數據集用於多種競賽:圖像標題生成,目標檢測,關鍵點檢測和物體分割。對於目標檢測任務,COCO共包含80個類別,每一年大賽的訓練和驗證數據集包含超過120,000個圖片,超過40,000個測試圖片。測試集最近被劃分爲兩類,一類是test-dev數據集用於研究者,一類是test-challenge數據集用於競賽者。測試集的標籤數據沒有公開,以免在測試集上過擬合。在COCO 2017 Detection Challenge中,曠視科技團隊憑藉提出的Light-Head R-CNN模型奪得冠軍(AP爲0.526 ),看來仍是two-stage算法準確度更勝一籌。
6. 性能指標
目標檢測問題同時是一個迴歸和分類問題。首先,爲了評估定位精度,須要計算IoU(Intersection over Union,介於0到1之間),其表示預測框與真實框之間的重疊程度。IoU越高,預測框的位置越準確。於是,在評估預測框時,一般會設置一個IoU閾值(如0.5),只有當預測框與真實框的IoU值大於這個閾值時,該預測框才被認定爲真陽性(True Positive, TP),反之就是假陽性(False Positive,FP)。
對於二分類,AP(Average Precision)是一個重要的指標,這是信息檢索中的一個概念,基於precision-recall曲線計算出來。對於目標檢測,首先要單獨計算各個類別的AP值,這是評估檢測效果的重要指標。取各個類別的AP的平均值,就獲得一個綜合指標mAP(Mean Average Precision),mAP指標能夠避免某些類別比較極端化而弱化其它類別的性能這個問題。
除了檢測準確度,目標檢測算法的另一個重要性能指標是速度,只有速度快,才能實現實時檢測,這對一些應用場景極其重要。評估速度的經常使用指標是每秒幀率(Frame Per Second,FPS),即每秒內能夠處理的圖片數量。固然要對比FPS,你須要在同一硬件上進行。另外也可使用處理一張圖片所需時間來評估檢測速度,時間越短,速度越快。
7. 結果
R-CNN模型在2012 PASCAL VOC數據集的mAP爲62.4%(比同年的第二名高出了22%),在2013 ImageNet上的mAP爲31.4%(比同年的第二名高出7.1%)。
Fast R-CNN模型在2007 PASCAL VOC測試集上的mAp爲70%,在2010 PASCAL VOC測試集上的mAP爲68.8%,而在2012 PASCAL VOC測試集上的mAP爲68.4%,準確度相比R-CNN略有提高,但模型最大的貢獻在於處理速度的提高。
Faster R-CNN模型在 2007 PASCAL VOC測試集上的mAP爲78.8% ,而在2012 PASCAL VOC測試集上的mAP爲75.9%。論文中還在 COCO數據集上進行了測試。Faster R-CNN中的某個模型能夠比採用selective search方法的Fast R-CNN模型快34倍。能夠看到,採用了RPN以後,不管是準確度仍是速度,Faster R-CNN模型均有很大的提高。
8. 總結
本文介紹了R-CNN, Fast R-CNN, Faster R-CNN三種基於深度學習的目標檢測算法,利用深度卷積神經網絡的目標檢測算法一經提出將PASCAL VOC測試集上的mAP從34.3%直接提高到了66%。
R-CNN提出了Region Proposal+CNN這一框架,在PASCAL VOC挑戰賽上取得了不錯的成績。Fast R-CNN在R-CNN的基礎上用RoI pooling層取代最後一層max pooling層,使得輸入圖片尺寸大小沒有限制,並使用SVD分解讓分類和窗口迴歸在全鏈接層實現並行操做,減小了計算複雜度,加快檢測速度。Faster R-CNN在Fast R-CNN的基礎上引入RPN,將特徵提取,候選區域提取,窗口迴歸,分類都整合在了一個網絡中,真正意義上的實現了端到端的檢測模式,進一步加快了模型的檢測速度。