重磅干貨,第一時間送達(dá)
一. R-CNN:Rich feature hierarchies for accurate object detection and semantic segmentation
技術(shù)路線:selective search + CNN + SVMs
Step1:候選框提取(selectivesearch)
訓(xùn)練:給定一張圖片,利用seletive search方法從中提取出2000個候選框。由于候選框大小不一,考慮到后續(xù)CNN要求輸入的圖片大小統(tǒng)一,將2000個候選框全部resize到227*227分辨率(為了避免圖像扭曲嚴(yán)重,中間可以采取一些技巧減少圖像扭曲)。
測試:給定一張圖片,利用seletive search方法從中提取出2000個候選框。由于候選框大小不一,考慮到后續(xù)CNN要求輸入的圖片大小統(tǒng)一,將2000個候選框全部resize到227*227分辨率(為了避免圖像扭曲嚴(yán)重,中間可以采取一些技巧減少圖像扭曲)。
Step2:特征提取(CNN)
訓(xùn)練:提取特征的CNN模型需要預(yù)先訓(xùn)練得到。訓(xùn)練CNN模型時,對訓(xùn)練數(shù)據(jù)標(biāo)定要求比較寬松,即SS方法提取的proposal只包含部分目標(biāo)區(qū)域時,我們也將該proposal標(biāo)定為特定物體類別。這樣做的主要原因在于,CNN訓(xùn)練需要大規(guī)模的數(shù)據(jù),如果標(biāo)定要求極其嚴(yán)格(即只有完全包含目標(biāo)區(qū)域且不屬于目標(biāo)的區(qū)域不能超過一個小的閾值),那么用于CNN訓(xùn)練的樣本數(shù)量會很少。因此,寬松標(biāo)定條件下訓(xùn)練得到的CNN模型只能用于特征提取。
測試:得到統(tǒng)一分辨率227*227的proposal后,帶入訓(xùn)練得到的CNN模型,最后一個全連接層的輸出結(jié)果---4096*1維度向量即用于最終測試的特征。
Step3:分類器(SVMs)
訓(xùn)練:對于所有proposal進(jìn)行嚴(yán)格的標(biāo)定(可以這樣理解,當(dāng)且僅當(dāng)一個候選框完全包含ground truth區(qū)域且不屬于ground truth部分不超過e.g,候選框區(qū)域的5%時認(rèn)為該候選框標(biāo)定結(jié)果為目標(biāo),否則位背景),然后將所有proposal經(jīng)過CNN處理得到的特征和SVM新標(biāo)定結(jié)果輸入到SVMs分類器進(jìn)行訓(xùn)練得到分類器預(yù)測模型。
測試:對于一副測試圖像,提取得到的2000個proposal經(jīng)過CNN特征提取后輸入到SVM分類器預(yù)測模型中,可以給出特定類別評分結(jié)果。
結(jié)果生成:得到SVMs對于所有Proposal的評分結(jié)果,將一些分?jǐn)?shù)較低的proposal去掉后,剩下的proposal中會出現(xiàn)候選框相交的情況。采用非極大值抑制技術(shù),對于相交的兩個框或若干個框,找到最能代表最終檢測結(jié)果的候選框(非極大值抑制方法可以參考:http://blog.csdn.net/pb09013037/article/details/45477591)
R-CNN需要對SS提取得到的每個proposal進(jìn)行一次前向CNN實(shí)現(xiàn)特征提取,因此計算量很大,無法實(shí)時。此外,由于全連接層的存在,需要嚴(yán)格保證輸入的proposal最終resize到相同尺度大小,這在一定程度造成圖像畸變,影響最終結(jié)果。
二. SPP-Net : Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition)
傳統(tǒng)CNN和SPP-Net流程對比如下圖所示(引自http://www.image-net.org/challenges/LSVRC/2014/slides/sppnet_ilsvrc2014.pdf)
SPP-net具有以下特點(diǎn):
1.傳統(tǒng)CNN網(wǎng)絡(luò)中,卷積層對輸入圖像大小不作特別要求,但全連接層要求輸入圖像具有統(tǒng)一尺寸大小。因此,在R-CNN中,對于selective search方法提出的不同大小的proposal需要先通過Crop操作或Wrap操作將proposal區(qū)域裁剪為統(tǒng)一大小,然后用CNN提取proposal特征。相比之下,SPP-net在最后一個卷積層與其后的全連接層之間添加了一個SPP(spatial pyramid pooling)layer,從而避免對propsal進(jìn)行Crop或Warp操作??偠灾琒PP-layer適用于不同尺寸的輸入圖像,通過SPP-layer對最后一個卷積層特征進(jìn)行pool操作并產(chǎn)生固定大小feature map,進(jìn)而匹配后續(xù)的全連接層。
2.由于SPP-net支持不同尺寸輸入圖像,因此SPP-net提取得到的圖像特征具有更好的尺度不變性,降低了訓(xùn)練過程中的過擬合可能性。
3.R-CNN在訓(xùn)練和測試是需要對每一個圖像中每一個proposal進(jìn)行一遍CNN前向特征提取,如果是2000個propsal,需要2000次前向CNN特征提取。但SPP-net只需要進(jìn)行一次前向CNN特征提取,即對整圖進(jìn)行CNN特征提取,得到最后一個卷積層的feature map,然后采用SPP-layer根據(jù)空間對應(yīng)關(guān)系得到相應(yīng)proposal的特征。SPP-net速度可以比R-CNN速度快24~102倍,且準(zhǔn)確率比R-CNN更高(下圖引自SPP-net原作論文,可以看到SPP-net中spp-layer前有5個卷積層,第5個卷積層的輸出特征在位置上可以對應(yīng)到原來的圖像,例如第一個圖中左下角車輪在其conv5的圖中顯示為“^”的激活區(qū)域,因此基于此特性,SPP-net只需要對整圖進(jìn)行一遍前向卷積,在得到的conv5特征后,然后用SPP-net分別提取相應(yīng)proposal的特征)。
SPP-Layer原理:
在RNN中,conv5后是pool5;在SPP-net中,用SPP-layer替代原來的pool5,其目標(biāo)是為了使不同大小輸入圖像在經(jīng)過SPP-Layer后得到的特征向量長度相同。其原理如圖如下所示
SPP與金字塔pooling類似,即我們先確定最終pooling得到的featuremap大小,例如4*4 bins,3*3 bins,2*2 bins,1*1 bins。那么我們已知conv5輸出的featuremap大?。ɡ纾?56個13*13的feature map).那么,對于一個13*13的feature map,我們可以通過spatial pyramid pooling (SPP)的方式得到輸出結(jié)果:當(dāng)window=ceil(13/4)=4, stride=floor(13/4)=3,可以得到的4*4 bins;當(dāng)window=ceil(13/3)=5, stride=floor(13/3)=4,可以得到的3*3 bins;當(dāng)window=ceil(13/2)=7, stride=floor(13/2)=6,可以得到的2*2 bins;當(dāng)window=ceil(13/1)=13, stride=floor(13/1)=13,可以得到的1*1 bins.因此SPP-layer后的輸出是256*(4*4+3*3+2*2+1*1)=256*30長度的向量。不難看出,SPP的關(guān)鍵實(shí)現(xiàn)在于通過conv5輸出的feature map寬高和SPP目標(biāo)輸出bin的寬高計算spatial pyramid pooling中不同分辨率Bins對應(yīng)的pooling window和pool stride尺寸。
原作者在訓(xùn)練時采用兩種不同的方式,即1.采用相同尺寸的圖像訓(xùn)練SPP-net 2.采用不同尺寸的圖像訓(xùn)練SPP-net。實(shí)驗(yàn)結(jié)果表明:使用不同尺寸輸入圖像訓(xùn)練得到的SPP-Net效果更好。
SPP-Net +SVM訓(xùn)練:
采用selective search可以提取到一系列proposals,由于已經(jīng)訓(xùn)練完成SPP-Net,那么我們先將整圖代入到SPP-Net中,得到的conv5的輸出。接下來,區(qū)別于R-CNN,新方法不需要對不同尺寸的proposals進(jìn)行Crop或Wrap,直接根據(jù)proposal在圖中的相對位置關(guān)系計算得到proposal在整圖conv5輸出中的映射輸出結(jié)果。這樣,對于2000個proposal,我們事實(shí)上從conv1--->conv5只做了一遍前向,然后進(jìn)行2000次conv5 featuremap的集合映射,再通過SPP-Layer,就可以得到的2000組長度相同的SPP-Layer輸出向量,進(jìn)而通過全連接層生成最終2000個proposal的卷積神經(jīng)網(wǎng)絡(luò)特征。接下來就和R-CNN類似,訓(xùn)練SVMs時對于所有proposal進(jìn)行嚴(yán)格的標(biāo)定(可以這樣理解,當(dāng)且僅當(dāng)一個候選框完全包含ground truth區(qū)域且不屬于ground truth部分不超過e.g,候選框區(qū)域的5%時認(rèn)為該候選框標(biāo)定結(jié)果為目標(biāo),否則位背景),然后將所有proposal經(jīng)過CNN處理得到的特征和SVM新標(biāo)定結(jié)果輸入到SVMs分類器進(jìn)行訓(xùn)練得到分類器預(yù)測模型。
當(dāng)然,如果覺得SVM訓(xùn)練很麻煩,可以直接在SPP-Net后再加一個softmax層,用好的標(biāo)定結(jié)果去訓(xùn)練最后的softmax層參數(shù)。
三. Fast-R-CNN
基于R-CNN和SPP-Net思想,RBG提出了Fast-R-CNN算法。如果選用VGG16網(wǎng)絡(luò)進(jìn)行特征提取,在訓(xùn)練階段,F(xiàn)ast-R-CNN的速度相比RCNN和SPP-Net可以分別提升9倍和3倍;在測試階段,F(xiàn)ast-R-CNN的速度相比RCNN和SPP-Net可以分別提升213倍和10倍。
R-CNN和SPP-Net缺點(diǎn):
1.R-CNN和SPP-Net的訓(xùn)練過程類似,分多個階段進(jìn)行,實(shí)現(xiàn)過程較復(fù)雜。這兩種方法首先選用Selective Search方法提取proposals,然后用CNN實(shí)現(xiàn)特征提取,最后基于SVMs算法訓(xùn)練分類器,在此基礎(chǔ)上還可以進(jìn)一步學(xué)習(xí)檢測目標(biāo)的boulding box。
2.R-CNN和SPP-Net的時間成本和空間代價較高。SPP-Net在特征提取階段只需要對整圖做一遍前向CNN計算,然后通過空間映射方式計算得到每一個proposal相應(yīng)的CNN特征;區(qū)別于前者,RCNN在特征提取階段對每一個proposal均需要做一遍前向CNN計算,考慮到proposal數(shù)量較多(~2000個),因此RCNN特征提取的時間成本很高。R-CNN和SPP-Net用于訓(xùn)練SVMs分類器的特征需要提前保存在磁盤,考慮到2000個proposal的CNN特征總量還是比較大,因此造成空間代價較高。
3.R-CNN檢測速度很慢。RCNN在特征提取階段對每一個proposal均需要做一遍前向CNN計算,如果用VGG進(jìn)行特征提取,處理一幅圖像的所有proposal需要47s。
4.特征提取CNN的訓(xùn)練和SVMs分類器的訓(xùn)練在時間上是先后順序,兩者的訓(xùn)練方式獨(dú)立,因此SVMs的訓(xùn)練Loss無法更新SPP-Layer之前的卷積層參數(shù),因此即使采用更深的CNN網(wǎng)絡(luò)進(jìn)行特征提取,也無法保證SVMs分類器的準(zhǔn)確率一定能夠提升。
Fast-R-CNN亮點(diǎn):
1.Fast-R-CNN檢測效果優(yōu)于R-CNN和SPP-Net
2.訓(xùn)練方式簡單,基于多任務(wù)Loss,不需要SVM訓(xùn)練分類器。
3.Fast-R-CNN可以更新所有層的網(wǎng)絡(luò)參數(shù)(采用ROI Layer將不再需要使用SVM分類器,從而可以實(shí)現(xiàn)整個網(wǎng)絡(luò)端到端訓(xùn)練)。
4.不需要將特征緩存到磁盤。
Fast-R-CNN架構(gòu):
Fast-R-CNN的架構(gòu)如下圖所示(https://github.com/rbgirshick/fast-rcnn/blob/master/models/VGG16/train.prototxt,可以參考此鏈接理解網(wǎng)絡(luò)模型):輸入一幅圖像和Selective Search方法生成的一系列Proposals,通過一系列卷積層和Pooling層生成feature map,然后用RoI(region of ineterst)層處理最后一個卷積層得到的feature map為每一個proposal生成一個定長的特征向量roi_pool5。RoI層的輸出roi_pool5接著輸入到全連接層產(chǎn)生最終用于多任務(wù)學(xué)習(xí)的特征并用于計算多任務(wù)Loss。全連接輸出包括兩個分支:1.SoftMax Loss:計算K+1類的分類Loss函數(shù),其中K表示K個目標(biāo)類別,1表示背景;2.Regression Loss:即K+1的分類結(jié)果相應(yīng)的Proposal的Bounding Box四個角點(diǎn)坐標(biāo)值。最終將所有結(jié)果通過非極大抑制處理產(chǎn)生最終的目標(biāo)檢測和識別結(jié)果。
3.1 RoI Pooling Layer
事實(shí)上,RoI Pooling Layer是SPP-Layer的簡化形式。SPP-Layer是空間金字塔Pooling層,包括不同的尺度;RoI Layer只包含一種尺度,如論文中所述7*7。這樣對于RoI Layer的輸入(r,c,h,w),RoI Layer首先產(chǎn)生7*7個r*c*(h/7)*(w/7)的Block(塊),然后用Max-Pool方式求出每一個Block的最大值,這樣RoI Layer的輸出是r*c*7*7。
ROIs Pooling顧名思義,是Pooling層的一種,而且是針對RoIs的Pooling,他的特點(diǎn)是輸入特征圖尺寸不固定,但是輸出特征圖尺寸固定;
什么是ROI呢?
ROI是Region of Interest的簡寫,指的是在“特征圖上的框”;
1)在Fast RCNN中, RoI是指Selective Search完成后得到的“候選框”在特征圖上的映射,如下圖所示;
2)在Faster RCNN中,候選框是經(jīng)過RPN產(chǎn)生的,然后再把各個“候選框”映射到特征圖上,得到RoIs。
3.2 預(yù)訓(xùn)練網(wǎng)絡(luò)初始化
RBG復(fù)用了VGG訓(xùn)練ImageNet得到的網(wǎng)絡(luò)模型,即VGG16模型以初始化Fast-R-CNN中RoI Layer以前的所有層。Fast R-CNN的網(wǎng)絡(luò)結(jié)構(gòu)整體可以總結(jié)如下:13個convolution layers + 4個pooling layers+RoI layer+2個fc layer+兩個parrel層(即SoftmaxLoss layer和SmoothL1Loss layer)。在Fast R-CNN中,原來VGG16中第5個pooling layer被新的ROI layer替換掉。
3.3 Finetuning for detection
3.3.1 fast r-cnn在網(wǎng)絡(luò)訓(xùn)練階段采用了一些trick,每個minibatch是由N幅圖片(N=2)中提取得到的R個proposal(R=128)組成的。這種minibatch的構(gòu)造方式比從128張不同圖片中提取1個proposal的構(gòu)造方式快64倍。雖然minibatch的構(gòu)造速度加快,但也在一定程度上造成收斂速度減慢。此外,fast-r-cnn摒棄了之前svm訓(xùn)練分類器的方式,而是選用softmax classifer和bounding-box regressors聯(lián)合訓(xùn)練的方式更新cnn網(wǎng)絡(luò)所有層參數(shù)。注意:在每2張圖中選取128個proposals時,需要嚴(yán)格保證至少25%的正樣本類(proposals與groundtruth的IoU超過0.5),剩下的可全部視作背景類。在訓(xùn)練網(wǎng)絡(luò)模型時,不需要任何其他形式的數(shù)據(jù)擴(kuò)增操作。
3.3.2 multi-task loss:fast r-cnn包括兩個同等水平的sub-layer,分別用于classification和regression。其中,softmax loss對應(yīng)于classification,smoothL1Loss對應(yīng)于regression. 兩種Loss的權(quán)重比例為1:1
3.3.3 SGD hyer-parameters:用于softmax分類任務(wù)和bounding-box回歸的fc層參數(shù)用標(biāo)準(zhǔn)差介于0.01~0.001之間的高斯分布初始化。
3.4 Truncated SVD快速檢測
在檢測段,RBG使用truncated SVD優(yōu)化較大的FC層,這樣RoI數(shù)目較大時檢測端速度會得到的加速。
Fast-R-CNN實(shí)驗(yàn)結(jié)論:
1.multi-task loss訓(xùn)練方式能提高算法準(zhǔn)確度
2.multi-scale圖像訓(xùn)練fast r-cnn相比較single-scale圖像訓(xùn)練相比對mAP的提升幅度很小,但是卻增加了很高的時間成本。因此,綜合考慮訓(xùn)練時間和mAP,作者建議直接用single尺度的圖像訓(xùn)練fast-r-cnn。
3.用于訓(xùn)練的圖像越多,訓(xùn)練得到的模型準(zhǔn)確率也會越高。
4.SoftmaxLoss訓(xùn)練方式比SVMs訓(xùn)練得到的結(jié)果略好一點(diǎn),因此無法證明SoftmaxLoss在效果上一定比svm強(qiáng),但是簡化了訓(xùn)練流程,無需分步驟訓(xùn)練模型。
5.proposal并不是提取的越多效果越好,太多proposal反而導(dǎo)致mAP下降。
四. Faster-R-CNN: Towards Real-Time Object Detection with Region Proposal Networks
在之前介紹的Fast-R-CNN中,第一步需要先使用Selective Search方法提取圖像中的proposals?;?a target="_blank">CPU實(shí)現(xiàn)的Selective Search提取一幅圖像的所有Proposals需要約2s的時間。在不計入proposal提取情況下,F(xiàn)ast-R-CNN基本可以實(shí)時進(jìn)行目標(biāo)檢測。但是,如果從端到端的角度考慮,顯然proposal提取成為影響端到端算法性能的瓶頸。目前最新的EdgeBoxes算法雖然在一定程度提高了候選框提取的準(zhǔn)確率和效率,但是處理一幅圖像仍然需要0.2s。因此,Ren Shaoqing提出新的Faster-R-CNN算法,該算法引入了RPN網(wǎng)絡(luò)(Region Proposal Network)提取proposals。RPN網(wǎng)絡(luò)是一個全卷積神經(jīng)網(wǎng)絡(luò),通過共享卷積層特征可以實(shí)現(xiàn)proposal的提取,RPN提取一幅像的proposal只需要10ms.
Faster-R-CNN算法由兩大模塊組成:1.PRN候選框提取模塊 2.Fast R-CNN檢測模塊。其中,RPN是全卷積神經(jīng)網(wǎng)絡(luò),用于提取候選框;Fast R-CNN基于RPN提取的proposal檢測并識別proposal中的目標(biāo)。
4.1 Region Proposal Network (RPN)
RPN網(wǎng)絡(luò)的輸入可以是任意大?。ǖ€是有最小分辨率要求的,例如VGG是228*228)的圖片。如果用VGG16進(jìn)行特征提取,那么RPN網(wǎng)絡(luò)的組成形式可以表示為VGG16+RPN。
VGG16:參考https://github.com/rbgirshick/py-faster-rcnn/blob/master/models/pascal_voc/VGG16/faster_rcnn_end2end/train.prototxt,可以看出VGG16中用于特征提取的部分是13個卷積層(conv1_1---->conv5.3),不包括pool5及pool5后的網(wǎng)絡(luò)層次結(jié)構(gòu)。
RPN:RPN是作者重點(diǎn)介紹的一種網(wǎng)絡(luò),如下圖所示。RPN的實(shí)現(xiàn)方式:在conv5-3的卷積feature map上用一個n*n的滑窗(論文中作者選用了n=3,即3*3的滑窗)生成一個長度為256(對應(yīng)于ZF網(wǎng)絡(luò))或512(對應(yīng)于VGG網(wǎng)絡(luò))維長度的全連接特征。然后在這個256維或512維的特征后產(chǎn)生兩個分支的全連接層:1.reg-layer,用于預(yù)測proposal的中心錨點(diǎn)對應(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)容易幫助我們理解這一過程,但在實(shí)現(xiàn)時作者選用了卷積層實(shí)現(xiàn)全連接層的功能。個人理解:全連接層本來就是特殊的卷積層,如果產(chǎn)生256或512維的fc特征,事實(shí)上可以用Num_out=256或512, kernel_size=3*3, stride=1的卷積層實(shí)現(xiàn)conv5-3到第一個全連接特征的映射。然后再用兩個Num_out分別為2*9=18和4*9=36,kernel_size=1*1,stride=1的卷積層實(shí)現(xiàn)上一層特征到兩個分支cls層和reg層的特征映射。注意:這里2*9中的2指cls層的分類結(jié)果包括前后背景兩類,4*9的4表示一個Proposal的中心點(diǎn)坐標(biāo)x,y和寬高w,h四個參數(shù)。采用卷積的方式實(shí)現(xiàn)全連接處理并不會減少參數(shù)的數(shù)量,但是使得輸入圖像的尺寸可以更加靈活。在RPN網(wǎng)絡(luò)中,我們需要重點(diǎn)理解其中的anchors概念,Loss fucntions計算方式和RPN層訓(xùn)練數(shù)據(jù)生成的具體細(xì)節(jié)。
Anchors:字面上可以理解為錨點(diǎn),位于之前提到的n*n的sliding window的中心處。對于一個sliding window,我們可以同時預(yù)測多個proposal,假定有k個。k個proposal即k個reference boxes,每一個reference box又可以用一個scale,一個aspect_ratio和sliding window中的錨點(diǎn)唯一確定。所以,我們在后面說一個anchor,你就理解成一個anchor box 或一個reference box.作者在論文中定義k=9,即3種scales和3種aspect_ratio確定出當(dāng)前sliding window位置處對應(yīng)的9個reference boxes, 4*k個reg-layer的輸出和2*k個cls-layer的score輸出。對于一幅W*H的feature map,對應(yīng)W*H*k個錨點(diǎn)。所有的錨點(diǎn)都具有尺度不變性。
Loss functions:在計算Loss值之前,作者設(shè)置了anchors的標(biāo)定方法。正樣本標(biāo)定規(guī)則:1.如果Anchor對應(yīng)的reference box與ground truth的IoU值最大,標(biāo)記為正樣本;2.如果Anchor對應(yīng)的reference box與ground truth的IoU>0.7,標(biāo)記為正樣本。事實(shí)上,采用第2個規(guī)則基本上可以找到足夠的正樣本,但是對于一些極端情況,例如所有的Anchor對應(yīng)的reference box與groud truth的IoU不大于0.7,可以采用第一種規(guī)則生成。負(fù)樣本標(biāo)定規(guī)則:如果Anchor對應(yīng)的reference box與ground truth的IoU<0.3,標(biāo)記為負(fù)樣本。剩下的既不是正樣本也不是負(fù)樣本,不用于最終訓(xùn)練。訓(xùn)練RPN的Loss是有classification loss (即softmax loss)和regression loss (即L1 loss)按一定比重組成的。計算softmax loss需要的是anchors對應(yīng)的groundtruth標(biāo)定結(jié)果和預(yù)測結(jié)果,計算regression loss需要三組信息:1.預(yù)測框,即RPN網(wǎng)絡(luò)預(yù)測出的proposal的中心位置坐標(biāo)x,y和寬高w,h;2.錨點(diǎn)reference box:之前的9個錨點(diǎn)對應(yīng)9個不同scale和aspect_ratio的reference boxes,每一個reference boxes都有一個中心點(diǎn)位置坐標(biāo)x_a,y_a和寬高w_a,h_a。3.ground truth:標(biāo)定的框也對應(yīng)一個中心點(diǎn)位置坐標(biāo)x*,y*和寬高w*,h*。因此計算regression loss和總Loss方式如下:
RPN訓(xùn)練設(shè)置:在訓(xùn)練RPN時,一個Mini-batch是由一幅圖像中任意選取的256個proposal組成的,其中正負(fù)樣本的比例為1:1。如果正樣本不足128,則多用一些負(fù)樣本以滿足有256個Proposal可以用于訓(xùn)練,反之亦然。訓(xùn)練RPN時,與VGG共有的層參數(shù)可以直接拷貝經(jīng)ImageNet訓(xùn)練得到的模型中的參數(shù);剩下沒有的層參數(shù)用標(biāo)準(zhǔn)差=0.01的高斯分布初始化。
4.2 RPN與Faster-R-CNN特征共享
RPN在提取得到proposals后,作者選擇使用Fast-R-CNN實(shí)現(xiàn)最終目標(biāo)的檢測和識別。RPN和Fast-R-CNN共用了13個VGG的卷積層,顯然將這兩個網(wǎng)絡(luò)完全孤立訓(xùn)練不是明智的選擇,作者采用交替訓(xùn)練階段卷積層特征共享:
交替訓(xùn)練(Alternating training): Step1:訓(xùn)練RPN;Step2:用RPN提取得到的proposal訓(xùn)練Fast R-CNN;Step3:用Faster R-CNN初始化RPN網(wǎng)絡(luò)中共用的卷積層。迭代執(zhí)行Step1,2,3,直到訓(xùn)練結(jié)束為止。論文中采用的就是這種訓(xùn)練方式,注意:第一次迭代時,用ImageNet得到的模型初始化RPN和Fast-R-CNN中卷積層的參數(shù);從第二次迭代開始,訓(xùn)練RPN時,用Fast-R-CNN的共享卷積層參數(shù)初始化RPN中的共享卷積層參數(shù),然后只Fine-tune不共享的卷積層和其他層的相應(yīng)參數(shù)。訓(xùn)練Fast-RCNN時,保持其與RPN共享的卷積層參數(shù)不變,只Fine-tune不共享的層對應(yīng)的參數(shù)。這樣就可以實(shí)現(xiàn)兩個網(wǎng)絡(luò)卷積層特征共享訓(xùn)練。相應(yīng)的網(wǎng)絡(luò)模型請參考https://github.com/rbgirshick/py-faster-rcnn/tree/master/models/pascal_voc/VGG16/faster_rcnn_alt_opt
4.3 深度挖掘
1.由于Selective Search提取得到的Proposal尺度不一,因此Fast-RCNN或SPP-Net生成的RoI也是尺度不一,最后分別用RoI Pooling Layer或SPP-Layer處理得到固定尺寸金字塔特征,在這一過程中,回歸最終proposal的坐標(biāo)網(wǎng)絡(luò)的權(quán)重事實(shí)上共享了整個FeatureMap,因此其訓(xùn)練的網(wǎng)絡(luò)精度也會更高。但是,RPN方式提取的ROI由k個錨點(diǎn)生成,具有k種不同分辨率,因此在訓(xùn)練過程中學(xué)習(xí)到了k種獨(dú)立的回歸方式。這種方式并沒有共享整個FeatureMap,但其訓(xùn)練得到的網(wǎng)絡(luò)精度也很高。這,我竟然無言以對。有什么問題,請找Anchors同學(xué)。
2.采用不同分辨率圖像在一定程度可以提高準(zhǔn)確率,但是也會導(dǎo)致訓(xùn)練速度下降。采用VGG16訓(xùn)練RPN雖然使得第13個卷積層特征尺寸至少縮小到原圖尺寸的1/16(事實(shí)上,考慮到kernel_size作用,會更小一些),然并卵,最終的檢測和識別效果仍然好到令我無言以對。
3.三種scale(128*128,256*256,512*512),三種寬高比(1:2,1:1,2:1),雖然scale區(qū)間很大,總感覺這樣會很奇怪,但最終結(jié)果依然表現(xiàn)的很出色。
4.訓(xùn)練時(例如600*1000的輸入圖像),如果reference box (即anchor box)的邊界超過了圖像邊界,這樣的anchors對訓(xùn)練Loss不產(chǎn)生影響,即忽略掉這樣的Loss.一幅600*1000的圖經(jīng)過VGG16大約為40*60,那么anchors的數(shù)量大約為40*60*9,約等于20000個anchor boxes.去除掉與圖像邊界相交的anchor boxes后,剩下約6000個anchor boxes,這么多數(shù)量的anchor boxes之間會有很多重疊區(qū)域,因此使用非極值抑制方法將IoU>0.7的區(qū)域全部合并,剩下2000個anchor boxes(同理,在最終檢測端,可以設(shè)置規(guī)則將概率大于某閾值P且IoU大于某閾值T的預(yù)測框(注意,和前面不同,不是anchor boxes)采用非極大抑制方法合并)。在每一個epoch訓(xùn)練過程中,隨機(jī)從一幅圖最終剩余的這些anchors采樣256個anchor box作為一個Mini-batch訓(xùn)練RPN網(wǎng)絡(luò)。
4.3 實(shí)驗(yàn)
1.PASCAL VOC 2007:使用ZF-Net訓(xùn)練RPN和Fast-R-CNN,那么SelectiveSearch+Fast-R-CNN, EdgeBox+Fast-R-CNN, RPN+Fast-R-CNN的準(zhǔn)確率分別為:58.7%,58.6%,59.9%.SeletiveSeach和EdgeBox方法提取2000個proposal,RPN最多提取300個proposal,因此卷積特征共享方式提取特征的RPN顯然在效率是更具有優(yōu)勢。
2.采用VGG以特征不共享方式和特征共享方式訓(xùn)練RPN+Fast-R-CNN,可以分別得到68.5%和69.9%的準(zhǔn)確率(VOC2007)。此外,采用VGG訓(xùn)練RCNN時,需要花320ms提取2000個proposal,加入SVD優(yōu)化后需要223ms,而Faster-RCNN整個前向過程(包括RPN+Fast-R-CNN)總共只要198ms.
3.Anchors的scales和aspect_ratio的數(shù)量雖然不會對結(jié)果產(chǎn)生明顯影響,但是為了算法穩(wěn)定性,建議兩個參數(shù)都設(shè)置為合適的數(shù)值。
4.當(dāng)Selective Search和EdgeBox提取的proposal數(shù)目由2000減少到300時,F(xiàn)aste-R-CNN的Recallvs. IoU overlap ratio圖中recall值會明顯下降;但RPN提取的proposal數(shù)目由2000減少到300時,Recallvs. IoU overlap ratio圖中recall值會比較穩(wěn)定。
4.4 總結(jié)
特征共享方式訓(xùn)練RPN+Fast-R-CNN能夠?qū)崿F(xiàn)極佳的檢測效果,特征共享訓(xùn)練實(shí)現(xiàn)了買一送一,RPN在提取Proposal時不僅沒有時間成本,還提高了proposal質(zhì)量。因此Faster-R-CNN中交替訓(xùn)練RPN+Fast-R-CNN方式比原來的SlectiveSeach+Fast-R-CNN更上一層樓。
5.YOLO: You Only Look Once:Unified, Real-Time Object Detection
YOLO是一個可以一次性預(yù)測多個Box位置和類別的卷積神經(jīng)網(wǎng)絡(luò),能夠?qū)崿F(xiàn)端到端的目標(biāo)檢測和識別,其最大的優(yōu)勢就是速度快。事實(shí)上,目標(biāo)檢測的本質(zhì)就是回歸,因此一個實(shí)現(xiàn)回歸功能的CNN并不需要復(fù)雜的設(shè)計過程。YOLO沒有選擇滑窗或提取proposal的方式訓(xùn)練網(wǎng)絡(luò),而是直接選用整圖訓(xùn)練模型。這樣做的好處在于可以更好的區(qū)分目標(biāo)和背景區(qū)域,相比之下,采用proposal訓(xùn)練方式的Fast-R-CNN常常把背景區(qū)域誤檢為特定目標(biāo)。當(dāng)然,YOLO在提升檢測速度的同時犧牲了一些精度。下圖所示是YOLO檢測系統(tǒng)流程:1.將圖像Resize到448*448;2.運(yùn)行CNN;3.非極大抑制優(yōu)化檢測結(jié)果。有興趣的童鞋可以按照http://pjreddie.com/darknet/install/的說明安裝測試一下YOLO的scoring流程,非常容易上手。接下來將重點(diǎn)介紹YOLO的原理。
5.1 一體化檢測方案
YOLO的設(shè)計理念遵循端到端訓(xùn)練和實(shí)時檢測。YOLO將輸入圖像劃分為S*S個網(wǎng)絡(luò),如果一個物體的中心落在某網(wǎng)格(cell)內(nèi),則相應(yīng)網(wǎng)格負(fù)責(zé)檢測該物體。在訓(xùn)練和測試時,每個網(wǎng)絡(luò)預(yù)測B個bounding boxes,每個bounding box對應(yīng)5個預(yù)測參數(shù),即bounding box的中心點(diǎn)坐標(biāo)(x,y),寬高(w,h),和置信度評分。這里的置信度評分(Pr(Object)*IOU(pred|truth))綜合反映基于當(dāng)前模型bounding box內(nèi)存在目標(biāo)的可能性Pr(Object)和bounding box預(yù)測目標(biāo)位置的準(zhǔn)確性IOU(pred|truth)。如果bouding box內(nèi)不存在物體,則Pr(Object)=0。如果存在物體,則根據(jù)預(yù)測的bounding box和真實(shí)的bounding box計算IOU,同時會預(yù)測存在物體的情況下該物體屬于某一類的后驗(yàn)概率Pr(Class_i|Object)。假定一共有C類物體,那么每一個網(wǎng)格只預(yù)測一次C類物體的條件類概率Pr(Class_i|Object), i=1,2,...,C;每一個網(wǎng)格預(yù)測B個bounding box的位置。即這B個bounding box共享一套條件類概率Pr(Class_i|Object), i=1,2,...,C?;谟嬎愕玫降腜r(Class_i|Object),在測試時可以計算某個bounding box類相關(guān)置信度:Pr(Class_i|Object)*Pr(Object)*IOU(pred|truth)=Pr(Class_i)*IOU(pred|truth)。如果將輸入圖像劃分為7*7網(wǎng)格(S=7),每個網(wǎng)格預(yù)測2個bounding box (B=2),有20類待檢測的目標(biāo)(C=20),則相當(dāng)于最終預(yù)測一個長度為S*S*(B*5+C)=7*7*30的向量,從而完成檢測+識別任務(wù),整個流程可以通過下圖理解。
5.1.1 網(wǎng)絡(luò)設(shè)計
YOLO網(wǎng)絡(luò)設(shè)計遵循了GoogleNet的思想,但與之有所區(qū)別。YOLO使用了24個級聯(lián)的卷積(conv)層和2個全連接(fc)層,其中conv層包括3*3和1*1兩種Kernel,最后一個fc層即YOLO網(wǎng)絡(luò)的輸出,長度為S*S*(B*5+C)=7*7*30.此外,作者還設(shè)計了一個簡化版的YOLO-small網(wǎng)絡(luò),包括9個級聯(lián)的conv層和2個fc層,由于conv層的數(shù)量少了很多,因此YOLO-small速度比YOLO快很多。如下圖所示我們給出了YOLO網(wǎng)絡(luò)的架構(gòu)。
5.1.2 訓(xùn)練
作者訓(xùn)練YOLO網(wǎng)絡(luò)是分步驟進(jìn)行的:首先,作者從上圖網(wǎng)絡(luò)中取出前20個conv層,然后自己添加了一個average pooling層和一個fc層,用1000類的ImageNet數(shù)據(jù)與訓(xùn)練。在ImageNet2012上用224*224d的圖像訓(xùn)練后得到的top5準(zhǔn)確率是88%。然后,作者在20個預(yù)訓(xùn)練好的conv層后添加了4個新的conv層和2個fc層,并采用隨即參數(shù)初始化這些新添加的層,在fine-tune新層時,作者選用448*448圖像訓(xùn)練。最后一個fc層可以預(yù)測物體屬于不同類的概率和bounding box中心點(diǎn)坐標(biāo)x,y和寬高w,h。Boundingbox的寬高是相對于圖像寬高歸一化后得到的,Bounding box的中心位置坐標(biāo)是相對于某一個網(wǎng)格的位置坐標(biāo)進(jìn)行過歸一化,因此x,y,w,h均介于0到1之間。
在設(shè)計Loss函數(shù)時,有兩個主要的問題:1.對于最后一層長度為7*7*30長度預(yù)測結(jié)果,計算預(yù)測loss通常會選用平方和誤差。然而這種Loss函數(shù)的位置誤差和分類誤差是1:1的關(guān)系。2.整個圖有7*7個網(wǎng)格,大多數(shù)網(wǎng)格實(shí)際不包含物體(當(dāng)物體的中心位于網(wǎng)格內(nèi)才算包含物體),如果只計算Pr(Class_i),很多網(wǎng)格的分類概率為0,網(wǎng)格loss呈現(xiàn)出稀疏矩陣的特性,使得Loss收斂效果變差,模型不穩(wěn)定。為了解決上述問題,作者采用了一系列方案:
1.增加bounding box坐標(biāo)預(yù)測的loss權(quán)重,降低bounding box分類的loss權(quán)重。坐標(biāo)預(yù)測和分類預(yù)測的權(quán)重分別是λcoord=5,λnoobj=0.5.
2.平方和誤差對于大和小的bounding box的權(quán)重是相同的,作者為了降低不同大小bounding box寬高預(yù)測的方差,采用了平方根形式計算寬高預(yù)測loss,即sqrt(w)和sqrt(h)。
訓(xùn)練Loss組成形式較為復(fù)雜,這里不作列舉,如有興趣可以參考作者原文慢慢理解體會。
5.1.3 測試
作者選用PASAL VOC圖像測試訓(xùn)練得到的YOLO網(wǎng)絡(luò),每幅圖會預(yù)測得到98個(7*7*2)個bouding box及相應(yīng)的類概率。通常一個cell可以直接預(yù)測出一個物體對應(yīng)的bounding box,但是對于某些尺寸較大或靠近圖像邊界的物體,需要多個網(wǎng)格預(yù)測的結(jié)果通過非極大抑制處理生成。雖然YOLO對于非極大抑制的依賴不及R-CNN和DPM,但非極大抑制確實(shí)可以將mAP提高2到3個點(diǎn)。
5.2 方法對比
作者將YOLO目標(biāo)檢測與識別方法與其他幾種經(jīng)典方案進(jìn)行比較可知:
DPM(Deformable parts models):DPM是一種基于滑窗方式的目標(biāo)檢測方法,基本流程包括幾個獨(dú)立的環(huán)節(jié):特征提取,區(qū)域劃分,基于高分值區(qū)域預(yù)測bounding box。YOLO采用端到端的訓(xùn)練方式,將特征提取、候選框預(yù)測,非極大抑制及目標(biāo)識別連接在一起,實(shí)現(xiàn)了更快更準(zhǔn)的檢測模型。
R-CNN:R-CNN方案分需要先用SeletiveSearch方法提取proposal,然后用CNN進(jìn)行特征提取,最后用SVM訓(xùn)練分類器。如此方案,誠繁瑣也!YOLO精髓思想與其類似,但是通過共享卷積特征的方式提取proposal和目標(biāo)識別。另外,YOLO用網(wǎng)格對proposal進(jìn)行空間約束,避免在一些區(qū)域重復(fù)提取Proposal,相較于SeletiveSearch提取2000個proposal進(jìn)行R-CNN訓(xùn)練,YOLO只需要提取98個proposal,這樣訓(xùn)練和測試速度怎能不快?
Fast-R-CNN、Faster-R-CNN、Fast-DPM: Fast-R-CNN和Faster-R-CNN分別替換了SVMs訓(xùn)練和SelectiveSeach提取proposal的方式,在一定程度上加速了訓(xùn)練和測試速度,但其速度依然無法和YOLO相比。同理,將DPM優(yōu)化在GPU上實(shí)現(xiàn)也無出YOLO之右。
5.3 實(shí)驗(yàn)
5.3.1 實(shí)時檢測識別系統(tǒng)對比
5.3.2 VOC2007準(zhǔn)確率比較
5.3.3 Fast-R-CNN和YOLO錯誤分析
如圖所示,不同區(qū)域分別表示不同的指標(biāo):
Correct:正確檢測和識別的比例,即分類正確且IOU>0.5
Localization:分類正確,但0.1
Similar:類別相似,IOU>0.1
Other:分類錯誤,IOU>0.1
Background: 對于任何目標(biāo)IOU<0.1
可以看出,YOLO在定位目標(biāo)位置時準(zhǔn)確度不及Fast-R-CNN。YOLO的error中,目標(biāo)定位錯誤占據(jù)的比例最大,比Fast-R-CNN高出了10個點(diǎn)。但是,YOLO在定位識別背景時準(zhǔn)確率更高,可以看出Fast-R-CNN假陽性很高(Background=13.6%,即認(rèn)為某個框是目標(biāo),但是實(shí)際里面不含任何物體)。
5.3.4 VOC2012準(zhǔn)確率比較
由于YOLO在目標(biāo)檢測和識別是處理背景部分優(yōu)勢更明顯,因此作者設(shè)計了Fast-R-CNN+YOLO檢測識別模式,即先用R-CNN提取得到一組bounding box,然后用YOLO處理圖像也得到一組bounding box。對比這兩組bounding box是否基本一致,如果一致就用YOLO計算得到的概率對目標(biāo)分類,最終的bouding box的區(qū)域選取二者的相交區(qū)域。Fast-R-CNN的最高準(zhǔn)確率可以達(dá)到71.8%,采用Fast-R-CNN+YOLO可以將準(zhǔn)確率提升至75.0%。這種準(zhǔn)確率的提升是基于YOLO在測試端出錯的情況不同于Fast-R-CNN。雖然Fast-R-CNN_YOLO提升了準(zhǔn)確率,但是相應(yīng)的檢測識別速度大大降低,因此導(dǎo)致其無法實(shí)時檢測。
使用VOC2012測試不同算法的mean Average Precision,YOLO的mAP=57.9%,該數(shù)值與基于VGG16的RCNN檢測算法準(zhǔn)確率相當(dāng)。對于不同大小圖像的測試效果進(jìn)行研究,作者發(fā)現(xiàn):YOLO在檢測小目標(biāo)時準(zhǔn)確率比R-CNN低大約8~10%,在檢測大目標(biāo)是準(zhǔn)確率高于R-CNN。采用Fast-R-CNN+YOLO的方式準(zhǔn)確率最高,比Fast-R-CNN的準(zhǔn)確率高了2.3%。
5.4 總結(jié)
YOLO是一種支持端到端訓(xùn)練和測試的卷積神經(jīng)網(wǎng)絡(luò),在保證一定準(zhǔn)確率的前提下能圖像中多目標(biāo)的檢測與識別。
作者為博客園博主賞月齋
-
深度圖像
+關(guān)注
關(guān)注
0文章
19瀏覽量
3509 -
卷積神經(jīng)網(wǎng)絡(luò)
+關(guān)注
關(guān)注
4文章
367瀏覽量
11865
原文標(biāo)題:深度圖像檢測算法總結(jié)與對比
文章出處:【微信號:vision263com,微信公眾號:新機(jī)器視覺】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論