Fast RCNN論文學習


Fast RCNN建立在以前使用深度卷積網絡有效分類目標proposals的工作的基礎上。使用了幾個創新點來改善訓練和測試的速度,同時還能增加檢測的精確度。Fast RCNN訓練VGG16網絡的速度是RCNN速度的9倍,測試時的速度是其的213倍。與SPPnet對比,Fast RCNN訓練VGG16網絡的速度是其速度的3倍,測試時的速度是其的10倍,而且還更加准確了。Fast RCNN使用Python和C++(使用caffe)實現的,並且能夠再開源MIT License 中獲得代碼,網址為:https: //github.com/rbgirshick/fast-rcnn

 

1. Introduction

最近,深度卷積網絡在圖像分類和目標檢測精確度上得到了顯著的改進。對比與圖像分類,目標檢測是一個更具挑戰性的任務,需要更復雜的方法去解決。由於其的復雜性,目前的方法在多階段管道上訓練模型,但是很慢,也很不優雅。

復雜性的增長是因為檢測需要准確的目標位置,這就導致了面臨着兩個主要的挑戰:

  • 首先,多數的候選目標位置(在論文中稱為“proposals”)必須被處理
  • 其次,這些候選集只提供了粗糙的位置,需要被提取去獲得精確的位置

這些問題的解決辦法經常會犧牲速度、精確度和簡單性

 

在這篇論文中,我們簡化了最新的基於神經網絡的目標檢測器的訓練過程,我們提出了一個單級的訓練算法,共同學習去對目標proposal分類和提取它們的空間位置

這個解決方法可以去訓練一個深度檢測網絡(VGG16),將比RCNN方法快9倍,比SPPnet方法快3倍。在運行時,檢測網絡在0.3秒中處理圖像(包括目標位置proposal的時間),同時得到在PASCAL VOC 2012中最高的精確度,mAP為66%(RCNN的mAP為62%)

 

1.1. R-CNN and SPPnet

R-CNN(Region-based Convolutional Network)方法通過使用深度卷積網絡去對目標位置proposals分類而獲得了優秀的目標檢測精確度,但是其也有着很明顯的缺點:

  • 訓練是一個多階段的管道。R-CNN一開始在目標proposals上使用對數損失函數去微調一個卷積網絡。然后是SVM去適應卷積網絡特征。這些SVMs將作為目標檢測器,替代通過微調學習得到的softmax分類器。在第三個訓練階段,bounding-box回歸器被學習,如下圖所示:

  • 訓練在空間和時間上的花費昂貴。對於SVM和bounding-box回歸器的訓練,將從每張圖片的每個目標proposal中抽取出來特征,並將其寫入硬盤中。對於非常深的網絡,如VGG16,對於VOC07訓練驗證數據集中5k大小的圖像,這個過程每天將會占用2.5GPU。因此這些特征需要幾百千兆字節的存儲空間
  • 目標檢測很慢。在測試中,特征在每個測試圖像中從其每個目標proposal中抽取出來。使用VGG16檢測,每張圖片將會花費47s(在一個GPU上)

R-CNN很慢時因為其為每個目標proposal實現了一個卷積網絡的前向傳播,沒有共享計算過程(即每個目標proposal都要輸入卷積網絡訓練一遍)。SPPnets(Spatial pyramid pooling networks)被提出去加速R-CNN,通過共享計算過程。即該SPPnet方法使用整個輸入圖像去計算一個卷積特征映射,然后使用一個從共享的特征映射中提取出來的特征向量去對每一個目標proposal分類。對於每個proposal,通過最大池化該proposal中特征映射部分成固定大小的輸出(如6*6)去抽取特征。多種輸出大小被池化得到,然后串聯起來,如下圖所示:

在測試中,SPPnet將R-CNN加速了100倍。因為更快的proposal特征抽取,訓練時間減少了三倍

 但是SPPnet也有着很明顯的缺陷。像R-CNN,其訓練也是一個多階段的管道,包含了抽取特征、使用對數損失函數微調網絡、訓練SVMs以及最后適應bounding-box回歸器。特征也會被寫入硬盤。但是不像R-CNN的地方是,提出的微調算式不能更新在空間金字塔池化層之前的卷積層。因此,該限制(即卷積層是固定的)顯示了該深度卷積網絡的精確度

 

