目標(biāo)檢測中的RNN家族 與 基于深度學(xué)習(xí)的回歸方法
采用selective search+CNN+SVM的RCNN模型
-
提取候選框:使用selective search方法洛口,這是一種傳統(tǒng)的候選框提取算法矫付,根據(jù)圖像的顏色紋理色差提取出大約兩千個proposal(候選框),注意這些候選框是可以重疊的第焰。
selective search 方法提取的候選框
selective search 提取候選框的方法 -
對候選框進(jìn)行特征提取:對每一個候選框使用CNN提取特征买优,因為取出的區(qū)域大小各自不同,所以需要將每個Region Proposal縮放(warp)成統(tǒng)一的227x227的大小并輸入到CNN挺举,將CNN的fc7層的輸出作為特征杀赢,但是進(jìn)行warp and crop 很大程度上會造成圖像的失真。
圖像進(jìn)行warp和crop之后造成失真 -
使用特征對候選框進(jìn)行分類 :將每個Region Proposal提取到的CNN特征輸入到SVM進(jìn)行分類豹悬,SVM是已經(jīng)訓(xùn)練好的21個(voc數(shù)據(jù)集有20個分類+1個背景)分類器葵陵,用于判斷這個物品是否屬于這一類,最終選出置信度最高的類作為圖像的分類,然后使用回歸模型對候選框進(jìn)行精修瞻佛,回歸方法脱篙。
回歸模型對候選框進(jìn)行精修 細(xì)心的同學(xué)可能看出來了問題,R-CNN雖然不再像傳統(tǒng)方法那樣窮舉伤柄,但R-CNN流程的第一步中對原始圖片通過Selective Search提取的候選框region proposal多達(dá)2000個左右绊困,而這2000個候選框每個框都需要進(jìn)行CNN提特征+SVM分類,計算量很大适刀,導(dǎo)致R-CNN檢測速度很慢秤朗,一張圖都需要47s。
-
如何訓(xùn)練RCNN?使用什么網(wǎng)絡(luò)結(jié)構(gòu)笔喉?
因為標(biāo)注有框的檢測模型數(shù)據(jù)集很少取视,但是用于分類的數(shù)據(jù)集數(shù)量是比較多的,所以我們要利用分類數(shù)據(jù)集(voc,pascal)來訓(xùn)練我們的網(wǎng)絡(luò)常挚,并且也使用分類模型進(jìn)行fine-turning 得到我們的檢測模型作谭。
RCNN網(wǎng)絡(luò)結(jié)構(gòu) -
訓(xùn)練樣本怎么標(biāo)記?如何得到訓(xùn)練集奄毡?
RCNN訓(xùn)練集 -
為什么不直接使用CNN分類還要使用SVM進(jìn)行分類呢:原因在于CNN容易過擬合折欠,所以我們需要大量的標(biāo)注圖片,但是使用上面方法得到的標(biāo)注信息其條件很松散(因為只要IOU大于0.5就算正樣本吼过,那么很有可能只是物體的一部分也被判斷成物體了锐秦,物體的另一部分卻不視為這個物體),所以用來做分類效果并不好盗忱。
RCNN為什么要用SVM進(jìn)行分類 -
如何使用特征+SVM進(jìn)行分類:并不是把特征丟到一個一個的SVM分類器中的哦酱床,并且SVM的正負(fù)樣本IOU閾值和CNN正負(fù)樣本IOU閾值不一樣,注意分辨趟佃。
SVM進(jìn)行分類是正負(fù)樣本的閾值
-
如何對框體進(jìn)行位置精修斤葱?: 對于每一個類別中IOU大于0.6的框使用線性脊回歸器進(jìn)行位置精修
圖片7.png -
所以RCNN的訓(xùn)練方法如下:非極大值抑制就是對被分為同一類的框慷垮,從概率最大的框開始一直到最小概率的框(對列進(jìn)行排序,從列首到列尾進(jìn)行循環(huán))揍堕,重復(fù)的去除一些與當(dāng)前框IOU大于閾值的小概率框。
RCNN的訓(xùn)練方法
SPP Net(空間金字塔池化)
-
SPP-Net是出自2015年發(fā)表在IEEE上的論文-《Spatial Pyramid Pooling in Deep ConvolutionalNetworks for Visual Recognition》汤纸。 該論文提出了將 最后一個卷積層后的池化層替換為spatial pyramid pooling layer(SPP層), 該層能夠生成長度固定的特征衩茸,并輸入到全連接層。因此贮泞,SPP-net適合輸入大小不同的圖像楞慈。之前的CNN網(wǎng)絡(luò)都要求使用尺寸的圖片作為輸入,因為全連接層要求的輸入尺寸成固定的那么倒推整個CNN網(wǎng)絡(luò)的輸入圖片的尺寸也要是固定尺寸啃擦,這樣就要求對圖片進(jìn)行裁剪和縮放囊蓝,使得圖像識別失真,SPP-Net可以使得CNN網(wǎng)絡(luò)輸入圖片的大小是非固定的令蛉,因為從原理上來說聚霜,做卷積,池化都不需要圖片有固定尺寸珠叔,那么我們只需要在輸入全連接層之前做一個池化操作就可以使得輸入到全連接層的特征是尺寸相同的了蝎宇。即在普通的CNN機構(gòu)中,輸入圖像的尺寸往往是固定的(比如224*224像素)祷安,輸出則是一個固定維數(shù)的向量姥芥。SPP Net在普通的CNN結(jié)構(gòu)中加入了 ROI池化層(ROI Pooling),使得網(wǎng)絡(luò)的輸入圖像可以是任意尺寸的汇鞭,輸出則不變凉唐,同樣是一個固定維數(shù)的向量。
RCNN與SPP-Net網(wǎng)絡(luò)結(jié)構(gòu)的比較 - SPP-Net的貢獻(xiàn)二是 只對原圖提取一次卷積特征: 在R-CNN中霍骄,每個候選框先resize到統(tǒng)一大小台囱,然后分別作為CNN的輸入,這樣是很低效的腕巡。而SPP Net根據(jù)這個缺點做了優(yōu)化:只對原圖進(jìn)行一次卷積計算玄坦,便得到整張圖的卷積特征feature map,然后找到每個候選框在feature map上的映射patch绘沉,將此patch作為每個候選框的卷積特征輸入到SPP layer和之后的層煎楣,完成特征提取工作。如此這般车伞,R-CNN要對每個區(qū)域計算卷積择懂,而SPPNet只需要計算一次卷積,從而節(jié)省了大量的計算時間另玖,比R-CNN有一百倍左右的提速困曙。
-
SPP-Net的構(gòu)造方法:我們以論文中的例子進(jìn)行講解表伦,如果原始的CNN中最后一個池化層的輸出是60 * 40 * 256(256個60 * 40的特征圖,256是維度)的特征圖慷丽,如果要得到固定的神經(jīng)元個數(shù)蹦哼,論文中提到的是21,我們就需要將60*40的特征圖要糊,處理成長度為21的向量纲熏。
SPP-Net
論文中使用三層的金字塔池化層pooling,且論文中設(shè)置每次特征圖被分別切成(1,4,16)塊锄俄,然后按照層次對這個特征圖分別處理(用代碼實現(xiàn)就是for(1,2,3層))局劲。第一層對這個特征圖整個特征圖進(jìn)行池化(池化又分為:最大池化,平均池化奶赠,隨機池化)鱼填,論文中使用的是最大池化,然后得到了1個特征毅戈。第二層先將這個特征圖切分為4個(20,30)的小的特征圖苹丸,然后使用對應(yīng)的大小的池化核對其進(jìn)行池化得到4個特征。第三層先將這個特征圖切分為16個(10,15)的小的特征圖竹祷,然后使用對應(yīng)大小的池化核對其進(jìn)行池化得到16個特征谈跛,然后將這1+4+16=21個特征輸入到全連接層,當(dāng)然了塑陵,這個層數(shù)是可以隨意設(shè)定的感憾,以及這個圖片劃分也是可以隨意的,只要效果好同時最后能組合成我們需要的特征個數(shù)即可令花,這就SPP-Net的核心思想阻桅。
Fast-RCNN
- 與RCNN的區(qū)別:一是最后一個卷積層后加了一個ROI pooling layer,二是損失函數(shù)使用了多任務(wù)損失函數(shù)(multi-task loss)兼都,將邊框回歸Bounding Box Regression直接加入到CNN網(wǎng)絡(luò)中訓(xùn)練嫂沉,使用softmax代替SVM進(jìn)行分類。
- ROI Layer :ROI pooling layer實際上是SPP-NET的一個精簡版扮碧,SPP-NET對每個proposal使用了不同大小的金字塔映射趟章,而ROI pooling layer只需要下采樣到一個7x7的特征圖。對于VGG16網(wǎng)絡(luò)conv5_3有512個特征圖慎王,這樣所有region proposal對應(yīng)了一個77512維度的特征向量作為全連接層的輸入蚓土。
- 構(gòu)造成end-to-end模型:R-CNN訓(xùn)練過程分為了三個階段,而Fast R-CNN直接使用softmax替代SVM分類赖淤,同時利用多任務(wù)損失函數(shù)邊框回歸也加入到了網(wǎng)絡(luò)中蜀漆,這樣整個的訓(xùn)練過程是端到端的(除去region proposal提取階段)。之前R-CNN的處理流程是先提proposal咱旱,然后CNN提取特征确丢,之后用SVM分類器绷耍,最后再做box regression,而在Fast R-CNN中鲜侥,作者巧妙的把box regression放進(jìn)了神經(jīng)網(wǎng)絡(luò)內(nèi)部褂始,與region分類和并成為了一個multi-task模型,實際實驗也證明描函,這兩個任務(wù)能夠共享卷積特征病袄,并相互促進(jìn)。
總結(jié) :R-CNN有一些相當(dāng)大的缺點(把這些缺點都改掉了赘阀,就成了Fast R-CNN)容易看見,F(xiàn)ast R-CNN相對于R-CNN的提速原因就在于:不過不像R-CNN把每個候選區(qū)域給深度網(wǎng)絡(luò)提特征脑奠,而是整張圖提一次特征基公,再把候選框映射到conv5上,而SPP只需要計算一次特征宋欺,剩下的只需要在conv5層上操作就可以了轰豆。
Faster RCNN(與Fast RCNN 的區(qū)別是使用RPN網(wǎng)絡(luò),所以Faster RCNN講解就是RPN網(wǎng)絡(luò)的講解)
- Faster RCNN的改進(jìn)之處主要在加入了一個特征提取網(wǎng)絡(luò)RPN以代替原來獲取候選框的selective search 方法:這一網(wǎng)絡(luò)可以根據(jù)共享的特征圖直接得到分類信息(框里面的物體屬于前景還是背景)與框的位置信息(框的坐標(biāo)信息)齿诞。
RPN簡介:
? 在feature map上滑動窗口
? 建一個神經(jīng)網(wǎng)絡(luò)用于物體分類+框位置的回歸
? 滑動窗口的位置提供了物體的大體位置信息
? 框的回歸提供了框更精確的位置
- 一個特征點(總共256維)產(chǎn)生2k個分?jǐn)?shù)(256 * 9)酸休,4k個坐標(biāo)(256 * 9 * 4),最后一層特征圖尺寸是7 * 7祷杈,所以總共大概產(chǎn)生20000個坐標(biāo)(框)斑司。
-
Faster-RCNN網(wǎng)絡(luò)結(jié)構(gòu)
Faster-RCNN 網(wǎng)絡(luò)結(jié)構(gòu) -
網(wǎng)絡(luò)中有4個pooling層 最終的feature Map的大小是(M/16)*(N/16),
卷積層
圖片大小 -
softmax前后都有1 * 1的卷積核進(jìn)行reshape是為了方便分類
reshape layer的作用
-
與ROIPooling層相接的Proposal層的作用
對于一副任意大小的P*Q的圖像但汞,傳入FasterRCNN之前首先要Reshape 到固定的M * N大小宿刮,im_info=[M,N,scale_factor]保存的就是此次縮放的所有信息,所以雖然輸入到Faster RCNN的圖片都是reshape過的私蕾,但是還是保留有且使用原圖的信息僵缺,只不過輸出給ROIPooling層的proposal 是對應(yīng)于reshape后的圖片的。
圖片17.png
-
ROI Pooling層的處理方式相當(dāng)于只使用一層的SPP-Net
ROI Pooling 層 -
最后一部分踩叭,分類磕潮,回歸精修框:
Classify 層
- 總結(jié)!Faster RCNN網(wǎng)絡(luò)的處理過程:
1.對整張圖片輸進(jìn)CNN容贝,得到feature map
2.卷積特征輸入到RPN自脯,得到候選框的特征信息
3.對候選框中提取出的特征,使用分類器判別是否屬于一個特定類
4.對于屬于某一類別的候選框嗤疯,用回歸器進(jìn)一步調(diào)整其位置
什么是下采樣
縮小圖像(或稱為下采樣(subsampled)或降采樣(downsampled))的主要目的有兩個:1冤今、使得圖像符合顯示區(qū)域的大小茂缚;2戏罢、生成對應(yīng)圖像的縮略圖屋谭。
下采樣原理:對于一副圖像I尺寸為MN,對起進(jìn)行s倍下采樣龟糕,即得到(M/s)(N/s)尺寸的分辨率圖像桐磁,當(dāng)然,s應(yīng)該是M和N的公約數(shù)才可以讲岁,如果考慮是矩陣形式的圖像我擂,就是把原始圖像s*s窗口內(nèi)的圖像變成一個像素,這個像素點的值就是窗口內(nèi)所有像素的 均值:Pk = Σ Ii / s2缓艳。
未完待續(xù)校摩。。阶淘。