RCNN,Fast RCNN, Faster RCNN總結

RCNN

Fast RCNN

Faster RCNN

行人檢測 概述:

       行人檢測有兩種方向,傳統算法和基於深度學習算法。傳統算法的典型代表有Haar特徵+Adaboost算法,Hog特徵+Svm算法,DPM算法。而基於深度學習的行人檢測典型代表有RCNN系列,YOLO系列和SSD系列。其中RCNN系列算法是現在使用的最廣泛的基於深度學習的行人檢測算法。

        在說行人檢測之前不得不說一下目標檢測。行人檢測是目標檢測下的一個分支,其檢測的標籤是行人。我理解的目標檢測是準確地找到給定圖片中對象的位置,並標出對象的類別。目標檢測所要解決的問題是目標在哪裏以及其狀態的問題。但是,這個問題並不是很容易解決。姿勢不合理,對象出現的區域不確定,更不用說對象也可以是多個類別。基於傳統算法的目標檢測有 Haar特徵+ Adaboost算法,Hog特徵+ Svm算法和 DPM算法,此類由於效率不高或效果不好,它現在沒有被廣泛使用。用的比較多的主要是RCNN,spp- net,fast- rcnn,faster- rcnn;YOLO系列,如YOLO和YOLO9000;除此之外還有SSD,ResNet等。

 

上圖是單目標檢測和多目標檢測的例子,單目標相對容易實現一些,但是多目標很容易出現遺漏,現在比較新的mask rcnn可以實現目標檢測和語義分割,相比FCN來說取得了更好的進步。

RCNN原理

RCNN(Region with CNN feature)是卷積神經網絡應用於目標檢測問題的一個里程碑的飛躍。CNN具有良好的特徵提取和分類性能,採用RegionProposal方法實現目標檢測問題。算法可以分爲三步(1)候選區域選擇。(2)CNN特徵提取。(3)分類與邊界迴歸。

接下來我將詳細的介紹一下每一過程如何實現,及其裏面的一些tricks。

(1)候選區域選擇:區域建議Region Proposal是一種傳統的區域提取方法,基於啓發式的區域提取方法,用的方法是ss,查看現有的小區域,合併兩個最有可能的區域,重複此步驟,直到圖像合併爲一個區域,最後輸出候選區域。然後將根據建議提取的目標圖像標準化,作爲CNN的標準輸入可以看作窗口通過滑動獲得潛在的目標圖像,在RCNN中一般Candidate選項爲1k~2k個即可,即可理解爲將圖片劃分成1k~2k個網格,之後再對網格進行特徵提取或卷積操作,這根據RCNN類算法下的分支來決定。然後基於就建議提取的目標圖像將其標準化爲CNN的標準輸入。

(2)CNN特徵提取:標準卷積神經網絡根據輸入執行諸如卷積或池化的操作以獲得固定維度輸出。也就是說,在特徵提取之後,特徵映射被卷積和彙集以獲得輸出。

(3)分類與邊界迴歸:實際上有兩個子步驟,一個是對前一步的輸出向量進行分類(分類器需要根據特徵進行訓練); 第二種是通過邊界迴歸框迴歸(縮寫爲bbox)獲得精確的區域信息。其目的是準確定位和合並完成分類的預期目標,並避免多重檢測。在分類器的選擇中有支持向量機SVM,Softmax等等;邊界迴歸有bbox迴歸,多任務損失函數邊框迴歸等 。

RCNN的缺點:

       在RCNN剛剛被髮明出來的2014年,RCNN在目標檢測與行人檢測上取得了巨大的成就,然而效率低下,花費時間長等一系列的問題的產生,還是導致了RCNN的運用並沒有取得大範圍的應用,其最大的問題有三:需要事先提取多個候選區域對應的圖像。這一行爲會佔用大量的磁盤空間;針對傳統的CNN來說,輸入的map需要時固定尺寸的,而歸一化過程中對圖片產生的形變會導致圖片大小改變,這對CNN的特徵提取有致命的壞處;每個region proposal都需要進入CNN網絡計算。進而會導致過多次的重複的相同的特徵提取,這一舉動會導致大大的計算浪費。在這之後,隨之而來的Fast RCNN逐漸進入了人們的眼簾。

Fast RCNN

Fast RCNN較之前的RCNN相比,有三個方面得到了提升:

1. 測試時的速度得到了提升。 RCNN算法與圖像內的大量候選幀重疊,導致提取特徵操作中的大量冗餘。 而Fast RCNN則很好的解決了這一問題。

2. 訓練時的速度得到了提升。

3. 訓練所需的空間大。RCNN中分類器和迴歸器需要大量特徵作爲訓練樣本。而Fast RCNN則不再需要額外儲存。