1.2. Contributions

 我們提出了一個新的訓練算法去解決R-CNN和SPPnet中的問題,同時提高它們的速度和精確度。我們將該方法稱為Fast R-CNN,因為訓練和測試相對較快。該Fast R-CNN有着下面的幾個優點:

  • 比R-CNN和SPPnet有着更高的檢測質量(mAP)
  • 在單階段中訓練,使用了多任務損失函數
  • 訓練可以更新網絡的所有層
  • 特征存儲不需要硬盤存儲空間

Fast R-CNN使用Python和C++(caffe)進行編寫,開源代碼可見https://github.com/rbgirshick/ fast-rcnn.

 

2. Fast R-CNN architecture and training

圖1闡述了Fast R-CNN的結構:

該網絡使用整個圖片和一組目標proposals作為輸入。該網絡一開始使用幾個卷積層和最大池化層去處理整個圖片,然后生成一個卷積特征映射。然后對於每個目標proposal,一個region of interest(RoI)池化層將會從得到的特征映射中抽取固定長度的特征向量。每個特征向量(從每個目標proposal中得到的)被輸入一個全連接層(fc)層序列,最后分支成兩個同級輸出層:

  • 一個是對k個目標類加上一個背景類生成softmax概率估計(用於分類)
  • 另一個是對於k個目標類的4個位置值輸出(用於回歸,得到目標位置)

 

2.1. The RoI pooling layer

RoI池化層使用最大池化去將任意有效的region of  interest中的特征轉換成一個有着一個有着固定空間范圍H*W(如7*7)的特征映射,這里H和W都是層的超參數,獨立於任何特定的RoI。在該論文中,任何RoI都是一個輸入卷積特征映射的矩形窗口。每個RoI被元組定義(r,c,h,w),指定它左上角的點(r,c)以及其高和寬(h,w)

RoI池化層將RoI窗口分割成有着大小為h/H * w/W 的H*W個子窗口網格,然后最大池化每個子窗口中的值,然后得到相應的輸出網格單元。池化被獨立應用到每個特征映射通道中,就像是標准最大池化一樣。RoI其實就是使用在SPPnet中的空間金字塔池化層的特殊例子,不同在於這里只有一個金字塔層(如7*7)。

2.2. Initializing from pre-trained networks

我們使用三個預訓練ImageNet網絡進行訓練,每個網絡在第五個到十三個卷基層中有着五個最大池化層(4.1會講到網絡的細節)。當使用一個一個預訓練網絡來初始化一個Fast R-CNN網絡時,它將會經歷三個轉變:

  • 首先,最后一個最大池化層將會被RoI池化層替換,配置使用H*W設置來兼容網絡的第一個全連接層(如對於VGG16網絡設置為7*7)
  • 其次,網絡的最后一個全連接層和softmax (為了ImageNet分類的1000個類訓練的) 將被上面提到的兩個同級層替換(即一個全連接層接着一個有着k+1個類別的softmax 和 一個全連接層接着一個指定類別的bounding-box回歸器)
  • 最后,網絡被修改為有兩個輸入:一個是圖像列表和一個這些圖像對應的RoI列表

 

2.3. Fine-tuning for detection

使用后向傳播訓練所有的網絡權重是Fast R-CNN的一個重要的能力。首先,它闡明(elucidate)了為什么SPPnet不能夠更新空間金字塔池化層前的卷積層

主要原因是通過SPPnet的后向傳播在訓練來自不同圖片的樣本(如RoI)時是十分低效的,這就是R-CNN和SPPnet怎么被訓練的。其低效源於(stem from)每一個RoI可能有着很大的接受域,經常跨越整個輸入圖像。因為前向傳播必須處理整個接受域,這樣將會導致訓練輸入很大(經常是整個圖像)

