Faster-RCNN系列文章

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

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

R指的是region,也就是在數據進入深度網絡(CNNs)之前進行預處理,在預訓練圖像中生成若干個regionproposals,再將這些regionproposals進行resize,因爲CNN網絡要求輸入數據維度相同。

這裏寫圖片描述
訓練過程:

①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(論文下載地址
這裏寫圖片描述

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。如圖
這裏寫圖片描述
RPNs 是一種 fully-convolutional network (FCN),爲了與 Fast R-CNN相結合,作者給出了一種簡單的訓練方法:固定 proposal,爲生成 proposal和目標檢測這兩個task交替微調網絡。

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

區域建議網絡(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卷積層的輸出。

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