摘要
這篇論文提出一種用於目標檢測的Fast R-CNN算法。Fast R-CNN建立在之前的研究工作,使用深度卷積網絡來高效的分類目標提案。相比於之前的工作,Fast R-CNN采用了一些創新來提高訓練和測試的速度,同時也提高了檢測的准確率。Fast R-CNN訓練深度VGG16網絡比訓練R-CNN快9倍,在測試時快213倍,並且在PASCAL VOC 2012數據集上獲得了一個更高的平均平均准確率(mAP)。和SPPnet相比,Fast R-CNN訓練VGG16比它快3倍,測試時快10倍,並且更加准確,Fast R-CNN采用python和C++(Cafe)實現,開源代碼。
1 引言
目前,深度卷積網絡已經明顯的提高了圖像分類和目標檢測的准確率。相比於圖像分類,目標檢測則是一項更具挑戰性的任務,它需要更加復雜的方法來解決。由於這種復雜性,目前多級管道中所獲得的模型速度緩慢而且粗糙。
復雜性的產生是由於檢測需要對目標進行精確的定位,這就產生了兩個主要的挑戰。第一,必須處理大量的候選目標位置(通常稱為“提案”);第二,這些候選目標位置僅提供一個粗略的定位,這就必須對其進行改進以提供更加精確的定位。解決這些問題往往會影響速度、准確性和簡單性。
在本文中,我們簡化了最先進的基於卷積神經網絡的目標檢測器的訓練過程,我們提出了一種單級的訓練算法,這種算法同時學習分類目標的候選方案和改進他們的空間位置。
由此產生的方法可訓練一個非常深的檢測網絡(VGG16),該網絡比R-CNN快9倍,比SPPnet快3倍。在運行時,該檢測網絡處理一幅圖像耗時3s(不包括目標方案生成時間),並且在PASCAL VOC 2012數據集上取得最好的准確率66%mAP(R-CNN:62%)
1.1 R-CNN與SPPnet
R-CNN使用深度卷積網絡來分類目標提案獲得了非常好的目標檢測准確率,但是,R-CNN有一些明顯的缺點:
- 1.多階段訓練過程 R-CNN首先采用log損失在目標提案上微調卷積神經網絡,然后,訓練適合卷積網絡特征的SVM,這些SMV作為目標檢測器,使用微調來代替softmax分類器。在第三階段,進行邊界框回歸。
- 2.訓練空間和時間消耗大 對於SVM和邊界框回歸的訓練,特征是從每一幅圖像的每一個目標提案提取出來並寫入磁盤中的。使用深度網絡,例如:VGG16,對於VOC 2007 訓練集的5K圖像來說,這個過程要使用GPU訓練兩天半,這些特征需要數百GB的存儲空間來存儲。
- 3.目標檢測速度慢 在測試時,特征是從每一幅測試圖像的每一個目標提案中提取出來的,采用VGG16的檢測器處理一幅圖像需要47s(在GPU上)。
R-CNN速度慢是因為每一個目標提案都會通過卷積神經網絡進行前向計算,而不共享計算。空間金字塔池化網絡(SPPnet)通過共享計算加速了R-CNN。SPPnet方法為整個輸入圖像計算一個卷積特征映射,然后使用從共享特征映射中提取的特征向量對每個目標提案進行分類。通過最大池化提案內部的部分特征映射來形成一個固定大小的輸出(例如:6x6)達到特征提取的目的。多種大小的輸出匯集在一起,然后連接成空間金字塔池化(SPP)。在測試時,SPPnet加速了R-CNN10到100倍,在訓練時,由於更快的提案特征提取過程,也加速了3倍。
SPPnet也有一些明顯的缺點。像R-CNN一樣,它的訓練過程也是一個多階段過程,這個過程圍繞特征提取、采用log損失對網絡進行微調、訓練SVM和最后的擬合邊界框回歸展開。特征也要寫入磁盤,但是,在[11]中提出微調算法不更新SPP之前的卷積層參數。不出所料,這些限制限制了深度網絡的准確率。
1.2 貢獻
我們提出了一種新的算法來彌補R-CNN和SPPnet的不足,同時提升了它們的速度和准確率。我們稱這種方法為Fast R-CNN,因為在訓練和測試時相對較快。Fast R-CNN有如下優點:
- 1.比R-CNN和SPPnet更高的檢測質量;
- 2.采用多任務損失,訓練過程為單階段;
- 3.訓練可以更新所有網絡層;
- 4.特征緩存不需要磁盤存儲。
Fast R-CNN采用Python和C++(Cafe)實現,開源代碼。

