天天看點

Fast-RCNN 論文翻譯和解讀

Abstract

本文提出了一種快速的基于區域的卷積網絡方法(fast R-CNN)用于目标檢測。Fast R-CNN建立在以前使用的深卷積網絡有效地分類目标的成果上。相比于之前的成果,Fast R-CNN采用了多項創新提高訓練和測試速度來提高檢測精度。Fast R-CNN訓練非常深的VGG16網絡比R-CNN快9倍,測試時間快213倍,并在PASCAL VOC上得到更高的精度。與SPPnet相比,fast R-CNN訓練VGG16網絡比他快3倍,測試速度快10倍,并且更準确。Fast R-CNN的Python和C ++(使用Caffe)實作以MIT開源許可證釋出在:​​https://github.com/rbgirshick/fast-rcnn​​。

Introduction

最近,深度卷積網絡已經顯著提高了圖像分類和目标檢測的準确率。與圖像分類相比,目标檢測是一個更具挑戰性的任務,需要更複雜的方法來解決。由于這種複雜性,目前的方法在多層網絡中訓練模型,這些模型是很慢和精度不高的。

複雜性的産生是因為檢測需要目标的精确定位,這就導緻兩個主要的難點。首先,必須處理大量候選目标位置(通常稱為“建議”)。 第二,這些候選框僅提供粗略定位,其必須被精細化以實作精确定位。 這些問題的解決方案經常會影響速度,準确性或簡單性。

在本文中,我們簡化了最先進的基于卷積網絡的目标檢測器的訓練過程。我們提出一個單階段訓練算法,共同學習分類候選框和改進他們的空間位置。

所得到的方法用來訓練非常深的檢測網絡(例如VGG16) 比R-CNN快9倍,比SPPnet快3倍。在運作時,檢測網絡在PASCAL VOC 2012資料集上實作最高準确度,其中mAP為66%(R-CNN為62%),每張圖像處理時間為0.3秒,不包括候選框的生成。

1.1 R-CNN and SPPnet

基于區域的卷積網絡方法(RCNN)通過使用深度卷積網絡來分類目标候選框,獲得了很高的目标檢測精度。然而,R-CNN具有顯着的缺點:

1.訓練的模型是多階段管道(pipeline)。R-CNN首先使用目标候選框對卷積神經網絡進行微調。然後,它将卷積神經網絡得到的特征送入SVM。 這些SVM作為目标檢測器,替代通過微調學習的softmax分類器。 在第三個訓練階段,學習bbox(邊界)回歸。

2.訓練在時間和空間上是很大代價的。對于SVM和bbox回歸訓練,從每個圖像中的每個目标候選框提取特征,并寫入磁盤。對于非常深的網絡,如VGG16,這個過程需要2.5 GPU-天在VOC07訓練集上的5k圖像。這些特征需要數百GB的存儲空間。

3.目标檢測速度很慢。在測試時,從每個測試圖像中的每個目标候選框提取特征。用VGG16網絡檢測目标需要47s /圖像(在GPU上)。

R-CNN很慢是因為它為每個目标候選框進行卷積神經網絡正向傳遞,而不共享計算。SPP網絡通過共享計算加速R-CNN。SPP網絡計算整個輸入圖像的卷積特征映射,然後使用從共享特征映射提取的特征向量來對每個候選框(object proposals)進行分類。通過将候選框内的特征圖的一部分最大化為固定大小的輸出(例如,6X6)來提取針對候選框的特征。多個輸出被池化,然後連接配接成空間金字塔池。SPPnet在測試時将R-CNN加速10到100倍。由于更快的候選框特征提取訓練時間也減少3倍。

SPP網絡也有顯著的缺點。像R-CNN一樣訓練網絡是一個多階段的涉及提取特征的網絡,和對網絡進行微調有損失,訓練SVM分類器,最後拟合邊界回歸(bbox)。特征也寫入磁盤。但與R-CNN不同,在[11]中提出的微調算法不能更新在空間金字塔池之前的卷積層。不出所料,這種限制(固定的卷積層)限制了深度很深的網絡的精度。

