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