天天看點

Faster-RCNN系列文章

近來研究的使用,想到用detection的東西了,就想着過來熟悉一下關于比較快速的faster-RCNN的東西,順便把這麼一整套都給整理了。

—————————————————————-————————————

一:R-CNN(Rich feature hierarchies for accurate object detection andsemantic segmentation 論文下載下傳位址)

R指的是region,也就是在資料進入深度網絡(CNNs)之前進行預處理,在預訓練圖像中生成若幹個regionproposals,再将這些regionproposals進行resize,因為CNN網絡要求輸入資料次元相同。
Faster-RCNN系列文章

訓練過程:

①supervised pre-training,使用傳統的CNN來訓練大規模資料集ImageNet,獲得初始化權重。

所謂的有監督預訓練,我們也可以把它稱之為遷移學習。比如你已經有一大堆标注好的人臉年齡分類的圖檔資料,訓練了一個CNN,用于人臉的年齡識别。然後當你遇到新的項目任務是:人臉性别識别,那麼這個時候你可以利用已經訓練好的年齡識别CNN模型,去掉最後一層,然後其它的網絡層參數就直接複制過來,繼續進行訓練。這就是所謂的遷移學習,說的簡單一點就是把一個任務訓練好的參數,拿到另外一個任務,作為神經網絡的初始參數值,這樣相比于你直接采用随機初始化的方法,精度可以有很大的提高。

圖檔分類标注好的訓練資料非常多,但是物體檢測的标注資料卻很少,如何用少量的标注資料,訓練高品質的模型,這就是文獻最大的特點,這篇paper采用了遷移學習的思想。文獻就先用了ILSVRC2012這個訓練資料庫(這是一個圖檔分類訓練資料庫),先進行網絡的圖檔分類訓練。這個資料庫有大量的标注資料,共包含了1000種類别物體,是以預訓練階段cnn模型的輸出是1000個神經元,或者我們也直接可以采用Alexnet訓練好的模型參數。

這點在微調過程能夠看得出來:原文:Aside from replacing the CNN’s ImageNetspecific 1000-wayclassification layer with a randomly initialized (N+ 1)-way classification layer (whereNis the

number of object classes, plus 1 for background),将最後的分類器部分替換掉。

為什麼要進行預訓練呢?

物體檢測的一個難點在于,物體标簽訓練資料少,如果要直接采用随機初始化CNN參數的方法,那麼目前的訓練資料量是遠遠不夠的。這種情況下,最好的是采用某些方法,把參數初始化了,然後在進行有監督的參數微調,這邊文獻采用的是有監督的預訓練。是以paper在設計網絡結構的時候,是直接用Alexnet的網絡,然後連參數也是直接采用它的參數,作為初始的參數值,然後再fine-tuning訓練。

②Domain-specific fine-tuning. 使用與檢測任務相關的較小的資料集對CNN進行微調。

為什麼要進行微調呢?

首先,反正CNN都是用于提取特征,那麼我直接用Alexnet做特征提取,省去fine-tuning階段可以嗎?這個是可以的,你可以不需重新訓練CNN,直接采用Alexnet模型,提取出p5、或者f6、f7的特征,作為特征向量,然後進行訓練svm,隻不過這樣精度會比較低。那麼問題又來了,沒有fine-tuning的時候,要選擇哪一層的特征作為cnn提取到的特征呢?我們有可以選擇p5、f6、f7,這三層的神經元個數分别是9216、4096、4096。從p5到p6這層的參數個數是:4096*9216 ,從f6到f7的參數是4096*4096。那麼具體是選擇p5、還是f6,又或者是f7呢?

文獻paper給我們證明了一個理論,如果你不進行fine-tuning,也就是你直接把Alexnet模型當做萬金油使用,類似于HOG、SIFT一樣做特征提取,不針對特定的任務。然後把提取的特征用于分類,結果發現p5的精度竟然跟f6、f7差不多,而且f6提取到的特征還比f7的精度略高;如果你進行fine-tuning了,那麼f7、f6的提取到的特征最會訓練的svm分類器的精度就會飙漲。

據此我們明白了一個道理,如果不針對特定任務進行fine-tuning,而是把CNN當做特征提取器,卷積層所學到的特征其實就是基礎的共享特征提取層,就類似于SIFT算法一樣,可以用于提取各種圖檔的特征,而f6、f7所學習到的特征是用于針對特定任務的特征。打個比方:對于人臉性别識别來說,一個CNN模型前面的卷積層所學習到的特征就類似于學習人臉共性特征,然後全連接配接層所學習的特征就是針對性别分類的特征了。

