faster-rcnn原理及相应概念解释
R-CNN --> FAST-RCNN --> FASTER-RCNN
?
R-CNN:
(1)輸入測(cè)試圖像;
(2)利用selective search 算法在圖像中從上到下提取2000個(gè)左右的Region Proposal;
(3)將每個(gè)Region Proposal縮放(warp)成227*227的大小并輸入到CNN,將CNN的fc7層的輸出作為特征;
(4)將每個(gè)Region Proposal提取的CNN特征輸入到SVM進(jìn)行分類;
(5)對(duì)于SVM分好類的Region Proposal做邊框回歸,用Bounding box回歸值校正原來(lái)的建議窗口,生成預(yù)測(cè)窗口坐標(biāo).
缺陷:
(1)???? 訓(xùn)練分為多個(gè)階段,步驟繁瑣:微調(diào)網(wǎng)絡(luò)+訓(xùn)練SVM+訓(xùn)練邊框回歸器;
(2)???? 訓(xùn)練耗時(shí),占用磁盤空間大;5000張圖像產(chǎn)生幾百G的特征文件;
(3)???? 速度慢:使用GPU,VGG16模型處理一張圖像需要47s;
(4)???? 測(cè)試速度慢:每個(gè)候選區(qū)域需要運(yùn)行整個(gè)前向CNN計(jì)算;
(5)???? SVM和回歸是事后操作,在SVM和回歸過(guò)程中CNN特征沒有被學(xué)習(xí)更新.
?
FAST-RCNN:
(1)輸入測(cè)試圖像;
(2)利用selective search 算法在圖像中從上到下提取2000個(gè)左右的建議窗口(Region Proposal);
(3)將整張圖片輸入CNN,進(jìn)行特征提取;
(4)把建議窗口映射到CNN的最后一層卷積feature map上;
(5)通過(guò)RoI pooling層使每個(gè)建議窗口生成固定尺寸的feature map;
(6)利用Softmax Loss(探測(cè)分類概率) 和Smooth L1 Loss(探測(cè)邊框回歸)對(duì)分類概率和邊框回歸(Bounding box regression)聯(lián)合訓(xùn)練.
?
相比R-CNN,主要兩處不同:
(1)最后一層卷積層后加了一個(gè)ROI pooling layer;
(2)損失函數(shù)使用了多任務(wù)損失函數(shù)(multi-task loss),將邊框回歸直接加入到CNN網(wǎng)絡(luò)中訓(xùn)練
改進(jìn):
(1)???? 測(cè)試時(shí)速度慢:R-CNN把一張圖像分解成大量的建議框,每個(gè)建議框拉伸形成的圖像都會(huì)單獨(dú)通過(guò)CNN提取特征.實(shí)際上這些建議框之間大量重疊,特征值之間完全可以共享,造成了運(yùn)算能力的浪費(fèi).
FAST-RCNN將整張圖像歸一化后直接送入CNN,在最后的卷積層輸出的feature map上,加入建議框信息,使得在此之前的CNN運(yùn)算得以共享.
(2)???? 訓(xùn)練時(shí)速度慢:R-CNN在訓(xùn)練時(shí),是在采用SVM分類之前,把通過(guò)CNN提取的特征存儲(chǔ)在硬盤上.這種方法造成了訓(xùn)練性能低下,因?yàn)樵谟脖P上大量的讀寫數(shù)據(jù)會(huì)造成訓(xùn)練速度緩慢.
FAST-RCNN在訓(xùn)練時(shí),只需要將一張圖像送入網(wǎng)絡(luò),每張圖像一次性地提取CNN特征和建議區(qū)域,訓(xùn)練數(shù)據(jù)在GPU內(nèi)存里直接進(jìn)Loss層,這樣候選區(qū)域的前幾層特征不需要再重復(fù)計(jì)算且不再需要把大量數(shù)據(jù)存儲(chǔ)在硬盤上.
(3)???? 訓(xùn)練所需空間大:R-CNN中獨(dú)立的SVM分類器和回歸器需要大量特征作為訓(xùn)練樣本,需要大量的硬盤空間.FAST-RCNN把類別判斷和位置回歸統(tǒng)一用深度網(wǎng)絡(luò)實(shí)現(xiàn),不再需要額外存儲(chǔ).
?
FASTER -RCNN:
(1)輸入測(cè)試圖像;
(2)將整張圖片輸入CNN,進(jìn)行特征提取;
(3)用RPN生成建議窗口(proposals),每張圖片生成300個(gè)建議窗口;
(4)把建議窗口映射到CNN的最后一層卷積feature map上;
(5)通過(guò)RoI pooling層使每個(gè)RoI生成固定尺寸的feature map;
(6)利用Softmax Loss(探測(cè)分類概率) 和Smooth L1 Loss(探測(cè)邊框回歸)對(duì)分類概率和邊框回歸(Bounding box regression)聯(lián)合訓(xùn)練.
?
相比FASTER-RCNN,主要兩處不同:
(1)使用RPN(Region Proposal Network)代替原來(lái)的Selective Search方法產(chǎn)生建議窗口;
(2)產(chǎn)生建議窗口的CNN和目標(biāo)檢測(cè)的CNN共享
?
改進(jìn):
(1)???? 如何高效快速產(chǎn)生建議框?
FASTER-RCNN創(chuàng)造性地采用卷積網(wǎng)絡(luò)自行產(chǎn)生建議框,并且和目標(biāo)檢測(cè)網(wǎng)絡(luò)共享卷積網(wǎng)絡(luò),使得建議框數(shù)目從原有的約2000個(gè)減少為300個(gè),且建議框的質(zhì)量也有本質(zhì)的提高.
?
概念解釋:
1、常用的Region Proposal有:
-Selective Search
-Edge Boxes
?
2、softmax-loss
softmax-loss 層和 softmax 層計(jì)算大致是相同的. softmax 是一個(gè)分類器,計(jì)算的是類別的概率(Likelihood),是Logistic Regression 的一種推廣. LogisticRegression 只能用于二分類,
而 softmax 可以用于多分類.
softmax 與 softmax-loss 的區(qū)別:
softmax 計(jì)算公式:
關(guān)于兩者的區(qū)別更加具體的介紹,可參考: softmax vs. softmax-loss
用戶可能最終目的就是得到各個(gè)類別的概率似然值,這個(gè)時(shí)候就只需要一個(gè) Softmax 層,而不一定要進(jìn)行softmax-Loss 操作;或者是用戶有通過(guò)其他什么方式已經(jīng)得到了某種概率似然值,然后要做最大似然估計(jì),此時(shí)則只需要后面的softmax-Loss 而不需要前面的 Softmax操作.因此提供兩個(gè)不同的 Layer 結(jié)構(gòu)比只提供一個(gè)合在一起的 Softmax-Loss Layer 要靈活許多.不管是 softmax layer 還是 softmax-loss layer,都是沒有參數(shù)的,只是層類型不同而已
softmax-loss layer:輸出 loss 值
layer {
name: "loss"
type: "SoftmaxWithLoss"
bottom: "ip1"
bottom: "label"
top: "loss"
}
softmax layer: 輸出似然值
layers {
bottom: "cls3_fc"
top: "prob"
name: "prob"
type: “Softmax"
}
?
3、Selective Search
這個(gè)策略其實(shí)是借助了層次聚類的思想(可以搜索了解一下"層次聚類算法"),將層次聚類的思想應(yīng)用到區(qū)域的合并上面;
總體思路:
l?假設(shè)現(xiàn)在圖像上有n個(gè)預(yù)分割的區(qū)域(Efficient Graph-Based ImageSegmentation),表示為R={R1, R2, ..., Rn},
l?計(jì)算每個(gè)region與它相鄰region(注意是相鄰的區(qū)域)的相似度,這樣會(huì)得到一個(gè)n*n的相似度矩陣(同一個(gè)區(qū)域之間和一個(gè)區(qū)域與不相鄰區(qū)域之間的相似度可設(shè)為NaN),從矩陣中找出最大相似度值對(duì)應(yīng)的兩個(gè)區(qū)域,將這兩個(gè)區(qū)域合二為一,這時(shí)候圖像上還剩下n-1個(gè)區(qū)域;
l?重復(fù)上面的過(guò)程(只需要計(jì)算新的區(qū)域與它相鄰區(qū)域的新相似度,其他的不用重復(fù)計(jì)算),重復(fù)一次,區(qū)域的總數(shù)目就少1,知道最后所有的區(qū)域都合并稱為了同一個(gè)區(qū)域(即此過(guò)程進(jìn)行了n-1次,區(qū)域總數(shù)目最后變成了1).算法的流程圖如下圖所示:
?
?
4、SPP-NET
SSP-Net:Spatial Pyramid Pooling in Deep Convolutional Networks for VisualRecognition
? ?先看一下R-CNN為什么檢測(cè)速度這么慢,一張圖都需要47s!仔細(xì)看下R-CNN框架發(fā)現(xiàn),對(duì)圖像提完Region Proposal(2000個(gè)左右)之后將每個(gè)Proposal當(dāng)成一張圖像進(jìn)行后續(xù)處理(CNN提特征+SVM分類),實(shí)際上對(duì)一張圖像進(jìn)行了2000次提特征和分類的過(guò)程!這2000個(gè)Region Proposal不都是圖像的一部分嗎,那么我們完全可以對(duì)圖像提一次卷積層特征,然后只需要將Region Proposal在原圖的位置映射到卷積層特征圖上,這樣對(duì)于一張圖像我們只需要提一次卷積層特征,然后將每個(gè)Region Proposal的卷積層特征輸入到全連接層做后續(xù)操作.(對(duì)于CNN來(lái)說(shuō),大部分運(yùn)算都耗在卷積操作上,這樣做可以節(jié)省大量時(shí)間).
? ?現(xiàn)在的問題是每個(gè)Region Proposal的尺度不一樣,直接這樣輸入全連接層肯定是不行的,因?yàn)槿B接層輸入必須是固定的長(zhǎng)度.SPP-NET恰好可以解決這個(gè)問題.
? ? ?
? ?由于傳統(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)?#xff0c;尤其是長(zhǎng)寬比大的圖片.
? ?- warp:物體被拉伸,失去“原形”,尤其是長(zhǎng)寬比大的圖片
? ?SPP為的就是解決上述的問題,做到的效果為:不管輸入的圖片是什么尺度,都能夠正確的傳入網(wǎng)絡(luò).
? ?具體思路為:CNN的卷積層是可以處理任意尺度的輸入的,只是在全連接層處有限制尺度——換句話說(shuō),如果找到一個(gè)方法,在全連接層之前將其輸入限制到等長(zhǎng),那么就解決了這個(gè)問題.
? ?具體方案如下圖所示:
? ?
如果原圖輸入是224x224,對(duì)于conv5出來(lái)后的輸出,是13x13x256的,可以理解成有256個(gè)這樣的filter,每個(gè)filter對(duì)應(yīng)一張13x13的activation map.如果像上圖那樣將activation?mappooling成4x4 2x2 1x1三張子圖,做maxpooling后,出來(lái)的特征就是固定長(zhǎng)度的(16+4+1)x256那么多的維度了.如果原圖的輸入不是224x224,出來(lái)的特征依然是(16+4+1)x256;直覺地說(shuō),可以理解成將原來(lái)固定大小為(3x3)窗口的pool5改成了自適應(yīng)窗口大小,窗口的大小和activation map成比例,保證了經(jīng)過(guò)pooling后出來(lái)的feature的長(zhǎng)度是一致的.
?
5、Bounding box regression
R-CNN中的bounding box回歸
下面先介紹R-CNN和Fast R-CNN中所用到的邊框回歸方法.
(1)??什么是IOU?
(2)??為什么要做Bounding-boxregression??
?
如上圖所示,綠色的框?yàn)轱w機(jī)的Ground Truth,紅色的框是提取的Region Proposal.那么即便紅色的框被分類器識(shí)別為飛機(jī),但是由于紅色的框定位不準(zhǔn)(IoU<0.5),那么這張圖相當(dāng)于沒有正確的檢測(cè)出飛機(jī).如果我們能對(duì)紅色的框進(jìn)行微調(diào),使得經(jīng)過(guò)微調(diào)后的窗口跟Ground Truth更接近,這樣豈不是定位會(huì)更準(zhǔn)確.確實(shí),Bounding-box regression 就是用來(lái)微調(diào)這個(gè)窗口的.
(3)??回歸/微調(diào)的對(duì)象是什么??
(4)?? Bounding-box regression(邊框回歸)?
那么經(jīng)過(guò)何種變換才能從圖11中的窗口P變?yōu)榇翱谀?#xff1f;比較簡(jiǎn)單的思路就是:?
?
注意:只有當(dāng)Proposal和Ground Truth比較接近時(shí)(線性問題),我們才能將其作為訓(xùn)練樣本訓(xùn)練我們的線性回歸模型,否則會(huì)導(dǎo)致訓(xùn)練的回歸模型不work(當(dāng)Proposal跟GT離得較遠(yuǎn),就是復(fù)雜的非線性問題了,此時(shí)用線性回歸建模顯然不合理).這個(gè)也是G-CNN: an Iterative Grid Based ObjectDetector多次迭代實(shí)現(xiàn)目標(biāo)準(zhǔn)確定位的關(guān)鍵.?
線性回歸就是給定輸入的特征向量X,學(xué)習(xí)一組參數(shù)W,使得經(jīng)過(guò)線性回歸后的值跟真實(shí)值Y(Ground Truth)非常接近.即.那么Bounding-box中我們的輸入以及輸出分別是什么呢??
?????
? ? ? ? ? ? ? ? ? ? ?
6、Region Proposal Network
RPN的實(shí)現(xiàn)方式:在conv5-3的卷積feature map上用一個(gè)n*n的滑窗(論文中作者選用了n=3,即3*3的滑窗)生成一個(gè)長(zhǎng)度為256(對(duì)應(yīng)于ZF網(wǎng)絡(luò))或512(對(duì)應(yīng)于VGG網(wǎng)絡(luò))維長(zhǎng)度的全連接特征.然后在這個(gè)256維或512維的特征后產(chǎn)生兩個(gè)分支的全連接層:
(1)reg-layer,用于預(yù)測(cè)proposal的中心錨點(diǎn)對(duì)應(yīng)的proposal的坐標(biāo)x,y和寬高w,h;
(2)cls-layer,用于判定該proposal是前景還是背景.sliding window的處理方式保證reg-layer和cls-layer關(guān)聯(lián)了conv5-3的全部特征空間.事實(shí)上,作者用全連接層實(shí)現(xiàn)方式介紹RPN層實(shí)現(xiàn)容易幫助我們理解這一過(guò)程,但在實(shí)現(xiàn)時(shí)作者選用了卷積層實(shí)現(xiàn)全連接層的功能.
(3)個(gè)人理解:全連接層本來(lái)就是特殊的卷積層,如果產(chǎn)生256或512維的fc特征,事實(shí)上可以用Num_out=256或512, kernel_size=3*3, stride=1的卷積層實(shí)現(xiàn)conv5-3到第一個(gè)全連接特征的映射.然后再用兩個(gè)Num_out分別為2*9=18和4*9=36,kernel_size=1*1,stride=1的卷積層實(shí)現(xiàn)上一層特征到兩個(gè)分支cls層和reg層的特征映射.
(4)注意:這里2*9中的2指cls層的分類結(jié)果包括前后背景兩類,4*9的4表示一個(gè)Proposal的中心點(diǎn)坐標(biāo)x,y和寬高w,h四個(gè)參數(shù).采用卷積的方式實(shí)現(xiàn)全連接處理并不會(huì)減少參數(shù)的數(shù)量,但是使得輸入圖像的尺寸可以更加靈活.在RPN網(wǎng)絡(luò)中,我們需要重點(diǎn)理解其中的anchors概念,Loss fucntions計(jì)算方式和RPN層訓(xùn)練數(shù)據(jù)生成的具體細(xì)節(jié).
?
Anchors:字面上可以理解為錨點(diǎn),位于之前提到的n*n的sliding window的中心處.對(duì)于一個(gè)sliding window,我們可以同時(shí)預(yù)測(cè)多個(gè)proposal,假定有k個(gè).k個(gè)proposal即k個(gè)referenceboxes,每一個(gè)reference box又可以用一個(gè)scale,一個(gè)aspect_ratio和sliding window中的錨點(diǎn)唯一確定.所以,我們?cè)诤竺嬲f(shuō)一個(gè)anchor,你就理解成一個(gè)anchor box 或一個(gè)reference box.作者在論文中定義k=9,即3種scales和3種aspect_ratio確定出當(dāng)前slidingwindow位置處對(duì)應(yīng)的9個(gè)reference boxes, 4*k個(gè)reg-layer的輸出和2*k個(gè)cls-layer的score輸出.對(duì)于一幅W*H的feature map,對(duì)應(yīng)W*H*k個(gè)錨點(diǎn).所有的錨點(diǎn)都具有尺度不變性.
Loss functions:
在計(jì)算Loss值之前,作者設(shè)置了anchors的標(biāo)定方法.正樣本標(biāo)定規(guī)則:
1)??如果Anchor對(duì)應(yīng)的reference box與ground truth的IoU值最大,標(biāo)記為正樣本;
2)??如果Anchor對(duì)應(yīng)的reference box與ground truth的IoU>0.7,標(biāo)記為正樣本.事實(shí)上,采用第2個(gè)規(guī)則基本上可以找到足夠的正樣本,但是對(duì)于一些極端情況,例如所有的Anchor對(duì)應(yīng)的reference box與groud truth的IoU不大于0.7,可以采用第一種規(guī)則生成.
3)??負(fù)樣本標(biāo)定規(guī)則:如果Anchor對(duì)應(yīng)的reference box與ground truth的IoU<0.3,標(biāo)記為負(fù)樣本.
4)??剩下的既不是正樣本也不是負(fù)樣本,不用于最終訓(xùn)練.
5)??訓(xùn)練RPN的Loss是有classificationloss (即softmax loss)和regressionloss (即L1 loss)按一定比重組成的.
計(jì)算softmax loss需要的是anchors對(duì)應(yīng)的groundtruth標(biāo)定結(jié)果和預(yù)測(cè)結(jié)果,計(jì)算regression loss需要三組信息:
??i. ? ? 預(yù)測(cè)框,即RPN網(wǎng)絡(luò)預(yù)測(cè)出的proposal的中心位置坐標(biāo)x,y和寬高w,h;
?ii.?????錨點(diǎn)reference box:
? ? ? ? 之前的9個(gè)錨點(diǎn)對(duì)應(yīng)9個(gè)不同scale和aspect_ratio的reference boxes,每一個(gè)reference boxes都有一個(gè)中心點(diǎn)位置坐標(biāo)x_a,y_a和寬高w_a,h_a;
iii. ?groundtruth:標(biāo)定的框也對(duì)應(yīng)一個(gè)中心點(diǎn)位置坐標(biāo)x*,y*和寬高w*,h*.因此計(jì)算regressionloss和總Loss方式如下:?
?
RPN訓(xùn)練設(shè)置:
(1)在訓(xùn)練RPN時(shí),一個(gè)Mini-batch是由一幅圖像中任意選取的256個(gè)proposal組成的,其中正負(fù)樣本的比例為1:1.
(2)如果正樣本不足128,則多用一些負(fù)樣本以滿足有256個(gè)Proposal可以用于訓(xùn)練,反之亦然.
(3)訓(xùn)練RPN時(shí),與VGG共有的層參數(shù)可以直接拷貝經(jīng)ImageNet訓(xùn)練得到的模型中的參數(shù);剩下沒有的層參數(shù)用標(biāo)準(zhǔn)差=0.01的高斯分布初始化.
?
7、RoI Pooling
ROIpooling 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維度的特征向量作為全連接層的輸入.
RoIPooling就是實(shí)現(xiàn)從原圖區(qū)域映射到conv5區(qū)域最后pooling到固定大小的功能.
?
8、smooth L1 Loss
為了處理不可導(dǎo)的懲罰,FasterRCNN提出來(lái)的計(jì)算距離loss的smooth_L1_Loss.smooth L1近似理解見http://pages.cs.wisc.edu/~gfung/GeneralL1/L1_approx_bounds.pdf
與50位技術(shù)專家面對(duì)面20年技術(shù)見證,附贈(zèng)技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的faster-rcnn原理及相应概念解释的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 大数据视觉智能实践及医学影像智能诊断探索
- 下一篇: Faster R-CNN: Toward