我們提出了一個更加高效的訓練方法,即在訓練時利用特征共享。在Fast R-CNN訓練中,隨機梯度下降(SGD的mini-batches按層次被取樣,首先通過取樣N個圖像,然后從每個圖像中取樣R/N 個RoIs。重要的是來自同一個圖像的RoIs在前向和后向傳播中共享計算和內存。設置N為一個比較小的值來減少mini-batches的計算。比如,使用N=2,R=128,該推薦訓練方案將直接比從128個不同圖片中各取樣一個RoI的方法(即R-CNN和SPPnet中使用的方法)快64倍。這樣都是得到了128個RoI。

該策略需要注意的一點是它可能會導致比較慢的訓練收斂,因為來自相同圖片的RoIs是相關的。但是該點並沒有成為一個實際問題,在我們設置為N=2,R=128時,使用比R-CNN更少的SGD迭代得到了一個很好的結果

除了上面說的層次取樣,Fast R-CNN還使用一個帶有可以共同優化softmax分類器和bounding-box回歸器的一個微調階段的簡化訓練過程(即同時進行),而不是在三個分開的階段訓練一個softmax分類器、SVMs和回歸器。該過程的內容(損失函數、mini-batch采樣策略、通過RoI池化層的后向傳播以及隨機梯度下降超參數)都會在下面提到

 

首先是多任務損失函數(Multi-task loss)。Fast R-CNN有着兩個同級的輸出層。第一個輸出是一個離散的(discrete)概率分布(對於每個RoI得到一個概率結果),即p = (p0, ..., pK),有着K+1個類。像往常一樣,p是一個全連接層的K+1個輸出被softmax計算后的結果。第二個輸出是bounding-box回歸偏置,tk = (tkx, tky, tkw, tkh),對於k表示K個目標類中的一個(即一個RoI對應於每K個類都會有一個位置結果)。我們使用[9]中給出的tk參數化,其中tk指定了一個尺度不變的平移和相對於目標proposal的對數空間的高度/寬度偏移。

每一個訓練RoI都會被真實類u和真實的bounding-box回歸目標位置v標注。我們在每一個標注的RoI上使用一個多任務損失函數L去共同訓練分類和bounding-box回歸:

第一個為對數損失函數,用於分類。第二個任務損失Lloc定義為對類u的真實bounding-box回歸目標位置元組預測的損失函數,真實位置為v = (vx, vy, vw, vh), 預測得到的類為u的元組為tu = (tux, tuy, tuw, tuh)。[u>=1]表示當u>=1時該值為1,否則為0,即如果是背景類(按慣例設置為u=0)的話就不計算損失Lloc。對於bounding-box回歸,使用的損失函數為:

使用的是魯棒的L1損失函數,比在R-CNN和SPPnet使用的L2損失函數對異常值的敏感度要小。當回歸目標是無限值,使用L2損失函數需要仔細調整學習率,以防止梯度爆炸。上面的式子3就會消除這種敏感度

在式子1中的超參數λ用於控制兩個任務損失函數的平衡。我們歸一化真正回歸目標vi的值為均值為0,方差為1。所有實驗都設置λ=1

注意到[6]使用了相關損失函數去訓練不可知類的目標proposal網絡。與我們的方法不同,[6]提倡采用雙網絡系統,對定位和分類分開。OverFeat [19], R-CNN [9], and SPPnet [11]也訓練了分類器和bounding-box定位,但是這些方法都基於階段訓練,都次優於該Fast R-CNN方法(可見5.1)

 

mini-batch采樣。在微調的時候,每個SGD mini-batches都是由是由N = 2張圖像構成的,一致隨機選擇(通常的做法是,我們實際上遍歷數據集的排列)。使用的mini-batches 的大小是R=128,即從每個圖像從采樣64個RoIs,構成128個mini-batches。如[9],我們從目標proposal中提取25%的RoIs,這些RoIs與真實bounding-box框的交並比(IoU)至少是0.5。這些RoIs將使用該目標proposal的類別進行標注,即u>=1。剩下的RoI也是從目標proposals中采樣得到的,只是與真實框的最大的交並比在區間[0.1, 0.5)中,如[11]。因此將會作為背景樣本,被標注為u=0。最后把比閾值0.1還低的作為hard example mining的標准[8]。在訓練中,圖片按概率0.5隨機水平翻轉,除此之外就沒有使用其他的數據增強了。

 

通過RoI池化層進行反向傳播。反向傳播路徑通過RoI池化層派生而來。簡單來說,我們假設每個mini-batch只有一個圖片(即N=1),盡管擴展到N > 1很簡單,因為前向傳播能夠獨立處理所有圖像。

xi R作為RoI池化層的第i個激活輸入,yrj則是該層來自第r個RoI的第j個輸出。RoI池化層計算:

R(r, j)是在子窗口中的輸出索引集,輸出單元yrj從這里最大池化而來。因此一個xi可能被賦值給不同的輸出yrj講那么復雜其實就是最大池化的原理

RoI池化層的后向傳播函數通過遵循argmax轉換來計算關於每個輸入變量xi的損失函數的偏導數(partial derivative):

總之,對於每個mini-batch RoI r 和每個池化輸出單元yrj,如果i是通過最大池化為yrj收集的argmax,偏導數∂L/∂yrj是可累加的。在反向傳播中偏導數∂L/∂yrj已經是被RoI池化層上面的層(即全連接層)的后向傳播函數計算好的了。

 

SGD超參數。用於softmax分類和bounding-box回歸前面的全連接層將使用均值為0,標准差分別為0.01和0.001的高斯分布來初始化。偏置值bias初始化為0。所有層中,對權重使用一個層學習率為1,對偏置bias的層學習率則為2,全局學習率為0.001。當在VOC07和VOC12訓練驗證集中訓練時,在前30k個mini-batch迭代中運行SGD,然后降低學習率為0.0001再去訓練另外10k個迭代。當我們在一個更大的數據集中訓練時,將使用更多的迭代次數。動量momentum設置為0.9,參數衰減為0.0005(在權重和偏置中)

 

2.4. Scale invariance尺度不變性

我們探索了兩種方式獲得尺度不變的目標檢測:

  • 通過“暴力(brute force)”學習
  • 通過使用圖像金字塔

這些策略遵循[11](SPPnet)中的兩種方法。在暴力方法中,每張圖像在訓練和測試時都被處理在一個預定義像素大小。該網絡必須直接從訓練數據中學習尺度不變目標檢測

相反,在多尺度方法中通過圖像金字塔提供了一種大概的尺度不變方法給網絡。在測試中,圖像金字塔用於對每個目標proposal進行大概的尺度歸一化。在多規模訓練時,我們每次一張圖片被采樣時都隨機采樣一個金字塔尺度。我們的實驗只在較小的網絡中使用多尺度訓練,因為內存的限制

 

3. Fast R-CNN detection

一旦一個Fast R-CNN網絡被微調,檢測相當於運行正向傳播(假設目標proposals是預先計算好的)。網絡將一張圖像作為輸入(或者是一個圖像金字塔,就是編碼為一列圖像)和一列R目標proposals去打分(這里的目標proposals的得到方法和R-CNN是一樣的,都是使用選擇性搜索去得到2k左右的proposals)。在測試中,R大概有2000個,雖然我們會考慮使用更大的值(如45K)。當使用一個圖像金字塔時(就是使用多個圖像時),每個RoI的尺度將會設置接近於224*224像素

對於每個測試RoI r,前向傳播輸出一個類后驗概率分布p(posterior probability distribution)和一個關於r的預測bounding-box偏置集(對於K個類中的每個類都會得到一個精確的bounding-box預測)。我們將會使用估計概率Pr(class = k | r) = pk(即該RoI為該類的概率)對每個目標類別賦一個檢測置信度給r。然后會使用來自R-CNN的算術和設置來單獨對每個類實現非極大值抑制

 

3.1. Truncated SVD for faster detection為了更快的檢測而使用截斷SVD(Singular Value Description,奇異值分解)

對於整個圖像分類,相較於卷積層,在全連接層花費的計算時間是比較少的。相反,在檢測中,處理的RoIs 的數量是很大的,因此將近一半的前向傳播時間將會划分在計算全連接層中,如圖2所示:

 使用truncated SVD壓縮大的全連接層能夠加速網絡

⚠️

truncated SVD用於降低全連接層的運算量,提升模型的速度。而在Fast R-CNN的目標檢測任務中,大多數的運算時間發生在FC 的運算中,是因為針對每張輸入圖片,只進行一次卷積操作,而要對生成的Region Proposal,大致兩千個,進行全連接操作進行分類與Bounding Box 的回歸,因此若對FC層進行壓縮則可以大幅減少運算時間。

因此層的權重矩陣W使用SVD近似分解為(is approximately factorized as):

在該分解中,U是一個u*t大小的矩陣,包含W的第一個t左奇異向量。∑t是一個t*t的對角矩陣,包含W的前t個奇異值。V是一個v*t大小的矩陣,包含W的第一個t右奇異向量。truncated SVD將權重數量從u*t減少到t*(u+v),如果t遠小於min(u, v),減少效果將十分明顯,從而減少了運算時間。

為了壓縮網絡,一個與W相關的全連接層將會被兩個全連接層替代,其之間沒有非線性函數。第一層將會使用權重矩陣為ΣtVT(不帶bias),另一層將使用U作為權重矩陣(並且帶着之前的W的bias)。這種簡單的壓縮方法在RoIs數量很大的時候起到了很好的加速作用。

 

 

4. Main results

 三個主要的結果支持着該論文的貢獻:

  • 在VOC07、2010和2012都獲得了最佳的mAP
  • 相對於R-CNN和SPPnet,訓練和測試速度更快
  • 能夠微調VGG16網絡的卷積層,因此提高了mAP

4.1. Experimental setup

實驗使用了三個網上能夠得到的預訓練ImageNet模型(https://github.com/BVLC/caffe/wiki/Model- Zoo)。第一個是來自於R-CNN[9]的CaffeNet(基於AlexNet[14])。我們將該CaffeNet成為模型S,意為“small”。第二個網絡是來自[3]的VGG_CNN_M_1024,其與S有着相同的深度,只是更寬一點,我們稱其為模型M,意為“medium”。最后一個網絡是來自[20]的非常深的VGG16網絡。因為這個網絡是最大的,所以我們稱之為模型L。在這個部分,所有實驗都將使用單尺度(SPPnet的金字塔就是多尺度的)進行訓練和測試(s=600;可在5.2部分查看詳細內容)

4.2. VOC 2010 and 2012 results

 

4.3. VOC 2007 results

 Fast R-CNN比SPPnet效果好說明了即使Fast R-CNN只使用了單一尺度訓練和測試,微調卷積層的實現使得mAP有了很大的改進(從63.1%到66.9%)

 

4.4. Training and testing time

 更快的訓練和測試時間是我們獲得的第二個主要成果。下面的表4對比了Fast R-CNN、R-CNN和SPPnet的訓練時間(小時),測試率(每張圖片幾秒)和在VOC07上的mAP

對於VGG16網絡,在沒有使用截斷SVD的情況下,Fast R-CNN處理圖片的速度是R-CNN的146倍,有截斷的話則是213倍。訓練時間則是減少了9倍,從84小時減少到9.5小時。與SPPnet對比,Fast R-CNN訓練VGG16網絡是它的2.7倍(9.5 VS 25.5小時),以及在沒有截斷SVD的情況下測試是其7倍,有截斷的情況下是10倍。Fast R-CNN還消除了成百的千兆字節大小的磁盤存儲,因為它不緩存特性。

 

截斷SVD

截斷SVD能夠減少超過30%的檢測時間,而僅僅只降低了0.3%的mAP,並且在模型壓縮后並不需要額外的微調。下圖闡述了怎樣使用來自在VGG16網絡的fc6全連接層的25088*4096大小矩陣的前1024個奇異值和fc7全連接網絡4096*4096大小矩陣的前256個奇異值去減少運行時間,且僅造成了mAP的一點點損失。如果在壓縮后再次進行微調,能夠在造成mAP較小的下降情況下進一步加速網絡。

 

4.5. Which layers to fine-tune?

對於SPPnet論文[11]中考慮的深度較低的網絡,只全連接層進行微調就能獲得較好的精度。我們假設這一結果不適用於非常深的網絡。為了驗證微調卷積層對VGG16是十分重要的,我們使用Fast R-CNN進行微調,但是凍結了13個卷積層,這樣只有全連接層被學習。該ablation模擬單尺度SPPnet訓練,mAP由66.9%降至61.4%(如表5所示)。本實驗驗證了我們的假設:對於非常深的網,通過RoI池化層進行訓練是非常重要的。

這是否意味着所有conv層都應該進行微調?簡而言之,沒有。在較小的網絡(S和M)中,我們發現conv1是通用的,並且與任務無關(這是一個眾所周知的事實,可見[14])。不管是否允許對conv1學習,對mAP都沒有任何有意義的影響。對於VGG16,我們發現只需要從conv3_1往后(即13個conv層中的第9個開始)更新層。這一觀察結果是實用的:

(1)與從conv3_1開始學習相比,從conv2_1開始更新將使訓練速度降低1.3倍(12.5 vs. 9.5小時)

(2)從conv1_1更新會超出GPU內存。

而從conv2_1往后學習時mAP的差異僅為增加了0.3個點(表5,最后一列)。在本文中所有Fast R-CNN的結果都是使用VGG16網絡微調conv3_1層及往后的層;所有使用模型S和M的實驗則微調conv2層及往后的層。

 

5. Design evaluation

 我們進行了實驗,以對比Fast R-CNN與R-CNN和SPPnet的速度,並評估設計決策。根據最佳實踐結果,我們是在PASCAL VOC07數據集上執行了這些實驗。

5.1. Does multi-task training help?——yes

多任務訓練很方便,因為它避免了管理一系列連續訓練的任務。但它也有可能改進結果,因為任務通過共享representation(ConvNet)[2]相互影響。多任務訓練能否提高Fast R-CNN的目標檢測精度呢?

為了測試這個問題,我們訓練了一個僅使用了在上面提及的等式(1)中的分類損失函數Lcls的基礎網絡(即設置等式中的λ=0)。這些基礎網絡在表6中作為每個組的第一列與模型S、M和L一起打印。注意,這些模型都沒有沒有bounding-box回歸器。下一個(即每組第二列),我們將網絡帶着多任務損失函數一起訓練(即等價於等式(1)中設置λ= 1),但我們會在測試時禁用bounding-box回歸器。這隔離了網絡分類的精度,並允許與基礎網絡進行一對一的比較。


在所有三個網絡中,我們觀察到多任務訓練相對於單獨的分類訓練提高了純分類精度。mAP的改進范圍從+0.8到+1.1,表明多任務學習具有一致的積極效果。


最后,我們在基礎模型(即僅使用分類損失函數進行訓練) 添加bounding-box回歸器,並使用Lloc損失函數對它們進行訓練,同時保持所有其他網絡參數不變。每組的第三列顯示了該階段訓練方案的結果:mAP比第一列有所改進,但是與多任務訓練(即每組第4列)相比效果又較差。

 

5.2. Scale invariance: to brute force or finesse?——暴力

 對比兩種獲得尺度不變目標檢測的方法:暴力學習(即單一尺度)和圖像金字塔(多尺度)。在每個例子中豆漿圖像的尺度s設置為其長度最小的邊的大小

所有單尺度的實驗使用s=600像素;有時s可能會小於600,因為對於某些圖像,我們將圖像最長的邊長設置為1000像素(就是圖像邊長不能長過1000像素),並保持圖像的長寬比。選擇該值以使VGG16網絡在微調時適合GPU內存大小。因為較小的網絡沒有內存邊界,就能夠從更大的尺度s值中獲利;可是為每個模型優化s並不是我們的主要目的。我們注意到PASCAL圖像的大小大概是384*473像素,因此,單尺度設置通常將圖像上采樣至1.6倍。因此在RoI池化層的平均有效步長為10像素。

在多尺度設置中,我們使用與[11]中相同的五種尺度的設置(s ∈ {480, 576, 688, 864, 1200})去實現與SPPnet網絡的對比。可是我們也會將最長的圖像變長設置為2000像素,以免超出GPU內存。

表7顯示了訓練和測試時使用單尺度或多尺度的模型S和M的結果:

比較讓人意外的就是在[11]中單尺度和多尺度的檢測效果差不多。我們的發現證明了他們的結果:深卷積神經網絡善於直接學習尺度不變性。多尺度方法僅在mAP實現了比較小的增長,但是花費了較大的計算時間。在VGG16網絡中(即模型L),通過實現細節我們只能使用單尺度方法。但是其mAP能夠達到66.9%,這比R-CNN[10]中的66.0%結果高一點,即使R-CNN中使用了“無限”尺度,每個proposal都被扭曲成一個規范大小

由於單尺度處理提供了速度和精度之間的最佳權衡,特別是對於非常深的模型,因此本小節之外的所有實驗都使用s = 600像素的單尺度訓練和測試。

 

5.3. Do we need more training data?-yes

一個好的目標檢測器應該在提供更多的訓練數據時得到改進。Zhu等人[24]發現,DPM [8] mAP在經過幾十萬個訓練樣本后就飽和了。在這里,我們用VOC12 trainval集來擴充VOC07 trainval集,大約將圖像數量增加三倍,達到16.5k,來評估Fast R-CNN。擴大訓練集將VOC07測試mAP從66.9%提高到70.0%(表1所示)。
我們對VOC10和2012進行了類似的實驗,構建了VOC07 trainval、test和VOC12 trainval組合的21.5k大小的圖像數據集。在該數據集上進行訓練時,我們使用100k次SGD迭代,每40k次迭代后(而不是每次30k)學習率降低0.1×。對於VOC10和2012數據,mAP分別從66.1%提高到68.8%和從65.7%提高到68.4%。

 

5.4. Do SVMs outperform softmax?

在Fast R-CNN中在微調時使用了softmax分類器而不是訓練 one-VS-rest 線性SVMs post-hoc(二分類),像在R-CNN和SPPnet中做的一樣。為了了解這個選擇的影響,我們在Fast R-CNN中實現了帶着hard negative mining的post-hoc SVM訓練。我們使用了和在R-CNN中相同的訓練算法和超參數。

表8顯示了對這三個網絡來說,softmax的效果比SVM稍微好一些,mAP高了0.1到0.8不等。這個影響是很小的,但是它說明了與原來的多階段訓練方法相對比,‘one-shot’微調方法已經足夠使用了。我們注意到softmax不像post-hoc SVM,因為softmax在為RoI打分時還說明了類之間的競爭性。

 

5.5. Are more proposals always better?——no

 (廣泛地)有兩種類型的對象檢測器:一種使用稀疏的對象proposals集(例如,選擇性搜索[21]),另一種使用密集的對象proposals集(例如,DPM[8])。稀疏proposals分類是級聯[22]的一種類型,在這種類型中,建議機制首先拒絕大量候選項,留給分類器一小組待評估的候選項。當應用於DPM檢測[21]時,該級聯提高了檢測精度。我們發現有證據表明,該proposals分類器級聯也提高了Fast R-CNN的准確性。
使用選擇性搜索的quality模式,我們將每張圖片從1k個proposals掃描到10k個proposals,每次重新訓練和重新測試模型M。如果proposals服務純粹是計算性的,那么增加每張圖片的proposals數量應該不會損害mAP。

我們發現當proposals數量增加時,mAP先升高,然后輕微降低(如上面表3,藍色實線)。該實驗顯示了使用更多的proposals覆蓋深度分類器是沒有用的,甚至還會對准確度有輕微損害。

 如果沒有實際運行該實驗的話,該結果很難預測。用於測量目標proposal質量的最優方法是平均召回率(AR)[12]。當每張圖片都使用固定數量的proposals時,AR與使用R-CNN的幾種proposals方法上的mAP有很好的相關性。表3顯示了在每張圖片中的proposals數量是多變的時,AR(紅色實線)與mAP沒有很好的相關性。AR要小心使用;因為過多的proposals,即使得到較高的AR也不能說明mAP將會增加。幸運的是,使用模型M進行訓練和測試花費不到2.5小時。因此Fast R-CNN是高效的,所以目標proposals的mAP的直接評估是優於proxy metrics的

我們也調查了當在Fast R-CNN中使用密集方法以每張圖片45k個框的比例去生成框的情況(不同尺寸、位置和寬高比)。該密集集是足夠多的,當每個選擇性搜索框被其最近的(IoU測量)密集框所替代時,mAP僅降低了1個點(即降低到57.7%,表3中的藍色三角形)

密集框的數據和選擇性搜索框的數據不同。從2k個選擇性搜索框開始,並添加1000 × {2, 4, 6, 8, 10, 32, 45}個密集框隨機樣本來測試mAP。對於每個實驗,我們都重新訓練和重新測試模型M。當這些密集框被添加后,mAP下降得比添加更多的選擇性搜索框還要強烈,最后達到53.0%。

我們還僅使用密集框(每張圖片45k個proposal)去訓練和測試Fast R-CNN。該設置得到結果為52.9%(藍色菱形)。最后,我們查看是否帶着hard negative mining 的SVM需要和密集框分布合作,發現結果更壞了,達到了49.3%(藍色圓形)

所以就是說明使用選擇行搜索的稀疏proposal就足夠了

 

5.6. Preliminary MS COCO results

我們將Fast R-CNN(VGG16網絡)應用到MS COCO數據集中去建立一個初步的基線。我們在80k大小的圖片訓練集中訓練,迭代240k次,並使用評估服務器在‘test-dev’集中對得到的訓練網絡進行評估。PASCAL風格的數據集的mAP為35.9%;這個新的COCO風格的AP——IoU閾值的平均值為19.7%

 

6. Conclusion

本文提出了一種Fast R-CNN,對R-CNN和SPPnet進行了干凈、快速的更新。除了報告最新的檢測結果,我們還提供了詳細的實驗,希望能提供新的見解。特別值得注意的是,稀疏目標proposals似乎可以提高檢測器的質量。這個問題在過去花費太多(時間)去探索,但在Fast R-CNN中變得實用。當然,可能存在一些尚未發現的技術,允許密集的框性能和稀疏的proposals一樣好。如果開發出這樣的方法,將有助於進一步加速目標檢測。

 

總結:(參考https://www.jianshu.com/p/9db81f1bb439)

R-CNN網絡的主要問題有:

  • 使用selective search產生proposal,操作耗時,且不利於網絡的整體訓練和測試
  • 產生的proposal需要經過warp操作再送入后續網絡,導致圖像的變形和扭曲
  • 每一個proposal均需要單獨進行特征提取,重復計算量大

Fast R-CNN中ROI Pooling的加入,相對於R-CNN網絡來說,至少有兩個改善:

  • 由於ROI Pooling可接受任意尺寸的輸入,warp操作不再需要,這有效避免了物體的形變扭曲,保證了特征信息的真實性
  • 不需要對每個proposal都提取特征,而是將整張圖片輸入網絡中,采用映射方式從整張圖片的feature map上獲取ROI feature區域

除了上述兩個改進外,其實還有一點。R-CNN中在獲取到最終的CNN特征后先采用SVM進行類別判斷,再進行bounding-box的回歸得到位置信息。整個過程是個串行的流程。這極大地影響了網絡的檢測速度。Fast R-CNN中則將Classification和regression的任務合二為一,變成一個multi-task的模型,實現了特征的共享與速度的進一步提升。

但是Fast R-CNN只是解決了R-CNN中的后兩點問題,而仍然沿用了R-CNN中selective search生成proposal的方法。這一方法產生的proposal即使經過NMS(非極大值抑制)也會達到2k~3k個。一方面生成過程耗時耗力,另一方面給存儲也帶來壓力。

改進的辦法就是Faster R-CNN的提出。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM