cs231n學(xué)習(xí)筆記-CNN-目標(biāo)檢測(cè)、定位奏寨、分割
cite from: http://blog.csdn.net/myarrow/article/details/51878004
1)CNN:Convolutional Neural Networks
2)FC:Fully Connected
3)IoU:Intersection over Union (IoU的值定義:Region Proposal與Ground Truth的窗口的交集比并集的比值起意,如果IoU低于0.5,那么相當(dāng)于目標(biāo)還是沒(méi)有檢測(cè)到)
4)ICCV:International Conference on Computer Vision
5)R-CNN:Region-based Convolutional Neural Networks
6)AR:Average Recall
7)mAP:mean Average Precision
8)RPN:Region Proposal Networks
9)FAIR:Facebook AI Research
10)w.r.t.:with respect to
11)Image Classification(what?):圖像分類(lèi)
12)Object?Detection(what+where?)病瞳、Localization杜恰、Segmentation:對(duì)角檢測(cè)、定位仍源、分割
卷積計(jì)算過(guò)程如下圖所示:
我們剛才描述的即是卷積心褐。可以把卷積想象為信號(hào)處理中的一種奇特乘法笼踩。也可將兩個(gè)矩陣生成點(diǎn)積想象為兩個(gè)函數(shù)逗爹。圖像就是底層函數(shù),而過(guò)濾器就是在其上“卷過(guò)”的函數(shù)嚎于。
圖像的主要問(wèn)題在于其高維度掘而,原因是對(duì)高維度的處理時(shí)間和運(yùn)算能力成本很高。卷積網(wǎng)絡(luò)就是為了通過(guò)各種方式降低圖像的維度而設(shè)計(jì)的于购。過(guò)濾器步幅即是減少維度的一種方法袍睡,另一種方法是降采樣。
2.2 Activations maps的個(gè)數(shù)與Filter的個(gè)數(shù)一致
2.3 輸入層與Filter肋僧、Padding斑胜、Stride、參數(shù)和輸出層的關(guān)系
1) 參數(shù)個(gè)數(shù)由Filter定義及Filter個(gè)數(shù)決定嫌吠,其公式為:
The number of parameters = (FxFxD + 1) * K
2)一個(gè)Activation Map共享一個(gè)Filter及其權(quán)重和偏差
3)Activation Map個(gè)數(shù)與Filter個(gè)數(shù)相同
1) ?Pooling在每個(gè)Activation Map上單獨(dú)做止潘,在Pooling之后,Activation Map數(shù)量不變
Pooling層一般用于降維辫诅,將一個(gè)kxk的區(qū)域內(nèi)取平均或取最大值凭戴,作為這一個(gè)小區(qū)域內(nèi)的特征筋搏,傳遞到下一層愧膀。傳統(tǒng)的Pooling層是不重疊的,使Pooling層重疊可以降低錯(cuò)誤率逸邦,而且對(duì)防止過(guò)擬合有一定的效果波势。
2)Pooling過(guò)程描述(Pooling過(guò)程不需要參數(shù))
1)深度革命中遇到的問(wèn)題:
隨著CNN網(wǎng)絡(luò)的發(fā)展斋攀,尤其的VGG網(wǎng)絡(luò)的提出廊勃,大家發(fā)現(xiàn)網(wǎng)絡(luò)的層數(shù)是一個(gè)關(guān)鍵因素滑进,貌似越深的網(wǎng)絡(luò)效果越好。但是隨著網(wǎng)絡(luò)層數(shù)的增加钞它,問(wèn)題也隨之而來(lái)。
(1)第一個(gè)問(wèn)題: vanishing/exploding gradients(即梯度消失或爆炸):這就導(dǎo)致訓(xùn)練難以收斂殊鞭。但是隨著 normalized initialization and BN(Batch Normalization)的提出遭垛,解決了梯度消失或爆炸問(wèn)題。
(2)第二個(gè)問(wèn)題:網(wǎng)絡(luò)越深操灿,訓(xùn)練誤差和測(cè)試誤差越大锯仪。在收斂問(wèn)題解決后,又一個(gè)問(wèn)題暴露出來(lái):隨著網(wǎng)絡(luò)深度的增加趾盐,系統(tǒng)精度得到飽和之后庶喜,迅速的下滑。讓人意外的是這個(gè)性能下降不是過(guò)擬合導(dǎo)致的救鲤。對(duì)一個(gè)合適深度的模型加入額外的層數(shù)導(dǎo)致訓(xùn)練誤差變大久窟。如下圖所示,可通過(guò)Deep Residual Learning 框架來(lái)解決這種因?yàn)樯疃仍黾佣鴮?dǎo)致準(zhǔn)確性下降問(wèn)題本缠。
參考信息《基于深度學(xué)習(xí)的目標(biāo)檢測(cè)研究進(jìn)展》
傳統(tǒng)目標(biāo)檢測(cè)流程:
1)區(qū)域選擇(窮舉策略:采用滑動(dòng)窗口斥扛,且設(shè)置不同的大小,不同的長(zhǎng)寬比對(duì)圖像進(jìn)行遍歷丹锹,時(shí)間復(fù)雜度高)
2)特征提认“洹(SIFT、HOG等楣黍;形態(tài)多樣性匾灶、光照變化多樣性、背景多樣性使得特征魯棒性差)
3)分類(lèi)器(主要有SVM租漂、Adaboost等)
傳統(tǒng)目標(biāo)檢測(cè)的主要問(wèn)題:
1)基于滑動(dòng)窗口的區(qū)域選擇策略沒(méi)有針對(duì)性阶女,時(shí)間復(fù)雜度高,窗口冗余
2)手工設(shè)計(jì)的特征對(duì)于多樣性的變化沒(méi)有很好的魯棒性
3.3 基于侯選區(qū)域(Region Proposal)的深度學(xué)習(xí)目標(biāo)檢測(cè)法
3.3.1 R-CNN (CVPR2014, TPAMI2015)
1)Region Proposal:可以解決滑動(dòng)窗口的問(wèn)題
候選區(qū)域(Region Proposal):是預(yù)先找出圖中目標(biāo)可能出現(xiàn)的位置哩治。它利用了圖像中的紋理张肾、邊緣、顏色等信息锚扎,可以保證在選取較少窗口(幾千甚至幾百)的情況下保持較高的召回率(Recall)吞瞪。
常用的Region Proposal有(詳見(jiàn)"What
makes for effective detection proposals?"):
-Selective Search
-Edge Boxes
2)R-CNN:可以解決特征魯棒性的問(wèn)題
(1) 輸入測(cè)試圖像
(2) 利用selective search算法在圖像中從下到上提取2000個(gè)左右的Region Proposal
(3) 將每個(gè)Region Proposal縮放(warp)成227x227的大小并輸入到CNN,將CNN的fc7層的輸出作為特征
(4) 將每個(gè)Region Proposal提取到的CNN特征輸入到SVM進(jìn)行分類(lèi)
注:1)對(duì)每個(gè)Region Proposal縮放到同一尺度是因?yàn)镃NN全連接層輸入需要保證維度固定驾孔。
2)上圖少畫(huà)了一個(gè)過(guò)程——對(duì)于SVM分好類(lèi)的Region Proposal做邊框回歸(bounding-box
regression)芍秆,邊框回歸是對(duì)region proposal進(jìn)行糾正的線(xiàn)性回歸算法惯疙,為了讓region
proposal提取到的窗口跟目標(biāo)真實(shí)窗口更吻合。因?yàn)閞egion proposal提取到的窗口不可能跟人手工標(biāo)記那么準(zhǔn)妖啥,如果region
proposal跟目標(biāo)位置偏移較大霉颠,即便是分類(lèi)正確了,但是由于IoU(region
proposal與Ground Truth的窗口的交集比并集的比值)低于0.5荆虱,那么相當(dāng)于目標(biāo)還是沒(méi)有檢測(cè)到蒿偎。
3)R-CNN缺點(diǎn):
(1) 訓(xùn)練分為多個(gè)階段,步驟繁瑣: 微調(diào)網(wǎng)絡(luò)+訓(xùn)練SVM+訓(xùn)練邊框回歸器
(2) 訓(xùn)練耗時(shí)怀读,占用磁盤(pán)空間大:5000張圖像產(chǎn)生幾百G的特征文件
(3) 速度慢: 使用GPU, VGG16模型處理一張圖像需要47s诉位。
(4)?測(cè)試速度慢:每個(gè)候選區(qū)域需要運(yùn)行整個(gè)前向CNN計(jì)算
(5) SVM和回歸是事后操作:在SVM和回歸過(guò)程中CNN特征沒(méi)有被學(xué)習(xí)更新
針對(duì)速度慢的這個(gè)問(wèn)題,SPP-NET給出了很好的解決方案菜枷。
3.3.2 SPP-NET (ECCV2014, TPAMI2015)
SSP-Net:Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition
先看一下R-CNN為什么檢測(cè)速度這么慢苍糠,一張圖都需要47s!仔細(xì)看下R-CNN框架發(fā)現(xiàn)啤誊,對(duì)圖像提完Region
Proposal(2000個(gè)左右)之后將每個(gè)Proposal當(dāng)成一張圖像進(jìn)行后續(xù)處理(CNN提特征+SVM分類(lèi))岳瞭,實(shí)際上對(duì)一張圖像進(jìn)行了2000
次提特征和分類(lèi)的過(guò)程!這2000個(gè)Region
Proposal不都是圖像的一部分嗎蚊锹,那么我們完全可以對(duì)圖像提一次卷積層特征瞳筏,然后只需要將Region
Proposal在原圖的位置映射到卷積層特征圖上,這樣對(duì)于一張圖像我們只需要提一次卷積層特征牡昆,然后將每個(gè)Region
Proposal的卷積層特征輸入到全連接層做后續(xù)操作乏矾。(對(duì)于CNN來(lái)說(shuō),大部分運(yùn)算都耗在卷積操作上迁杨,這樣做可以節(jié)省大量時(shí)間)钻心。
現(xiàn)在的問(wèn)題是每個(gè)Region Proposal的尺度不一樣,直接這樣輸入全連接層肯定是不行的铅协,因?yàn)槿B接層輸入必須是固定的長(zhǎng)度捷沸。SPP-NET恰好可以解決這個(gè)問(wèn)題。
由于傳統(tǒng)的CNN限制了輸入必須固定大泻贰(比如AlexNet是224x224)痒给,所以在實(shí)際使用中往往需要對(duì)原圖片進(jìn)行crop或者warp的操作:
-?crop:截取原圖片的一個(gè)固定大小的patch
- warp:將原圖片的ROI縮放到一個(gè)固定大小的patch
無(wú)論是crop還是warp,都無(wú)法保證在不失真的情況下將圖片傳入到CNN當(dāng)中:
- crop:物體可能會(huì)產(chǎn)生截?cái)嗫ト绕涫情L(zhǎng)寬比大的圖片苍柏。
- warp:物體被拉伸,失去“原形”姜贡,尤其是長(zhǎng)寬比大的圖片
SPP為的就是解決上述的問(wèn)題试吁,做到的效果為:不管輸入的圖片是什么尺度,都能夠正確的傳入網(wǎng)絡(luò)。
具體思路為:CNN的卷積層是可以處理任意尺度的輸入的熄捍,只是在全連接層處有限制尺度——換句話(huà)說(shuō)烛恤,如果找到一個(gè)方法,在全連接層之前將其輸入限制到等長(zhǎng)余耽,那么就解決了這個(gè)問(wèn)題缚柏。
具體方案如下圖所示:
如果原圖輸入是224x224,對(duì)于conv5出來(lái)后的輸出碟贾,是13x13x256的币喧,可以理解成有256個(gè)這樣的filter,每個(gè)filter對(duì)應(yīng)一張13x13的activation map袱耽。如果像上圖那樣將activationmap pooling成4x4 2x2 1x1三張子圖杀餐,做max pooling后,出來(lái)的特征就是固定長(zhǎng)度的(16+4+1)x256那么多的維度了扛邑。如果原圖的輸入不是224x224,出來(lái)的特征依然是(16+4+1)x256铐然;直覺(jué)地說(shuō)蔬崩,可以理解成將原來(lái)固定大小為(3x3)窗口的pool5改成了自適應(yīng)窗口大小,窗口的大小和activation map成比例搀暑,保證了經(jīng)過(guò)pooling后出來(lái)的feature的長(zhǎng)度是一致的沥阳。
使用SPP-NET相比于R-CNN可以大大加快目標(biāo)檢測(cè)的速度,但是依然存在著很多問(wèn)題:
(1) 訓(xùn)練分為多個(gè)階段自点,步驟繁瑣: 微調(diào)網(wǎng)絡(luò)+訓(xùn)練SVM+訓(xùn)練訓(xùn)練邊框回歸器
(2) SPP-NET在微調(diào)網(wǎng)絡(luò)的時(shí)候固定了卷積層桐罕,只對(duì)全連接層進(jìn)行微調(diào),而對(duì)于一個(gè)新的任務(wù)桂敛,有必要對(duì)卷積層也進(jìn)行微調(diào)功炮。(分類(lèi)的模型提取的特征更注重高層語(yǔ)義,而目標(biāo)檢測(cè)任務(wù)除了語(yǔ)義信息還需要目標(biāo)的位置信息)
針對(duì)這兩個(gè)問(wèn)題术唬,RBG又提出Fast R-CNN, 一個(gè)精簡(jiǎn)而快速的目標(biāo)檢測(cè)框架薪伏。
有了前邊R-CNN和SPP-NET的介紹,我們直接看Fast R-CNN的框架圖:
與R-CNN框架圖對(duì)比粗仓,可以發(fā)現(xiàn)主要有兩處不同:一是最后一個(gè)卷積層后加了一個(gè)ROI pooling layer嫁怀,二是損失函數(shù)使用了多任務(wù)損失函數(shù)(multi-task loss),將邊框回歸直接加入到CNN網(wǎng)絡(luò)中訓(xùn)練借浊。
(1) ROI pooling
layer實(shí)際上是SPP-NET的一個(gè)精簡(jiǎn)版塘淑,SPP-NET對(duì)每個(gè)proposal使用了不同大小的金字塔映射,而ROI pooling
layer只需要下采樣到一個(gè)7x7的特征圖蚂斤。對(duì)于VGG16網(wǎng)絡(luò)conv5_3有512個(gè)特征圖存捺,這樣所有region
proposal對(duì)應(yīng)了一個(gè)7*7*512維度的特征向量作為全連接層的輸入。
(2) R-CNN訓(xùn)練過(guò)程分為了三個(gè)階段曙蒸,而Fast R-CNN直接使用softmax替代SVM分類(lèi)召噩,同時(shí)利用多任務(wù)損失函數(shù)邊框回歸也加入到了網(wǎng)絡(luò)中母赵,這樣整個(gè)的訓(xùn)練過(guò)程是端到端的(除去region proposal提取階段)。
(3) Fast R-CNN在網(wǎng)絡(luò)微調(diào)的過(guò)程中具滴,將部分卷積層也進(jìn)行了微調(diào)凹嘲,取得了更好的檢測(cè)效果。
性能對(duì)比數(shù)據(jù):
1)Fast R-CNN優(yōu)點(diǎn):
Fast R-CNN融合了R-CNN和SPP-NET的精髓构韵,并且引入多任務(wù)損失函數(shù)周蹭,使整個(gè)網(wǎng)絡(luò)的訓(xùn)練和測(cè)試變得十分方便。在Pascal VOC2007訓(xùn)練集上訓(xùn)練疲恢,在VOC2007測(cè)試的結(jié)果為66.9%(mAP)凶朗,如果使用VOC2007+2012訓(xùn)練集訓(xùn)練,在VOC2007上測(cè)試結(jié)果為70%(數(shù)據(jù)集的擴(kuò)充能大幅提高目標(biāo)檢測(cè)性能)显拳。使用VGG16每張圖像總共需要3s左右棚愤。
2)Fast R-CNN 缺點(diǎn):
Region Proposal的提取使用selective search,目標(biāo)檢測(cè)時(shí)間大多消耗在這上面(提Region Proposal2~3s杂数,而提特征分類(lèi)只需0.32s)宛畦,無(wú)法滿(mǎn)足實(shí)時(shí)應(yīng)用,而且并沒(méi)有實(shí)現(xiàn)真正意義上的端到端訓(xùn)練測(cè)試(region proposal使用selective search先提取處來(lái))揍移。那么有沒(méi)有可能直接使用CNN直接產(chǎn)生Region Proposal并對(duì)其分類(lèi)次和?Faster R-CNN框架就是符合這樣需要的目標(biāo)檢測(cè)框架。
Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks
在Region Proposal +
CNN分類(lèi)的這種目標(biāo)檢測(cè)框架中那伐,Region
Proposal質(zhì)量好壞直接影響到目標(biāo)檢測(cè)任務(wù)的精度踏施。如果找到一種方法只提取幾百個(gè)或者更少的高質(zhì)量的假選窗口,而且召回率很高罕邀,這不但能加快目標(biāo)檢
測(cè)速度畅形,還能提高目標(biāo)檢測(cè)的性能(假陽(yáng)例少)。RPN(Region Proposal Networks)網(wǎng)絡(luò)應(yīng)運(yùn)而生诉探。
1)RPN的核心思想
是使用卷積神經(jīng)網(wǎng)絡(luò)直接產(chǎn)生Region Proposal束亏,使用的方法本質(zhì)上就是滑動(dòng)窗口。RPN的設(shè)計(jì)比較巧妙阵具,RPN只需在最后的卷積層上滑動(dòng)一遍碍遍,因?yàn)锳nchor機(jī)制和邊框回歸可以得到多尺度多長(zhǎng)寬比的Region Proposal。
2)Faster R-CNN架構(gòu)
3)RPN架構(gòu)
RPN采用任意大小的的圖像作為輸入阳液,并輸出一組候選的矩形怕敬,每個(gè)矩形都有一個(gè)對(duì)象分?jǐn)?shù)。
RPN被用于訓(xùn)練直接產(chǎn)生候選區(qū)域帘皿,不需要外部的候選區(qū)域东跪。
Anchor是滑動(dòng)窗口的中心,它與尺度和長(zhǎng)寬比相關(guān),默認(rèn)采3種尺度(128,256,512)虽填,3種長(zhǎng)寬比(1:1,1:2,2:1)丁恭,則在每一個(gè)滑動(dòng)位置k=9 anchors。
我們直接看上邊的RPN網(wǎng)絡(luò)結(jié)構(gòu)圖(使用了ZF模型)斋日,給定輸入圖像(假設(shè)分辨率為600*1000)牲览,經(jīng)過(guò)卷積操作得到最后一層的卷積特征圖(大小約為40*60)。在這個(gè)特征圖上使用3*3的卷積核(滑動(dòng)窗口)與特征圖進(jìn)行卷積恶守,最后一層卷積層共有256個(gè)feature
map第献,那么這個(gè)3*3的區(qū)域卷積后可以獲得一個(gè)256維的特征向量,后邊接cls layer(box-classification layer)和reg layer(box-regression layer)分別用于分類(lèi)和邊框回歸(跟Fast R-CNN類(lèi)似兔港,只不過(guò)這里的類(lèi)別只有目標(biāo)和背景兩個(gè)類(lèi)別)庸毫。3*3滑窗對(duì)應(yīng)的每個(gè)特征區(qū)域同時(shí)預(yù)測(cè)輸入圖像3種尺度(128,256,512),3種長(zhǎng)寬比(1:1,1:2,2:1)的region
proposal衫樊,這種映射的機(jī)制稱(chēng)為anchor飒赃。所以對(duì)于這個(gè)40*60的feature map,總共有約20000(40*60*9)個(gè)anchor科侈,也就是預(yù)測(cè)20000個(gè)region proposal载佳。
這樣設(shè)計(jì)的好處是什么呢?雖然現(xiàn)在也是用的滑動(dòng)窗口策略兑徘,但是:滑動(dòng)窗口操作是在卷積層特征圖上進(jìn)行的刚盈,維度較原始圖像降低了16*16倍(中間經(jīng)過(guò)了4
次2*2的pooling操作)羡洛;多尺度采用了9種anchor挂脑,對(duì)應(yīng)了三種尺度和三種長(zhǎng)寬比,加上后邊接了邊框回歸欲侮,所以即便是這9種anchor外的
窗口也能得到一個(gè)跟目標(biāo)比較接近的region proposal崭闲。
4)總結(jié)
Faster R-CNN將一直以來(lái)分離的region proposal和CNN分類(lèi)融合到了一起,使用端到端的網(wǎng)絡(luò)進(jìn)行目標(biāo)檢測(cè)威蕉,無(wú)論在速度上還是精度上都得到了不錯(cuò)的提高刁俭。然而Faster R-CNN還是達(dá)不到實(shí)時(shí)的目標(biāo)檢測(cè),預(yù)先獲取Region Proposal韧涨,然后在對(duì)每個(gè)Proposal分類(lèi)計(jì)算量還是比較大牍戚。比較幸運(yùn)的是YOLO這類(lèi)目標(biāo)檢測(cè)方法的出現(xiàn)讓實(shí)時(shí)性也變的成為可能。
總的來(lái)說(shuō)虑粥,從R-CNN, SPP-NET, Fast R-CNN, Faster R-CNN一路走來(lái)如孝,基于深度學(xué)習(xí)目標(biāo)檢測(cè)的流程變得越來(lái)越精簡(jiǎn),精度越來(lái)越高娩贷,速度也越來(lái)越快第晰。可以說(shuō)基于Region Proposal的R-CNN系列目標(biāo)檢測(cè)方法是當(dāng)前目標(biāo)最主要的一個(gè)分支。
《R-FCN: Object Detection via Region-based Fully Convolutional Networks》
顧名思議:全卷積網(wǎng)絡(luò)茁瘦,就是全部是卷積層品抽,而沒(méi)有全連接層(fc)。
R-FCN(基于區(qū)域的檢測(cè)器)的方法是:在整個(gè)圖像上共享計(jì)算甜熔,通過(guò)移除最后的fc層實(shí)現(xiàn)(即刪除了所有的子網(wǎng)絡(luò))圆恤。使用“位置敏感的得分圖”來(lái)解決了圖像分類(lèi)平移不變性與對(duì)象檢測(cè)平移變化之間的矛盾。
此矛盾為:物體分類(lèi)要求平移不變性越大越好 (圖像中物體的移動(dòng)不用區(qū)分)纺非,而物體檢測(cè)要求有平移變化哑了。所以,ImageNet 分類(lèi)領(lǐng)先的結(jié)果證明盡可能有平移不變性的全卷積結(jié)構(gòu)更受親睞烧颖。另一方面弱左,物體檢測(cè)任務(wù)需要一些平移變化的定位表示。比如炕淮,物體的平移應(yīng)該使網(wǎng)絡(luò)產(chǎn)生響應(yīng)拆火,這些響應(yīng)對(duì)描述候選框覆蓋真實(shí)物體的好壞是有意義的。我們假設(shè)圖像分類(lèi)網(wǎng)絡(luò)的卷積層越深涂圆,則該網(wǎng)絡(luò)對(duì)平移越不敏感们镜。
CNN隨著網(wǎng)絡(luò)深度的增加,網(wǎng)絡(luò)對(duì)于位置(Position)的敏感度越來(lái)越低润歉,也就是所謂的translation-invariance模狭,但是在Detection的時(shí)候,需要對(duì)位置信息有很強(qiáng)的的敏感度踩衩。
那么ResNet-101的detection是怎么做的嚼鹉?
在R-FCN之前,很簡(jiǎn)單驱富,把ROI-pooling層放到了前面的卷積層锚赤,然后后面的卷積層不共享計(jì)算,這樣一可以避免過(guò)多的信息損失褐鸥,二可以用后來(lái)的卷積層學(xué)習(xí)位置信息线脚。
R-FCN:采用全卷積網(wǎng)絡(luò)結(jié)構(gòu)作為 FCN,為給 FCN 引入平移變化叫榕,用專(zhuān)門(mén)的卷積層構(gòu)建位置敏感分?jǐn)?shù)地圖 (position-sensitive score maps)浑侥。每個(gè)空間敏感地圖編碼感興趣區(qū)域的相對(duì)空間位置信息。 在FCN上面增加1個(gè)位置敏感 RoI 池化層來(lái)監(jiān)管這些分?jǐn)?shù)地圖晰绎。
R-FCN思路就是利用最后一層網(wǎng)絡(luò)通過(guò)FCN構(gòu)成一個(gè)position-sensitive的feature
map寓落。具體而言,每一個(gè)proposal的位置信息都需要編碼寒匙,那么先把proposal分成k*k個(gè)grid零如,然后對(duì)每一個(gè)grid進(jìn)行編碼躏将。在最后
一層map之后,再使用卷積計(jì)算產(chǎn)生一個(gè)k*k*(C+1)的map(k*k代表總共的grid數(shù)目考蕾,C代表class
num祸憋,+1代表加入一個(gè)背景類(lèi))。
RPN 給出感興趣區(qū)域肖卧,R-FCN 對(duì)該感興趣區(qū)域分類(lèi)蚯窥。R-FCN
在與 RPN 共享的卷積層后多加1個(gè)卷積層。所以塞帐,R-FCN 與 RPN 一樣拦赠,輸入為整幅圖像。但 R-FCN
最后1個(gè)卷積層的輸出從整幅圖像的卷積響應(yīng)圖像中分割出感興趣區(qū)域的卷積響應(yīng)圖像葵姥。
R-FCN 最后1個(gè)卷積層在整幅圖像上為每類(lèi)生成k*k個(gè)位置敏感分?jǐn)?shù)圖荷鼠,有C類(lèi)物體外加1個(gè)背景,因此有k*k(C+1)個(gè)通道的輸出層榔幸。k*k個(gè)分?jǐn)?shù)圖對(duì)應(yīng)描述位置的空間網(wǎng)格允乐。比如,k×k=3×3削咆,則9個(gè)分?jǐn)?shù)圖編碼單個(gè)物體類(lèi)的 {top?left,top?center,top?right,...,bottom?right}牍疏。
R-FCN 最后用位置敏感 RoI 池化層,給每個(gè) RoI
1個(gè)分?jǐn)?shù)拨齐。選擇性池化圖解:看上圖的橙色響應(yīng)圖像 (top?left)鳞陨,摳出橙色方塊 RoI,池化橙色方塊 RoI 得到橙色小方塊
(分?jǐn)?shù))瞻惋;其它顏色的響應(yīng)圖像同理厦滤。對(duì)所有顏色的小方塊投票 (或池化) 得到1類(lèi)的響應(yīng)結(jié)果。
產(chǎn)
生完了這張map之后熟史,再根據(jù)proposal產(chǎn)生一個(gè)長(zhǎng)寬各為k馁害,channel數(shù)目為C+1的score map窄俏。具體產(chǎn)生score
map的方法是蹂匹,假如k=3,C=20凹蜈,那么score
map的20個(gè)類(lèi)每個(gè)類(lèi)都有3*3的feature限寞,一共9個(gè)格子,每一個(gè)格子都記錄了空間信息仰坦。而這每一個(gè)類(lèi)的每一個(gè)格子都對(duì)應(yīng)前面那個(gè)channel
數(shù)為3*3*21的大map的其中一個(gè)channel的map÷闹玻現(xiàn)在把score
map中的格子對(duì)應(yīng)的區(qū)域的map中的信息取平均,然后這個(gè)平均值就是score map格子中的值悄晃。最后把score
map的值進(jìn)行vote(avg pooling)來(lái)形成一個(gè)21維的向量來(lái)做分類(lèi)即可玫霎。
當(dāng)分類(lèi)正確時(shí)凿滤,該類(lèi)通道的位置敏感分?jǐn)?shù)圖 (中間) 的大多數(shù)橙色實(shí)線(xiàn)網(wǎng)格內(nèi)的響應(yīng)在整個(gè) RoI 位置范圍內(nèi)最強(qiáng)。
對(duì)應(yīng)的bbox regression只需要把C+1設(shè)成4就可以了庶近。
R-FCN采用的一些方法比Faster
R-CNN的baseline提高了3個(gè)點(diǎn)翁脆,并且比原來(lái)Faster R-CNN更快(因?yàn)槿坑?jì)算都共享了)。但是和改進(jìn)過(guò)的Faster
R-CNN相比(ROI
Pooling提前那種)提高了0.2個(gè)點(diǎn)鼻种,速度快了2.5倍反番。所以目前為止這個(gè)方法的結(jié)果應(yīng)該是所有方法中速度和Performance結(jié)合的最好的。
3.4?基于回歸方法的深度學(xué)習(xí)目標(biāo)檢測(cè)算法
Faster R-CNN的方法目前是主流的目標(biāo)檢測(cè)方法叉钥,但是速度上并不能滿(mǎn)足實(shí)時(shí)的要求罢缸。YOLO一類(lèi)的方法慢慢顯現(xiàn)出其重要性,這類(lèi)方法使用了回歸的思想投队,即給定輸入圖像枫疆,直接在圖像的多個(gè)位置上回歸出這個(gè)位置的目標(biāo)邊框以及目標(biāo)類(lèi)別。
YOLO:You Only Look Once: Unified, Real-Time Object Detection
我們直接看上面YOLO的目標(biāo)檢測(cè)的流程圖:
(1) 給個(gè)一個(gè)輸入圖像敷鸦,首先將圖像劃分成7*7(設(shè)S=7)的網(wǎng)格
(2) 對(duì)于每個(gè)網(wǎng)格养铸,我們都預(yù)測(cè)2個(gè)邊框(包括每個(gè)邊框是目標(biāo)的置信度以及每個(gè)邊框區(qū)域在多個(gè)類(lèi)別上的概率)
(3) 根據(jù)上一步可以預(yù)測(cè)出7*7*2個(gè)目標(biāo)窗口,然后根據(jù)閾值去除可能性比較低的目標(biāo)窗口轧膘,最后NMS去除冗余窗口即可钞螟。
可以看到整個(gè)過(guò)程非常簡(jiǎn)單,不需要中間的Region Proposal在找目標(biāo)谎碍,直接回歸便完成了位置和類(lèi)別的判定鳞滨。
那么如何才能做到直接在不同位置的網(wǎng)格上回歸出目標(biāo)的位置和類(lèi)別信息呢?上面是YOLO的網(wǎng)絡(luò)結(jié)構(gòu)圖蟆淀,前邊的網(wǎng)絡(luò)結(jié)構(gòu)跟GoogLeNet的模型比較類(lèi)
似拯啦,主要的是最后兩層的結(jié)構(gòu),卷積層之后接了一個(gè)4096維的全連接層熔任,然后后邊又全連接到一個(gè)7*7*30維的張量上褒链。實(shí)際上這7*7就是劃分的網(wǎng)格
數(shù),現(xiàn)在要在每個(gè)網(wǎng)格上預(yù)測(cè)目標(biāo)兩個(gè)可能的位置以及這個(gè)位置的目標(biāo)置信度和類(lèi)別疑苔,也就是每個(gè)網(wǎng)格預(yù)測(cè)兩個(gè)目標(biāo)甫匹,每個(gè)目標(biāo)的信息有4維坐標(biāo)信息(中心點(diǎn)坐
標(biāo)+長(zhǎng)寬),1個(gè)是目標(biāo)的置信度惦费,還有類(lèi)別數(shù)20(VOC上20個(gè)類(lèi)別)兵迅,總共就是(4+1)*2+20
= 30維的向量。這樣可以利用前邊4096維的全圖特征直接在每個(gè)網(wǎng)格上回歸出目標(biāo)檢測(cè)需要的信息(邊框信息加類(lèi)別)薪贫。
總結(jié):
YOLO將目標(biāo)檢測(cè)任務(wù)轉(zhuǎn)換成一個(gè)回歸問(wèn)題恍箭,大大加快了檢測(cè)的速度,使得YOLO可以每秒處理45張圖像瞧省。而且由于每個(gè)網(wǎng)絡(luò)預(yù)測(cè)目標(biāo)窗口時(shí)使用的是全圖信息扯夭,使得false positive比例大幅降低(充分的上下文信息)鳍贾。但是YOLO也存在問(wèn)題:沒(méi)有了Region Proposal機(jī)制,只使用7*7的網(wǎng)格回歸會(huì)使得目標(biāo)不能非常精準(zhǔn)的定位交洗,這也導(dǎo)致了YOLO的檢測(cè)精度并不是很高贾漏。
SSD: Single Shot MultiBox Detector
上面分析了YOLO存在的問(wèn)題,使用整圖特征在7*7的粗糙網(wǎng)格內(nèi)回歸對(duì)目標(biāo)的定位并不是很精準(zhǔn)藕筋。那是不是可以結(jié)合Region
Proposal的思想實(shí)現(xiàn)精準(zhǔn)一些的定位纵散?SSD結(jié)合YOLO的回歸思想以及Faster R-CNN的anchor機(jī)制做到了這點(diǎn)。
上圖是SSD的一個(gè)框架圖隐圾,首先SSD獲取目標(biāo)位置和類(lèi)別的方法跟YOLO一樣伍掀,都是使用回歸,但是YOLO預(yù)測(cè)某個(gè)位置使用的是全圖的特征暇藏,SSD預(yù)
測(cè)某個(gè)位置使用的是這個(gè)位置周?chē)奶卣鳎ǜ杏X(jué)更合理一些)蜜笤。那么如何建立某個(gè)位置和其特征的對(duì)應(yīng)關(guān)系呢?可能你已經(jīng)想到了盐碱,使用Faster
R-CNN的anchor機(jī)制把兔。如SSD的框架圖所示,假如某一層特征圖(圖b)大小是8*8瓮顽,那么就使用3*3的滑窗提取每個(gè)位置的特征县好,然后這個(gè)特征
回歸得到目標(biāo)的坐標(biāo)信息和類(lèi)別信息(圖c)。
不同于Faster R-CNN暖混,這個(gè)anchor是在多個(gè)feature map上缕贡,這樣可以利用多層的特征并且自然的達(dá)到多尺度(不同層的feature map 3*3滑窗感受野不同)。
小結(jié):
SSD結(jié)合了YOLO中的回歸思想和Faster
R-CNN中的anchor機(jī)制拣播,使用全圖各個(gè)位置的多尺度區(qū)域特征進(jìn)行回歸晾咪,既保持了YOLO速度快的特性,也保證了窗口預(yù)測(cè)的跟Faster
R-CNN一樣比較精準(zhǔn)贮配。SSD在VOC2007上mAP可以達(dá)到72.1%谍倦,速度在GPU上達(dá)到58幀每秒。
總結(jié):YOLO的提出給目標(biāo)檢測(cè)一個(gè)新的思路泪勒,SSD的性能則讓我們看到了目標(biāo)檢測(cè)在實(shí)際應(yīng)用中真正的可能性昼蛀。
3.5?基于殘差(Residual)方法的深度學(xué)習(xí)目標(biāo)檢測(cè)算法
3.5.1 深度殘差網(wǎng)絡(luò)(Deep Residual Networks)
它使用殘差學(xué)習(xí)的這一思想使得學(xué)習(xí)更深的網(wǎng)絡(luò)成為可能,從而學(xué)習(xí)到更好的表達(dá)酣藻。
層數(shù)越多的神經(jīng)網(wǎng)絡(luò)越難以訓(xùn)練曹洽。當(dāng)層數(shù)超過(guò)一定數(shù)量后鳍置,傳統(tǒng)的深度網(wǎng)絡(luò)就會(huì)因優(yōu)化問(wèn)題而出現(xiàn)欠擬合(underfitting)的情況辽剧。殘差學(xué)習(xí)框架
大幅降低訓(xùn)練更深層網(wǎng)絡(luò)的難度,也使準(zhǔn)確率得到顯著提升税产。在 ImageNet 和 COCO 2015 競(jìng)賽中怕轿,共有 152 層的深度殘差網(wǎng)絡(luò)
ResNet 在圖像分類(lèi)偷崩、目標(biāo)檢測(cè)和語(yǔ)義分割各個(gè)分項(xiàng)都取得最好成績(jī),相關(guān)論文更是連續(xù)兩次獲得 CVPR 最佳論文撞羽。
最新研究發(fā)現(xiàn)阐斜,當(dāng)殘差網(wǎng)絡(luò)將身份映射作為 skip
connection 并實(shí)現(xiàn) inter-block activation,正向和反向信號(hào)能夠直接從一個(gè)區(qū)塊傳播到另一個(gè)區(qū)塊诀紊,這樣就達(dá)到了
1001 層的殘差網(wǎng)絡(luò)谒出。由此可見(jiàn),神經(jīng)網(wǎng)絡(luò)的深度這一非常重要的因素邻奠,還有很大的提升空間笤喳。
1)深度譜
2)為使用網(wǎng)絡(luò)層數(shù)更多,通常采用的方法有:初始化算法碌宴,BN方法
3)是否簡(jiǎn)單堆疊的網(wǎng)絡(luò)層數(shù)越多杀狡,訓(xùn)練誤差和測(cè)試誤差就越小?答案正好相反
4)目前流行的深度神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)大致可以分為三類(lèi):
- 直線(xiàn)型(如AlexNet, VGGNet)
- 局部雙分支型(ResNet)
-局部多分支型(GoogleNet)
很久以前人們就已經(jīng)認(rèn)識(shí)到更深的網(wǎng)絡(luò)能夠產(chǎn)生更好的數(shù)據(jù)表達(dá),但是如何訓(xùn)練一個(gè)很深的網(wǎng)絡(luò)卻一直是一個(gè)困擾人們的問(wèn)題贰镣,這主要是由于梯度消失或爆炸以
及尺度不均勻的初始化造成的呜象。圍繞這一問(wèn)題,人們提出了ReLU碑隆、Xavier恭陡、pReLU、batch
normalization和path-SGD等一系列方法上煤,但是本文作者卻發(fā)現(xiàn)即使有這些方法子姜,神經(jīng)網(wǎng)絡(luò)的訓(xùn)練仍然呈現(xiàn)了degradation的現(xiàn)
象。所謂degradation現(xiàn)象楼入,就是隨著網(wǎng)絡(luò)深度的增加哥捕,網(wǎng)絡(luò)的性能反而下降,而且這種性能的下降并不是由前面所說(shuō)的問(wèn)題造成的嘉熊。
4)深度殘差學(xué)習(xí)(Deep Residual Learning)的思想
假如目前有一個(gè)可以工作的很好的網(wǎng)絡(luò)A遥赚,這時(shí)來(lái)了一個(gè)比它更深的網(wǎng)絡(luò)B,只需要讓B的前一部分與A完全相同阐肤,后一部分只實(shí)現(xiàn)一個(gè)恒等映射(identity mapping)凫佛,這樣B最起碼能獲得與A相同的性能,而不至于更差孕惜。深度殘差學(xué)習(xí)的思想也由此而產(chǎn)生愧薛,既然B后面的部分完成的是恒等映射,何不在訓(xùn)練網(wǎng)絡(luò)的時(shí)候加上這一先驗(yàn)(在網(wǎng)絡(luò)訓(xùn)練過(guò)程中衫画,加入先驗(yàn)信息指導(dǎo)非常重要毫炉,合理的先驗(yàn)往往會(huì)取得非常好的效果),于是構(gòu)造網(wǎng)絡(luò)的時(shí)候加入了捷徑(shortcut)連接削罩,即每層的輸出不是傳統(tǒng)神經(jīng)網(wǎng)絡(luò)中的輸入的映射瞄勾,而是輸入的映射和輸入的疊加费奸,如下圖中的"Residual net"所示。
在Residual net中:
(1)identity:為恒等映射进陡,此條路徑一直存在
(2)F(x):為需要學(xué)習(xí)的殘差函數(shù)(residual function):H(x)-x = F(x)
問(wèn)題的重新表示或預(yù)處理會(huì)簡(jiǎn)化問(wèn)題的優(yōu)化!
假設(shè)我們期望的網(wǎng)絡(luò)層關(guān)系映射為 H(x), 我們讓 the stacked nonlinear layers 擬合另一個(gè)映射愿阐, F(x):= H(x)-x , 那么原先的映射就是 F(x)+x。 這里我們假設(shè)優(yōu)化殘差映射F(x) 比優(yōu)化原來(lái)的映射 H(x)容易趾疚。
這里我們首先求取殘差映射 F(x):= H(x)-x缨历,那么原先的映射就是 F(x)+x。盡管這兩個(gè)映射應(yīng)該都可以近似理論真值映射 the desired functions (as hypothesized)糙麦,但是它倆的學(xué)習(xí)難度是不一樣的戈二。
這種改寫(xiě)啟發(fā)于"網(wǎng)絡(luò)層數(shù)越多,訓(xùn)練和測(cè)試誤差越大"性能退化問(wèn)題違反直覺(jué)的現(xiàn)象喳资。如果增加的層數(shù)可以構(gòu)建為一個(gè)恒等映射(identity mappings)觉吭,那么增加層數(shù)后的網(wǎng)絡(luò)訓(xùn)練誤差應(yīng)該不會(huì)增加,與沒(méi)增加之前相比較仆邓。性能退化問(wèn)題暗示多個(gè)非線(xiàn)性網(wǎng)絡(luò)層用于近似identity mappings 可能有困難鲜滩。使用殘差學(xué)習(xí)改寫(xiě)問(wèn)題之后,如果identity mappings 是最優(yōu)的,那么優(yōu)化問(wèn)題變得很簡(jiǎn)單,直接將多層非線(xiàn)性網(wǎng)絡(luò)參數(shù)趨0男应。
實(shí)際中,identity mappings 不太可能是最優(yōu)的嗓蘑,但是上述改寫(xiě)問(wèn)題可能幫助預(yù)處理問(wèn)題。如果最優(yōu)函數(shù)接近identity mappings匿乃,那么優(yōu)化將會(huì)變得容易些桩皿。 實(shí)驗(yàn)證明該思路是對(duì)的。
F(x)+x 可以通過(guò)shortcut connections 來(lái)實(shí)現(xiàn)幢炸,如下圖所示:
上圖中的shortcut connections執(zhí)行一個(gè)簡(jiǎn)單的恒等映射泄隔;既沒(méi)有參數(shù),也沒(méi)有計(jì)算復(fù)雜度宛徊。
公式分析如下:
(1)需要學(xué)習(xí)的殘差映射
(2)x和F的維數(shù)必須相同
如果x和F的維數(shù)不相同佛嬉,則對(duì)x進(jìn)行線(xiàn)性投影(linear projection)使用其與F的維數(shù)一致,公式如下:
5)網(wǎng)絡(luò)架構(gòu)
5.1)普通網(wǎng)絡(luò)(Plain Network)
設(shè)計(jì)原則:
(1)對(duì)于輸出特征圖大小相同的層闸天,它們的卷積擁有相同的filter個(gè)數(shù)
(2)如果輸出的特征圖大小減半暖呕,則filter個(gè)數(shù)乘以2,以確保每層的時(shí)間復(fù)雜度相同
5.2)殘并網(wǎng)絡(luò)(Residual Network)
在遵循普通網(wǎng)絡(luò)設(shè)計(jì)原則的基礎(chǔ)上苞氮,增加了shortcut connections湾揽。
6)恒等映射的重要性
6.1)平滑的正向傳播
任意xl被直接正向傳播到xL,xL是xl與殘差相加的結(jié)果。
6.2)平滑的反向傳播
7)保持最短路徑盡量平滑
- 如果h(x)不是identity mapping钝腺,它將阻塞正向抛姑、反向傳播赞厕,從而導(dǎo)致誤差增加
- BN可能阻塞傳播
- ReLU可能阻塞傳播
R-CNN系列目標(biāo)檢測(cè)框架和YOLO目標(biāo)檢測(cè)框架給了我們進(jìn)行目標(biāo)檢測(cè)的兩個(gè)基本框架艳狐。除此之外,研究人員基于這些框架從其他方面入手提出了一系列提高目標(biāo)檢測(cè)性能的方法皿桑。
(1) 難分樣本挖掘(hard negative mining)
R-CNN在訓(xùn)練SVM分類(lèi)器時(shí)使用了難分樣本挖掘的思想毫目,但Fast
R-CNN和Faster
R-CNN由于使用端到端的訓(xùn)練策略并沒(méi)有使用難分樣本挖掘(只是設(shè)置了正負(fù)樣本的比例并隨機(jī)抽取)诲侮。CVPR2016的Training
Region-based Object Detectors with Online Hard Example
Mining(oral)將難分樣本挖掘(hard example mining)機(jī)制嵌入到SGD算法中镀虐,使得Fast
R-CNN在訓(xùn)練的過(guò)程中根據(jù)region proposal的損失自動(dòng)選取合適的Region
Proposal作為正負(fù)例訓(xùn)練。實(shí)驗(yàn)結(jié)果表明使用OHEM(Online Hard Example Mining)機(jī)制可以使得Fast
R-CNN算法在VOC2007和VOC2012上mAP提高 4%左右沟绪。
(2) 多層特征融合
Fast R-CNN和Faster R-CNN都是利用了最后卷積層的特征進(jìn)行目標(biāo)檢測(cè)刮便,而由于高層的卷積層特征已經(jīng)損失了很多細(xì)節(jié)信息(pooling操作),所以在定位時(shí)不是很精準(zhǔn)绽慈。HyperNet等一些方法則利用了CNN的多層特征融合進(jìn)行目標(biāo)檢測(cè)恨旱,這不僅利用了高層特征的語(yǔ)義信息,還考慮了低層特征的細(xì)節(jié)紋理信息坝疼,使得目標(biāo)檢測(cè)定位更精準(zhǔn)搜贤。
(3) 使用上下文信息
在提取Region Proposal特征進(jìn)行目標(biāo)檢測(cè)時(shí),結(jié)合Region Proposal上下文信息钝凶,檢測(cè)效果往往會(huì)更好一些仪芒。(Object detection via a multi-region & semantic segmentation-aware CNN model以及Inside-Outside Net等論文中都使用了上下文信息)
Localization:
-Find a fixed number of objects (one or many)
- L2 regression from CNN features to box coordinates
- Much simpler than detection; consider it for your projects!
- Overfeat: Regression + efficient sliding window with FC -> conv conversion
- Deeper networks do better
Object Detection:
-Find a variable number of objects by classifying image regions
- Before CNNs: dense multiscale sliding window (HoG, DPM)
- Avoid dense sliding window with region proposals
- R-CNN: Selective Search + CNN classification / regression
- Fast R-CNN: Swap order of convolutions and region extraction
- Faster R-CNN: Compute region proposals within the network
- Deeper networks do better
Implementation as Matrix Multiplication. Note that the convolution operation essentially performs