【Fast R-CNN】Fast R-CNN (2015) 全文翻譯
作者
Ross Girshick(Microsoft Research,rbg@microsoft.com)
摘要
提出了一種基於區域的快速卷積網路目標檢測方法(Fast R-CNN)。快速R-CNN建立在先前工作的基礎上,使用深卷積網路有效地分類物件建議。與以往的工作相比,Fast R-CNN採用了一些創新技術來提高訓練和測試速度,同時也提高了檢測精度。Fast R-CNN訓練非常深的vgg16網路比R-CNN快9倍,測試時快213倍,在PASCAL VOC 2012上實現了更高的對映。與SPPnet相比,Fast R-CNN訓練VGG16速度快3倍,測試速度快10倍,精度更高。快速的RCNN在Python和C++中實現(使用CAFE),並且可以在開放原始碼MIT許可下使用,網址:https://github.com/rbgirshick/fast-rcnn。
1. 引言
最近,深度卷積網路[14,16]顯著提高了影像分類[14]和目標檢測[9,19]的準確性。與影像分類相比,目標檢測是一項更具挑戰性的任務,需要更復雜的方法來解決。由於這種複雜性,目前的方法(例如[9、11、19、25])多階段管道中的列車模型速度慢且不雅。
複雜性的產生是因為檢測需要精確定位目標,這就帶來了兩個主要的挑戰。首先,必須處理大量的候選物件位置(通常稱為“建議”)。第二,這些候選者只提供粗略的定位,必須經過改進才能實現精確定位。這些問題的解決方案往往會損害速度、準確性或簡單性。
在本文中,我們簡化了基於ConvNet的最新目標檢測器的訓練過程[9,11]。我們提出了一個單階段的訓練演算法,共同學習分類的物件建議和改善他們的空間位置。
該方法可以訓練一個非常深的探測網路(VGG16[20]),比R-CNN[9]快9倍,比SPPnet[11]快3倍。在執行時,檢測網路在0.3秒(不包括物件提出時間)內處理影像,同時在PASCAL VOC 2012[7]上獲得最高精度,mAP為66%(而R-CNN為62%)。
1.1 R-CNN 和 SPPnet
基於區域的卷積網路方法(R-CNN)[9]通過使用深度轉換網路對目標建議進行分類,獲得了良好的目標檢測精度。然而,R-CNN有明顯的缺點:
- 訓練是一個多階段的管道。 R-CNN首先使用日誌丟失對物件建議進行微調。然後,它使SVM適合ConvNet功能。這些支援向量機充當目標檢測器,取代通過微調學習的softmax分類器。在第三個訓練階段,學習邊界盒迴歸函式。
- 訓練在空間和時間上都很昂貴。 對於支援向量機和邊界盒迴歸器訓練,從每幅影像中的每個目標建議中提取特徵並寫入磁碟。對於非常深的網路,如VGG16,此過程需要2.5 GPU天來處理VOC07 trainval集合的5k影像。這些功能需要數百GB的儲存空間。
- 目標檢測速度慢。 在測試時,從每個測試影像中的每個物件方案中提取特徵。VGG16的檢測需要47s/影像(在GPU上)。
R-CNN速度慢,因為它對每個物件建議執行ConvNet向前傳遞,而不共享計算。空間金字塔池網路(SPPnets)[11]通過共享計算加速R-CNN。SPPnet方法計算整個輸入影像的卷積特徵對映,然後使用從共享特徵對映中提取的特徵向量對每個目標方案進行分類。通過max將方案內的特徵對映部分合併成一個固定大小的輸出(例如,6×6),為方案提取特徵。多個輸出大小被合併,然後像空間金字塔池一樣連線起來[15]。SPPnet在測試時將R-CNN加速10-100倍。由於快速的特徵提取,訓練時間也減少了3倍。
SPPnet也有明顯的缺點。與R-CNN一樣,訓練是一個多階段的流水線,包括提取特徵、使用日誌丟失對網路進行微調、訓練支援向量機,最後擬合邊界盒迴歸器。功能也會寫入磁碟。但與R-CNN不同,在[11]中提出的微調演算法不能更新空間金字塔池之前的卷積層。不出所料,這種限制(固定卷積層)限制了非常深網路的精度。
1.2 貢獻
我們提出了一種新的訓練演算法,彌補了R-CNN和SPPnet的不足,同時提高了它們的速度和精度。我們稱這種方法為快速R-CNN,因為它的訓練和測試速度相對較快。快速R-CNN方法具有以下幾個優點:
- 比R-CNN,SPPnet更高的檢測質量(mAP)
- 訓練是單階段的,使用多工損失
- 訓練可以更新所有網路層
- 特徵快取不需要磁碟儲存
快速的R-CNN是用Python和C++編寫的(CAFE(13)),它可以在開源MIT許可下使用,https://github.com/rbgirshick/fast-rcnn。
2. Fast R-CNN 體系結構和訓練
圖1說明了快速R-CNN架構。一個快速的R-CNN網路將整個影像和一組物件建議作為輸入。該網路首先用幾個卷積(conv)和max池層處理整個影像,以生成conv特徵對映。然後,對於每一個目標提議,感興趣區域(RoI)池層從特徵對映中提取一個固定長度的特徵向量。每個特徵向量被輸入一系列完全連線的(fc)層,最後分為兩個兄弟輸出層:一個在K個物件類上生成softmax概率估計值,再加上一個一網打盡的“背景”類,另一個層為每個K個物件類輸出四個實數。每組4個值對其中一個K類的精確邊界框位置進行編碼。
2.1 RoI池化層
RoI池層使用max-pooling將任何有效區域內的特徵轉換成具有固定空間範圍H×W(例如7×7)的小特徵對映,其中H和W是獨立於任何特定RoI的層超引數。在本文中,RoI是一個矩形視窗,它是一個conv特徵對映。每個RoI由一個四元組(r, c, h, w)定義,該元組指定其左上角(r, c)及其高度和寬度(h, w)。
RoI Max Pooling的工作原理是將h×wroi視窗劃分為大小近似為h/h×w/w的子視窗的h×w網格,然後將每個子視窗中的值合併到相應的輸出網格單元中。池獨立地應用於每個要素對映通道,就像標準的最大池一樣。RoI層只是SPPnets[11]中使用的空間金字塔池層的特例,其中只有一個金字塔層。我們使用[11]中給出的池化子視窗計算。
圖1. 快速R-CNN架構。輸入影像和多個感興趣區域(roi)被輸入到完全卷積網路中。每個感興趣區域被彙集到一個固定大小的特徵對映圖中,然後通過全連通層(FCs)對映到一個特徵向量。該網路每個RoI有兩個輸出向量:softmax概率和每類邊界盒迴歸偏移。該體系結構是經過端到端的多工丟失訓練的
2.2 從預訓練網路初始化
我們用三個預先訓練過的ImageNet[4]網路進行實驗,每個網路都有5個最大池層,5到13個conv層(有關網路詳細資訊,請參閱第4.1節)。當一個預先訓練好的網路初始化一個快速的R-CNN網路時,它會經歷三次轉換。
首先,最後一個max pooling層被RoI池層代替,該層通過設定H和W與網路的第一個完全連線層相容來配置(例如,對於VGG16,H=W=7)。
其次,網路的最後一個完全連線層和softmax(為1000向ImageNet分類而訓練)被前面描述的兩個同級層(完全連線層和softmax over K+1類別和類別特定的邊界盒迴歸器)所取代。
第三,對網路進行修改以獲取兩個資料輸入:影像列表和這些影像中的RoI列表。
2.3 微呼叫於檢測
用反向傳播方法訓練所有網路權值是快速R-CNN的一個重要功能。首先,讓我們解釋一下為什麼SPPnet無法更新空間金字塔池化層以下的權重。
根本原因是,當每個訓練樣本(即RoI)來自不同的影像時,通過SPP層的反向傳播效率很低,這正是R-CNN和SPPnet網路的訓練方式。效率低下的原因是每個RoI可能有一個非常大的接受野,通常跨越整個輸入影像。由於整個訓練過程都是大的,所以整個訓練過程都必須經過。
我們提出了一種更有效的訓練方法,利用訓練過程中的特徵共享。在快速R-CNN訓練中,隨機梯度下降(SGD)小批量分層取樣,首先對N幅影像進行取樣,然後對每個影像的R/nroi進行取樣。關鍵的是,來自同一影像的roi在向前和向後的過程中共享計算和記憶體。使N變小減少了小批量計算。例如,當使用N=2和R=128時,所提出的訓練方案比從128幅不同的影像中抽取一個感興趣區域(即R-CNN和SPPnet策略)快64倍左右。
這種策略的一個問題是,由於同一幅影像的roi是相關的,因此可能導致訓練收斂緩慢。這個問題似乎不是一個實際問題,我們在N=2和R=128時使用比R-CNN更少的SGD迭代來獲得很好的結果。
除了分層取樣外,Fast R-CNN還使用了一個優化階段的簡化訓練過程,該階段聯合優化了softmax分類器和邊界盒迴歸器,而不是在三個單獨的階段訓練softmax分類器、SVM和迴歸器[9,11]。該過程的組成部分(損失、小批量取樣策略、通過RoI池層的反向傳播以及SGD超引數)如下所述。
多工損失。 快速R-CNN網路有兩個兄弟輸出層。第一個輸出一個離散的概率分佈(每個RoI),p=(p0,…,pk),超過K+1類別。與往常一樣,p是由softmax在完全連線層的K+1輸出上計算的。第二個同級層為每個K個物件類輸出邊界盒迴歸偏移,用K索引。我們使用[9]中給出的tk的引數化,其中tk指定相對於物件建議的比例不變平移和日誌空間高度/寬度偏移。
每一個RoI都是用一個標記為真實值的迴歸盒和一個標記為真實值的迴歸盒對每個目標進行訓練:
L
(
p
,
u
,
t
u
,
v
)
=
L
c
l
s
(
p
,
u
)
+
λ
[
u
≥
1
]
L
l
o
c
(
t
u
,
v
)
,
.
.
.
.
.
.
.
.
.
.
.
.
(
1
)
L(p,u,t^u,v) = L_{cls} (p,u) + λ[u ≥ 1]L_{loc}(t^u,v),............(1)
L(p,u,tu,v)=Lcls(p,u)+λ[u≥1]Lloc(tu,v),............(1)
其中,
L
c
l
s
(
p
,
u
)
=
−
log
p
u
L_{cls}(p,u) = −\log p_u
Lcls(p,u)=−logpu是真實類別
u
u
u的對數損失。
第二個任務損失
L
l
o
c
L{loc}
Lloc是在u類的真邊界盒迴歸目標的元組上定義的,
v
=
(
v
x
,
v
y
,
v
w
,
v
h
)
v=(v_x, v_y, v_w, v_h)
v=(vx,vy,vw,vh)和預測的元組
t
u
=
(
t
x
u
,
t
y
u
,
t
w
u
,
t
h
u
)
t^u=(t^u_x, t^u_y, t^u_w, t^u_h)
tu=(txu,tyu,twu,thu),同樣針對
u
u
u類別。當u≥1時,Iverson括號指示符函式[u≥1]計算為1,否則為0。按照慣例,catch all後臺類被標記為u=0。對於背景roi,沒有基本真實邊界框的概念,因此忽略了Lloc。我們使用迴歸框進行迴歸:
L
l
o
c
(
t
u
,
v
)
=
∑
i
∈
x
,
y
,
w
,
h
s
m
o
o
t
h
L
1
(
t
i
u
−
v
i
)
,
.
.
.
.
.
.
.
.
.
.
.
.
.
(
2
)
L_{loc}(t^u, v) =\sum_{i∈{x,y,w,h}}smooth_{L_1}(t^u_i−v_i),.............(2)
Lloc(tu,v)=i∈x,y,w,h∑smoothL1(tiu−vi),.............(2)
其中,
s
m
o
o
t
h
L
1
(
x
)
=
{
0.5
x
2
i
f
∣
x
∣
<
1
∣
x
∣
−
0.5
o
t
h
e
r
w
i
s
e
,
.
.
.
.
.
.
.
.
.
.
.
.
.
(
3
)
smooth_{L_1}(x) =\begin{cases} 0.5x^2 & if |x| < 1 \\ |x|−0.5 & otherwise, \\ \end{cases}.............(3)
smoothL1(x)={0.5x2∣x∣−0.5if∣x∣<1otherwise,.............(3)
與R-CNN和SPPnet中使用的L2損失相比,L1損失對異常值的敏感度較低。當迴歸目標是無界的時,帶二語損失的訓練可能需要仔細調整學習率,以防止梯度的爆炸式增長。公式3消除了這種敏感性。
等式1中的超引數λ控制著兩個任務損失之間的平衡。我們將基本真理迴歸目標vi規範化為具有零均值和單位方差。所有實驗均採用λ=1。
我們注意到[6]使用一個相關的損失來訓練一個類不可知的物件建議網路。我們的分類系統和我們的分類系統不同。OverFeat[19]、R-CNN[9]和SPPnet[11]也訓練分類器和邊界盒定位器,但是這些方法使用分段訓練,我們發現這對於快速R-CNN來說是次優的(第5.1節)。
小批量取樣。 在微調過程中,每個SGD小批都是由N=2影像構造的,隨機選擇一致(正如通常的做法,我們實際上迭代資料集的排列)。我們使用的是小批量R=128,從每個影像中取樣64個ROI。如[9]所述,我們從物件提案中獲取25%的ROI,這些提案的聯合(IoU)上的交點與地面真相邊界框至少0.5重疊。這些ROI包括用前景物件類標記的示例,即u≥1。其餘ROI是從以下[11]中具有最大基真理的目標提案中取樣的[0.1,0.5]。這些是背景示例,並標記為u=0。0.1的下限似乎是硬示例挖掘的啟發式[8]。訓練過程中,影像水平翻轉,概率為0.5。未使用其他資料增強。
通過RoI池化層進行反向傳播。 反向傳播通過RoI池層路由衍生品。為了清晰起見,我們假設每個小批量(N=1)只有一個影像,儘管N>1的擴充套件很簡單,因為前向過程獨立地處理所有影像。
讓
x
i
∈
R
x_i ∈ R
xi∈R成為第i個啟用輸入到RoI池化層,讓
y
r
j
y_{rj}
yrj成為第R個ROI層的第j個輸出。RoI池層計算KaTeX parse error: Expected '}', got 'EOF' at end of input: …rj}=x_{i∗(r, j),其中
i
∗
(
r
,
j
)
=
a
r
g
m
a
x
i
′
∈
R
(
r
,
j
)
x
i
′
i∗(r, j)=argmax_{i'∈R(r, j)}x_i'
i∗(r,j)=argmaxi′∈R(r,j)xi′。
R
(
r
,
j
)
R(r, j)
R(r,j)是子視窗中輸入的索引集,輸出單元y_{rj} 最大池化。一個
x
i
x_i
xi可以分配給幾個不同的輸出
y
r
j
y_{rj}
yrj。
ROI池化層的向後函式通過以下的ARGMAX開關計算每個輸入變數席的損失函式的偏導數:
∂
L
∂
x
i
=
∑
r
∑
j
[
i
=
i
∗
(
r
,
j
)
]
∂
L
∂
y
r
j
\frac{\partial L}{\partial x_i}=\sum_r\sum_j[i=i*(r,j)]\frac{\partial L}{\partial y_{rj}}
∂xi∂L=r∑j∑[i=i∗(r,j)]∂yrj∂L
換句話說,對於每個小批量RoI
r
r
r和每個池輸出單元
y
r
j
y_{rj}
yrj,如果i是最大池化為
y
r
j
y_{rj}
yrj選擇的argmax,則累加偏導數
∂
L
/
∂
y
r
j
∂L/∂y_{rj}
∂L/∂yrj。在反向傳播中,偏導數
∂
L
/
∂
y
r
j
∂L/∂y_{rj}
∂L/∂yrj已經由RoI池化層頂部的層的向後函式計算。
SGD超引數。 用於softmax分類和邊界盒迴歸的全連通層分別從標準偏差為0.01和0.001的零均值高斯分佈初始化。偏差初始化為0。所有層對權重使用每層學習率1,對偏差使用2,全域性學習率為0.001。當在VOC07或VOC12 trainval上進行培訓時,我們執行SGD進行30k小批量迭代,然後將學習率降低到0.0001,然後再培訓10k次迭代。當我們在更大的資料集上訓練時,我們執行SGD進行更多的迭代,如後面所述。動量為0.9,引數衰減為0.0005(關於權重和偏差)。
2.4 尺度不變性
我們探索了兩種實現尺度不變目標檢測的方法:(1)通過“蠻力”學習和(2)使用影像金字塔。這些策略遵循[11]中的兩種方法。在brute-force方法中,在訓練和測試期間,每個影像都以預定義的畫素大小進行處理。網路必須直接從訓練資料中學習尺度不變的目標檢測。
相比之下,多尺度方法通過影像金字塔為網路提供近似的尺度不變性。在測試時,影像金字塔被用來近似地縮放和規格化每個物件的提議。在多尺度訓練中,我們在每次對影像進行取樣時隨機抽取一個金字塔尺度,作為資料增強的一種形式。由於GPU記憶體的限制,我們只對較小的網路進行多尺度訓練。
3. Fast R-CNN檢測
一旦一個快速的R-CNN網路被微調,檢測就只相當於執行一個前向傳遞(假設物件建議是預先計算好的)。網路以影像(或影像金字塔,編碼為影像列表)和R物件建議列表作為輸入進行評分。在測試時,R通常在2000左右,儘管我們將考慮它更大(≈45k)的情況。當使用影像金字塔時,每個RoI被分配到比例,使得縮放的RoI在區域中最接近2242畫素[11]。
對於每個測試RoI
r
r
r,前向傳遞輸出一類後驗概率分佈p和一組預測的相對於r的邊界盒偏移量(K類中的每一類都得到自己的精確邊界盒預測)。我們使用估計概率
P
r
(
c
l
a
s
s
=
k
∣
r
)
≜
p
k
Pr(class=k | r)\triangleq p_k
Pr(class=k∣r)≜pk為每個物件類k分配一個檢測置信度。然後,我們使用R-CNN[9]中的演算法和設定對每個類獨立地執行非最大值抑制。
3.1 截斷奇異值分解以加快檢測速度
對於全影像分類,與conv層相比,計算全連通層所花費的時間很小。相反,對於檢測,要處理的roi的數量很大,並且近一半的前向傳遞時間用於計算完全連線的層(參見圖2)。通過使用截斷SVD壓縮大的完全連線層,可以很容易地加快速度[5,23]。
在該技術中,由
u
×
v
u×v
u×v權重矩陣W引數化的層近似分解為
W
≈
U
∑
t
V
T
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
(
5
)
W\approx U\sum_t V^T.................(5)
W≈Ut∑VT.................(5)
使用SVD。在這種因式分解中,U是由W的第一個左奇異向量組成的
u
×
t
u×t
u×t矩陣,
∑
t
∑_t
∑t是包含W的前t個奇異值的
t
×
t
t×t
t×t對角矩陣,V是包含W的第一個t右奇異向量的
v
×
t
v×t
v×t矩陣。截斷SVD將引數計數從
u
v
uv
uv減少到
t
(
u
+
v
)
t(u+v)
t(u+v),如果
t
t
t比
m
i
n
(
u
,
v
)
min(u, v)
min(u,v)小得多,這一點可能很重要。為了壓縮網路,將對應於W的單個全連線層替換為兩個完全連線的層,它們之間沒有非線性。第一層使用權重矩陣
∑
t
V
T
∑_tV^T
∑tVT(無偏差),第二層使用U(原始偏差與W相關)。這種簡單的壓縮方法在RoI數目很大的情況下具有很好的加速效果。
4. 主要成果
三個主要結果支援了本文的貢獻:
- 2010年和2012年VOC07最新地圖
- 與R-CNN、SPPnet相比的快速訓練和測試
- 對VGG16中的conv層進行微調可以改善mAP
4.1 實驗啟動
我們的實驗使用了三個預先訓練好的線上ImageNet模型。2第一個是R-CNN[9]的CaffeNet(基本上是AlexNet[14])。我們也可以把這個CaffeNet稱為“small”。第二個網路是來自[3]的VGG_CNN_M_1024,其深度與S相同,但更寬。我們稱這種網路模型為M,表示“中等”。最後一個網路是[20]中的非常深的VGG16模型。我們稱之為模型試驗,因為這一節稱之為最大規模的模型。在本節中,所有實驗均採用單尺度訓練和測試(s=600;詳見第5.2節)。
4.2 VOC 2010 和 VOC 2012 上的結果
在這些資料集上,我們將Fast R-CNN(簡稱FRCN)與來自公共排行榜的comp4(外部資料)軌道上的頂級方法進行比較(表2,表3)。對於NUS_NIN_c2000和BabyLearning方法,目前還沒有相關的出版物,我們無法找到所用ConvNet架構的確切資訊;它們是網路設計中網路的變體[17]。所有其他方法都是從同一個預先訓練的VGG16網路初始化的。
Fast R-CNN在VOC12上獲得了最高的結果,mAP為65.7%(額外資料為68.4%)。它也比其他方法快兩個數量級,這些方法都是基於“慢”的R-CNN管道。在VOC10上,segdepm[25]實現了比Fast R-CNN更高的mAP(67.2%對66.1%)。segdepm是針對VOC12 train val plus分段註釋進行訓練的;它的目的是通過使用馬爾可夫隨機場來推理R-CNN檢測和O2P[1]語義分割方法的分段來提高R-CNN的準確性。快速R-CNN可以替換成segdepm來代替R-CNN,這可能會產生更好的結果。當使用擴大的07++12訓練集(見表2標題)時,Fast R-CNN的地圖增加到68.8%,超過SegDeepm。
4.3 VOC 2007 上的結果
在VOC07上,我們比較了快速R-CNN與R-CNN和SPPnet。所有方法都從同一個預先訓練的VGG16網路開始,並使用邊界盒迴歸。VGG16 SPPnet結果由[11]的作者計算。SPPnet在訓練和測試中使用五種量表。與SPPnet相比,Fast R-CNN的改進表明,儘管Fast R-CNN使用單一尺度的訓練和測試,但對conv層進行微調可以顯著提高mAP(從63.1%提高到66.9%)。R-CNN達到了66.0%的地圖。作為次要的一點,SPPnet是在沒有PASCAL標記為“困難”的例子的情況下訓練的。刪除這些例子將快速R-CNN對映提高到68.1%。所有其他的實驗都使用“困難”的例子。
表1. VOC 2007測試檢測平均精度(%)。所有方法都使用VGG16。訓練集金鑰:07:VOC07 trainval,07\diff:07,無“困難”示例,07+12:07和VOC12 trainval的聯合。SPPnet結果由[11]的作者編寫
表2. VOC 2010測試檢測平均精度(%)。BabyLearning使用基於[17]的網路。所有其他方法都使用VGG16。訓練集鍵:12:VOC12 trainval,屬性:專有資料集,12+seg:12帶分段註釋,07++12:VOC07 trainval、VOC07 test和VOC12 trainval的聯合
表3. VOC 2012測試檢測平均精度(%)。BabyLearning和NUS_NIN_c2000使用基於[17]的網路。所有其他方法都使用VGG16。訓練集金鑰:見表2,未知
4.4 訓練和測試時間
快速的培訓和測試時間是我們的第二大成果。表4比較了Fast R-CNN、R-CNN和SPPnet在VOC07上的訓練時間(小時)、測試速率(每幅影像秒數)和對映。對於VGG16,Fast R-CNN處理影像的速度比R-CNN快146倍,不截斷SVD,處理速度213倍。培訓時間減少9倍,從84小時減少到9.5小時。與SPPnet相比,快速R-CNN訓練VGG16的速度比SPPnet快2.7倍(9.5小時vs.25.5小時),在沒有截短SVD的情況下測試速度提高了7倍,或者使用它的速度提高了10倍。Fast R-CNN還消除了數百GB的磁碟儲存,因為它不快取功能。
表4. Fast R-CNN、R-CNN和SPPnet中相同模型的執行時比較。Fast R-CNN使用單標度模式。SPPnet使用[11]中規定的五個尺度。由[11]的作者提供的時間。時間是在Nvidia K40 GPU上測量的
截短SVD。 截斷SVD可以減少30%以上的檢測時間,mAP只有一個小的(0.3%的年齡點)下降,而且不需要在模型壓縮後進行額外的微調。圖2說明了如何使用VGG16的fc6層中的25088×4096矩陣的前1024個奇異值和來自4096×4096 fc7層的前256個奇異值來減少執行時,並且在mAP中幾乎沒有損失。進一步的加速是有可能的更小的下降地圖,如果一個微調後再次壓縮。
圖2. 截斷SVD前後VGG16的定時。在SVD之前,完全連線的層fc6和fc7佔用了45%的時間
4.5 微調哪些層?
對於SPPnet論文[11]中考慮的深度較低的網路,僅對完全連線的層進行微調似乎就足以獲得良好的精度。我們假設這個結果不適用於非常深的網路。為了驗證微調conv層對VGG16的重要性,我們使用Fast R-CNN進行微調,但凍結13個conv層,以便只有完全連線的層學習。這種消融模擬單尺度SPPnet訓練,使mAP從66.9%降低到61.4%(表5)。這個實驗驗證了我們的假設:通過RoI池層進行訓練對於非常深的網路非常重要。
表5. 限制為VGG16微調哪些層的效果。微調≥fc6模擬SPPnet訓練演算法[11],但使用單一尺度。SPPnet L結果使用五個量表獲得,速度成本顯著(7倍)
這是否意味著所有的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,最後一列)。本文中的所有快速R-CNN結果使用VGG16微調層conv3_1和更高版本;所有實驗都使用模型S和M微調層conv2和更高版本。
5. 設計評估
我們進行了實驗來了解R-CNN與R-CNN和SPPnet相比有多快,以及評估設計決策。按照最佳實踐,我們在PASCAL VOC07資料集上進行了這些實驗。
5.1 多工訓練有幫助嗎?
多工訓練非常方便,因為它避免了對連續訓練任務的管道進行管理。但它也有可能改善結果,因為任務通過共享表示(ConvNet)相互影響[2]。多工訓練能提高Fast R-CNN的目標檢測精度嗎?
為了測試這個問題,我們訓練只使用公式1中分類損失L cls的基線網路(即設定λ=0)。模型S、M和L的這些基線列印在表6中每組的第一列中。請注意,這些模型沒有邊界框迴歸。下一步(每組第二列),我們使用多工損失(等式1,λ=1)訓練的網路,但我們在測試時禁用邊界盒迴歸。這將隔離網路的分類精度,並允許與基線網路進行蘋果對蘋果的比較。
表6. 多工訓練(每組第四列)比分段訓練(每組第三列)改善mAP
在所有三個網路中,我們觀察到多工訓練相對於單獨的分類訓練提高了純粹的分類精度。改進範圍從+0.8到+1.1個地圖點,顯示出多工學習的一致積極效果。
最後,我們取基線模型(只訓練分類損失),固定在邊界盒迴歸層上,在保持所有其他網路引數不變的情況下,用L-loc對其進行訓練。每組的第三列顯示了這個階段性訓練方案的結果:mAP比第一列有所改善,但是階段性訓練在多工訓練下進行(每組第四列)。
5.2 尺度不變性:暴力還是精細?
我們比較了兩種實現尺度不變目標檢測的策略:暴力學習(單尺度)和影像金字塔(多尺度)。在這兩種情況下,我們都將影像的比例s定義為其最短邊的長度。
所有單尺度實驗都使用s=600畫素;對於某些影像,s可能小於600,因為我們將影像的最長邊限制在1000畫素,並保持影像的縱橫比。在對這些值進行微調時,在VGPU記憶體中選擇了這些值。較小的模型不受記憶體限制,可以從較大的s值中獲益;但是,為每個模型優化s不是我們主要關心的問題。我們注意到PASCAL影像平均為384×473畫素,因此單比例設定通常會將影像的取樣率提高1.6倍。因此,RoI池層的平均有效步幅約為10畫素。
在多尺度設定中,我們使用了文獻[11]中指定的相同的五個尺度(s∈{480576688641200})來與SPPnet進行比較。然而,為了避免超過GPU記憶體,我們將最長邊限制在2000畫素。
表7顯示了使用一個或五個比例尺進行訓練和測試時的模型S和M。也許[11]中最令人驚訝的結果是單尺度檢測的效能幾乎和多尺度檢測一樣好。我們的研究結果證實了他們的結論:深層ConvNets善於直接學習尺度不變性。多比例尺方法只提供了少量的地圖增加,但計算時間卻很大(表7)。在VGG16(model L)的情況下,我們僅限於使用單一的按實現細節劃分的比例。然而,它得到了66.9%的地圖,略高於R-CNN[10]報告的66.0%,儘管R-CNN使用“無限”的比例,即每個提議都被扭曲到一個標準大小。
由於單尺度處理在速度和精度之間提供了最佳的折衷,特別是對於非常深的模型,本小節以外的所有實驗都使用單尺度訓練和s=600畫素的測試。
表7. 多尺度vs.單尺度。SPPnet ZF(類似於模型S)的結果來自[11]。單一規模的大型網路提供了最佳的速度/精度折衷。(由於GPU記憶體限制,L無法在我們的實現中使用多尺度)
5.3 我們需要更多的訓練資料嗎?
一個好的目標檢測器在提供更多的訓練資料時應該得到改進。朱等。[24]發現DPM[8]mAP在只有幾百到幾千個培訓示例之後就會飽和。在這裡,我們用VOC12 TranVal集合增加了VOC07訓練集,大約將影像數量增加了三倍,達到16.5k,以評估快速R-CNN。擴大訓練集可以使VOC07測試的mAP從66.9%提高到70.0%(表1)。在這個資料集上進行訓練時,我們使用60k次小批量迭代,而不是40k次。
我們對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 SVM優於Softmax嗎?
Fast R-CNN使用在微調過程中學習的softmax分類器,而不是像R-CNN和SPPnet中那樣訓練one-vs-rest線性支援向量機。為了瞭解這種選擇的影響,我們在快速R-CNN中實現了帶有硬負挖掘的後hoc支援向量機訓練。我們使用與R-CNN相同的訓練演算法和超引數。
表8. Fast R-CNN使用softmax和SVM的對比(VOC 2007 mAP)
表8顯示,在所有三個網路中,softmax的效能略優於SVM,+0.1到+0.8個對映點。這種影響很小,但它表明,與以前的多階段訓練方法相比,“一次性”微調就足夠了。我們注意到,softmax不同於one-vs-rest-svm,在獲得RoI時引入了類之間的競爭。
5.5 更多的建議總是更好嗎?
有兩種型別的物件檢測器:使用稀疏物件建議集的物件檢測器(例如,選擇性搜尋[21])和使用密集集的物件檢測器(例如DPM[8])。對稀疏提議進行分類是一種級聯[22],其中提議機制首先拒絕大量的候選物件,而留給分類器的是一個小集合來評估。當應用於DPM檢測時,這種級聯提高了檢測精度[21]。我們發現,建議分類器級聯也提高了快速R-CNN的準確性。
使用選擇性搜尋的質量模式,我們從每幅影像掃描1k到10k個建議,每次重新訓練和重新測試模型M。如果方案純粹是作為計算的角色,增加每個影像的建議數量應該不會損害mAP。
圖3. 各種方案的VOC07 測試 mAP 和 AR
圖3的建議稍微增加了一點。這個實驗表明,用更多的建議來淹沒深層分類器對精度沒有幫助,甚至有輕微的傷害。
如果不進行實際的實驗,很難預測這個結果。測量物件建議質量的最新技術是平均召回率(AR)[12]。當每個影像使用固定數量的建議時,使用R-CNN的幾種建議方法AR與mAP有很好的相關性。圖3示出了AR(實心紅線)與mAP的相關性不好,因為每個影像的建議數是不同的。AR必須小心使用;由於更多建議而導致的AR較高並不意味著mAP會增加。幸運的是,使用M型進行培訓和測試所需時間不到2.5小時。因此,快速R-CNN能夠有效、直接地評估物件建議對映,這比代理度量更可取。
我們還研究了快速R-CNN當使用密集生成的盒(超過比例,位置和縱橫比),在大約45k盒/影像的速率。這個稠密的集合足夠豐富,當每個選擇的搜尋框被最接近的(在IoU中)密集的框替換時,mAP只下降1個點(到57.7%,圖3,藍色三角形)。
密集框的統計資訊與選擇性搜尋框的統計資料不同。從2k個選擇性搜尋框開始,在隨機增加1000個密集盒樣本的情況下測試mAP。對於每個實驗,我們重新訓練和測試模型M。當這些密集的框被新增時,mAP下降的幅度比新增更多選擇性搜尋框時更大,最終達到53.0%。
我們還訓練和測試快速R-CNN只使用密集盒(45k/影像)。此設定生成52.9%(藍色鑽石)的貼圖。最後,我們檢查是否需要使用具有硬負挖掘的支援向量機來處理密集箱型分佈。SVM表現更差:49.3%(藍圈)。
5.6 MS COCO上的初步結果
我們將Fast R-CNN(VGG16)應用於MS-COCO資料集[18],以建立初步基線。我們在80k影像訓練集上訓練了240k次迭代,並使用evaluation伺服器在“test dev”集上進行了評估。PASCAL風格的地圖是35.9%;新的COCO風格的AP,平均也超過IoU閾值,是19.7%。
6. 結論
本文提出了快速R-CNN,一種對R-CNN和SPPnet的乾淨、快速的更新。除了報告最新的檢測結果,我們還提供了詳細的實驗,我們希望能提供新的見解。特別值得注意的是,稀疏物體的建議似乎可以提高探測器的質量。在過去,這個問題的成本(在時間上)太高了,但隨著Fast R-CNN的出現,這個問題變得實際了。當然,可能存在一些尚未被發現的技術,允許密集的盒子執行稀疏的提議。這種方法,如果發展起來,可能有助於進一步加速目標檢測。
致謝
感謝Kaiming He, Larry Zitnick, 和 Piotr Dollár 的有益討論和鼓勵。
參考文獻
相關文章
- 深度學習論文翻譯解析(十二):Fast R-CNN深度學習ASTCNN
- 一文讀懂目標檢測:R-CNN、Fast R-CNN、Faster R-CNN、YOLO、SSDCNNASTYOLO
- 【目標檢測】Fast R-CNN演算法實現ASTCNN演算法
- 目標檢測入門系列手冊三:Fast R-CNN 訓練教程ASTCNN
- 賈佳亞等提出Fast Point R-CNN,利用點雲快速高效檢測3D目標ASTCNN3D
- Sparse R-CNN: End-to-End Object Detection with Learnable Proposals - 論文閱讀翻譯CNNObject
- Faster R-CNNASTCNN
- fast-inAST
- Fast Car GameASTGAM
- fast-bevAST
- 目標檢測技術演化:從R-CNN到Faster R-CNNCNNAST
- Fail-Fast in JavaAIASTJava
- Fail - Fast機制AIAST
- ASM Fast Mirror ResyncASMAST
- fast planner總結AST
- 自研 Fast.ORM 已全面支援AOT編譯ASTORM編譯
- 深度學習論文翻譯解析(十三):Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks深度學習ASTCNNObject
- 【目標檢測】R-CNNCNN
- FAST Globular Cluster observation logAST
- Faster R-CNN演算法解析ASTCNN演算法
- 程式碼實踐——Faster R-CNNASTCNN
- Fail-fast 機制分析AIAST
- [Java基礎]Fail-FastJavaAIAST
- 密度聚類。Clustering by fast search and聚類AST
- R-CNN系列其二:SPP-NetCNN
- fail-fast和fail-safeAIAST
- Git提交遇到non-fast-forwardGitASTForward
- CUTLASS: Fast Linear Algebra in CUDA C++ASTC++
- fast-CGI 和 PHP-fpmASTPHP
- vLLM: Easy, Fast, and Cheap LLM Serving with PagedAttentionAST
- Faster R-CNN: Down the rabbit hole of modern object detectionASTCNNObject
- Fast角點檢測演算法AST演算法
- A lightweight, ultra-fast tool for building observability pipelinesASTUI
- CNN--卷積神經網路從R-CNN到Faster R-CNN的理解(CIFAR10分類程式碼)CNN卷積神經網路AST
- 經典目標檢測方法Faster R-CNN和Mask R-CNN|基於PaddlePaddle深度學習平臺的實戰ASTCNN深度學習
- 使用electron進行子頁面全文翻譯--【Foam番茄】
- fast-spring-boot快速開發專案ASTSpringboot
- Fastadmin fast.api.open回撥函式ASTAPI函式