Fast RCNN的工作流程:

1. 選擇性搜索Selective Search(SS)在圖片中獲得大約2k個候選框。

 在第一步中所使用到的候選區域生成方法與RCNN無異,使用的方法都是Selective Search(SS)。以此方式來生成2k個候選框。其基本思路如下所述:使用過分割方法將圖像分成小區域。在此之後,觀察現有的區域。之後以最高概率合併這兩個區域。重複此步驟,直到所有圖像合併爲一個區域位置。注意,在此處的合併規則與RCNN是相同的,優先合併以下四種區域: 顏色(顏色直方圖)相近的; 紋理(梯度直方圖)相近的; 合併後總面積小的。最後,所有已經存在的區域都被輸出,並生成候選區域。

2. 使用卷積網絡提取圖片特徵。類似於RCNN,在獲取特徵映射之後,需要卷積神經網絡來進行卷積操作。 在此處Fast RCNN使用的卷積神經網絡爲普通的fc7,但是有所改動,也有使用VGG16的神經網絡。 前五個階段是conv + relu + pooling的基本形式。

3. 在第二步進行的卷積操作過後可以得到feature map,根據之前RoI框選擇出對應的區域(既可以理解爲將feature map映射回原圖像), 在最後一次卷積之前,使用 RoI池層來統一相同的比例(這裏利用的是單層ssp)。

在RCNN中,在進行卷積操作之前一般都是先將圖片分割與形變到固定尺寸,這也正是RCNN的劣勢之處。不得不說,這對檢測來說是十分不應該出現的,這會讓圖像產生形變,或者圖像變得過小,使一些特徵產生了損失,繼而對之後的特徵選擇產生巨大影響。Fast RCNN與RCNN不同。其不同之處如下:Fast RCNN在數據的輸入上並不對其有什麼限制,而實現這一沒有限制的關鍵所在正是ROI Pooling層。該層的作用是可以在任何大小的特徵映射上爲每個輸入ROI區域提取固定的維度特徵表示,然後確保每個區域的後續分類可以正常執行。

ROI pooling層詳解

 

ROI是指的在SS完成後得到的“候選框”在特徵圖上的映射;

在Faster RCNN中,候選框是經過RPN產生的,然後再把各個“候選框”映射到特徵圖上,得到ROIs特徵圖:在Fast RCNN中,它位於RoI Pooling之前,在Faster RCNN中,它是與RPN共享那個特徵圖,通常我們常常稱之爲“share_conv”;

RoI Pooling層將每個候選區域分爲m * n個塊。 針對每個塊執行最大池操作,使得特徵映射上不同大小的候選區域被變換爲均勻大小的特徵向量。 然後送入下一層。 舉例來說,某個 ROI區域座標爲( x1, y1, x2, y2), 那麼輸入尺寸大小爲( y2− y1)∗( x2− x1); 如果合併輸出的大小爲池高乘池寬,即pooledheight∗pooledwidth,則每個網格的大小都是爲

 

雖然ROI Pooling可以看做是針對ROI區域的特徵圖像的池化操作,但有個問題。那就是因爲不是固定大小的輸入,會導致每次池化網格的大小都必須手動計算。這也將是在以後會得到改進的地方之一 。

因此先用Selective Search等proposal提取算法得到了候選框座標, 然後輸入到卷積神經網絡中。其目的是預測每個候選框中包含的對象。但是在以上步驟中神經網絡只是起到了在ROI區域的分類作用,並沒有起到對整個圖片進行分類。

在RCNN中,在進行卷積操作之前一般都是先將圖片分割與形變到固定尺寸,這也正是RCNN的劣勢之處。不得不說,這對檢測來說是十分不應該出現的,這會讓圖像產生形變,或者圖像變得過小,使一些特徵產生了損失,繼而對之後的特徵選擇產生巨大影響。

Fast RCNN與RCNN不同。其不同之處如下:Fast RCNN在數據的輸入上並不對其有什麼限制,而實現這一沒有限制的關鍵所在正是ROI Pooling層。該層的作用是可以在任何大小的特徵映射上爲每個輸入ROI區域提取固定的維度特徵表示,然後確保每個區域的後續分類可以正常執行。經過Fast RCNN的作者的努力,迴歸層完成了,起作用爲輸出爲4*K維數組t,表示屬於 K- class時應該進行全景變換的參數,該參數進行了優化,針對每個ROI區域座標的便宜都需要進行優化。tk=(tkx,tky,tkw,tkh),0≤k≤K是多類檢測的類別序號。假設對於類別k∗,地面真值ground truth座標在圖中被標註:

 t*=(tx*,ty*,tw*,th*) 真實的座標值

