(一)Fast R-CNN論文理解---ICCV2015

Abstract

本文提出了一種基於快速區域的卷積網絡方法(Fast R-CNN)用於目標檢測。 快速R-CNN建立在先前的工作基礎上,以使用深度卷積網絡有效地對對象提議進行分類。與之前的工作相比,Fast R-CNN採用了多項創新來提高訓練和測試速度,同時提高了檢測精度。 快速R-CNN訓練深VGG16網絡比R-CNN快9倍,在測試時間快213倍,並在PASCAL VOC 2012上實現更高的mAP。與SPPnet相比,快速R-CNN訓練VGG16快3倍,測試 10倍更快,更準確。 快速R-CNN在Python和C++中實現(使用Caffe),可在開源MIT License下獲得https://github.com/rbgirshick/fast-rcnn.

1. Introduction

最近,深度ConvNets [14,16]顯着改善了圖像分類[14]和物體檢測[9,19]的準確性。 與圖像分類相比,對象檢測是一項更具挑戰性的任務,需要更復雜的方法來解決。 由於這種複雜性,當前的方法(例如,[9,11,19,25])訓練緩慢且不優雅的多級管道中的模型。

複雜性的產生是因爲檢測需要對象的準確定位,從而產生兩個主要挑戰。 首先,必須處理許多候選對象位置(通常稱爲“提議”)。 其次,這些候選者僅提供粗略的本地化,必須對其進行細化以實現精確定位。 解決這些問題往往會影響速度,準確性或簡單性。

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