圖1 Fast R-CNN結構 一幅輸入圖像和多個感興趣區域(RoI)輸入到一個全卷積網絡,每一個RoI都被池化為一個固定大小的特征映射,然后通過全連接網絡映射到特征向量。該網絡對於每一個RoI都有兩個輸出向量:softmax概率和每一類的邊界框回歸補償。這種結構是采用多任務損失訓練的端到端結構。
2 Fast R-CNN結構和訓練
圖1展示了Fast R-CNN的結構。Fast R-CNN網絡將一幅完整的圖像和一系列目標提案作為輸入。該網絡首先采用一些卷積層和最大池化層生成卷積特征映射來處理整個圖像。然后,對於每一個目標提案,感興趣區域(RoI)池化層從特征映射中提取出一個固定長度的特征向量。每一個特征向量被送到一系列的全連接層(fc)最終分支到兩個同級輸出層:一層是在所有K個目標類加上一個全方位的背景類產生softmax概率估計;另一層則對每個K類目標輸出4個真實數字,每一組的4個值編碼了一個K類目標的精確的邊界框位置。
2.1 RoI池化層
RoI池化層采用最大池化將任何有效的RoI內部特征轉換為具有HxW固定空間范圍的小的特征映射,H和W為層超參數,它們獨立於任何的RoI。在本文中,每一個RoI都被定義為一個四元(r,c,h,w)組,這個四元組指定了RoI左上角的位置(r,c)和它的高度和寬度(h,w)。
RoI最大池化的工作是將h x w的RoI窗口划分為一個H x W的網格,其子窗口近似大小為h/H x w/W。然后,將每個子窗口中的值合並到相應的輸出網格單元中。池化被獨立的應用到每一個特征映射通道,作為標准的最大池化。RoI層就是應用在SPPnet中的空間金字塔池化層的簡單應用,在這里它只有一層金字塔等級。我們使用[11]中給出的池子窗口計算。
2.2 從預訓練網絡初始化
我們使用三個ImageNet 預訓練網絡進行試驗,每個網絡都有5個最大池化層和5到13個卷積層。當一個預訓練的網絡初始化一個Fast R-CNN網絡時,它會經歷三個轉換。
首先,用一個RoI池化層替換最后一個最大池化層,它通過設置H和W來與網絡的第一個全連接層相適應(例如:VGG16的H和W為7)。
然后,網絡的最后一個全連接層和softmax(訓練用於1000類ImageNet圖像分類)用之前所描述的兩個同級輸出層(一個全連接層和K+1類的softmax和類特定的邊界框回歸)替換。
最后,該網絡被修改為接受兩個數據輸入:一系列圖像和一系列圖像的RoI。
2.3 檢測微調
采用反向傳播計算所有網絡權重是Fast R-CNN的一項非常重要的能力,讓我來解釋一下為什么SPPnet在空間金字塔池化層下不能更新權重。
根本原因是當來自於不同圖像的訓練樣本通過SPP層時,它所使用的反向傳播算法的效率是非常低的,這是由SPPnet和R-CNN的訓練方式所決定的。這種低效源於這樣一個事實,那就是每一個RoI有一個非常大的感受野,通常包含整個圖像。由於前向傳播必須處理整個感受野,而訓練輸入又很大(通常是整幅圖像)。
我們提出了一種更加有效的訓練方式,那就是在訓練時利用特征共享的優點。在Fast R-CNN的訓練中,隨機梯度下降(SGD)的小批采用分層次采樣,首先采樣N幅圖像,然后從每幅圖像中采樣R/N個RoI。關鍵的是,來自同一圖像的RoI在前向和后向過程中共享計算和內存。使用N的小批量減少小批量的計算量。例如當N等於2,R等於128時,這個訓練過程要比從128幅不同的圖像中采樣一個RoI(即R-CNN和SPPnet的策略)快64倍。
這一策略的一個擔憂就是,這可能會導致訓練收斂緩慢,因為同一幅圖像中的RoI是具有相關性的。我們將N和R分別設置為2和128,並且使用比R-CNN更少的SGD迭代次數,我們取得了一個不錯的結果,使得這種擔憂沒有成為一個實際問題。
除了分層抽樣之外,Fast R-CNN使用了具有一個微調階段的流線型訓練過程,這個微調階段聯合優化了一個softmax分類器和邊界框回歸,而不是訓練一個softmax分類器、SVM和三個獨立階段的回歸。這個過程的組成部分(損失、小批量采樣策略、RoI池化層的反向傳播、SGD超參數)在下面進行講述。
-
多任務損失 一個Fast R-CNN網絡具有兩個同級輸出層。第一個輸出是所有K+1類的一個離散概率分布(每一個RoI),
。和往常一樣,p由全連接層的K+1個輸出上的softmax計算。第二個同級層輸出邊界框回歸補償,
對每一個K目標類采用k進行索引。我們采用了在[9]中提出的參數化方法參數化tktk,tktk表示一個尺度不變的變換和log空間的高寬相對於目標提案的偏移。
每一個訓練RoI都被標記為一個真實類u和一個真實邊界框回歸目標v。對分類和邊界框回歸,我們在被標記的RoI上使用多任務損失L來訓練:
其中
是對真實類u的log損失。
第二個任務損失,即LlocLloc,由類u的一組真實邊界框回歸目標
和類u的預測元組