姓名:李澤銘? ? ? ? ? 學(xué)號(hào):22011210787? ? ? ? ? 通信工程學(xué)院
轉(zhuǎn)載自:https://blog.csdn.net/qinghuaci666/article/details/80677045a
【嵌牛導(dǎo)讀】Fast Rcnn是一種卷積神經(jīng)網(wǎng)絡(luò),繼2014年的RCNN之后氢惋,Ross Girshick在15年推出Fast RCNN,構(gòu)思精巧间校,流程更為緊湊,大幅提升了目標(biāo)檢測(cè)的速度牺丙。在Github上提供了源碼舟舒。同樣使用最大規(guī)模的網(wǎng)絡(luò),F(xiàn)ast RCNN和RCNN相比恐似,訓(xùn)練時(shí)間從84小時(shí)減少為9.5小時(shí),測(cè)試時(shí)間從47秒減少為0.32秒傍念。在PASCAL VOC 2007上的準(zhǔn)確率相差無(wú)幾矫夷,約在66%-67%之間。
【嵌牛鼻子】RCNN憋槐;卷積神經(jīng)網(wǎng)絡(luò)双藕;原理;
【嵌牛提問(wèn)】Fast RCNN是否可以用在一些要求實(shí)時(shí)性的地方阳仔?
【嵌牛正文】
1.思想
1.1基礎(chǔ):RCNN
簡(jiǎn)單來(lái)說(shuō)忧陪,RCNN使用以下四步實(shí)現(xiàn)目標(biāo)檢測(cè):
a. 在圖像中確定約1000-2000個(gè)候選框
b. 對(duì)于每個(gè)候選框內(nèi)圖像塊,使用深度網(wǎng)絡(luò)提取特征
c. 對(duì)候選框中提取出的特征近范,使用分類(lèi)器判別是否屬于一個(gè)特定類(lèi)
d. 對(duì)于屬于某一特征的候選框嘶摊,用回歸器進(jìn)一步調(diào)整其位置
RCNN中存在的問(wèn)題:
1.R-CNN網(wǎng)絡(luò)訓(xùn)練、測(cè)試速度都很慢:R-CNN網(wǎng)絡(luò)中评矩,一張圖經(jīng)由selective search算法提取約2k個(gè)建議框【這2k個(gè)建議框大量重疊】叶堆,而所有建議框變形后都要輸入AlexNet CNN網(wǎng)絡(luò)提取特征【即約2k次特征提取】,會(huì)出現(xiàn)上述重疊區(qū)域多次重復(fù)提取特征斥杜,提取特征操作冗余虱颗;
2.R-CNN網(wǎng)絡(luò)訓(xùn)練、測(cè)試繁瑣:R-CNN網(wǎng)絡(luò)訓(xùn)練過(guò)程分為ILSVRC 2012樣本下有監(jiān)督預(yù)訓(xùn)練蔗喂、PASCAL VOC 2007該特定樣本下的微調(diào)上枕、20類(lèi)即20個(gè)SVM分類(lèi)器訓(xùn)練、20類(lèi)即20個(gè)Bounding-box 回歸器訓(xùn)練弱恒,該訓(xùn)練流程繁瑣復(fù)雜;同理測(cè)試過(guò)程也包括提取建議框棋恼、提取CNN特征返弹、SVM分類(lèi)和Bounding-box 回歸等步驟锈玉,過(guò)于繁瑣;
3.R-CNN網(wǎng)絡(luò)訓(xùn)練需要大量存儲(chǔ)空間:20類(lèi)即20個(gè)SVM分類(lèi)器和20類(lèi)即20個(gè)Bounding-box 回歸器在訓(xùn)練過(guò)程中需要大量特征作為訓(xùn)練樣本义起,這部分從CNN提取的特征會(huì)占用大量存儲(chǔ)空間拉背;
4.R-CNN網(wǎng)絡(luò)需要對(duì)建議框進(jìn)行形變操作后【形變?yōu)?27×227 size】再輸入CNN網(wǎng)絡(luò)提取特征,其實(shí)像AlexNet CNN等網(wǎng)絡(luò)在提取特征過(guò)程中對(duì)圖像的大小并無(wú)要求默终,只是在提取完特征進(jìn)行全連接操作的時(shí)候才需要固定特征尺寸【R-CNN中將輸入圖像形變?yōu)?27×227可正好滿足AlexNet CNN網(wǎng)絡(luò)最后的特征尺寸要求】椅棺,然后才使用SVM分類(lèi)器分類(lèi),R-CNN需要進(jìn)行形變操作的問(wèn)題在Fast R-CNN已經(jīng)不存在齐蔽,具體見(jiàn)下两疚。
1.2改進(jìn):Fast RCNN
Fast RCNN方法解決了RCNN方法三個(gè)問(wèn)題:
問(wèn)題一:測(cè)試時(shí)速度慢
RCNN一張圖像內(nèi)候選框之間大量重疊,提取特征操作冗余含滴。
本文將整張圖像歸一化后直接送入深度網(wǎng)絡(luò)诱渤。在鄰接時(shí),才加入候選框信息谈况,在末尾的少數(shù)幾層處理每個(gè)候選框勺美。
問(wèn)題二:訓(xùn)練時(shí)速度慢
原因同上。
在訓(xùn)練時(shí)碑韵,本文先將一張圖像送入網(wǎng)絡(luò)赡茸,緊接著送入從這幅圖像上提取出的候選區(qū)域。這些候選區(qū)域的前幾層特征不需要再重復(fù)計(jì)算祝闻。
問(wèn)題三:訓(xùn)練所需空間大
RCNN中獨(dú)立的分類(lèi)器和回歸器需要大量特征作為訓(xùn)練樣本占卧。
本文把類(lèi)別判斷和位置精調(diào)統(tǒng)一用深度網(wǎng)絡(luò)實(shí)現(xiàn),不再需要額外存儲(chǔ)治筒。
Fast-RCNN的優(yōu)點(diǎn)概述:
1. 比R-CNN屉栓、SPP-net有更高的檢測(cè)質(zhì)量(mAP);
2. 把多個(gè)任務(wù)的損失函數(shù)寫(xiě)到一起耸袜,實(shí)現(xiàn)單級(jí)的訓(xùn)練過(guò)程友多;
3. 在訓(xùn)練時(shí)可更新所有的層;
4. 不需要在磁盤(pán)中存儲(chǔ)特征堤框。
Fast RCNN 的改進(jìn)可以用下面兩幅圖概括域滥。其中,左圖是原 RCNN 的做法蜈抓,而右圖則是 Fast RCNN 的做法启绰。
有個(gè)很形象直觀的對(duì)比圖: R-CNN和SPP-net
FastRCNN改進(jìn)之后:
2.系統(tǒng)結(jié)構(gòu)
整體框架大致如上述所示,幾句話總結(jié):
1.用selective search在一張圖片中生成約2000個(gè)object proposal,即RoI沟使。
2.把圖像輸入到卷積網(wǎng)絡(luò)中委可,并輸入候選框,在最后一個(gè)卷積層上對(duì)每個(gè)ROI求映射關(guān)系,并用一個(gè)RoI pooling layer來(lái)統(tǒng)一到相同的大小着倾,得到 (fc)feature vector拾酝,即一個(gè)固定維度的特征表示。
3.繼續(xù)經(jīng)過(guò)兩個(gè)全連接層(FC)得到特征向量卡者。特征向量經(jīng)由各自的FC層蒿囤,得到兩個(gè)輸出向量:第一個(gè)是分類(lèi),使用softmax崇决,第二個(gè)是每一類(lèi)的bounding box回歸材诽。
具體來(lái)講,訓(xùn)練過(guò)程如下:
1恒傻、網(wǎng)絡(luò)首先用幾個(gè)卷積層(conv)和最大池化層處理整個(gè)圖像(224*224)以產(chǎn)生conv特征圖脸侥。
2、然后碌冶,對(duì)于每個(gè)對(duì)象建議框(object proposals 湿痢,~2000個(gè)),感興趣區(qū)域(region of interest——RoI)池層從特征圖提取固定長(zhǎng)度的特征向量扑庞。
3譬重、每個(gè)特征向量被輸送到分支成兩個(gè)同級(jí)輸出層的全連接(fc)層序列中:
其中一層進(jìn)行分類(lèi),對(duì) 目標(biāo)關(guān)于K個(gè)對(duì)象類(lèi)(包括全部“背景background”類(lèi))產(chǎn)生softmax概率估計(jì)罐氨,即輸出每一個(gè)RoI的概率分布臀规;
另一層進(jìn)行bbox regression,輸出K個(gè)對(duì)象類(lèi)中每一個(gè)類(lèi)的四個(gè)實(shí)數(shù)值栅隐。每4個(gè)值編碼K個(gè)類(lèi)中的每個(gè)類(lèi)的精確邊界盒(bounding-box)位置塔嬉,即輸出每一個(gè)種類(lèi)的的邊界盒回歸偏差。整個(gè)結(jié)構(gòu)是使用多任務(wù)損失的端到端訓(xùn)練(trained end-to-end with a multi-task loss)租悄。
1.任意size圖片輸入CNN網(wǎng)絡(luò)谨究,經(jīng)過(guò)若干卷積層與池化層,得到特征圖泣棋;
2.在任意size圖片上采用selective search算法提取約2k個(gè)建議框胶哲;
3.根據(jù)原圖中建議框到特征圖映射關(guān)系,在特征圖中找到每個(gè)建議框?qū)?yīng)的特征框【深度和特征圖一致】潭辈,并在RoI池化層中將每個(gè)特征框池化到H×W【VGG-16網(wǎng)絡(luò)是7×7】的size鸯屿;
4.固定H×W【VGG-16網(wǎng)絡(luò)是7×7】大小的特征框經(jīng)過(guò)全連接層得到固定大小的特征向量;
5.第4步所得特征向量經(jīng)由各自的全連接層【由SVD分解實(shí)現(xiàn)】把敢,分別得到兩個(gè)輸出向量:一個(gè)是softmax的分類(lèi)得分寄摆,一個(gè)是Bounding-box窗口回歸;
6.利用窗口得分分別對(duì)每一類(lèi)物體進(jìn)行非極大值抑制剔除重疊建議框修赞,最終得到每個(gè)類(lèi)別中回歸修正后的得分最高的窗口婶恼。
整體框架大致如上述所示了,對(duì)比SPP-Net,可以看出FRCN大致就是一個(gè)joint training版本的SPP-Net勾邦,改進(jìn)如下:
SPP-Net在實(shí)現(xiàn)上無(wú)法同時(shí)tuning在SPP layer兩邊的卷積層和全連接層联逻。
SPP-Net后面的需要將第二層FC的特征放到硬盤(pán)上訓(xùn)練SVM,之后再額外訓(xùn)練bbox regressor检痰。
3.特征提取網(wǎng)絡(luò)
3.1基本結(jié)構(gòu)
Fast RCNN對(duì)圖像額輸入尺寸沒(méi)有嚴(yán)格限制,ROI Pooling層的的存在確保全連接層的輸入是固定尺寸锨推。
前五階段是基礎(chǔ)的conv+relu+pooling形式铅歼,在第五階段結(jié)尾,輸入P個(gè)候選區(qū)域(圖像序號(hào)×1+幾何位置×4换可,序號(hào)用于訓(xùn)練)椎椰。
注:文中給出了大中小三種網(wǎng)絡(luò),此處示出最大的一種沾鳄。三種網(wǎng)絡(luò)基本結(jié)構(gòu)相似慨飘,僅conv+relu層數(shù)有差別,或者增刪了norm層译荞。
3.2 ROI Pooling Layer
為了讓全聯(lián)接層能夠接收 Conv-Pooling 后的特征瓤的,有兩種方法:
1.要么是重新調(diào)整 pooling 后的特征維度,使它適應(yīng)全聯(lián)接層
2.要么是改變?nèi)?lián)接層的結(jié)構(gòu)吞歼,使它可以接收任意維度的特征
后者一個(gè)有效的解決方案是 FCN(全卷積網(wǎng)絡(luò))圈膏,不過(guò) Fast RCNN 出來(lái)之時(shí)還沒(méi)有 FCN,因此它采用的是前一種思路篙骡。
那要如何調(diào)整 pooling 后的特征呢稽坤?論文提出了一種 ROI Pooling Layer 的方法(ROI 指的是 Region of Interest)。事實(shí)上糯俗,這種方法并不是 Fast RCNN 的原創(chuàng)尿褪,而是借鑒了 SPPNet 的思路。關(guān)于 SPPNet得湘,網(wǎng)上資料很多杖玲,就不再贅述了,所以我開(kāi)門(mén)見(jiàn)山講一下 ROI Pooling Layer 是怎么處理的忽刽。假設(shè)首個(gè)全聯(lián)接層接收的特征維度是 H?W?D天揖,例如 VGG16 的第一個(gè) FC 層的輸入是 7 * 7 * 512,其中 512 表示 feature map 的層數(shù)跪帝。那么今膊,ROI Pooling Layer 的目標(biāo),就是讓 feature map 上的 ROI 區(qū)域伞剑,在經(jīng)過(guò) pooling 操作后斑唬,其特征輸出維度滿足 H?W。具體做法是,對(duì)原本 max pooling 的單位網(wǎng)格進(jìn)行調(diào)整恕刘,使得 pooling 的每個(gè)網(wǎng)格大小動(dòng)態(tài)調(diào)整為 h / H?w / W(假設(shè) ROI 區(qū)域的長(zhǎng)寬為 h?w)缤谎。這樣,一個(gè) ROI 區(qū)域可以得到 H?W 個(gè)網(wǎng)格褐着。然后坷澡,每個(gè)網(wǎng)格內(nèi)依然采用 max pooling 操作。如此一來(lái)含蓉,不管 ROI 區(qū)域大小如何频敛,最終得到的特征維度都是 H?W?D。
下圖顯示的馅扣,是在一張 feature map 上斟赚,對(duì)一個(gè) 5 * 7 的 ROI 區(qū)域進(jìn)行 ROI Pooling 的結(jié)果,最后得到 2 * 2 的特征差油。
這時(shí)拗军,可能有人會(huì)問(wèn),如果 ROI 區(qū)域太小怎么辦蓄喇?比如发侵,拿 VGG16 來(lái)說(shuō),它要求 Pooling 后的特征為 7 * 7 * 512公罕,如果碰巧 ROI 區(qū)域只有 6 * 6 大小怎么辦器紧?還是同樣的辦法,每個(gè)網(wǎng)格的大小取 6 / 7?6 / 7=0.85?0.85楼眷,然后铲汪,以寬為例,按照這樣的間隔取網(wǎng)格:[0,0.85,1.7,2.55,3.4,4.25,5.1,5.95]
取整后罐柳,每個(gè)網(wǎng)格對(duì)應(yīng)的起始坐標(biāo)為:[0,1,2,3,3,4,5]
再如將大小不同的區(qū)域pooling為3*3:
3.3 Back-propagation through RoI pooling layers. 通過(guò)RoI池化層的反向傳播掌腰。
從這篇借鑒理解RoI池化層:Fast R-CNN論文詳解
1.首先看普通max pooling層如何求導(dǎo)
設(shè)xi為輸入層節(jié)點(diǎn),yi為輸出層節(jié)點(diǎn)张吉,那么損失函數(shù)L對(duì)輸入層節(jié)點(diǎn)xi的梯度為:
其中判決函數(shù)δ(i,j)表示輸入i節(jié)點(diǎn)是否被輸出j節(jié)點(diǎn)選為最大值輸出齿梁。
不被選中【δ(i,j)=false】有兩種可能:xi不在yi范圍內(nèi),或者xi不是最大值肮蛹。
若選中【δ(i,j)=true 】則由鏈?zhǔn)揭?guī)則可知損失函數(shù)L相對(duì)xi的梯度等于損失函數(shù)L相對(duì)yi的梯度×(yi對(duì)xi的梯度->恒等于1)勺择,故可得上述所示公式;
2.RoI max pooling層求導(dǎo)
設(shè)xi為輸入層的節(jié)點(diǎn)伦忠,yri 為第r個(gè)候選區(qū)域的第j個(gè)輸出節(jié)點(diǎn)省核,一個(gè)輸入節(jié)點(diǎn)可能和多個(gè)輸出節(jié)點(diǎn)相關(guān)連,如下圖所示昆码,輸入節(jié)點(diǎn)7和兩個(gè)候選區(qū)域輸出節(jié)點(diǎn)相關(guān)連气忠;
該輸入節(jié)點(diǎn)7的反向傳播如下圖所示邻储。
對(duì)于不同候選區(qū)域,節(jié)點(diǎn)7都存在梯度旧噪,所以反向傳播中損失函數(shù) L 對(duì)輸入層節(jié)點(diǎn)?xi 的梯度為損失函數(shù) L 對(duì)各個(gè)有可能的候選區(qū)域 r 【?xi 被候選區(qū)域r的第j個(gè)輸出節(jié)點(diǎn)選為最大值 】輸出?yri 梯度的累加吨娜,具體如下公式所示:
判決函數(shù) [i=i?(r,j)] 表示 i 節(jié)點(diǎn)是否被候選區(qū)域r 的第j 個(gè)輸出節(jié)點(diǎn)選為最大值輸出,若是淘钟,則由鏈?zhǔn)揭?guī)則可知損失函數(shù)L相對(duì) xi 的梯度等于損失函數(shù) L 相對(duì)yri 的梯度×( yrj 對(duì)xi 的梯度->恒等于1)宦赠,上圖已然解釋該輸入節(jié)點(diǎn)可能會(huì)和不同的yrj有關(guān)系,故損失函數(shù)L相對(duì)xi 的梯度為求和形式米母。
4.網(wǎng)絡(luò)參數(shù)訓(xùn)練
4.1參數(shù)初始化
網(wǎng)絡(luò)除去末尾部分如下圖袱瓮,在ImageNet上訓(xùn)練1000類(lèi)分類(lèi)器。結(jié)果參數(shù)作為相應(yīng)層的初始化參數(shù)爱咬。
其余參數(shù)隨機(jī)初始化。
4.2分層數(shù)據(jù)
在調(diào)優(yōu)訓(xùn)練時(shí)绊起,每一個(gè)mini-batch中首先加入N張完整圖片精拟,而后加入從N張圖片中選取的R個(gè)候選框。這R個(gè)候選框可以復(fù)用N張圖片前5個(gè)階段的網(wǎng)絡(luò)特征虱歪。
實(shí)際選擇N=2蜂绎, R=128。
4.3訓(xùn)練數(shù)據(jù)構(gòu)成笋鄙,Mini-batch sampling.
作者從對(duì)象建議框(object proposal)中選擇25%的RoI师枣,這些RoI與ground-truth bbox邊界框至少有0.5的部分交叉重疊,也就是正樣本萧落,即 u >= 1践美。其余的RoI選那些IoU重疊區(qū)間在[0.1,0.5)的谋作,作為負(fù)樣本困介,即 u = 0,大約為75%田篇。之所以選擇負(fù)樣本需要大于0.1的閾值是因?yàn)槭褂脝l(fā)式的hard example mining(低于0.1的IoU作為難例挖掘的啟發(fā)式)许布。在訓(xùn)練期間兴革,圖像有0.5的概率水平翻轉(zhuǎn)。
5.分類(lèi)與位置調(diào)整
5.1子網(wǎng)絡(luò)結(jié)構(gòu)
第五階段的特征輸入到兩個(gè)并行的全連層中(稱(chēng)為multi-task)蜜唾。
cls_score層用于分類(lèi)杂曲,輸出K+1維數(shù)組p,表示屬于K類(lèi)和背景的概率袁余。
bbox_prdict層用于調(diào)整候選區(qū)域位置擎勘,輸出4*K維數(shù)組t,表示分別屬于K類(lèi)時(shí)泌霍,應(yīng)該平移縮放的參數(shù)货抄。
源碼中bbox_loss_weights用于標(biāo)記每一個(gè)bbox是否屬于某一個(gè)類(lèi)
5.2 多任務(wù)損失函數(shù)
作者這樣設(shè)置的目的是想讓loss對(duì)于離群點(diǎn)更加魯棒述召,控制梯度的量級(jí)使得訓(xùn)練時(shí)不容易跑飛。 最后在5.1的討論中蟹地,作者說(shuō)明了Multitask loss是有助于網(wǎng)絡(luò)的performance的积暖。
smooth L1損失函數(shù)曲線如下圖所示,相比于L2損失函數(shù)怪与,其對(duì)離群點(diǎn)夺刑、異常值不敏感,可控制梯度的量級(jí)使訓(xùn)練時(shí)不容易跑飛分别;
5.3 全連接層提速
在實(shí)現(xiàn)時(shí)遍愿,相當(dāng)于把一個(gè)全連接層拆分成兩個(gè),中間以一個(gè)低維數(shù)據(jù)相連耘斩。
6.實(shí)驗(yàn)與結(jié)論
實(shí)驗(yàn)過(guò)程不再詳述沼填,只記錄結(jié)論
- 網(wǎng)絡(luò)末端同步訓(xùn)練的分類(lèi)和位置調(diào)整,提升準(zhǔn)確度
- 使用多尺度的圖像金字塔括授,性能幾乎沒(méi)有提高
- 倍增訓(xùn)練數(shù)據(jù)坞笙,能夠有2%-3%的準(zhǔn)確度提升
- 網(wǎng)絡(luò)直接輸出各類(lèi)概率(softmax),比SVM分類(lèi)器性能略好
- 更多候選窗不能提升性能