所得到的方法用來訓練非常深的檢測網絡(例如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架構。輸入圖像和多個感興趣區域(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網絡時,其經歷三個變換。

  1. 首先,最後的最大池化層由RoI池層代替,其通過將H和W設置爲與網絡的第一完全連接層兼容來配置(例如,對於VGG16,H = W = 7)。
  2. 其次,網絡的最後完全連接層和softmax(其被訓練用於1000類ImageNet分類)被替換爲前面描述的兩個同級層(完全連接的層和softmax在K + 1類別和類別特定的邊界迴歸)。
  3. 網絡被修改爲採用兩個數據輸入:圖像的列表和這些圖像中的RoI的列表。

2.3、檢測微調

利用反向傳播訓練所有網絡權值是快速r-cnn的一項重要能力。首先,讓我們闡明爲什麼sppnet無法更新空間金字塔池層以下的權重。

其根本原因是當每個訓練樣本(即ROI)來自不同的圖像時,通過spp層的反向傳播效率很低,這正是r-cnn和sppnet網絡被訓練的方式。低效率源於這樣一個事實:每個ROI可能有一個非常大的接受場,通常跨越整個輸入圖像。由於前傳必須處理整個接收場,訓練輸入量很大(通常是整個圖像)。

提出了一種在訓練過程中利用特徵共享的高效訓練方法。在快速rcnn訓練中,隨機梯度下降(SGD)小批被分層採樣,首先對n個圖像進行採樣,然後從每幅圖像中採樣r/n ROI。關鍵的是,來自同一圖像的ROIS在向前和向後傳遞中共享計算和內存。使n小了,減少了小批量計算.例如,當使用n=2和r=128時,所提出的訓練方案比從128幅不同圖像(即R-CNN和sppnet策略)中採樣一次ROI快約64倍。

對這種策略的一個關注是,它可能會導致緩慢的訓練收斂,因爲來自同一圖像的ROI是相關的。這似乎不是一個實際的問題,我們取得了較好的結果,n=2和r=128使用較少的SGD迭代比r-CNN。

除了分層抽樣之外,FAST r-cnn還使用了一個簡化的訓練過程,通過一個微調階段聯合優化Softmax分類器和bounding-box迴歸器,而不是將Softmax分類器、svms和迴歸器訓練在三個不同的階段[9,11]。此過程的組成部分(損失、小批量抽樣策略、通過ROI池層的反向傳播和SGD超參數)如下所述。

多任務損失:一個Fastr-cnn網絡有兩個兄弟輸出層。第一個輸出離散概率分佈(每roi),在這裏插入圖片描述 ,k+1以上類別。和往常一樣,p是由全連接層的k1輸出上的Softmax計算的。第二兄弟層輸出bounding-box迴歸偏移量 在這裏插入圖片描述。對於每個k對象類,按k索引。我們使用了[9]中給出的 參數化,其中 指定了相對於對象方案的尺度不變平移和對數空間高度/寬度移動。

每個訓練指標都有一個ground-trut類u和一個ground-truth bounding-box迴歸目標v。我們使用多任務損失L對每個標記的roi進行分類和bounding-box迴歸的聯合訓練:
在這裏插入圖片描述
其中 在這裏插入圖片描述是u的log損失。

對於u而言在這裏插入圖片描述, 和預測元組在這裏插入圖片描述 ,定義了第二個任務損失Lloc 。相反,當u≥1和0時,指示函數[u≥1]計算爲1。按照慣例,捕獲所有背景類標記爲u=0。對於背景ROI,不存在ground-truth bounding-box的概念,因此Lloc 被忽略。對於bounding-box迴歸,我們使用損失:
在這裏插入圖片描述
這個 在這裏插入圖片描述
是一種魯棒的L1損失,它對離羣值的敏感性不如r-cnn和sppnet中使用的L2損失。當迴歸目標是無界的,L2損失的訓練可能需要仔細調整學習率,以防止梯度暴漲。Eq3消除了這種敏感性 。

方程中的超參數λ1控制兩項任務損失之間的平衡。我們將ground-truth迴歸指標vi規範化爲零均值和單位方差.所有實驗都使用λ=1。

我們注意到,[6]使用相關的損失來訓練一個與類無關的對象提取網絡。與我們的AP-proach不同,[6]主張採用兩種網絡系統,即SEPA對本地化和分類進行分級。Overfeat[19]、r-cnn[9]和sppnet[11]也訓練分類器和 bounding-box定位器,但是這些方法都是分階段訓練的,我們發現對於快速r-cnn來說,這些方法是次優的(5.1節)。

小批量抽樣 :在微調過程中,每個SGD小批由n=2幅圖像組成,隨機一致地選擇(通常的做法是,我們實際上迭代了數據集的排列)。我們使用r=128的小批次,從每幅圖像中抽取64 rois.與[9]一樣,我們從與聯合(IOU)交叉的對象提案中獲取25%的ROI,與至少0.5的ground-truth bounding-box重疊。這些ROI包括標記爲前臺對象類(即u≥1)的示例。其餘的ROI是從目標提案中取樣的,這些提案在[11]之後的[0.1,0.5]間隔內有maximum Iou。這些是背景示例,標記爲u=0。較低的閾值0.1似乎作爲一個啓發式的硬例子挖掘[8]。在訓練期間,圖像水平翻轉,概率爲0.5。不使用其他數據增強。

通過roi池化層的反向傳播:反向傳播將衍生物通過ROI池化層傳播。爲了清晰起見,我們假設每個小批只有一個圖像(n=1),但是對n>1的擴展很簡單,因爲向前傳遞處理所有圖像都是獨立的。

在這裏插入圖片描述是ROI池化層的第一個激活輸入,而yrj 是該層從ROI輸出的第j個激活輸入。ROI池化層計算 在這裏插入圖片描述,其中在這裏插入圖片描述 。 R(r,j)是輸出單元y(rj) 的最大池化所經過的子窗口中輸入的索引集。可以將單個xi分配給幾個不同的輸出 yrj。

ROI池化層的後向函數計算損失函數相對於每個輸入變量xi的偏導數,方法是按照argmax轉換:
在這裏插入圖片描述
也就是說,對於每個小型批處理ROI,r和每個池輸出單元yrj ,如果我是通過最大池化爲yrj 選擇的argmax,則會累積偏導數 在這裏插入圖片描述。在反向傳播中,偏導數在這裏插入圖片描述 已經由ROI池化層上的層的後向函數來計算。

SGD超參數 :利用標準差分別爲0.01和0.001的零均值高斯分佈,對用於softmax(軟最大值分類)和bounding-box迴歸的全連接層進行了初始化。偏差被初始化爲0。所有層都使用1的每層學習速率作爲權重,2用於偏置,全局學習速率爲0.001。在VOC07或VOC12的訓練中,我們運行SGD進行30k的小批量迭代,然後將學習率降低到0.0001,再訓練10K的迭代。當我們對較大的數據集進行訓練時,我們運行SGD進行更多的迭代,如後面所述。動量爲0.9,參數衰減爲0.0005(關於權重和偏置)。

2.4.尺度不變性

我們探討了兩種實現尺度不變目標檢測的方法:(1)通過“brute force”學習和(2)利用圖像金字塔。這些戰略遵循[11]中的兩種方法。在“brute force”法中,在訓練和測試過程中,每幅圖像都以預先定義的像素大小進行處理。網絡必須從訓練數據中直接學習尺度不變的目標檢測.。

相比之下,多尺度方法通過圖像金字塔爲網絡提供了近似的尺度不變性.在測試時,圖像金字塔被用來對每一個目標方案進行近似規模的規範化。在多尺度訓練中,我們隨機抽樣一個金字塔尺度,每次一幅圖像被採樣,如下[11],作爲數據增強的一種形式。由於GPU內存的限制,我們只對較小的網絡進行多尺度訓練。SPP中也嘗試了上面這兩種方法,不過spp採用的是第二種,本文實驗用的是第一種,速度要加快不少。

3、Fast R-CNN檢測

一旦對Fast R-CNN網絡進行微調,檢測就會比前向傳遞快更多(假設區域建議是預先計算的)。網絡將圖像(或圖像金字塔,編碼爲圖像列表)和R區域建議列表作爲輸入。在測試時,R通常在2000左右,儘管我們會考慮它更大的情況(≈45k)。當使用圖像金字塔時,每個RoI被調整,使得最接近224*224像素。

對於每個測試RoI r,前向傳遞輸出概率分佈p和一組相對於r的預測邊界框偏移量(每個K類獲得其自己的邊界框預測)。我們使用後驗概率p爲每個r估計每K類的檢測置信度。然後,我們使用R-CNN的算法和設置,爲每個類獨立地執行非最大抑制。

3.1 SVD加快檢測速度

對於整個圖像分類,與conv層相比,計算全連接層所花費的時間較少。相反,檢測時要處理的RoI的數量很大,並且將近一半的時間用於計算完全連接的層(參見圖2)。
在這裏插入圖片描述
通過SVD壓縮它們可以很容易地節省時間。

使用SVD,由u×v權重矩陣W參數化的層近似地分解爲 。該方法可以將參數的計算量從uv變爲t(u+v)。如果t比min(u,v)還要小很多,加速就很有意義。實驗中說map降了0.3%,但是速度提升了30%。
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章