目标检测系列(四)——Fast R-CNN译文
文章目錄
- 摘要
- 1. 引言
- 1.1 R-CNN和SPPnet
- 1.2 本文貢獻(xiàn)點(diǎn)
- 2. Fast R-CNN的框架和訓(xùn)練過程
- 2.1 RoI pooling層
- 2.2 從預(yù)訓(xùn)練網(wǎng)絡(luò)初始化
- 2.3 針對檢測任務(wù)的微調(diào)
- 2.4 尺度不變性
- 3. Fast R-CNN的檢測
- 3.1 使用截?cái)郤VD來進(jìn)行更快的檢測
- 4. 結(jié)果
- 4.1 實(shí)驗(yàn)配置
- 4.2 VOC2010和2012的結(jié)果
- 4.3 VOC 2007數(shù)據(jù)集上的結(jié)果
- 4.4 訓(xùn)練和測試時(shí)間
- 4.5 那一層用于微調(diào)?
- 5. 設(shè)計(jì)評估
- 5.1 多任務(wù)訓(xùn)練有用嗎?
- 5.2 尺度不變性:暴力或精細(xì)?
- 5.3 需要很多的訓(xùn)練數(shù)據(jù)嗎?
- 5.4 SVM分類器是否優(yōu)于softmax?
- 5.5 更多的候選區(qū)域更好嗎?
- 5.6 MS COCO 的初步結(jié)果
- 6. 總結(jié)
Fast-RCNN論文地址: Fast-RCNN
Fast-RCNN項(xiàng)目地址:https://github.com/rbgirshick/fast-rcnn
摘要
Fast RCNN利用深度卷積網(wǎng)絡(luò)建立了一個(gè)比以往方法都更高效的目標(biāo)檢測的方法,Fast RCNN利用一些創(chuàng)新點(diǎn)使得訓(xùn)練和測試的速度都得到了提升。Fast RCNN訓(xùn)練VGG16比RCNN快9倍,測試上快213倍,并且在PASCAL VOC 2012數(shù)據(jù)集上獲得了最高的mAP。Fast RCNN相比SPPnet在VGG16上的訓(xùn)練快3倍,測試快10倍,且準(zhǔn)確率更高。
1. 引言
深度卷積網(wǎng)絡(luò)[14][16] 已經(jīng)使得圖像分類和目標(biāo)檢測的準(zhǔn)確率有了很大的提升,目標(biāo)檢測相比于圖像分類更加具有挑戰(zhàn)性,需要更復(fù)雜的方法來實(shí)現(xiàn)高精度。所以目前的方法都是多級級聯(lián)的效率較低的復(fù)雜網(wǎng)絡(luò)[9,11,19,25]。
算法的復(fù)雜性源于檢測需要對目標(biāo)進(jìn)行準(zhǔn)確的定位,故有了兩個(gè)挑戰(zhàn)。其一,需要處理大量目標(biāo)候選區(qū)域(proposal)。其二,這些候選區(qū)域僅僅是大體上的定位,需要精細(xì)化以提供更加精細(xì)的定位。解決這些問題可以使得更快,更準(zhǔn)確,更簡單。
本文介紹了目前最優(yōu)的基于ConvNet的目標(biāo)檢測器[9,11],并且提出了一個(gè)單階段的訓(xùn)練方法,同時(shí)學(xué)習(xí)分類目標(biāo)候選框和精細(xì)化空域位置。
所得到的方法用來訓(xùn)練非常深的檢測網(wǎng)絡(luò)(例如VGG16) 比R-CNN快9倍,比SPPnet快3倍。在運(yùn)行時(shí),檢測網(wǎng)絡(luò)在PASCAL VOC 2012數(shù)據(jù)集上實(shí)現(xiàn)最高準(zhǔn)確度,其中mAP為66%(R-CNN為62%),每張圖像處理時(shí)間為0.3秒,不包括候選框的生成(所有的時(shí)間都是使用一個(gè)超頻到875MHz的Nvidia K40 GPU測試的)。
1.1 R-CNN和SPPnet
R-CNN[9]獲得了目前應(yīng)用深度ConvNet來對目標(biāo)框進(jìn)行分類的目標(biāo)檢測的最好結(jié)果。但是RCNN具有一些顯著的缺點(diǎn):
1. 訓(xùn)練過程是多級流水線
R-CNN首先利用log loss作為損失函數(shù)來微調(diào)ConvNet,之后將卷積特征送入SVM進(jìn)行分類器的學(xué)習(xí)。這些SVM就類似于目標(biāo)檢測器,代替了深度網(wǎng)絡(luò)的softmax分類層,訓(xùn)練的第三級是利用回歸的方法來確定b-box。
2. 訓(xùn)練過程占用內(nèi)存和所需時(shí)間都很大
訓(xùn)練SVM和b-box回歸的過程,所有的特征都是從每個(gè)目標(biāo)框中抽取的并寫入磁盤,對于很深的網(wǎng)絡(luò),例如VGG16,該過程在單個(gè)GPU上需要2.5天(VOC07 trainval上的5k個(gè)圖像)。這些特征需要數(shù)百GB的存儲空間。
3. 目標(biāo)檢測過程很慢
測試時(shí),特征從每個(gè)圖像中的每個(gè)候選區(qū)域中抽取,VGG16檢測目標(biāo)每幅圖在GPU上需要花費(fèi)47s。
R-CNN之所以速度較慢是因?yàn)樗獙γ總€(gè)候選框都進(jìn)行前向傳播,沒有共享的過程。SPPnets[11]利用共享計(jì)算的原理被提出來提升R-CNN的速度。SPPnet對整個(gè)輸入圖像計(jì)算卷積特征圖,然后使用該共享特征圖提取每個(gè)候選框的特征向量。通過最大池化將每個(gè)不同大小的候選框特征圖轉(zhuǎn)化為固定大小的輸出。不同大小的輸出通過池化后級聯(lián),和金字塔池化過程一樣。SPPnet在測試時(shí)會加速10到100倍,由于更快的候選框特征提取使得訓(xùn)練時(shí)會加速3倍左右。
SPPnet也有很多缺點(diǎn),和R-CNN一樣,訓(xùn)練過程是多階段流水線工作,包括特征提取,log loss微調(diào)損失函數(shù),訓(xùn)練SVM和b-box的回歸等等,也需要將特征寫入硬盤。與R-CNN不同的是,在[11]中提出的微調(diào)算法不能更新在空間金字塔池化之前的卷積層,這種固定卷積層的方法限制了網(wǎng)絡(luò)的精度。
1.2 本文貢獻(xiàn)點(diǎn)
本文提出了一種新的方法,修正R-CNN和SPPnet的缺點(diǎn),同時(shí)提升了速度和精度,稱為Fast R-CNN(因?yàn)槠溆?xùn)練和測試的速度都很快),其優(yōu)勢如下:
1、比R-CNN和SPPnet都高的mAP
2、訓(xùn)練過程是使用多任務(wù)損失的單階段訓(xùn)練
3、訓(xùn)練可以更新所有網(wǎng)絡(luò)層
4、不需要磁盤空間緩存特征
Fast R-CNN是用Python和C++寫的,網(wǎng)址https://github.com/rbgirshick/fast-rcnn
2. Fast R-CNN的框架和訓(xùn)練過程
圖1是Fast R-CNN的框架結(jié)構(gòu),輸入一整張圖像和一系列目標(biāo)框。首先將一幅圖像進(jìn)行卷積操作和最大池化來獲得卷積特征圖,之后對每個(gè)候選框中的特征圖進(jìn)行RoI pooling來提取固定大小的特征向量,每個(gè)特征向量都輸入全連接層其最終分支成兩個(gè)同級輸出層:一個(gè)產(chǎn)生k個(gè)輸出類別加上一個(gè)背景類別的softmax概率估計(jì),另一個(gè)針對k個(gè)類別中的每個(gè)類別輸出四個(gè)數(shù)字(確定每個(gè)類別的框的位置和大小)
2.1 RoI pooling層
RoI pooling層利用最大池化來將所有的不同大小的輸入轉(zhuǎn)化為相同空域大小H×WH\times WH×W的特征圖(如 7×77\times77×7),其中H和W分別為定義RoI區(qū)域的超參數(shù),本文RoI是卷積特征圖中的矩形窗,每個(gè)RoI都用四維元組來定義(r,c,h,w)(r,c,h,w)(r,c,h,w),其中(r,c)(r,c)(r,c)是左上角位置,(h,w)(h,w)(h,w)高和寬。
RoI最大池化是將h×wh\times wh×w的RoI窗劃分為H×WH\times WH×W的網(wǎng)格子窗,之后保留每個(gè)子窗中的最大值作為該網(wǎng)格的輸出。RoI層只是SPP層的特殊情況,只有一個(gè)金字塔,也就是簡化為了但尺度的池化。
在Fast R-CNN網(wǎng)絡(luò)中,原始圖片經(jīng)過多層卷積與池化后,得到整圖的feature map。而由selective search產(chǎn)生的大量proposal經(jīng)過映射可以得到其在feature map上的映射區(qū)域(ROIs),這些ROIs即作為ROI Pooling層的輸入。
ROI Pooling時(shí),將輸入的h * w大小的feature map分割成H * W大小的子窗口(每個(gè)子窗口的大小約為h/H,w/W,其中H、W為超參數(shù),如設(shè)定為7 x 7),對每個(gè)子窗口進(jìn)行max-pooling操作,得到固定輸出大小的feature map。而后進(jìn)行后續(xù)的全連接層操作。
2.2 從預(yù)訓(xùn)練網(wǎng)絡(luò)初始化
此處用三個(gè)預(yù)訓(xùn)練的ImageNet網(wǎng)絡(luò)進(jìn)行實(shí)驗(yàn),每個(gè)用五層max pooling,五至十三層卷積(4.1節(jié)有網(wǎng)絡(luò)細(xì)節(jié)描述),當(dāng)預(yù)訓(xùn)練網(wǎng)絡(luò)初始化Fast RCNN時(shí),經(jīng)歷三個(gè)變換。
首先,最后的最大池化層被RoI pooling所代替,其將H和W設(shè)置為一個(gè)與網(wǎng)絡(luò)的第一個(gè)全連接層兼容的配置(例如VGG16中,H=W=7)。
其次,網(wǎng)絡(luò)的最后一層全連接層和softmax層(從ImageNet中訓(xùn)練的1000分類的分類器)被替換為前面描述的兩個(gè)同級層(全連接層和k+1類別softmax分類層,以及候選框的回歸)。
最后,網(wǎng)絡(luò)被修改為采用兩種輸入:圖像的列表和這些圖像的RoI列表。
2.3 針對檢測任務(wù)的微調(diào)
用反向傳播來訓(xùn)練網(wǎng)絡(luò)中的所有權(quán)重是Fast R-CNN的重要性能。首先,來說說為什么SPPnet不能更新低于空間金字塔池化層的權(quán)值。
其根本原因是,每個(gè)訓(xùn)練樣本是從不同的圖像中的得到的,從SPP層反向傳播是非常低效率的,這正是訓(xùn)練R-CNN和SPPnet的方法,低效率的部分是因?yàn)槊總€(gè)RoI可能具有非常大的感受野,通常跨越整個(gè)輸入圖像,由于正向傳播必須處理整理感受野,訓(xùn)練輸入很大。
本文提出了一個(gè)更高效的訓(xùn)練方法,引入了特征圖共享機(jī)制。在Fast RCNN的訓(xùn)練過程中,SGD的小批量樣本是分層抽樣的,首先采樣NNN幅圖像,之后從每個(gè)圖像中采樣 R/NR/NR/N 個(gè)RoI。從每個(gè)圖像中采樣的RoI在前向傳播和反向傳播的過程中的計(jì)算和存儲都是共享的,這樣就能夠使得一個(gè)小批量的計(jì)算速度減小為原來的1/N1/N1/N。例如,使用N=2,R=128N=2,R=128N=2,R=128,本文的方法大約比從128個(gè)不同圖像中采樣一個(gè)RoI的方法(R-CNN或SPPnet等)快約64倍。
該方法的一個(gè)令人擔(dān)心的點(diǎn)在于它可能導(dǎo)致訓(xùn)練收斂緩慢,因?yàn)閬碜韵嗤瑘D像的RoI是有相關(guān)性的。但實(shí)際上好像并不存在這個(gè)問題,當(dāng)N=2,R=128N=2,R=128N=2,R=128我們使用比R-CNN更少的SGD迭代次數(shù)獲得了更好的效果。
除了分層采樣,Fast R-CNN使用了一個(gè)精細(xì)的訓(xùn)練過程,在微調(diào)階段聯(lián)合優(yōu)化softmax分類器和候選框的回歸,而不是在三個(gè)獨(dú)立的階段分別訓(xùn)練softmax分類器、SVM和回歸器。
多任務(wù)損失:
Fast R-CNN網(wǎng)絡(luò)有兩個(gè)同級輸出層,第一個(gè)在K+1K+1K+1個(gè)類別上對每個(gè)RoI輸出離散的概率估計(jì),p=(p0,...,pK)p=(p_0,...,p_K)p=(p0?,...,pK?),一般來說,p是從全連接層的K+1K+1K+1中輸出中計(jì)算得到的。第二個(gè)層輸出包圍盒的回歸偏移量,tk=(txk,tyk,twk,thk,)t^k=(t_x^k, t_y^k, t_w^k, t_h^k,)tk=(txk?,tyk?,twk?,thk?,),k是每個(gè)目標(biāo)類別。我們利用[9]中的參數(shù)化tkt^ktk的方法,其中tkt^ktk指定相對于候選框的尺度不變轉(zhuǎn)換和對數(shù)空間高度/寬度偏移。
每個(gè)訓(xùn)練的RoI都用真值GT進(jìn)行標(biāo)記,包括類別u和目標(biāo)框的真值v,我們對每個(gè)標(biāo)記的RoI使用多任務(wù)損失LLL以聯(lián)合訓(xùn)練分類和檢測框回歸:
其中,Lcls(p,u)=?logpuL_{cls}(p,u)=-log p_uLcls?(p,u)=?logpu?,表示真類u的log損失。
第二個(gè)目標(biāo)損失LlocL_{loc}Lloc?定義了類別uuu真實(shí)邊界框的回歸元組值v=(vx,vy,vw,vh)v=(v_x,v_y,v_w,v_h)v=(vx?,vy?,vw?,vh?)和預(yù)測的元組tu=(txu,tyu,twu,thu)t^u=(t_x^u, t_y^u, t_w^u, t_h^u)tu=(txu?,tyu?,twu?,thu?)上的損失。Iverson指示函數(shù)[u≥1][u\ge 1][u≥1]表示當(dāng)u≥1u \ge 1u≥1值為1,否則為0。按照慣例,背景類標(biāo)記為u=0u=0u=0,背景的RoIs沒有檢測框真值的概念,因此LlocL_{loc}Lloc?被忽略,對于b-box回歸,損失如下:
使用L1 loss是因?yàn)槠鋵Ξ惓V禌]有R-CNN和SPPnet中使用的L2 loss那么敏感。當(dāng)回歸目標(biāo)無界時(shí),將L2作為損失函數(shù)的的訓(xùn)練可能需要仔細(xì)的調(diào)整學(xué)習(xí)速率,以防止梯度爆炸。公式3)避免了該狀況。
公式1)中的超參數(shù)控制著兩個(gè)損失之間的平衡,我們將GT回歸目標(biāo)viv_ivi?進(jìn)行零均值和標(biāo)準(zhǔn)方差歸一化,所有的實(shí)驗(yàn)中都使用λ=1\lambda =1λ=1。
注意到,[6]中使用相關(guān)損失來訓(xùn)練一個(gè)與類別無關(guān)的目標(biāo)候選網(wǎng)絡(luò),提出兩個(gè)網(wǎng)絡(luò)的系統(tǒng)分別進(jìn)行定位和分類,OverFeat [19], R-CNN
[9], and SPPnet [11] 也訓(xùn)練分類器和檢測框定位器,但這些方法使用逐級訓(xùn)練,對于Fast RCNN不是最好的選擇。
小批量采樣:
在微調(diào)的過程中,每個(gè)SGD的小批量是由N=2N=2N=2個(gè)圖像構(gòu)成,是通過均勻的隨機(jī)選擇而來的。我們使用小批量大小為R=128R=128R=128,對每個(gè)圖像采樣64個(gè)RoIs,如[9]中,我們從候選框中選取25%的RoI,這些候選框與檢測框真值的IoU至少為0.5,這些RoI只包括前景對象標(biāo)記類別,也就是u≥1u\ge1u≥1。其余的RoI從目標(biāo)候選框中采樣,選擇保留在區(qū)間[0.1,0.5)上最大的IoU。低于0.1的IoU的樣本被當(dāng)做難確定的負(fù)樣本來重新訓(xùn)練(hard example mining,hard negative就是每次把那些頑固的棘手的錯(cuò)誤,再送回去繼續(xù)練,練到你的成績不再提升為止,這一個(gè)過程就叫做’hard negative mining’.)[8]。訓(xùn)練過程中,圖像以0.5的概率水平翻轉(zhuǎn),不使用其他數(shù)據(jù)增強(qiáng)方式。
通過RoI pooling層的反向傳播:
為了簡單起見,假設(shè)每個(gè)小批量只有一個(gè)圖像,之后可以擴(kuò)展到N>1N>1N>1的情況。
令xi∈Rx_i\in Rxi?∈R為第i個(gè)激活輸入,yrjy_{rj}yrj?為第r個(gè)RoI的第j層的輸出,RoI pooling層的計(jì)算為yrj=xi?(r,j)y_{rj}=x_{i*(r,j)}yrj?=xi?(r,j)?,其中i?(r,j)=argmaxi′∈R(r,j)xi′i*(r,j)=argmax_{i' \in R_{(r,j)}}x_{i'}i?(r,j)=argmaxi′∈R(r,j)??xi′?。R(r,j)R(r,j)R(r,j)是輸出單元yrjy_{rj}yrj?最大池化的子窗的輸入索引列表,單一的xix_ixi?可以被處理為不同的輸出yrjy_{rj}yrj?。
RoI pooling層的反向傳播函數(shù)是利用argmax switches的方法來計(jì)算關(guān)于每個(gè)輸入變量xix_ixi?損失函數(shù)的偏導(dǎo)數(shù):
對每個(gè)小批量RoI(r)和每個(gè)池化輸出單元yrjy_{rj}yrj?,如果通過最大池化來對yrjy_{rj}yrj?選擇iii,那么偏導(dǎo)?L/?yrj\partial L/ \partial y_{rj}?L/?yrj?是會累積的,反向傳播過程中,偏導(dǎo)?L/?yrj\partial L/ \partial y_{rj}?L/?yrj?已經(jīng)從RoI池化層頂部的層的反向函數(shù)中計(jì)算得來了。
SGD超參數(shù):
利用softmax分類和b-box回歸的全連接層的初始化是0均值的高斯分布,標(biāo)準(zhǔn)差為0.01或0.001。偏置初始化為0,所有層中,每層權(quán)值的學(xué)習(xí)率為1,偏置的學(xué)習(xí)率為2,全局學(xué)習(xí)率為0.001。當(dāng)對VOC2007或VOC2012訓(xùn)練時(shí),我們運(yùn)行SGD進(jìn)行30k次小批量迭代,然后將學(xué)習(xí)率降低到0.0001,并且再進(jìn)行10k次迭代。當(dāng)使用更大的數(shù)據(jù)集時(shí),運(yùn)行SGD更多次,使用0.9的動量和0.0005的參數(shù)衰減(權(quán)值和偏置)。
2.4 尺度不變性
我們將利用兩種方法來實(shí)現(xiàn)目標(biāo)檢測中的尺度不變性:1)通過“brute force”學(xué)習(xí),2)通過圖像金字塔。
“brute force”方法中,訓(xùn)練和測試的每幅圖像都被處理為預(yù)定義像素大小的圖像,網(wǎng)絡(luò)必須直接從訓(xùn)練數(shù)據(jù)學(xué)習(xí)尺度不變性目標(biāo)檢測。
相反的在多尺度方法中,通過圖像金字塔向網(wǎng)絡(luò)提供尺度不變性,測試時(shí),圖像金字塔被用來對每個(gè)目標(biāo)框進(jìn)行尺度規(guī)范化,多尺度的訓(xùn)練中,我們隨機(jī)采樣金字塔尺度,作為數(shù)據(jù)增強(qiáng),由于GPU內(nèi)存的限制,我們只對較小的網(wǎng)絡(luò)進(jìn)行多尺度訓(xùn)練。
3. Fast R-CNN的檢測
一旦Fast R-CNN網(wǎng)絡(luò)微調(diào)完成,檢測的次數(shù)遠(yuǎn)遠(yuǎn)超過運(yùn)行前向傳播次數(shù)(假設(shè)目標(biāo)框被提取計(jì)算好了)。網(wǎng)絡(luò)將圖像(或圖像金字塔,編碼為圖像列表)和待計(jì)算概率的RRR個(gè)候選框列表作為輸入。測試時(shí),RRR通常在2000左右,盡管我們考慮將其變大(45k左右)。當(dāng)使用一個(gè)圖像金字塔時(shí),每個(gè)RoI都被縮放一定的尺度,使得縮放后的RoI接近2242224^22242大小。
對每個(gè)測試的RoI rrr,前向傳播輸出類別的后驗(yàn)概率分布ppp和一系列預(yù)測的b-box相對于rrr的偏移(每個(gè)類別獲得其精細(xì)的邊界框預(yù)測)。并且利用概率估計(jì)Pr(class=k∣r)=pkPr(class=k|r)=p_kPr(class=k∣r)=pk?來對第k類的r計(jì)算檢測置信度,之后對每個(gè)類獨(dú)立使用非極大值抑制來確定保留的框。
3.1 使用截?cái)郤VD來進(jìn)行更快的檢測
對于整幅圖像的分類任務(wù),全連接層花費(fèi)的時(shí)間比卷積層花費(fèi)的時(shí)間要少。相反,檢測任務(wù)中要處理的RoIs的數(shù)量很多,全連接層花費(fèi)的時(shí)間基本上是卷積過程的兩倍(Fig.2)。可以將大型的全連接層和截?cái)郤VD結(jié)合起來來加速。
一層大小為u×vu\times vu×v的權(quán)重參數(shù)WWW可以進(jìn)行SVD因式分解:
W≈UΣtVTW\approx U\Sigma_tV^TW≈UΣt?VT
在這種分解中,UUU是一個(gè)u×tu\times tu×t的矩陣,包括WWW的前ttt個(gè)左奇異向量,Σt\Sigma_tΣt?是t×tt\times tt×t對角矩陣,其包含WWW的前ttt個(gè)奇異值,并且VVV是v×tv\times tv×t的矩陣,包括WWW的前ttt個(gè)右奇異向量。截?cái)郤VD將參數(shù)數(shù)量從 uvuvuv 減少到 t×(u+v)t\times(u+v)t×(u+v) 個(gè),如果ttt遠(yuǎn)小于min(u,v)min(u,v)min(u,v),則SVD可能起到重要的作用。 為了壓縮網(wǎng)絡(luò),對應(yīng)于WWW的單個(gè)全連接層由兩個(gè)全連接層替代,且在它們之間沒有非線性。這些層中的第一層使用權(quán)重矩陣ΣtVT\Sigma_tV^TΣt?VT(沒有偏置),并且第二層使用UUU(其中原始偏差與相關(guān)聯(lián))。當(dāng)RoI的數(shù)量大時(shí),這種簡單的壓縮方法給出良好的加速。
4. 結(jié)果
本文有三個(gè)主要的貢獻(xiàn)點(diǎn):
1)獲得了在VOC 2007,2010,2012 上的最好mAP
2)比R-CNN和SPPnet獲得了更快的訓(xùn)練和測試時(shí)間
3)VGG16網(wǎng)絡(luò)的卷積層的微調(diào)提升了mAP
4.1 實(shí)驗(yàn)配置
本文網(wǎng)絡(luò)使用三個(gè)可線上獲取的預(yù)訓(xùn)練ImageNet模型,第一個(gè)是來自R-CNN的CaffeNet(實(shí)質(zhì)上是AlexNet)。我們將該Caffe模型稱為S,即小模型,第二個(gè)網(wǎng)絡(luò)是來自[3]的VGG-CNN-M-1024,其與S具有相同的深度,但是更寬,我們稱為M,即中等模型。最后一個(gè)是來自[20]的非常深的VGG16模型,由于該模型最大,稱為L。本節(jié)所有的實(shí)驗(yàn)都使用單尺度訓(xùn)練和測試(s=600)。
4.2 VOC2010和2012的結(jié)果
表2. VOC 2010測試檢測平均精度(%)。 BabyLearning使用基于16的網(wǎng)絡(luò)。 所有其他方法使用VGG16。訓(xùn)練集:12:VOC12 trainval,Prop.:專有數(shù)據(jù)集,12+seg:12具有分段注釋,07++12:VOC07 trainval,VOC07測試和VOC12 trainval的聯(lián)合。
表3. VOC 2012測試檢測平均精度(%)。 BabyLearning和NUS_NIN_c2000使用基于16的網(wǎng)絡(luò)。 所有其他方法使用VGG16。訓(xùn)練設(shè)置:見表2,Unk.:未知。
如上表(表2,表3)所示,在這些數(shù)據(jù)集上,我們比較Fast R-CNN(簡稱FRCN)和公共排行榜中comp4(外部數(shù)據(jù))上的主流方法(http://host.robots.ox.ac.uk:8080/leaderboard )。對于NUS_NIN_c2000和BabyLearning方法,目前沒有其架構(gòu)的確切信息,它們是Network-in-Network的變體16。所有其他方法從相同的預(yù)訓(xùn)練VGG16網(wǎng)絡(luò)初始化。
Fast R-CNN在VOC12上獲得最高結(jié)果,mAP為65.7%(加上額外數(shù)據(jù)為68.4%)。它也比其他方法快兩個(gè)數(shù)量級,這些方法都基于比較“慢”的R-CNN網(wǎng)絡(luò)。在VOC10上,SegDeepM 6獲得了比Fast R-CNN更高的mAP(67.2%對比66.1%)。SegDeepM使用VOC12 trainval訓(xùn)練集訓(xùn)練并添加了分割的標(biāo)注,它被設(shè)計(jì)為通過使用馬爾可夫隨機(jī)場推理R-CNN檢測和來自17的語義分割方法的分割來提高R-CNN精度。Fast R-CNN可以替換SegDeepM中使用的R-CNN,這可以導(dǎo)致更好的結(jié)果。當(dāng)使用放大的07++12訓(xùn)練集(見表2標(biāo)題)時(shí),Fast R-CNN的mAP增加到68.8%,超過SegDeepM。
4.3 VOC 2007數(shù)據(jù)集上的結(jié)果
在VOC07數(shù)據(jù)集上,我們比較Fast R-CNN與R-CNN和SPPnet的mAP。 所有方法從相同的預(yù)訓(xùn)練VGG16網(wǎng)絡(luò)開始,并使用邊界框回歸。 VGG16 SPPnet結(jié)果由5的作者提供。SPPnet在訓(xùn)練和測試期間使用五個(gè)尺度。Fast R-CNN對SPPnet的改進(jìn)說明,即使Fast R-CNN使用單個(gè)尺度訓(xùn)練和測試,卷積層微調(diào)在mAP中提供了大的改進(jìn)(從63.1%到66.9%)。R-CNN的mAP為66.0%。 作為次要點(diǎn),SPPnet在PASCAL中沒有使用被標(biāo)記為“困難”的樣本進(jìn)行訓(xùn)練。 除去這些樣本,Fast R-CNN 的mAP為68.1%。 所有其他實(shí)驗(yàn)都使用被標(biāo)記為“困難”的樣本。
4.4 訓(xùn)練和測試時(shí)間
快速的訓(xùn)練和測試是我們的第二個(gè)主要成果。表4比較了Fast RCNN,R-CNN和SPPnet之間的訓(xùn)練時(shí)間(小時(shí)),測試速率(每秒圖像數(shù))和VOC07上的mAP。對于VGG16,沒有截?cái)郤VD的Fast R-CNN處理圖像比R-CNN快146倍,有截?cái)郤VD的R-CNN快213倍。訓(xùn)練時(shí)間減少9倍,從84小時(shí)減少到9.5小時(shí)。與SPPnet相比,沒有截?cái)郤VD的Fast RCNN訓(xùn)練VGG16網(wǎng)絡(luò)比SPPnet快2.7倍(9.5小時(shí)對25.5小時(shí)),測試時(shí)間快7倍,有截?cái)郤VD的Fast RCNN比的SPPnet快10倍。 Fast R-CNN還不需要數(shù)百GB的磁盤存儲,因?yàn)樗痪彺嫣卣鳌?/p>
截?cái)郤VD:
截?cái)嗟腟VD可以將檢測時(shí)間減少30%以上,同時(shí)在mAP中只有很小(0.3個(gè)百分點(diǎn))的下降,并且無需在模型壓縮后執(zhí)行額外的微調(diào)。
圖2. 截?cái)郤VD之前和之后VGG16的時(shí)間分布。在SVD之前,完全連接的層fc6和fc7需要45%的時(shí)間。
圖2示出了如何使用來自VGG16的fc6層中的矩陣的頂部1024個(gè)奇異值和來自fc7層的矩陣的頂部256個(gè)奇異值減少運(yùn)行時(shí)間,而在mAP中幾乎沒有損失。如果在壓縮之后再次微調(diào),則可以在mAP中具有更小的下降的情況下進(jìn)一步加速。
4.5 那一層用于微調(diào)?
對于不太深的網(wǎng)絡(luò)SPPnet,僅僅在全連接層應(yīng)用,用于獲取更好的效果。假定該方法不適用于深度網(wǎng)絡(luò)結(jié)構(gòu),為了驗(yàn)證微調(diào)卷積層對VGG16的重要性,我們使用Fast R-CNN微調(diào),凍結(jié)十三個(gè)卷積層,以便只有全連接層學(xué)習(xí),這種消融模擬單尺度SPPnet訓(xùn)練,將mAP從66.9%降低到61.4%(Table 5),這個(gè)實(shí)驗(yàn)驗(yàn)證了我們的假設(shè):通過RoI池化層的訓(xùn)練對于非常深的網(wǎng)絡(luò)是很重要的。
這是否意味著所有的卷積層都需要微調(diào)?答案是否定的。在小點(diǎn)的網(wǎng)絡(luò)中(S和M)我們發(fā)現(xiàn)conv1(第一個(gè)卷積層)是通用且獨(dú)立完成任務(wù)的。允許conv1學(xué)習(xí)或者不學(xué)習(xí)對mAP并沒有很大的影響意義。對于VGG16,我們發(fā)現(xiàn)只需要更新conv3_1以及在其之上的層(13個(gè)卷積層之中的9個(gè))。這種觀察是實(shí)用的:1)從conv2_1的訓(xùn)練更新慢1.3倍(12.5小時(shí)對比9.5小時(shí))和(2)從conv1_1更新GPU內(nèi)存不夠用。當(dāng)從conv2_1學(xué)習(xí)時(shí)mAP僅為增加0.3個(gè)點(diǎn)(表5,最后一列)。 所有Fast R-CNN在本文中結(jié)果都使用VGG16微調(diào)層conv3_1及以上的層,所有實(shí)驗(yàn)用模型S和M微調(diào)層conv2及以上的層。
5. 設(shè)計(jì)評估
我們通過實(shí)驗(yàn)來了解FastR-CNN和R-CNN與SPPnet的區(qū)別,以及評估設(shè)計(jì)決策。按照最佳實(shí)踐,我們在PASCAL VOC07數(shù)據(jù)集上進(jìn)行實(shí)驗(yàn)。
5.1 多任務(wù)訓(xùn)練有用嗎?
多任務(wù)訓(xùn)練是很方便的,因?yàn)樗苊饬斯芾眄樞蛴?xùn)練任務(wù)的流水線。但它也有可能改善結(jié)果,因?yàn)槿蝿?wù)通過共享的表示(ConvNet)18相互影響。多任務(wù)訓(xùn)練能提高Fast R-CNN中的目標(biāo)檢測精度嗎?
為了測試這個(gè)問題,我們訓(xùn)練僅使用公式中的分類損失(即設(shè)置)的基準(zhǔn)網(wǎng)絡(luò)。這些基線是表6中每組的第一列。請注意,這些模型沒有檢測框回歸。接下來(每組的第二列),是我們采用多任務(wù)損失(公式,)訓(xùn)練的網(wǎng)絡(luò),但是我們在測試時(shí)禁用檢測框回歸。這隔離了網(wǎng)絡(luò)的分類準(zhǔn)確性,并允許與基準(zhǔn)網(wǎng)絡(luò)的apple to apple的比較。
在所有三個(gè)網(wǎng)絡(luò)中,我們觀察到多任務(wù)訓(xùn)練相對于單獨(dú)的分類訓(xùn)練提高了純分類精度。改進(jìn)范圍從+0.8到+1.1 個(gè)mAP點(diǎn),顯示了多任務(wù)學(xué)習(xí)的一致的積極效果。
最后,我們采用基線模型(僅使用分類損失進(jìn)行訓(xùn)練),加上檢測回歸層,并使用訓(xùn)練它們,同時(shí)保持所有其他網(wǎng)絡(luò)參數(shù)凍結(jié)。每組中的第三列顯示了這種逐級訓(xùn)練方案的結(jié)果:mAP相對于第一列改進(jìn),但逐級訓(xùn)練表現(xiàn)不如多任務(wù)訓(xùn)練(每組第四列)。
表6. 多任務(wù)訓(xùn)練(每組第四列)改進(jìn)了分段訓(xùn)練(每組第三列)的mAP。
5.2 尺度不變性:暴力或精細(xì)?
我們比較兩個(gè)策略實(shí)現(xiàn)目標(biāo)檢測的尺度不變性:暴力學(xué)習(xí)(單一尺度)和圖像金字塔(多尺度)。同時(shí),我們定義一副圖像的尺度s為其最短邊的長度。
所有的單一尺度使用s=600s=600s=600像素,一些圖像的 sss 可能比600小,因?yàn)槲覀儽3挚v橫比縮放圖像,并限制其最長邊為1000像素。選擇這些值會使得VGG16在微調(diào)期間不會出現(xiàn)內(nèi)存不足的現(xiàn)象,較小的模型占用內(nèi)存較少,并且可以從較大的 sss 中受益,然而,對每個(gè)模型優(yōu)化 sss 并非我們的主要目的。PASCAL 圖像的像素是384*473,因此單尺度設(shè)置通常以1.6倍上采樣圖像,故RoI層的平均有效步長約為10像素。
在多尺度設(shè)置中,我們使用指定相同的五個(gè)尺度(s∈480;576;688;864;1200s\in {480; 576; 688; 864; 1200}s∈480;576;688;864;1200)來方便與SPPnet進(jìn)行比較,但是我們以2000像素為上限,避免出現(xiàn)內(nèi)存不足。
表7展示了使用單一尺度或五個(gè)尺度的模型 S 和 M 的結(jié)果,也許在[11]中最讓人驚訝的結(jié)果是單尺度檢測竟然幾乎與多尺度檢測的效果一樣好,我們的發(fā)現(xiàn)能證明[11]中的結(jié)果:深度卷積網(wǎng)絡(luò)擅長學(xué)習(xí)尺度不變性。多尺度的方法消耗大量的時(shí)間但僅僅帶來了很少的mAP提升(表7)。在VGG16(模型L)的情況下,我們僅限于使用單一尺度來實(shí)施細(xì)節(jié),達(dá)到了66.9%的mAP,比R-CNN的66.0%略高,盡管R-CNN在每個(gè)候選區(qū)域被縮放為規(guī)范大小,使用了“無限尺度”。
因?yàn)閱我怀叨忍幚硖峁┝怂俣群途戎g的最佳折衷,特別是對于非常深的模型,本小節(jié)以外的所有實(shí)驗(yàn)都使用單尺度訓(xùn)練和測試,且尺度 s=600s=600s=600。
5.3 需要很多的訓(xùn)練數(shù)據(jù)嗎?
一個(gè)好的目標(biāo)檢測器的效果是隨著訓(xùn)練數(shù)據(jù)的增加而提升的,[24]中發(fā)現(xiàn)DPM[8]的mAP在只有幾百到幾千個(gè)訓(xùn)練樣本的時(shí)候就飽和了,在這里我們增加了VOC2007 trainval訓(xùn)練集和VOC2012 trainval訓(xùn)練集,大約增加到三倍達(dá)到16.5k來評估Fast R-CNN的效果。擴(kuò)大訓(xùn)練集在VOC07上的mAP達(dá)到了70%,且我們使用60k次迭代而非40k次。
我們對VOC10和2012進(jìn)行類似的實(shí)驗(yàn),我們用VOC07 trainval,test和VOC12 trainval構(gòu)造了21.5k圖像的數(shù)據(jù)集。當(dāng)訓(xùn)練這個(gè)數(shù)據(jù)集時(shí),我們使用100k次SGD迭代和每40k次迭代(而不是每30k次)降低學(xué)習(xí)率10倍。對于VOC10和2012,mAP分別從66.1%提高到68.8%和從65.7%提高到68.4%。
5.4 SVM分類器是否優(yōu)于softmax?
Fast R-CNN在微調(diào)期間使用softmax分類器學(xué)習(xí),而非R-CNN中的SVM,為了闡明做出該選擇的原因,我們在Fast R-CNN中實(shí)施了具有難負(fù)采樣重新練的SVM,且參數(shù)與R-CNN中相同。
圖8中展示了在這三個(gè)網(wǎng)絡(luò)中,softmax的效果比SVM略好,對mAP的提升約為0.1~0.8個(gè)點(diǎn)之間,這種影響很小,但是它表明了與先前的多級訓(xùn)練方法相比,“一次性”的微調(diào)是足夠的,且softmax不會像SVM一樣在分類RoI時(shí)引入競爭。
5.5 更多的候選區(qū)域更好嗎?
(廣義上)存在兩種類型的檢測器:使用候選區(qū)域的稀疏集合(如選擇性搜索)和使用密集集合(如DPM)。分類稀疏候選是級聯(lián)的一種類型,其中候選機(jī)制首先拒絕了很大數(shù)量的候選框,留下一小部分來進(jìn)行評估。當(dāng)應(yīng)用DPM檢測時(shí),這種級聯(lián)提高了檢測精度,且我們發(fā)現(xiàn)級聯(lián)候選分類器也提高了Fast R-CNN的精度。
利用選擇性搜索模式,我們對每個(gè)圖像都掃描1k到10k個(gè)候選框,每次重新訓(xùn)練和重新測試M模型,加入候選框純粹扮演的計(jì)算的角色,則增加每個(gè)圖像的候選框數(shù)量不會對mAP造成負(fù)面影響。
我們發(fā)現(xiàn),mAP先上升后隨著候選框數(shù)量的增加而有些下降(藍(lán)色實(shí)線),該實(shí)驗(yàn)表明,用更多的候選區(qū)域可能并沒有mAP提升的作用,甚至?xí)胸?fù)面影響。
如果不實(shí)際運(yùn)行該實(shí)驗(yàn),那么很難預(yù)測出這樣的結(jié)果,用于測量候選區(qū)域質(zhì)量的最先進(jìn)的技術(shù)是平均召回率(AR)。當(dāng)對每個(gè)圖像都實(shí)驗(yàn)相同數(shù)量的候選區(qū)域時(shí),在R-CNN中使用多種不同的候選區(qū)域方法的AR與mAP有很大的相關(guān)性。圖3展示了當(dāng)每個(gè)圖像的候選框數(shù)量不是固定的時(shí)候,AR(紅色實(shí)線)與mAP并沒有很好的相關(guān)性。AR的使用必須很小心,很多的候選區(qū)域獲得的高的AR并不意味著mAP會增加。幸運(yùn)的是,訓(xùn)練和測試模型M僅僅花費(fèi)了不到2.5個(gè)小時(shí),故Fast-RCNN能夠高效的,直接評估目標(biāo)檢測的mAP,這就優(yōu)于間接度量了。
我們同樣研究了使用密集生成框(縮放、位置、寬高比等)的Fast R-CNN,大約每個(gè)圖像中45k個(gè)框,這些密集的框集合足夠豐富,當(dāng)每個(gè)候選框使用與其最近的框來代替它后,mAP只降低1個(gè)百分點(diǎn)(圖3中藍(lán)色三角指示的點(diǎn),約為57.7%)。
使用密集框的統(tǒng)計(jì)結(jié)果與選擇性搜索的框有很大的不同,從2k個(gè)選擇性搜索框開始,我們隨機(jī)采樣$1000 × {2; 4; 6; 8; 10; 32; 45} $個(gè)密集框來測試mAP,對于每個(gè)實(shí)驗(yàn),我們重新訓(xùn)練和重新測試模型M,加上這些密集框之后,mAP比添加更多選擇性搜索框時(shí)下降的更厲害,甚至到了53%。
同時(shí)我們還僅僅利用密集框(每幅圖約45k個(gè)框)訓(xùn)練并測試了Fast R-CNN,此時(shí)的mAP是52.9%(藍(lán)色的菱形)。最后,我們檢查是否需要使用難分負(fù)樣本來重新練SVM來處理密集礦的分布,SVM更糟:49.3%。
5.6 MS COCO 的初步結(jié)果
我們對MS COCO (使用VGG16)應(yīng)用于MS COCO數(shù)據(jù)集以建立初步基線,我們對80k大小的訓(xùn)練集進(jìn)行240k次的迭代,并使用評估服務(wù)器對“test-dev”集進(jìn)行評估,PASCAL VOC mAP為35.9%,新的COCO標(biāo)準(zhǔn)下的AP為19.7%。
6. 總結(jié)
本文提出了Fast R-CNN,一種比R-CNN和SPPnet都簡潔高效的網(wǎng)絡(luò)結(jié)構(gòu)。除了目前的最好的檢測結(jié)果以外,我們還提供了新的見解和詳細(xì)實(shí)驗(yàn)過程。稀疏的目標(biāo)候選框似乎提高了檢測的效果,這個(gè)觀點(diǎn)在過去花費(fèi)了很長的時(shí)間來探索,但是Fast R-CNN用實(shí)驗(yàn)證明了這一點(diǎn)。當(dāng)然,肯定存在一些我們沒有發(fā)現(xiàn)的方法能夠使得密集框的表現(xiàn)和稀疏框的表現(xiàn)一樣優(yōu)秀,如果后面發(fā)現(xiàn)了這樣的技術(shù),那么可以幫助目標(biāo)檢測向前有很大的發(fā)展。
總結(jié)
以上是生活随笔為你收集整理的目标检测系列(四)——Fast R-CNN译文的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 中国科大首次在固态体系实现保真度 99.
- 下一篇: 小米集团全球副总裁Manu Kumar