日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

基于R-CNN的物体检测-CVPR 2014

發布時間:2025/3/21 54 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于R-CNN的物体检测-CVPR 2014 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉載自:http://blog.csdn.net/hjimce/article/details/50187029

一、相關理論

? ?本篇博文主要講解2014年CVPR上的經典paper:《Rich feature hierarchies?for?Accurate Object Detection and Segmentation》,這篇文章的算法思想又被稱之為:R-CNN(Regions with Convolutional Neural Network Features),是物體檢測領域曾經獲得state-of-art精度的經典文獻。

? ?這篇paper的思想,改變了物體檢測的總思路,現在好多文獻關于深度學習的物體檢測的算法,基本上都是繼承了這個思想,比如:《Spatial Pyramid Pooling in Deep Convolutional?Networks for Visual Recognition》,所以學習經典算法,有助于我們以后搞物體檢測的其它paper。

? ? 之前剛開始接觸物體檢測算法的時候,老是分不清deep learning中,物體檢測和圖片分類算法上的區別,弄得我頭好暈,終于在這篇paper上,看到了解釋。物體檢測和圖片分類的區別:圖片分類不需要定位,而物體檢測需要定位出物體的位置,也就是相當于把物體的bbox檢測出來,還有一點物體檢測是要把所有圖片中的物體都識別定位出來。

二、基礎知識

1、有監督預訓練與無監督預訓練

(1)無監督預訓練(Unsupervised pre-training)

無監督預訓練這個名詞我們比較熟悉,棧式自編碼、DBM采用的都是采用無監督預訓練。因為預訓練階段的樣本不需要人工標注數據,所以就叫做無監督預訓練。

(2)有監督預訓練(Supervised pre-training)

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

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

2、IOU的定義

因為沒有搞過物體檢測不懂IOU這個概念,所以就簡單介紹一下。物體檢測需要定位出物體的bounding box,就像下面的圖片一樣,我們不僅要定位出車輛的bounding box 我們還要識別出bounding box 里面的物體就是車輛。對于bounding box的定位精度,有一個很重要的概念,因為我們算法不可能百分百跟人工標注的數據完全匹配,因此就存在一個定位精度評價公式:IOU。


IOU定義了兩個bounding box的重疊度,如下圖所示:


矩形框A、B的一個重合度IOU計算公式為:

IOU=(A∩B)/(A∪B)

就是矩形框A、B的重疊面積占A、B并集的面積比例:

IOU=SI/(SA+SB-SI)

3、非極大值抑制

因為一會兒講RCNN算法,會從一張圖片中找出n多個可能是物體的矩形框,然后為每個矩形框為做類別分類概率:


就像上面的圖片一樣,定位一個車輛,最后算法就找出了一堆的方框,我們需要判別哪些矩形框是沒用的。非極大值抑制:先假設有6個矩形框,根據分類器類別分類概率做排序,從小到大分別屬于車輛的概率分別為A、B、C、D、E、F。

(1)從最大概率矩形框F開始,分別判斷A~E與F的重疊度IOU是否大于某個設定的閾值;

(2)假設B、D與F的重疊度超過閾值,那么就扔掉B、D;并標記第一個矩形框F,是我們保留下來的。

(3)從剩下的矩形框A、C、E中,選擇概率最大的E,然后判斷E與A、C的重疊度,重疊度大于一定的閾值,那么就扔掉;并標記E是我們保留下來的第二個矩形框。

就這樣一直重復,找到所有被保留下來的矩形框。

4、VOC物體檢測任務

這個就相當于一個競賽,里面包含了20個物體類別:http://host.robots.ox.ac.uk/pascal/VOC/voc2012/examples/index.html? 還有一個背景,總共就相當于21個類別,因此一會設計fine-tuning CNN的時候,我們softmax分類輸出層為21個神經元。

三、算法總體思路?

? ? 開始講解paper前,我們需要先把握總體思路,才容易理解paper的算法。

? ? 圖片分類與物體檢測不同,物體檢測需要定位出物體的位置,這種就相當于回歸問題,求解一個包含物體的方框。而圖片分類其實是邏輯回歸。這種方法對于單物體檢測還不錯,但是對于多物體檢測就……

? ? 因此paper采用的方法是:首先輸入一張圖片,我們先定位出2000個物體候選框,然后采用CNN提取每個候選框中圖片的特征向量,特征向量的維度為4096維,接著采用svm算法對各個候選框中的物體進行分類識別。也就是總個過程分為三個程序:a、找出候選框;b、利用CNN提取特征向量;c、利用SVM進行特征向量分類。具體的流程如下圖片所示:


后面我們將根據這三個過程,進行每個步驟的詳細講解。

四、候選框搜索階段

1、實現方式

當我們輸入一張圖片時,我們要搜索出所有可能是物體的區域,這個采用的方法是傳統文獻的算法:《search for object recognition》,通過這個算法我們搜索出2000個候選框。然后從上面的總流程圖中可以看到,搜出的候選框是矩形的,而且是大小各不相同。然而CNN對輸入圖片的大小是有固定的,如果把搜索到的矩形選框不做處理,就扔進CNN中,肯定不行。因此對于每個輸入的候選框都需要縮放到固定的大小。下面我們講解要怎么進行縮放處理,為了簡單起見我們假設下一階段CNN所需要的輸入圖片大小是個正方形圖片227*227。因為我們經過selective search 得到的是矩形框,paper試驗了兩種不同的處理方法:

(1)各向異性縮放

這種方法很簡單,就是不管圖片的長寬比例,管它是否扭曲,進行縮放就是了,全部縮放到CNN輸入的大小227*227,如下圖(D)所示;