1.2 Contributions

我們提出一種新的訓練算法,修正R-CNN和SPPnet的缺點,同時提高其速度和準确性。我們稱之為fast R-CNN,因為它能比較快地進行訓練和測試。Fast RCNN方法有幾個優點:

1.比R-CNN和SPP網絡具有更高精度(mAP)的目标檢測;

2.訓練是使用多任務損失(loss)的單階段訓練;

3.訓練可以更新所有網絡層參數;

4.特征緩存不需要磁盤空間

Fast R-CNN使用Python和C++語言編寫,在

​​https://github.com/rbgirshick/fast-rcnn​​網站下能夠獲得開源代碼。

fast R-CNN 結構和訓練

圖1給出了Fast R-CNN架構。Fast R-CNN網絡将整個圖像和一組候選框作為輸入。網絡首先使用幾個卷積層(conv)和最大池層來處理整個圖像,以産生轉換特征圖。然後,對于每個候選框,感興趣區域(RoI)池化層從特征圖中提取固定長度的特征向量。每個特征向量被送到完全連接配接(fc)層的中,其最終分支成兩個同級輸出層 :對K個對象類産生softmax機率估計加上全部捕獲的“背景”類的一層以及為K個對象類中的每一個類别輸出四個實數值的另一層。每組4個值編碼重新修正K個類中的一個的精确邊界位置。

Fast-RCNN 論文翻譯和解讀

圖1.Fast R-CNN架構。輸入圖像和多個感興趣區域(RoI)被輸入到完全卷積網絡中。每個RoI被合并到固定大小的特征圖中,然後通過完全連接配接的層(FC)映射到特征向量。網絡對于每個RoI具有兩個輸出向量:softmax機率和每類邊界回歸偏移。該架構是端到端訓練的,帶有多任務損失。

2.1 ROI pooling layer

RoI池化層使用最大池化将任何有效的感興趣區域内的特征轉換成具有H × W(例如,7×7)的固定空間範圍的小特征圖,其中H和W是層超參數,獨立于任何特定的RoI層。在本文中,RoI是一個矩形視窗,成為一個特征映射。 每個RoI由指定其左上角(r; c)及其高度和寬度(h; w)的四元組(r; c; h; w)定義。

RoI最大池化工作通過除以h × w RoI視窗變成H × W網格,子視窗大小約為h/H ×w/ W,然後将每個子視窗中的最大值合并到相應的輸出網格單元中。池化操作獨立應用于每個特征圖通道,比如在标準最大池中。RoI層隻是SPPnets [11]中使用的空間金字塔池層的特殊情況,其中隻有一個金字塔層。 我們使用[11]中給出的池化子視窗計算方法。

2.2 Initializing from pre-trained networks

我們實驗了三個預訓練的ImageNet網絡,每個網絡有五個最大池化層和五到十三個卷積層(網絡詳細資訊,請參見第4.1節)。當預訓練網絡初始化fast R-CNN網絡時,其經曆三個變換。

我們實驗了三個預訓練的ImageNet [4]網絡,每個網絡有五個最大池層和五到十三個卷積層(網絡詳細資訊,請參見第4.1節)。當預訓練網絡初始化fast R-CNN網絡時,其經曆三個變換。

1. 首先,最後的最大池化層由RoI池層代替,其通過将H和W設定為與網絡的第一完全連接配接層相容來配置(例如,對于VGG16,H = W = 7)。

2. 其次,網絡的最後完全連接配接層和softmax(其被訓練用于1000類ImageNet分類)被替換為前面描述的兩個同級層(完全連接配接的層和softmax在K + 1類别和類别特定的邊界回歸)。