疑問:CNN訓練的時候,本來就是對bounding box的物體進行識别分類訓練,是一個端到端的任務,在訓練的時候最後一層softmax就是分類層,那麼為什麼作者閑着沒事幹要先用CNN做特征提取(提取fc7層資料),然後再把提取的特征用于訓練svm分類器?這個是因為svm訓練和cnn訓練過程的正負樣本定義方式各有不同,導緻最後采用CNNsoftmax輸出比采用svm精度還低。

事情是這樣的,cnn在訓練的時候,對訓練資料做了比較寬松的标注,比如一個bounding box可能隻包含物體的一部分,那麼我也把它标注為正樣本,用于訓練cnn;采用這個方法的主要原因在于因為CNN容易過拟合,是以需要大量的訓練資料,是以在CNN訓練階段我們是對Boundingbox的位置限制條件限制的比較松(IOU隻要大于0.5都被标注為正樣本了);

然而svm訓練的時候,因為svm适用于少樣本訓練,是以對于訓練樣本資料的IOU要求比較嚴格,我們隻有當bounding box把整個物體都包含進去了,我們才把它标注為物體類别,然後訓練svm.

二、Fast R-CNN(論文下載下傳位址)
Faster-RCNN系列文章

1:輸入資料由單輸入改為雙輸入,分别是a list of images and a list of RoIs in those images.

2:引入了ROI Pooling層,将最後一層Pooling層替換為ROI Pooling層,這次相當于SPP-Net中的single-scale模式,從feature map上提取一個固定的特征向量到FC層。

3:輸出包含了2層分支輸出,一層分支為classification層,用來估計K類object與一類背景的機率(softmax);另一層為Regression層(為每一類輸出一個4實值,其實也是bounding box的位置,通常用(x,y,w,h)表示,x,y代表中心點位置,w,h代表長寬)

其他改變:

1:fine turning過程。SPP-Net在實作上無法同時tuning在SPP layer兩邊的卷積層和全連接配接層。

2 : SPP-Net後面的需要将第二層FC的特征放到硬碟上訓練SVM,之後再額外訓練bbox regressor

三、faster R-CNN(Faster R-CNN Towards Real-Time ObjectDetection with Region Proposal Networks 論文下載下傳位址)

相比于fastR-CNN,FasterR-CNN可以看做是對Fast R-CNN的進一步加速,最主要解決的如何快速獲得proposal,一般的做法都是利用顯著性目标檢測(如Selectivesearch)過一遍待檢測圖,得到proposal。基于區域的深度卷積網絡雖然使用了GPU進行加速,但是theregion proposal methods确卻都是在CPU上實作的,這就大大地拖慢了整個系統的速度。然後作者提出,卷積後的特征圖同樣也是可以用來生成region proposals的。通過增加兩個卷積層來實作Region Proposal Networks (RPNs) ,一個用來将每個特征圖的位置編碼成一個向量,另一個則是對每一個位置輸出一個objectness score和regressed bounds for k region proposals。如圖

Faster-RCNN系列文章
RPNs 是一種 fully-convolutional network (FCN),為了與 Fast R-CNN相結合,作者給出了一種簡單的訓練方法:固定 proposal,為生成 proposal和目标檢測這兩個task交替微調網絡。

那麼,RPN網絡是如何訓練得到的呢?

Faster-RCNN系列文章

區域建議網絡(RPN)将一個圖像(任意大小)作為輸入,輸出矩形目标建議框的集合,每個框有一個objectness得分。我們用全卷積網絡[14]對這個過程構模組化型。因為我們的最終目标是和Fast R-CNN目标檢測網絡[15]共享計算,是以假設這兩個網絡共享一系列卷積層。在實驗中,詳細研究Zeiler和Fergus的模型[23](ZF),它有5個可共享的卷積層,以及Simonyan和Zisserman的模型[19](VGG),它有13個可共享的卷積層。

為了生成區域建議框,我們在最後一個共享的卷積層輸出的卷積特征映射上滑動小網絡,這個網絡全連接配接到輸入卷積特征映射的nxn的空間視窗上。每個滑動視窗映射到一個低維向量上(對于ZF是256-d,對于VGG是512-d,每個特征映射的一個滑動視窗對應一個數值)。這個向量輸出給兩個同級的全連接配接的層——Bounding Box Regression Layer(reg)和softmaxLayer(cls)。本文中n=3,注意圖像的有效感受野很大(ZF是171像素,VGG是228像素)。圖1(左)以這個小網絡在某個位置的情況舉了個例子。注意,由于小網絡是滑動視窗的形式,是以全連接配接的層(n*n的)被所有空間位置共享(指所有位置用來計算内積的nxn的層參數相同)。這種結構實作為n*n的卷積層,後接兩個同級的1*1的卷積層(分别對應reg和cls),ReLU[15]應用于n*n卷積層的輸出。