t=(tx,ty,tw,th)   預測的座標值

損失函數

這裏中的x即−,即對應座標的差距。函數是(-1,1)之間的二次函數,其他區域是線性函數。此處的迴歸操作與RCNN中的迴歸操作相同。但是有一點,其僅針對特定候選框(即Ground Truth的IoU大於特定閾值)。

縱使Fast RCNN與RCNN相比提升了不少,但是Fast RCNN仍舊有許多不足之處:因爲Fast RCNN使用的是selective search選擇性搜索,這一過程十分耗費時間,其進行候選區域提取所花費的時間約爲2~3秒,而提取特徵分類僅需要0.32秒[19],這會造成無法滿足實時應用需求,而且因爲使用selective search來預先提取候選區域,Fast RCNN並沒有實現真正意義上的端到端訓練模式,因此在衆人的努力下,Faster RCNN應運而生。

Faster RCNN

從RCNN到Fast RCNN,再到Faster RCNN,一直都有效率上的提升 ,而對於Faster RCNN來講,與RCNN和Fast RCNN最大的區別就是,目標檢測所需要的四個步驟,即候選區域生成,特徵提取,分類器分類,迴歸器迴歸,這四步全都交給深度神經網絡來做,並且全部運行在 GPU上,這大大提高了操作的效率。

Faster RCNN可以說是由兩個模塊組成的:區域生成網絡RPN候選框提取模塊+Fast RCNN檢測模塊.

RPN是全卷積神經網絡,其內部與普通卷積神經網絡不同之處在於是將CNN中的全連接層變成卷積層。Faster RCNN是基於RPN提取的proposal檢測並識別proposal中的目標。其具體流程大致可概括爲:1.輸入圖像。2.通過區域生成網絡RPN生成候選區域。3.提取特徵。4.分類器分類。5.迴歸器迴歸並進行位置調整。

區域代網絡RPN的核心思想是直接使用卷積神經網絡CNN生成候選區域region proposal區域提議。本節主要來對RPN的具體流程進行講解RPN使用的方法實際上是在最後一個卷積層上滑動窗口。

RPN的具體操作流程如下:使用小型網絡在最後的卷積特徵地圖feature map上執行滑動掃描,每當滑動網絡完全連接到特徵地圖上的 n* n窗口,然後將其映射到低維矢量,最後將這個低維矢量發送到兩個完全連接的層。即 bbox迴歸層( reg)和 box分類層( cls)。 滑動窗口處理確保reg層和cls層與conv5-3的整個特徵空間相關聯。在其中,reg層的作用是預測proposal的anchor對應的proposal的(x,y,w,h),cls層的作用是判斷該proposal是前景(object)還是背景(non-object)。

在候選區域(錨點anchor)部分,該特徵可以被視爲大小爲51 * 39的256通道圖像:三種面積{128*128,256*256,512*512}×三種比例{1:1,1:2,2:1}。這些候選窗口稱爲anchors即錨點。下圖示出51*39個anchor中心,以及9種anchor示例。 

在RPN中,reg與cls層分別是進行窗口分類與位置精修的[21]。分類層(cls_score)輸出9個錨點屬於每個位置的前景和背景的概率。在每個位置的bbox_pred輸出中,9個錨點對應點應該是泛化的(x,y,w,h)。對於每個位置來說,分類層從256維特徵輸出屬於前景和背景的概率。而回歸圖層則是從256維特徵中輸出4個平移和縮放參數。

 

RPN網絡有兩個同級輸出層,cls_score和 bbox_prdict層,都是全連接層。

其具體操作爲輸出k+1維數組p,表示屬於k類和背景的概率。對每個RoI(Region of Interesting)輸出離散型概率分佈

p=(p0,p1,p2...pk)                       

通常,p由來自k + 1級完全連接層的softmax激活函數計算。

bbox_prdict層的作用是調整候選區域的位置並輸出邊界框的迴歸位移。

其具體操作爲輸出一個4 * K維數組t,它表示當它們屬於k-class時應該被泛化的參數。

tk =(tkx,tky,tkw ,tkh)                   

k表示類別索引,它是指相對於對象建議尺度的常量平移,它是指對數空間中對象建議的高度和寬度。loss_cls層評估分類損失函數,由真實分類的概率決定:

loss_bbox評估檢測框定位的損失函數。比較真實分類對應的預測平移縮放參數和tu=(tux,tuy,tuw ,tuh)和真實平移縮放參數之間的差異:

其中,smooth L1損失函數爲:

smooth L1損失函數曲線如下圖2.11所示,與L2損失函數相比,它對異常值不敏感。 可以控制梯度的大小,這方便在訓練過程中不易失控。

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章