3. 網絡被修改為采用兩個資料輸入:圖像的清單和這些圖像中的RoI的清單。

2.3. Fine-tuning for detection

用反向傳播訓練所有網絡權重是fast R-CNN的重要能力。首先,讓我們闡明為什麼SPPnet無法更新低于空間金字塔池化層的權重。

根本原因是當每個訓練樣本(即RoI)來自不同的圖像時,通過SPP層的反向傳播是非常低效的,這正是如何訓練R-CNN和SPPnet網絡的方法。低效的部分是因為每個RoI可能具有非常大的接受場,通常跨越整個輸入圖像。由于正向傳遞必須處理整個接受場,訓練輸入是大的(通常是整個圖像)。(這段話不是很懂)。

我們提出了一種更有效的訓練方法,利用訓練期間的特征共享。在fast RCNN網絡訓練中,随機梯度下降(SGD)minibatches被分級采樣,首先通過采樣N個圖像,然後通過從每個圖像采樣R/N個 RoIs。關鍵的是,來自同一圖像的RoI在向前和向後傳播中共享計算和存儲器。減小N,減少了minibatches計算。例如,當N = 2和R = 128時,得到的訓練方案比從128幅不同的圖采樣一個RoI快64倍。

這個政策的一個關注是它可能導緻訓練收斂慢,因為來自相同圖像的RoI 是相關的。這個問題似乎不是一個實際問題,我們使用比R-CNN更少的SGD疊代,獲得N = 2和R = 128的良好結果。

除了分層采樣,Fast R-CNN使用一個精細的訓練過程,一個微調階段聯合優化softmax分類器和邊界框回歸,而不是在三個獨立的階段訓練softmax分類器,SVM和回歸因子。 下面描述該過程的元件(loss,小批量采樣政策,通過RoI池層的反向傳播和SGD超參數)。

多任務損失: Fast R-CNN網絡具有兩個同級輸出層。 第一個輸出在K + 1個類别上的離散機率分布(每個RoI),

p=(p0,...pK)

p

=

p

.

.

.

p

K

。 通常,通過完全連接配接層的

K+1

K

+

1

個輸出上的softmax來計算p。第二個輸出層輸出邊界框回歸偏移,

tk=(tkx,tky,tkw,tkh)

t

k

=

(

t

k

x

,

t

k

y

,

t

k

w

t

k

h

)

,對于由k索引的K個對象類中的每一個。 我們使用[9]中給出的

tk

t

k

的參數化,其中

tk

t

k

指定相對于候選框的尺度不變轉換和對數空間高度/寬度移位。

每個訓練的RoI用ground truth類u和ground truth邊界框回歸目标v标記。我們對每個标記的RoI使用多任務損失L以聯合訓練分類和邊界框回歸:

L(p,u,tu,v)=Lcls(p,u)+λ[u≥1]Lloc(tu,v),

L

(

p

,

u

,

t

u

,

v

)

=

L

c

l

s

(

p

,

u

)

+

λ

[

u

1

]

L

l

o

c

(

t

u

,

v

)

,

其中,

Lcls(p,u)=−logpu

L

c

l

s

(

p

,

u

)

=

l

o

g

p

u

是u的真實值得損失值。

第二個損失值,

Lloc

L

l

o

c

是在

u,v=(vx;vy;vw;vh)

u

v

=

v

x

;

v

y

;

v

w

;

v

h

)

和預測元組

tu=(tux;tuy;tuw;tuh)

t

u

=

t

x

u

;

t

y

u

;

t

w

u

;

t

h

u

的真正邊界框回歸目标的元組。Iverson括号訓示函數[u≥1]當u≥1的時候為值1,否則為0。按照慣例,catch-all背景類标記為u = 0。對于背景RoI,沒有ground truth邊界框的概念,是以

Lloc

L

l

o

c

被忽略。對于邊界框回歸,我們使用這個損失函數。

