論文標題:Fast R-CNN
論文作者:Ross Girshick
https://arxiv.org/pdf/1504.08083.pdf
Fast RCNN 的GitHub地址:https://github.com/rbgirshick/fast-rcnn
參考的Fast R-CNN翻譯部落格:http://www.dengfanxin.cn/?p=403 https://blog.csdn.net/ghw15221836342/article/details/79549500
宣告:小編翻譯論文僅為學習,如有侵權請聯絡小編刪除博文,謝謝!
小編是一個機器學習初學者,打算認真研究論文,但是英文水平有限,所以論文翻譯中用到了Google,並自己逐句檢查過,但還是會有顯得晦澀的地方,如有語法/專業名詞翻譯錯誤,還請見諒,並歡迎及時指出。
1,前言
在R-CNN網路結構模型中,由於卷積神經網路的全連線層對於輸入的影像尺寸有限制,所以所有候選區域的影像都必須經過變形轉換後才能交由卷積神經網路模型進行特徵提取,但是無論採用剪下(crop)還是採用變形(warp)的方式,都無法完整保留原始影像的資訊,Kaiming He等人提出的空間金字塔池化層(Spatial Pyramid Pooling Layer)有效的解決了傳統卷積神經網路對輸入影像的尺寸限制。
SPP-net:R-CNN候選區域縮放後畸變問題和提取特徵時的重複計算導致了模型效能和速度的瓶頸。為了解這些問題,2015年,Kaming He等人提出了SPP-net,在保證效能的同時,檢測速度也有了較大的提升。論文之前有翻譯。
R-CNN 需要對候選區域進行縮放的原因是全連線層的輸入維度必須固定。整個網路包含底部的卷積層和頂部的全連線層,卷積層能夠適用任意尺寸的輸入影像,產生相應維度的特徵圖,但是全連線層不同,全連線層的引數是神經元對於所有輸入的連線權重,即如果輸入維度不固定,全連線層的引數數量也無法確定,網路將無法訓練。為了既能固定全連線層的輸入維度又不讓候選區域產生畸變,很自然的想法就是在卷積層和全連線層的銜接處加一個新的網路層,使得通過該層後特徵的維度可以固定,在SPP-net中引入的空間金字塔池化層(Spatial Pyramid Pooling Layer,SPP Layer)就是這樣一種網路層,SPP-net也因此而得名。
此外,SPP-net 也解決了R-CNN重複計算的問題。SPP-net 的思路是由於原圖與經過卷積層後得到的特徵圖在空間位置上存在一定的對應關係,所以只需要對整張圖片進行一次卷積層特徵提取,然後將候選區域在原圖的位置對映到卷積層的特徵圖上得到該候選區域的特徵,最後將得到每個候選區域的卷積層特徵輸入到全連線層進行後續操作。
下面回顧一下SPP-net的目標檢測整體流程:
1,輸入一幅待檢測影像
2,提取候選區域:利用 Selective Search演算法在輸入影像中提取出約 2000個最有可能包含目標例項的候選框
3,候選區域尺度縮放:候選區域長寬中的較短邊長度進行統一,即 min(w, h) = s,s 屬於 { 480, 576, 688, 864, 1200},s取值標準是使用統一後的候選區域尺寸與 224*224最接近
4,特徵提取:利用SPP-net網路結構提取特徵
5,分類與迴歸:根據所提特徵,利用SVM進行分類,用邊框迴歸器微調候選框的位置
空間金字塔池化操作有許多明顯的優點:一是實現了任意尺寸輸入,固定大小輸出。層多可對任意尺度提取的特徵進行池化。二是大大降低了計算時間。將某一大小的圖片輸入到卷積神經網路中,結果特徵值提取處理得到了特徵圖(feature maps),然後利用空間金字塔池化對所有的候選框進行處理處理可以得到固定長度的特徵向量。相比之下,R-CNN是將所有的候選框——輸入之後再進入CNN來處理,在R-CNN中,一般使用Selective Search方法將一種圖片生成多個(2000個左右)候選區,再對於每個候選框內影像塊提取特徵,使用分類器判別對候選框中提取出的這些特徵是否屬於一個特定類。對於屬於某一特徵的候選框,用迴歸器進一步調整其位置。使用過分割的方法將資料分割成小區域,然後不斷地重複合併可能性最高的兩個區域直到整張圖片上合併為一個區域為止。因為空間金字塔池化操作對整張圖片的特徵提取過程是操作了一次。R-CNN遍歷了一個CNN 2000次,而SPP-net只遍歷了一次,而兩者最後都是採用SVM演算法進行了特徵向量分類識別,所以整體計算速度提高了很多倍。
SPP layer 一般跟在卷積層後面,此時網路的輸入可以是任意尺度的,在 SPP layer中每一個 pooling 的 filter會根據輸入調整大小,而SPP的輸出則是固定維度的向量,然後給到全連線FC層。
SPPnet 解決了R-CNN 重複提取候選區域特徵的問題,同時執行各種尺寸影像作為輸入,解決了影像畸變的問題,但R-CNN的其他問題,如訓練步驟繁瑣,磁碟空間開銷大等依然有待解決。
為了解決R-CNN的訓練速度慢,訓練所需空間大的問題,R-CNN的原作者Ross Girshick對R-CNN做出了改進,提出了Fast R-CNN,該網路吸收了SPP-net的特點,使得目標檢測的速度大幅提升,論文名字為”Fast R-CNN”。下面領略一下其風采。
摘要
本文提出了一種Fast Region-based (快速的基於區域)的卷積網路方法(Fast R-CNN)進行目標檢測。Fast R-CNN 以先前的工作為基礎,使用深度卷積網路對目標提案進行有效分類。與之前的工作相比,Fast R-CNN 採用了一些創新技術來提高訓練和測試速度,同時也提高了檢測精度。Fast R-CNN 訓練非常深的 VGG16 網路比 R-CNN 快 9倍,測試比R-CNN快了 213倍,並在PASCAL VOC 2012 上實現了更高的mAP,與SPP-net相比,Fast R-CNN在VGG16網路上的訓練的速度快了 3倍,測試速度提高了10倍,並且更加準確。Fast R-CNN 是使用Python和C++實現的(基於Caffe)。
1,引言
最近,深度卷積網路在影像分類(image classification)和物體檢測(object detection)領域有了很明顯的提高。相比於影像分類問題,物體檢測是一個更具有挑戰性的任務,它需要使用更復雜的方法去解決。正是由於這種複雜性,當前很多訓練模型的方法都是採用多階段流水線的形式,不僅很慢而且很不優雅。
複雜性產生(Complexity arises)的原因是檢測需要獲得目標物體的精確位置,從而產生了兩個主要的挑戰(Challenges)。首先,許多的物體候選區域(經常被稱為'Proposals')必須被處理。其次,這些所謂的候選區域僅僅能提供物體的一個粗略位置資訊,因此必須對它進行細化(Refine)以實現更精確的定位。解決這些問題往往需要在速度,精度,簡易性上進行適當地妥協折中(Compromise)。
在這篇論文中,我們簡化了(Streamline)基於最先進(state-of-the-art)的卷積網路的物體檢測的訓練過程(這裡指R-CNN和SPP-net),我們提出了一種單階段(single-stage)的訓練演算法(algorithm),該演算法將候選區域物體分類和他們的空間位置細化合並在一起去學習訓練(這裡指的是影像分類和邊界框迴歸)。
由此產生的方法可以訓練一個非常深的卷積網路(VGG16,9倍於RCNN,3倍於SPP-net)。在測試時,檢測網路處理一張圖片僅僅需要 0.3 s(不包括候選區域的產生時間),而且在PASCAL VOC 2012上的mAP為 66%(R-CNN 僅為62%)。
1.1 R-CNN 和 SPP-net
基於基於的卷積網路方法(R-CNN)通過使用深度卷積網路完成了對物體候選區域的分類,並得到了很好的物體檢測精度。然後,R-CNN有著明顯的缺陷(notable drawbacks):
1,訓練是多階段流水線(multi-stage Pipeline):首先,R-CNN利用物體候選區域(Object Proposals)對卷積網路(ConvNet)模型進行調優(fine-tunes),損失函式採用的是log損失(其實就是Softmax函式)。然後,讓SVMs去適應了卷積特徵(其實就是訓練了SVM分類器)。這些SVMs通過 fine-tuning 取代了Softmax 分類器作為物體檢測器。在第三個訓練階段,邊界框(Bounding-box)迴歸器被訓練學習。
2,訓練在空間和時間上都很昂貴(expensive):對於SVM分類器和邊界框迴歸器的訓練來說,所輸入的特徵需要每一張圖的每一個候選區域中被提出(extract),並被寫入磁碟(disk)。對於非常深的網路,比如VGG16,訓練VOC 2007的大約 5000張圖片的訓練集需要花費 2.5個GPU-days,這些特徵需要數百GB的儲存空間(storage)。
3,物體檢測速度很慢(slow):在測試時,特徵從每一張測試圖片的每一個物體候選區域被提取出來。對於 VGG16網路來說,檢測一張圖片花費 47s(在GPU上)。
R-CNN 很慢的原因是對於圖片的每一個候選區域都執行一次前向傳播計算(提取特徵的卷積層),沒有共享卷積計算(sharing computation)。SPP-net提出了共享計算去加速R-CNN演算法。SPP-net方法對於一張完整的輸入圖片只計算一次卷積特徵對映,然後從共享的特徵對映提取每一個物體候選區域所對應的特徵向量並做分類處理。對於每一個候選區域最大池化(max pooling)它的特徵對映提取他的特徵向量,輸出是固定的大小。匯聚多種不同大小的池化輸出,然後在空間金字塔池化層連線他們。SPP-net 在測試上是R-CNN的 10~100倍;在訓練時由於加快了候選區域的特徵提取,訓練時間減少3倍。
SPP-net 也存在很明顯的缺點。像R-CNN一樣,訓練是多階段流水線,包含特徵提取,利用log損失(Softmax) fine-tuning 網路,訓練 SVM分類器,最終擬合了邊界框迴歸器。這些訓練所需提取的特徵需要存入磁碟。但是和R-CNN不同的是,在SPP-net中的 fine-tuning 不同更新空間金字塔之前的池化層之前的卷積層。不足為奇,這種限制(固定的卷積層)限制了非常深的網路(VGG16)的精度。
1.2 貢獻(Contributions)
我們提出了一種新的訓練演算法(algorithm),該演算法在消除/修復(fix)R-CNN和SPP-net缺點的同時,還提高了他們速度和精度。我們把這種方法叫做Fast R-CNN,因為該方法在訓練和測試的時候還是比較快的。Fast R-CNN 方法的優點如下:
(1)比R-CNN和SPP-net更高的檢測精度(mAP)
(2)訓練是單階段的,使用多工損失函式
(3)訓練可以更新所有的網路層引數
(4)不需要磁碟去儲存大量提取的特徵
Fast R-CNN 演算法是使用Python和C++(Caffe)來編寫實現的,他們可以在開源的 MIT license下獲得。
2,Fast R-CNN 的架構和訓練
圖1說明了(illustrates)了Fast R-CNN 的架構。Fast R-CNN 網路將一個完整的影像和一組目標推薦區域作為輸入。該網路首先通過幾個(幾組)卷積層和最大池化層處理輸入的整個影像產生一個卷積特徵對映(feature map)。然後,對於每一個目標推薦區域,使用感興趣區域(ROI)池化層從特徵對映圖上提取固定維度的特徵向量。每一個特徵向量被輸入(fed into)到一系列全連線層中,最終得到了兩個同級的輸出:第一個輸出產生的是一個(K+1)類的Softmax概率估計(Probability estimates),它包括了K個目標類別和一個背景類;第二個層是對於K個目標類的每一個類別輸出4個實數值。K類目標的每一類的4個數字對邊界框的位置進行編碼,以獲得更精細(refine)的邊界框位置。 圖1,Fast R-CNN 架構,輸入圖片和多個感興趣區域 ROI 被輸入到全卷積網路(這裡指卷積網路的前面的所有卷積層)。每個感興趣區域 ROI 被池化為固定尺寸的特徵對映,然後通過全連線層對映到特徵向量。網路中的每個ROI有兩個輸出向量:Softmax概率和每個類別的檢測框迴歸偏移量,該架構使用多工損失函式實現了端到端的訓練。
2.1 ROI pooling層(感興趣區域池化層)
ROI 池化層使用最大池化操作將任何有效的感興趣區域內的特徵轉換為一個固定空間範圍 H*W(例如:7*7)較小的特徵對映,其中H和W是獨立於任何特定(particular)的ROI區域的超引數(hyper-parameters)。在本文中,每一個 ROI 是被轉換為再卷積特徵對映上的一個矩形視窗。每個RoI通過4元組(r,c,h,w)來定義,矩形左上角頂點(r,c),矩形的高和寬是(h,w)。
感興趣區域最大池化的作用是通過尺寸大約(approximate) h/H * w/W 的子視窗將 h*w 的 ROI視窗劃分(dividing)為 H*W 的網格(grid cell),然後將每個子視窗中的值最大池化到相應的輸出網格單元。赤化操作是標準的最大池化,它獨立的作用於特徵對映的每一個通道(池化是不跨通道的)。RoI層是SPPNet網路中的空間金字塔池化層的一個簡單的特例,它是隻有一個尺度的金字塔層。我們使用文獻[11](這裡就是何愷明的SPPNet)中給出的池化視窗進行計算。
2.2 從預訓練(pre-trained)的網路初始化
我們的實驗採用了三種在 ImageNet 資料集上預訓練的網路,每一個網路擁有5個最大池化層和5~13個卷積層(可檢視4.1節獲取詳細網路結構)。當一個預訓練的網路初始化 Fast R-CNN 網路時,它經歷(undergoes)三次轉換(transformations)。
首先,最後一個最大池化層被ROI池化層所取代,該ROI池化層通過設定合理H和W實現了與第一個全連線層相容性配置(例如,H=W=7,對於VGG16)。
其次,網路的最後的全連線層和Softmax層(被訓練1000個類別在ImageNet分類資料集上)被兩個同級並列的層所取代(一個是K+1個類別的Softmax分類層,另一個是指定類別的邊界框迴歸偏移量)。
第三,網路被修改為兩種資料輸入:一個是影像列表,另一個是這些影像的ROI列表。
2.3 微調網路用於目標檢測
對於Fast R-CNN來說,使用反向傳播演算法(back-propagation)訓練網路的所有權重是一個很重要的功能。首先,讓我們闡述一下為什麼SPP-net不能去更新空間金字塔池化層之下的卷積層權重。
根本的原因在於當每一個訓練樣本(即ROI)來自於不同的影像時,通過SPP層的反向傳播的效率是很低的,這正是R-CNN和SPP-net網路的訓練方式。這種效率低下來源於(stems from)每一個感興趣區域ROI可能有一個非常大的感受野(receptive field),通常跨越(spanning)整個輸入影像。由於前向傳播過程必須處理整個感受野,因此訓練需要的輸入很大(通常是整幅影像)。
我們提出了一種更加有效的訓練方法,它在訓練期間利用特徵共享。在FastR-CNN訓練時,隨機梯度下降(SGD)的小批量(mini-batches)採用分層抽樣,首先取樣N個影像,然後對於每一張影像取樣R/N個ROI區域。更重要的是,來源於同一張影像的所有ROI區域在前向傳播和反向傳播過程中共享計算和記憶體。這樣使得較小的N會減少 mini-batches的計算量。例如,當使用N=2,R=128,這個提出(propose)的訓練方案(scheme)比來自128張的一個ROI區域(即R-CNN和SPP-net的訓練策略strategy)快了大約(roughly)64倍。
對於這種策略(strategy)的一個擔憂是它可能導致訓練時的收斂(convergence)速度減緩,因為來自於同一張影像的ROI區域是相關的(Correlated)。這種擔憂在實際問題中並沒出現,我們使用了比R-CNN更少的迭代步數,採用N=2,R=128這種策略反而取得了更好的效果。
除了分層抽樣之外,Fast R-CNN 使用一個階段的微調同時優化Softmax分類器和邊界框迴歸器來簡化的訓練過程,而不是三個單獨的極端訓練Softmax分類器,SVM,迴歸器(像R-CNN和SPP-net中那樣)。該程式(procedure)的組成部分(損失,小批量取樣策略,ROI池化層的方向傳播,SGD超參)如下圖所示。
Multi-task loss(多工損失):Fast R-CNN網路有兩個同級(Sibling)並列的輸出層,第一個輸出層是一個離散的概率分佈(對於每一個ROI區域),P = (p0, p1, .... pk),包含有 K+1 個類別。通常 P 是由全連線層 k+1 個輸出上的 softmax計算得到的。第二個同級的輸出層是邊界框迴歸偏移量(offsets),對於每個k物件類,有 tk = (tkx,tky,tkw,tkh),索引是K。我們使用了文獻[9](本文作者的另一篇文章)中給出的 tk 的引數化,其中 tk 指定相對於目標推薦區域的尺度不變的平移和對數空間的高度,寬度的偏移。
每個訓練的ROI區域都標註有完全真實的類(ground-truth class)u 和完全真實的邊界框(ground-truth bounding-box)迴歸目標 v。我們對於每一個標註的 ROI區域使用多工損失函式 L 來聯合訓練分類和邊界框迴歸:
L(p,u,tu,v)= Lcls(p,u)+ λ * [u >= 1] * Lloc(tu,v) (1)
這裡, Lcls(p,u) = -logpu,表示對真實類的對數損失(也就是交叉熵損失)。
第二個任務損失 Lloc 是針對類 u 和 v = (vx,vy,vw,vh)的真實邊界框迴歸目標的元組定義的,並且預測的元組 tu = (tux,tuy,tuw,tuh),還是針對u類別。當u>1時,中括號的指示器函式 [u >= 1]的計算結果為1,否則為0。對於背景 ROI 區域沒有完全真實的邊界框的概念(notion)。因此(hence)Lloc 被忽略(ignored)。對於邊界框迴歸,我們使用如下的損失函式:
Lloc(tu,v)= ∑ i=(x,y,w,h) smoothL1(tui,vi) (2)
這裡,
smoothL1(x) = {0.5 * x^2,if |x| < 1;|x| - 0.5,if |x| >=1} (3)
它是一種強大(robust)的L1損失,對於異常值的敏感度要低於R-CNN和SPP-net中使用的 L2損失。當迴歸目標無限制時,L2損失訓練可能需要仔細的調整學習率以防止梯度爆炸。式子3消除了這種敏感性。
在方差1中的超引數 λ 控制兩個任務損失之間的平衡。我們將真實的迴歸目標 vi 標準化為零均值和單位方差。所有實驗都使用 λ=1。
我們注意到文獻[6]使用相關的損失來訓練一個與類無關的區域建議網路。與我們的方法不同,它提出了一種雙網路的系統,它將定位與分類分開。OverFeat、R-CNN和SPPNet也訓練分類器和邊界框定位器,但是這些方法使用階段式訓練,我們將在5.1節展示它們對於Fast R-CNN來說是次優的。
Mini-batch sampling(小批量抽樣):在微調(fine-tuning)期間,每個SGD的mini-batch 是由 N=2個影像構成(construct),隨機選擇單一形式(通常的做法是,我們實際上只對資料的排列進行了調整)。我們使用的mini-batch 的尺寸為 R=128,每一個影像取樣了 64個 ROI區域。與文獻【9】中一樣,我們從目標推薦區域中選擇 25%的推薦區域和真正邊界框交併比(IOU)大於 0.5 的區域。這些ROI區域包括用前景物件類標記的示例(類別指示函式),例如:【u >= 1】。剩餘的 ROI區域從和真實邊界框交併比在 [0.1, 0.5]的推薦區域中取樣,參考文獻【11】。這些是背景示例,並標記 u=0。0.1的下限閾值似乎充當了困難例項挖掘的啟發式演算法【8】。在訓練期間,影像以 0.5 的概率進行水平翻轉,沒有使用其他的資料增強方法。
通過 ROI 池化層的反向傳播(Back-propagration through ROI pooling layers):通過ROI池化層的反向傳播的匯出路徑。為了清楚起見(for clarity),我們假設每個 mini-batch 僅僅有一張圖片,即N=1,但是擴充套件到 N>1 是顯而易見的(straightforward),因為對於所有的圖片的前向傳播過程都是獨立的。
令 xi 屬於 R;為進入ROI池化層的第 i 個啟用輸入,並讓 Yrj 為第 r 層 ROI的第j個輸出。ROI池化層計算 yri = xi*(r, j),其中 i*(r, j)=argmaxi' 屬於 R(r, j)xi',R(i, j) 是子視窗中輸入單 yrj 最大池化層的輸入索引集。單個 xi 可以分配給幾個不同的輸出 Yrj。
ROI 池化層的方向函式通過遵循 argmax開關計算損失函式相對於每個輸入變數 xi 的偏導數:
換言之,對於每個小批量 ROI r 和每個合併輸出單元 Yrj,如果 i 是通過最大合併為 Yrj 選擇的 argmax,則偏導數 就會累積。再反向傳播中,偏導數已經由頂部的 ROI池化層的反向函式計算。
SGD 超引數(SGD hyper-paeameters):全連線層被用來做Softmax分類和Bounding box迴歸,他們的權重初始化分別(respectively)採用具有標準差為 0.01 和 0.001 的零均值高斯分佈,偏差(biases)被初始化為0。對於所有的層來說,每一層權重的學習率為1,偏差的學習率為2,全域性學習率為 0.001。在訓練集VOC2007 或者 VOC 2012上訓練時,我們執行 SGD 進行 30K 次的小批量迭代,然後將學習率降低到 0.0001並進行另外 10K次迭代訓練。當我們在更大的資料集上訓練時,我們執行SGD以進行更多的迭代,如稍後所示。使用0.9 的動量和 0.0005的引數衰減(關於權重和偏差)。
2.4 Scale invariance(尺度不變性)
我們探索了在物體檢測中兩種實現尺度不變的方法:(1)通過“強力”學習。(2)通過使用影像金字塔。這些策略遵循了文獻【11】(SPP-net)中的兩個方法。對於蠻力方法,在訓練和測試期間以預定義的畫素大小處理每個影像。網路必須從訓練資料中學習尺度不變的物體檢測。
相反,多尺度方法通過影像金字塔為網路提供近似的尺度不變性。在測試時,影像金字塔用於近似的縮放規範化每個建議區域。在多尺度訓練期間,我們在每次採用影像時隨機取樣金字塔尺度【11】,作為資料增強的一種形式。由於GPU記憶體限制,我們僅針對較小的網路進行多尺度訓練。
在分類迴歸階段,在R-CNN中,先生成候選框,然後再通過CNN提取特徵,之後再用SVM分類,最後再做迴歸得到具體位置(bbox regression)。而在Fast R-CNN中,作者巧妙的把最後的 bbox regression 也放進了神經網路內部,與區域分類合併成為了一個 multi-task 模型,如下圖所示:
實驗表明,這兩個任務能夠共享卷積特徵,並且相互促進。
Fast R-CNN 很重要的一個貢獻是成功地讓人們看到了Region Proposal + CNN(候選區域 + 卷積神經網路)這一框架實時檢測的希望,原來多類檢測真的可以在保證準確率的同時提升處理速度。
3,Fast R-CNN檢測
一旦Fast R-CNN 網路被微調完畢,檢測相當於執行前向傳播(假設候選框是預先計算的),網路將影像(或影像金字塔,編碼為影像列表)和待計算概率的候選框的列表作為輸入。在測試的時候,通常在2000左右,雖然我們考慮將它變大(大約45K)的情況。當使用影像金字塔時,每個ROI被縮放,使其最接近224*224個畫素。
對於每個測試 ROI r,前向傳遞輸出概率分佈 p 和一組相對於 r 的預測邊界框偏移量(每個K類獲得其自己的邊界框預測)。我們使用後驗概率 p 為每個 r 估計每K類的檢測置信度。然後,我們使用 R-CNN的演算法和設定,為每個類獨立地執行非極大值抑制。
3.1 Truncated SVD 加快檢測速度
對於整個影像分類,與conv層相比,計算全連線層所花費的時間較少。相反,檢測時需要處理的 ROI的數量很大,並且將近一半的時間用於計算完全連線層(參見圖2)。通過SVD壓縮他們可以很容易的節省時間。
通過這種技術,層的 u*v 權重矩陣 W 通過SVD被近似的分解為
在這種因式分解中,在這種因式分解中,U是由W的第一個左奇異向量組成的U×t矩陣,∑t是包含W的前t個奇異值的t×t對角矩陣,V是包含W的第一個t右奇異向量的V×t矩陣。截斷SVD將引數計數從uv減少到t(U+V),如果t比min(u,v)小得多,這一點可能很重要。為了壓縮網路,將對應於W的單個全連線層替換為兩個完全連線的層,它們之間沒有非線性。第一層使用權重矩陣∑tVT(無偏差),第二層使用U(原始偏差與W相關)。這種簡單的壓縮方法在roi數目很大的情況下具有很好的加速效果。
4,主要結果
三個主要結果支援本文的貢獻:
1,VOC 2007,2010, 2012 的最高mAP
2,相比如R-CNN,SPP-net,快速訓練和測試
3,在VGG16中微調卷積層改善了mAP
4.1 實驗配置
我們的實驗使用了三個經過預訓練的ImageNet網路模型,這些模型可以線上獲得(https://github.com/BVLC/caffe/wiki/Model-Zoo)。第一個是來自R-CNN的CaffeNet(實質上是AlexNet)。 我們將這個CaffeNet稱為模型S,即小模型。第二網路是來自的VGG_CNN_M_1024,其具有與S相同的深度,但是更寬。 我們把這個網路模型稱為M,即中等模型。最後一個網路是來自的非常深的VGG16模型。由於這個模型是最大的,我們稱之為L。在本節中,所有實驗都使用單尺度訓練和測試
4.2 VOC 2010 和 2012 的結果
如上表(表2,表3)所示,在這些資料集上,我們比較Fast R-CNN(簡稱FRCN)和公共排行榜中comp4(外部資料)上的主流方法(http://host.robots.ox.ac.uk:8080/leaderboard ,訪問時間是2015.4.18)。對於NUS_NIN_c2000和BabyLearning方法,目前沒有其架構的確切資訊,它們是Network-in-Network的變體。所有其他方法從相同的預訓練VGG16網路初始化。
Fast R-CNN在VOC12上獲得最高結果,mAP為65.7%(加上額外資料為68.4%)。它也比其他方法快兩個數量級,這些方法都基於比較“慢”的R-CNN網路。在VOC10上,SegDeepM 獲得了比Fast R-CNN更高的mAP(67.2%對比66.1%)。SegDeepM使用VOC12 trainval訓練集訓練並新增了分割的標註,它被設計為通過使用馬爾可夫隨機場推理R-CNN檢測和來自的語義分割方法的分割來提高R-CNN精度。Fast R-CNN可以替換SegDeepM中使用的R-CNN,這可以導致更好的結果。當使用放大的07++12訓練集(見表2標題)時,Fast R-CNN的mAP增加到68.8%,超過SegDeepM。
4.3 VOC 2007 結果
在 VOC 2007資料集上,我們比較 Fast R-CNN與RCNN和SPP-net的mAP。所有方法從相同的預訓練VGG16網路開始,並使用邊界框迴歸。VGG16 SPP-net結果由【11】的作者提供。SPP-net在訓練和測試期間使用了五個尺度。Fast R-CNN 對SPP-net的改進說明,即使Fast R-CNN 使用單個尺度訓練和測試,卷積層微調在 PASCAL中沒有使用被標記為“困難”的樣本進行訓練。除去這些樣本,Fast R-CNN 的 mAP 為 68.1%,所有其他實驗都使用標記為“困難”的樣本。
4.4 訓練和測試時間
快速的訓練和測試是我們的第二個主要成果。表4比較了Fast RCNN, R-CNN,SPP-net之間的訓練時間(小時),測試速率(每秒影像數)和VOC 2007上的 mAP。對於 VGG16,沒有截斷 SVD 的Fast R-CNN 處理影像比R-CNN 快 146倍,有截斷 SVD的 R-CNN 快 213倍。訓練時間減少 9倍,從84小時減少到9.5小時。與SPP-net相比,沒有截斷 SVD的 Fast RCNN訓練 VGG16網路比 SPPNet 快 2.7倍(9.5小時 VS 25.5小時),測試時間快 7倍,有截斷的SVD的 Fast RCNN 比SPPNet快 10倍。Fast R-CNN還不需要數百GB的磁碟儲存,因為它不快取特徵。
截斷的SVD:截斷的 SVD可以將檢測時間減少 30%以上,同時在mAP中只有很小(0.3個百分點)的下降,並且無需在模型壓縮後執行額外的微調。圖2顯示出瞭如何來自VGG16的fc層中的矩陣的頂部 1024個奇異值和來自fc層的矩陣的頂部 256個奇異值減少執行時間,而在mAP中幾乎沒有損失。如果壓縮之後再次微調,則可以在mAP中具有更小的下降的情況下進一步加速。
4.5 微調哪些層?
對於在SPP-net論文中考慮的不太深的網路,僅微調全連線層似乎足以獲得良好的精度。我們假設這個結果不適用於非常深的網路,為了驗證微調卷積層對於VGG16的重要性,我們使用 Fast R-CNN微調,但凍結13個卷積層,以便只有全連線層學習。這種消融模擬單尺度SPP-net訓練,將mAP從 66.9%降低到 61.4%(表5)。這個實驗驗證了我們的假設:通過 ROI 池化層的訓練對於非常深的網路是很重要的。
這是否意味著所有卷積層應該微調?簡而言之,沒有。在較小的網路(S和M)中,我們發現conv1(第一個卷積層)是通用的和任務獨立的(一個眾所周知的事實)。允許conv1學習或不學習,對mAP沒有很有意義的影響。對於VGG16,我們發現只需要更新conv3_1及以上(13個卷積層中的9個)的層。這種觀察是實用的:(1)從 conv2_1更新使訓練變慢 1.3倍(12.5小時 VS 9.5小時)和(2)從 conv1_1 更新 GPU記憶體不夠用。當從 conv2_1學習時mAP僅為 增加 0.3個點(表5,最後一列)。所有 FastR-CNN在本文中結果都實用VGG16微調層conv3_1及以上的層,所有實驗用模型S和M微調層conv2及其以上的層。
5,設計評估
我們通過實驗來了解 Fast RCNN與 R-CNN和SPP-net的比較,以及評估設計決策。按照最佳實踐,我們在PASCAL VOC 2007資料集上進行了這些實驗。
5.1 多工訓練有用嗎?
多工訓練是方便的,因為它避免管理順序訓練任務的流水線。但它也有可能改善結果,因為任務通過共享的表示(ConvNet)相互影響。多工訓練能提高 Fast R-CNN中的目標檢測精度嗎?
為了測試這個問題,我們訓練僅使用公式中的分類損失(即設定)的基準網路,這些基線是表6中每組的第一列。請注意,這些模型沒有檢測框迴歸。接下來(每組的第二列),是我們採用多工損失(公式)訓練的網路,但是我們在測試時禁用檢測框迴歸。這隔離了網路的分類準確性,並允許與基準網路的 apple-to-apple 的比較。
在所有三個網路中,我們觀察到多工訓練相對於單獨的分類訓練提高了純分類精度。改進範圍從 +0.8 到 +1.1 個mAP點,顯示了多工學習的一致的積極效果。
最後,我們採用基線模型(僅使用分類損失進行訓練),加上檢測迴歸層,並使用訓練他們,同時保持所有其他網路引數凍結。每組中的第三列顯示了這種逐級訓練方案的結果:mAP相對於第一列改進,但逐級訓練表現不如多工訓練(每組第四列)
5.2 尺度不變性:暴力或精細?
我們比較了實現尺度不變的物體檢測的兩種策略:蠻力學習(單尺度)和影像金字塔(多尺度)。無論哪種情況,我們都將影像的比例尺s定義為其最短邊的長度。
所有單尺度實驗都使用 s=600畫素;對於某些影像,s可能小於 600,因為我們將最長的影像邊上限為1000畫素,並保持影像的長寬比。選擇這些值是為了使VGG16在微調起見適合GPU記憶體。較小的模型不受記憶體限制。可以受益於更大的 s 值;但是,為每個模型優化並不是我們主要關心的問題。我們注意到,PASCAL影像的平均大小為 384*473 畫素,因此單比例設定通常會將影像上取樣率提高 1.6倍。因此,ROI池化的平均有效步長約為10個畫素。
在多標度設定中,我們使用【11】中指定的相同的五個標度(s∈{480,576,688,864,1200})便於與SPP-net進行比較。但是,我們將最長邊的上限設定為 2000 畫素,以避免超出 GPU記憶體。
表7顯示了使用一或五個量表訓練和測試的模型S和M。也許【11】中最令人驚訝的結果是單標度檢測的效能幾乎與多標度檢測相同。我們的發現證明了他們的結果:深度ConvNets擅長直接學習規模不變性。多尺度方法僅以很小的計算量就提供了mAP的增加(表7)。在VGG16(型號L)的情況下,根據實現細節,我們只能使用單一比例。然而,即使R-CNN使用“無限”標度,因為每個提案都扭曲為規範大小,它的mAP達到了 66.9%,略高於R-CNN報導的 66.0%。
由於單標度處理在速度和精度之間提供了最佳折衷,特別是對於非常深的模型,本小姐以外的所有實驗使用單尺度訓練和測試 s = 600畫素。
5.3 我們需要更多訓練資料嗎?
當提供更多的額訓練資料時,好的目標檢測器應該會得到改善。Zhu等人發現DPM mAP在只有幾百到千個訓練樣本的時候就飽和了。在這裡我們增加 VOC 2007 trainval訓練集 與 VOC 2012 trainval訓練集,大約增加到3倍的影像,數量達到了 16.5k,以評估Fast R-CNN。擴大訓練集提高了 VOC 2007測試的 mAP,從 66.9%到70.0%(表1)。當對這個資料集進行訓練時,我們使用 60k次小批量迭代而不是 40k。
我們對 VOC 2010 和 2012進行類似的實驗,我們用 VOC 2007 trainval,test和 VOC 2012 trainval構造了 21.5K影像的資料集。當訓練這個資料集時,我們使用 100k次SGD迭代和每 40k 次迭代(而不是 30k次)降低學習率10倍。對於 VOC2010 和 2012,mAP分別從 66.1%提高到68.8%和從 65.7%提高到 68.4%。
5.4 SVM 是否勝過 Softmax?
Fast R-CNN 使用在微調過程中學習到的Softmax分類器,而不是像 R-CNN和SPP-net那樣事後訓練一對一的線性SVM。為了瞭解此選擇的影響,我們在Fast R-CNN中實施了具有難負取樣重訓練的SVM訓練。我們使用與R-CNN中相同的訓練演算法和超引數。
表8顯示了所有三個網路中的 Softmax略勝於SVM,提高了 +0.1 到+0.8 個mAP點。這種效果很小,但是它表明與先前的多級訓練方法相比,“一次性”微調是足夠的。我們注意到,Softmax不像SVM那樣,在分類 ROI 時引入類之間的競爭。
存在(廣義的)兩種型別的目標檢測器:使用候選區域的稀疏集合(例如,選擇性搜尋)和使用密集集合(例如DPM)。分類稀疏提議是級聯的一種型別,其中提議機制首先拒絕大量候選者,讓分類器來評估留下的小集合。當應用於DPM檢測時,該級聯提高了檢測精度。我們發現提案分類器級聯也提高了 Fast R-CNN的精度。
使用選擇性搜尋的質量模式,我們掃描每個影像1k到 10k個候選框,每次重新訓練和重新測試模型M,如果候選框純粹扮演計算的角色,增加每個影像的候選框數量不應該損害mAP。
我們發現mAP上升,然後隨著候選框區域計數增加而略微下降(圖3,實線藍線)。這個實驗表明,用更多的候選區域沒有幫助,甚至稍微有點傷害準確度。
如果不實際執行實驗,這個結果很難預測。用於測量候選區域質量的最先進的技術是平均召回率(AR)。當對每個影像使用固定數量的候選區域時,AR與使用R-CNN的幾種候選區域方法良好地相關。圖3示出了AR(實線紅線)與mAP不相關,因為每個影像的候選區域數量是變化的。AR必須小心使用,由於更多的候選區域更高的AR並不意味著mAP會增加。幸運的是,使用模型M的訓練和測試需要不到2.5小時。因此,Fast R-CNN能夠高效地,直接地評估目標候選區域mAP,這優於代理度量。
我們還調查Fast R-CNN當使用密集生成框(在縮放,位置和寬高比上),大約45k個框/影像。這個密集集足夠豐富,當每個選擇性搜尋框被其最近(IoU)密集框替換時,mAP只降低1個點(到57.7%,圖3,藍色三角形)。
密集框的統計資料與選擇性搜尋框的統計資料不同。從2k個選擇性搜尋框開始,我們在新增的隨機樣本密集框時測試mAP。對於每個實驗,我們重新訓練和重新測試模型M。當新增這些密集框時,mAP比新增更多選擇性搜尋框時下降得更強,最終達到53.0%。
我們還訓練和測試Fast R-CNN只使用密集框(45k/影像)。此設定的mAP為52.9%(藍色菱形)。最後,我們檢查是否需要使用難樣本重訓練的SVM來處理密集框分佈。 SVM做得更糟:49.3%(藍色圓圈)。
5.6 MS COCO初步結果
我們將Fast R-CNN(使用VGG16)應用於MS COCO資料集,以建立初步基線。我們對 80K影像訓練集進行了 240K迭代訓練,並使用評估伺服器對“test-dev”集進行評估。PASCAL標準下的mAP為 35.9%。新的COCO標準下的mAP也達到了IOU閾值的平均值,為 19.7%
6,總結
本文提出 Fast R-CNN,一個對 R-CNN和SPP-net乾淨,快速的更新。除了報告目前的檢測結果之外,我們還提供了詳細的實驗,希望提供新的見解。特別值得注意的是,稀疏目標候選區域似乎提高了檢測器的質量。過去探索這個問題過於昂貴(在時間上),但Fast R-CNN使其變得可能。當然,可能存在允許密集盒執行以及稀疏候選框的尚未發現的技術。這樣的方法如果被開發,可以進一步幫助加速目標檢測。