目标检测--Rich feature hierarchies for accurate object detection and semantic segmentation(CVPR 2014)
Rich feature hierarchies for accurate object detection and semantic segmentation
作者:?Ross Girshick Jeff Donahue Trevor Darrell Jitendra Malik
引用:?Girshick, Ross, et al. "Rich feature hierarchies for accurate object detection and semantic segmentation."?Proceedings of the IEEE conference on computer vision and pattern recognition. 2014.
引用次數(shù):?2027(Google Scholar, By 2016/11/23).
項目地址:?https://github.com/rbgirshick/rcnn?(基于MATLAB)
1 介紹
這篇文章是2014年CVPR的一篇文章,就是很出名的RCNN(Regions with CNN Features),利用了深度學(xué)習(xí)的方法來做目標(biāo)檢測.
本模型主要包含了3 + 1個模塊:
模塊一: 生成類別獨立的候選區(qū)域
何為類別獨立的(category-independent,CI)區(qū)域? 比如說我們想識別一張圖像上的貓和狗,生成的CI區(qū)域不能橫跨貓和狗,而只能屬于它們之一,或者干脆是背景.在一張圖像上生成CI區(qū)域的方式有很多,本文采用的是Selective Search的方法,關(guān)于這個方法,請參考我的另一篇博文<論文閱讀筆記--Selective Search for Object Recognition>.
模塊二: 利用一個大CNN來提取每個候選區(qū)域的特征向量
模塊三: 利用CNN特征為每個類別訓(xùn)練一個二分類線性SVMs?
可選模塊:?利用CNN特征來做Bounding-box回歸
2 訓(xùn)練和測試流程圖
2.1 本文模型訓(xùn)練流程圖
訓(xùn)練的過程從前到后可分成五個部分:
第一部分: 訓(xùn)練集構(gòu)造(用于對CNN進(jìn)行微調(diào))
給定一系列的輸入圖像,如何構(gòu)造訓(xùn)練集?我認(rèn)為也是先用Selective Search的方法在每個圖像上生成很多的候選區(qū)域(具體多少文中好像沒有講),然后在每張圖上依次計算每個候選區(qū)域與圖中目標(biāo)的ground-truth box之前的重疊程度(IoU),如果重疊程度大于0.5則標(biāo)記這個區(qū)域為此目標(biāo)的正樣本,否則,為負(fù)樣本.對所有的訓(xùn)練圖像執(zhí)行這樣的操作,可以把得到的所有的候選區(qū)域保存下來以備使用.假如說有20個目標(biāo),對每個目標(biāo)我們都有一些屬于它這個類的正樣本,統(tǒng)稱為正樣本,其他的不屬于任何類的區(qū)域圖像稱之為負(fù)樣本.
第二部分: 訓(xùn)練CNN來抽取候選區(qū)域深度特征
CNN采用了AlexNet的網(wǎng)絡(luò)結(jié)構(gòu),模型使用Caffe來實現(xiàn);AlexNet網(wǎng)絡(luò)的結(jié)構(gòu)如下圖所示:中間層我們不關(guān)注,我們主要看它的輸入和輸出.輸入是224*224大小的圖像,提取到的特征是一個4096維度的特征向量,由于是1000類的分類任務(wù),因此最后一層的節(jié)點數(shù)目為1000.
OK,上面回顧了一下典型的AlexNet網(wǎng)絡(luò),現(xiàn)在我們看作者是如何借鑒這個網(wǎng)絡(luò)的.首先是輸入,本文的輸入當(dāng)然是第一部分里面提取到的候選區(qū)域,但是這些候選區(qū)域的大小都是不相同的,因此首先要把每個區(qū)域都resize到規(guī)定大小(224*224);對于每個區(qū)域提取的深度特征的維度依舊是4096維;最后一層的輸出要根據(jù)任務(wù)的不同做出相應(yīng)的改變,原本AlexNet中最后一層的1000的含義是1000類的分類任務(wù),到了這里,如果是對VOC數(shù)據(jù)集,則要把最后一層的節(jié)點數(shù)目設(shè)置為20+1(20表示有20個待識別目標(biāo),1表示背景類);對ILSVRC2013來說,要設(shè)置為200+1.
假如說對于VOC數(shù)據(jù)集,第一部分已經(jīng)把訓(xùn)練數(shù)據(jù)集構(gòu)造好了,共有21個類,每個類都有自己對應(yīng)的樣本區(qū)域,而且這些區(qū)域是類別獨立的.然后就可以輸入到改進(jìn)版的AlexNet進(jìn)行訓(xùn)練了,AlexNet的最后一層依舊是Softmax層,這個時候的訓(xùn)練可以看做有監(jiān)督地訓(xùn)練一個21-way的圖像分類網(wǎng)絡(luò).
CNN網(wǎng)絡(luò)的具體訓(xùn)練方法是:先用ILSCRC2012數(shù)據(jù)集對網(wǎng)絡(luò)進(jìn)行有監(jiān)督預(yù)訓(xùn)練,然后使用第一部分里面提取的訓(xùn)練集進(jìn)行微調(diào);微調(diào)的時候采用SGD的方法,學(xué)習(xí)率設(shè)置為預(yù)訓(xùn)練時候的十分之一(具體為0.001),這樣使得網(wǎng)絡(luò)慢慢地收斂.mini-batch的大小為128(從第一部分保存下來的候選區(qū)域里,每次隨機(jī)抽取32個正樣本(在所有類別上),96個負(fù)樣本(背景類)).
第三部分: 訓(xùn)練集構(gòu)造(用于訓(xùn)練多個SVM分類器)
第一部分介紹了如何構(gòu)造訓(xùn)練集來對預(yù)訓(xùn)練后的CNN進(jìn)行微調(diào),那里面與GT Boxes之間的IoU重疊程度大于0.5的都被標(biāo)定為正樣本.現(xiàn)在到了這一步,CNN已經(jīng)訓(xùn)練完成了,我們現(xiàn)在要為每個類別(比如貓,狗,...)單獨訓(xùn)練一個二分類SVM分類器,比如"SVM_貓"就是專門來檢測貓這個目標(biāo),"SVM_狗"就是專門來檢測狗這個目標(biāo),這時候?qū)γ總€二分類SVM分類器如何構(gòu)造它的訓(xùn)練集呢? 以貓這個目標(biāo)為例,本文的做法就是以每張圖像上貓這個目標(biāo)的GT Boxes作為正樣本,然后在圖像上生成很多候選區(qū)域,考察每個區(qū)域與貓目標(biāo)的GT boxes之間的IoU,如果IoU小于0.3,那么就認(rèn)定這個區(qū)域為負(fù)樣本,重疊度在0.3~1之間的不用做訓(xùn)練.可以想象,對于訓(xùn)練"SVM_貓"來說,正樣本都是包含貓的區(qū)域,負(fù)樣本有可能是背景,也有可能包含了其他目標(biāo),比如狗,但是無論怎么樣,這個區(qū)域只要不包含貓,或者講包含了一部分貓,但是重疊度小于0.3,都會被標(biāo)記為負(fù)樣本.
第四部分: 為每個類訓(xùn)練一個binary SVM分類器
假如有20個類,那么就要訓(xùn)練20個binary分類器,第三部分講述了如何為每一個兩分類SVM構(gòu)造相應(yīng)的訓(xùn)練集,訓(xùn)練集里面的正樣本和負(fù)樣本都要使用上面已經(jīng)訓(xùn)練好的CNN來提取各自的4.96維度的特征向量,然后再對分類器進(jìn)行訓(xùn)練.
第五部分: 進(jìn)行Bounding-box回歸
類似于第四部分中為每個類別訓(xùn)練一個二分類SVM,本文這里為每個類別構(gòu)造一個Bounding-box回歸器來提升檢測的準(zhǔn)確率.
具體做法:假如下圖中的綠色box用P來表示,P=(Px,Py,Pw,Ph),這四個值分別表示這個box的中心點橫坐標(biāo),中心點縱坐標(biāo),box寬度以及box高度.紅色框為目標(biāo)的真實box,設(shè)為G,G=(Gx,Gy,Gw,Gh),每個元素的含義和P中相同,現(xiàn)在的目的就是想學(xué)習(xí)到一種變換,這個變換可以將P映射到G.
如何對這個變換進(jìn)行建模? 作者給出了一種變換關(guān)系如下圖所示:
? ??
訓(xùn)練回歸器的時候,對于輸入: 訓(xùn)練box的P=(Px,Py,Pw,Ph)肯定是要參與的,但是不僅僅是這個.前面我們訓(xùn)練得到了CNN,我們這里可以使用已經(jīng)訓(xùn)練的CNN計算區(qū)域的pool5層的特征(即Φ5(P))來參與訓(xùn)練,w_{x,y,h,w}為待學(xué)習(xí)的回歸器參數(shù),因此,我們的問題變得很直接: 就是通過一定的方法把w_{x,y,h,w}求出來,就得到了回歸器.思路講清楚了,具體的求解過程見論文中所述.
注意事項:我在想,就比如上面那個檢測狼的那張圖,真實的邊緣box就一個,而候選的box卻可能有很多,那么也就是說,對于這張圖像上的樣本,它們的輸入雖然不一樣,但是輸出確實相同的,這合理嗎?但是轉(zhuǎn)念一想,訓(xùn)練的時候圖像的數(shù)目是很多的,從這些圖像上抽取的所有樣本一起參與訓(xùn)練,一張圖像上的影響可能并不那么大.文中提示我們需要注意的一點也在訓(xùn)練集的構(gòu)造上面,如果P這個區(qū)域距離G太遠(yuǎn)的話,那么回歸可能變得沒有意義,一次構(gòu)造訓(xùn)練集時候要選擇哪些距離G比較近的候選區(qū)域,怎么考量這個近的程度呢? 當(dāng)然還是使用IoU了,文章中選擇那些與GTbox的IoU在0.6以上的區(qū)域來進(jìn)行回歸(0.6這個值使用交叉驗證確定的),至于其他的候選區(qū)域,直接丟掉就是了.?
2.2 本文模型測試過程
測試過程基本上和訓(xùn)練的過程是相同的: 給定一張測試圖像 --> 利用SS方法抽取大約2000個候選區(qū)域 --> 將每個區(qū)域都resize到224*224大小 --> 利用訓(xùn)練好的CNN得到每個區(qū)域的深度特征 --> 將每個區(qū)域?qū)?yīng)的深度特征向量分別送到那幾十個訓(xùn)練好的二分類SVM當(dāng)中,輸出每個區(qū)域?qū)儆诿總€類的概率(SVM軟分類).假如類別數(shù)目N=20,就會得到一個2000*20的矩陣,每一行數(shù)據(jù)表示的是一個候選區(qū)域?qū)儆?0個類的概率值.每一列表示所有的候選區(qū)域?qū)儆谀且涣蓄悇e的概率值(比如,一張圖像上的2000個候選區(qū)域?qū)儆谪堖@個類別的概率). --> 對于每一類別(也就是每一列的數(shù)據(jù))使用貪婪非最大值抑制的方法來對這些區(qū)域進(jìn)行篩選. --> 對這2000個候選區(qū)域,用回歸器預(yù)測bounding box.
(問題1: 貪婪非最大值抑制這點還沒有完全理解,具體是怎么進(jìn)行的?)
(問題2: 最后怎么得到最終結(jié)果的?)
總結(jié)
1.?上面的模型,即使把第三部分和第四部分去掉也能得到檢測的結(jié)果,也就是說,直接運用CNN的softmax分類器就可以當(dāng)做是一個目標(biāo)檢測器,那么為什么還要再構(gòu)造訓(xùn)練集,再訓(xùn)練多個SVM分類器呢??如果只是用CNN+Softmax來做目標(biāo)檢測器,那么這篇論文的思路就和<論文閱讀筆記--Selective Search for Object Recognition>差不多了,就是把Selective Search算法里面的HOG+BOW特征換成了CNN特征,SVM分類器換成了Softmax,這樣的話,這篇論文的創(chuàng)新性便不能體現(xiàn)!而且,據(jù)作者文中所說,如果只使用第一和第二部分的話,在VOC2007數(shù)據(jù)集上的表現(xiàn)將從54.2%下降到50.9%.
每個模型都有自己的優(yōu)點和缺點,這篇為人所道的缺點就是它需要訓(xùn)練多個SVM分類器,計算復(fù)雜度較高,這一點在那些只需要訓(xùn)練一個分類器的文章中經(jīng)常能看到.
2.?Ross Girshick大神在RCNN改進(jìn)版<Fast RCNN>里面對RCNN的幾個缺點進(jìn)行了闡述,只要包括:
(1) RCNN的訓(xùn)練是一個multi-stage pipeline.這句話的意思是說RCNN的三個模塊是一條流水線下來,而不是有機(jī)地結(jié)合在了一起;具體來說就是: RCNN首先利用object proposals樣本,借助log loss(Softmax)來微調(diào)一個ConvNet --> 然后使用ConvNet的特征來訓(xùn)練多個二分類SVMs --> 最后再訓(xùn)練一個bounding-box回歸器.
(2) 訓(xùn)練在空間和時間上都耗費巨大.RCNN需要訓(xùn)練多個SVM分類器,也要訓(xùn)練多個回歸器,訓(xùn)練所用的特征向量都是深度特征向量,維度是很高的,這些特征保存到硬盤上很占空間,而且訓(xùn)練比較耗時.
(3) 測試的時候速度很慢. 測試的時候,先在圖像上生成region proposal,然后提取每個proposal的深度特征,然后再分類,在GPU上測試是47s/image,達(dá)不到實時的要求.
?
本博文不是對文章的逐字翻譯,而是盡量對其思想進(jìn)行理解,因此難免有一些誤解或者不當(dāng)之處, 敬請留言指教, 謝謝!
?
參考文獻(xiàn):
[1] 項目的MATLAB源碼:https://github.com/rbgirshick/rcnn
總結(jié)
以上是生活随笔為你收集整理的目标检测--Rich feature hierarchies for accurate object detection and semantic segmentation(CVPR 2014)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 目标检测--Selective Sear
- 下一篇: maskrcnn用于目标检测_用于目标检