Fast-RCNN 論文翻譯和解讀

其中,smooth是魯棒的L1損失,對于異常值比在R-CNN和SPPnet中使用的L2損失更不敏感。當回歸目标無界時,具有L2損失的訓練可能需要仔細調整學習速率,以防止爆炸梯度。等式 3消除了這種靈敏度。

公式1中的超參數λ控制兩個任務損失之間的平衡。我們将groundtruth回歸目标

vi

v

i

歸一化為具有零均值和機關方差。所有實驗都使用λ = 1。

我們注意到[6]使用相關損失來訓練一個診斷候選框網絡。 與我們的方法不同的是[6]倡導一個分離本地化和分類的雙網絡系統。 OverFeat ,R-CNN和SPPnet 也訓練分類器和邊界定位器,但是這些方法使用逐級訓練,這對于fast RCNN來說是次優的。

小批量采樣。作者從對象建議框(object proposal)中選擇25%的RoI,這些RoI與ground-truth bbox邊界框至少有0.5的部分交叉重疊,也就是正樣本,即 u >= 1。其餘的RoI選那些IoU重疊區間在[0.1,0.5)的,作為負樣本,即 u = 0,大約為75%。之是以選擇負樣本需要大于0.1的門檻值是因為使用啟發式的hard example mining(低于0.1的IoU作為難例挖掘的啟發式)。在訓練期間,圖像有0.5的機率水準翻轉。

類别 比例 方式

前景 25% 與ground-truth bbox邊界框重疊區間在[0.5,1]

背景 75% 與ground-truth bbox邊界框重疊區間在[0.1,0.5)

通過RoI池化層的反向傳播。這部分我完全不懂說了什麼。。。​​這篇文章有詳細介紹,可以認真推導一下。

SGD超參數。除了修改增加的層,原有的層參數已經通過預訓練方式初始化:

用于分類的全連接配接層以均值為0、标準差為0.01的高斯分布初始化;

用于回歸的全連接配接層以均值為0、标準差為0.001的高斯分布初始化,偏置都初始化為0;針對PASCAL VOC 2007和2012訓練集,前30k次疊代全局學習率為0.001,每層權重學習率為1倍,偏置學習率為2倍,後10k次疊代全局學習率更新為0.0001;

動量設定為0.9,權重衰減設定為0.0005。

Scale invariance 尺度不變性

作者提出了使用兩種方式對規模不變的對象進行檢測:brute-force(單一尺度)和image pyramids(多尺度,圖像金字塔)。

單一尺度直接在訓練和測試階段将image預先固定好像素大小,直接輸入網絡訓練就好,然後期望在訓練過程中網絡自己能夠學習到尺度不變性scale-invariance;

多尺度在訓練階段随機從圖像金字塔【縮放圖檔的scale得到,得到多尺度圖檔,相當于擴充資料集】中采樣訓練,通過一個圖像金字塔向網絡提供一個近似的尺度不變,在測試階段圖像金字塔用來對每個object proposal近似尺度歸一化,訓練階段每次采樣一個圖像就随機采樣一個金字塔尺度。

作者在5.2節對單一尺度和多尺度分别進行了實驗,不管哪種方式下都定義圖像短邊像素為s,單一尺度下s=600【維持長寬比進行縮放】,長邊限制為1000像素;多尺度s={480,576,688,864,1200}【維持長寬比進行縮放】,長邊限制為2000像素,生成圖像金字塔進行訓練測試;實驗結果表明AlexNet【S for small】、VGG_CNN_M_1024【M for medium】下單一尺度比多尺度mAP差1.2%~1.5%,但測試時間上卻快不少,VGG-16【L for large】下僅單一尺度就達到了66.9%的mAP【由于GPU顯存限制多尺度無法實作】,該實驗證明了深度神經網絡善于直接學習尺度不變形,對目标的scale不敏感。