(2)各向同性縮放

因為圖片扭曲后,估計會對后續CNN的訓練精度有影響,于是作者也測試了“各向同性縮放”方案。這個有兩種辦法

A、直接在原始圖片中,把bounding box的邊界進行擴展延伸成正方形,然后再進行裁剪;如果已經延伸到了原始圖片的外邊界,那么就用bounding box中的顏色均值填充;如下圖(B)所示;

B、先把bounding box圖片裁剪出來,然后用固定的背景顏色填充成正方形圖片(背景顏色也是采用bounding box的像素顏色均值),如下圖(C)所示;


對于上面的異性、同性縮放,文獻還有個padding處理,上面的示意圖中第1、3行就是結合了padding=0,第2、4行結果圖采用padding=16的結果。經過最后的試驗,作者發現采用各向異性縮放、padding=16的精度最高,具體不再啰嗦。

OK,上面處理完后,可以得到指定大小的圖片,因為我們后面還要繼續用這2000個候選框圖片,繼續訓練CNN、SVM。然而人工標注的數據一張圖片中就只標注了正確的bounding box,我們搜索出來的2000個矩形框也不可能會出現一個與人工標注完全匹配的候選框。因此我們需要用IOU為2000個bounding box打標簽,以便下一步CNN訓練使用。在CNN階段,如果用selective?search挑選出來的候選框與物體的人工標注矩形框的重疊區域IoU大于0.5,那么我們就把這個候選框標注成物體類別,否則我們就把它當做背景類別。SVM階段的正負樣本標簽問題,等到了svm講解階段我再具體講解。

五、CNN特征提取階段

1、算法實現

a、網絡結構設計階段

網絡架構我們有兩個可選方案:第一選擇經典的Alexnet;第二選擇VGG16。經過測試Alexnet精度為58.5%,VGG16精度為66%。VGG這個模型的特點是選擇比較小的卷積核、選擇較小的跨步,這個網絡的精度高,不過計算量是Alexnet的7倍。后面為了簡單起見,我們就直接選用Alexnet,并進行講解;Alexnet特征提取部分包含了5個卷積層、2個全連接層,在Alexnet中p5層神經元個數為9216、 f6、f7的神經元個數都是4096,通過這個網絡訓練完畢后,最后提取特征每個輸入候選框圖片都能得到一個4096維的特征向量。

b、網絡有監督預訓練階段

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

網絡優化求解:采用隨機梯度下降法,學習速率大小為0.001;

C、fine-tuning階段

我們接著采用selective?search?搜索出來的候選框,然后處理到指定大小圖片,繼續對上面預訓練的cnn模型進行fine-tuning訓練。假設要檢測的物體類別有N類,那么我們就需要把上面預訓練階段的CNN模型的最后一層給替換掉,替換成N+1個輸出的神經元(加1,表示還有一個背景),然后這一層直接采用參數隨機初始化的方法,其它網絡層的參數不變;接著就可以開始繼續SGD訓練了。開始的時候,SGD學習率選擇0.001,在每次訓練的時候,我們batch?size大小選擇128,其中32個事正樣本、96個事負樣本(正負樣本的定義前面已經提過,不再解釋)。

2、問題解答

OK,看完上面的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訓練過程的正負樣本定義方式各有不同,導致最后采用CNN softmax輸出比采用svm精度還低。

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

然而svm訓練的時候,因為svm適用于少樣本訓練,所以對于訓練樣本數據的IOU要求比較嚴格,我們只有當bounding?box把整個物體都包含進去了,我們才把它標注為物體類別,然后訓練svm,具體請看下文。

六、SVM訓練、測試階段

這是一個二分類問題,我么假設我們要檢測車輛。我們知道只有當bounding?box把整量車都包含在內,那才叫正樣本;如果bounding box 沒有包含到車輛,那么我們就可以把它當做負樣本。但問題是當我們的檢測窗口只有部分包好物體,那該怎么定義正負樣本呢?作者測試了IOU閾值各種方案數值0,0.1,0.2,0.3,0.4,0.5。最后我們通過訓練發現,如果選擇IOU閾值為0.3效果最好(選擇為0精度下降了4個百分點,選擇0.5精度下降了5個百分點),即當重疊度小于0.3的時候,我們就把它標注為負樣本。一旦CNN f7層特征被提取出來,那么我們將為每個物體累訓練一個svm分類器。當我們用CNN提取2000個候選框,可以得到2000*4096這樣的特征向量矩陣,然后我們只需要把這樣的一個矩陣與svm權值矩陣4096*N點乘(N為分類類別數目,因為我們訓練的N個svm,每個svm包好了4096個W),就可以得到結果了。

OK,就講到這邊吧,懶得打字了,打到手酸。

個人總結:學習這篇文獻最大的意義在于作者把自己的試驗過程都講的很清楚,可以讓我們學到不少的調參經驗,真的是很佩服作者背后的思考。因為文獻很長、細節非常之多,本人也對物體檢測不感興趣,只是隨便看看文獻、學學算法罷了,所以很多細節沒有細看,比如7.3 bounding box的回歸過程;最后看這篇文獻好累、十幾頁,細節一大堆,包含作者各種實驗、思考……

參考文獻:

1、《Rich feature hierarchies?for?Accurate Object Detection and Segmentation》

2、《Spatial Pyramid Pooling in Deep Convolutional?Networks for Visual Recognition》

總結

以上是生活随笔為你收集整理的基于R-CNN的物体检测-CVPR 2014的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。