第2中方法的表現确實比1好,但是好的不算太多,大概是1個mAP左右,但是時間要慢不少,是以作者實際采用的是第一個政策,也就是single scale。

3 Fast R-CNN detection

一旦Fast R-CNN網絡被微調,檢測相當于運作正向傳播(假設對象建議框object proposal是預先計算的)。網絡将圖像(或圖像金字塔,編碼為圖像清單)和待給得分的 R 對象建議框(object proposal)清單作為輸入。在測試階段,RoI 大約為2K個,當使用圖像金字塔的時候,每個RoI被指定尺度使得接近224*224。對于每個測試RoI r ,網絡輸出關于 r 的一個後驗機率分布 p 和一系列預測bbox偏移(每個類 [共k個類] 獲得自己的精确bbox預測)。然後使用估計機率

Pr(class=k|r)Δ=pk.

P

r

(

c

l

a

s

s

=

k

|

r

)

=

Δ

p

k

.

給 r 賦予關于 k 個對象類的檢測置信度。最後給每個類都實施一個非極大值抑制。

3.1 Truncated SVD for faster detection 截斷SVD ——>減少檢測時間

圖像分類任務中,用于卷積層計算的時間比用于全連接配接層計算的時間多

Fast-RCNN 論文翻譯和解讀

而在目标檢測任務中,要處理的RoI數量比較多,幾乎有一半的前向計算時間被用于全連接配接層(Fig . 2)。就Fast R-CNN而言,RoI池化層後的全連接配接層需要進行約2k次【每個RoI都要計算】,是以在Fast R-CNN中可以采用SVD分解加速全連接配接層計算;

具體如何實作的呢?

①物體分類和bbox回歸都是通過全連接配接層實作的,假設全連接配接層輸入資料為X,輸出資料為Y,全連接配接層權值矩陣為W,尺寸為 u × v ,那麼該層全連接配接計算為:

Y=W×X

Y

=

W

×

X

②若将W進行SVD分解(奇異值分解),并用前t個特征值近似代替,即:

W≈UΣtVT

W

U

Σ

t

V

T

U是 u × t 的左奇異矩陣,Σt 是 t × t 的對角矩陣 ,V是 v × t 的右奇異矩陣。

Fast-RCNN 論文翻譯和解讀

截斷SVD将參數量由原來的 u × v 減少到 t × (u + v) ,當 t 遠小于 min(u,v) 的時候降低了很大的計算量。

在實作時,相當于把一個全連接配接層拆分為兩個全連接配接層,第一個全連接配接層使用權值矩陣

∑tVT

t

V

T

(不含偏置)第二個全連接配接層使用矩陣U(含偏置);當RoI的數量大時,這種簡單的壓縮方法有很好的加速。實驗表明(Fig . 2),SVD分解全連接配接層能使mAP隻下降0.3%的情況下提升30%的速度,同時該方法也不必再執行額外的微調操作。

4 主要結果

三個主要結果支援本文的貢獻:

1. VOC07,2010和2012年的最高的mAP;

2.相比于R-CNN,SPPnet的 快速訓練和測試。

3. 在VGG16中微調卷積層改善了mAP。

我們的實驗使用了三個經過預訓練的ImageNet網絡模型,這些模型可以線上獲得(​​https://github.com/BVLC/caffe/wiki/Model-Zoo​​)。第一個是來自R-CNN3的CaffeNet(實質上是AlexNet)。 我們将這個CaffeNet稱為模型S,即小模型。第二網絡是來自14的VGG_CNN_M_1024,其具有與S相同的深度,但是更寬。 我們把這個網絡模型稱為M,即中等模型。最後一個網絡是來自15的非常深的VGG16模型。由于這個模型是最大的,我們稱之為L。在本節中,所有實驗都使用單尺度訓練和測試。

接下來還有一些實驗配置和在各種資料集的測試結果以及一些優化的過程,就沒翻譯了。

繼續閱讀