RCNN系列文章之Faster RCNN詳解

RCNN系列的文章主要是RCNN,Fast RCNN, Faster RCNN, Mask RCNN, Cascade RCNN,這一系列的文章是目標檢測two-stage算法的代表,這系列的算法精度高,效果好,是一類重要的方法。

論文地址:Faster R-CNN: Towards Real-Time Object Detectionwith Region Proposal Networks

簡要介紹

論文的主要貢獻在於提出了RPN(region proposal network)

RPN是一個全卷積網絡,能夠同時預測每個位置目標的邊界(object bound)和目標的得分,fast rcnn使用RPN,通過端到端的訓練可以生成高質量的region proposal,將RPN與fast rcnn整合在一起構成了faster rcnn算法,類似於attention的機制,RPN可以告訴算法,where to look。

fasterrcnn_2.png

Faster RCNN算法細節介紹

在Fast rcnn中,由於需要使用selective search方法來搜索region proposal,在cpu上實現,每張圖片需要2s。大量的時間耗費在region proposal的過程中。

為了解決這個問題,充分使用GPU的高效率與快速的計算,本文提出一種新型的全卷積網絡(RPN)來生成region proposal,每張圖片達到10ms。

具體的做法就是在基礎backbone(用來提取圖像特徵的cnn)之後加入一些卷積層作為RPN,可以在feature map的每個位置,回歸區域的邊界與目標的得分。可以進行端到端的訓練。

RPN主要是預測具有廣泛的尺度與長寬比的region proposal,與使用圖像金字塔(圖a),filter金字塔(圖b)不同的是,我們引入新的「anchor(錨)」盒作為多種尺度和長寬比的參考,這種方案被認為回歸參考金字塔(圖c),是它避免了枚舉多種比例或長寬比的圖像或濾波器。這個模型在使用單尺度圖像進行訓練和測試時運行良好,從而有利於運行速度。

fasterrcnn_1.png

為了將RPN與Fast R-CNN目標檢測網絡相結合,文章提出了一種訓練方案,在微調區域提議任務和保持區域提議的固定微調目標檢測之間進行交替。該方案快速收斂,併產生兩個任務之間共享的具有卷積特徵的統一網絡。

Faster RCNN網絡包含兩個主要的模塊,第一個就是生成區域建議的RPN全卷積網絡, 第二個是利用region proposal的檢測器

RPN(Region Proposal Network)

RPN是一個全卷積網絡,輸入一張圖像,輸出一系列的矩形目標建議框,每一個框都含有一個目標得分。

為了生成region proposal,我們在最後的共享卷積層輸出的卷積特徵映射上滑動一個小網絡。這個小網絡將輸入卷積特徵映射的n×n空間窗口作為輸入。每個滑動窗口映射到一個低維特徵(ZF為256維,VGG為512維,後面是ReLU)。這個特徵被輸入到兩個子全連接層——一個邊界框回歸層(reg)和一個邊界框分類層(cls)。在faster rcnn中,n=3,注意輸入圖像上的有效感受野是大的(ZF和VGG分別為171和228個像素)。下圖顯示了這個小型網絡的一個位置。請注意,因為小網絡以滑動窗口方式運行,所有空間位置共享全連接層。這種架構通過一個n×n卷積層,後面是兩個子1×1卷積層(分別用於reg和cls)自然地實現。

fasterrcnn_3.png

anchors

在每個滑動窗口位置,我們同時預測多個region proposal,其中每個位置可能提議的最大數目表示為k。因此,reg層具有4k個輸出,編碼k個邊界框的坐標,cls層輸出2k個分數,估計每個proposal是目標或不是目標的概率。錨點位於所討論的滑動窗口的中心,並與一個尺度和長寬比相關。默認情況下,我們使用3個尺度和3個長寬比,在每個滑動位置產生k=9個錨點。對於大小為W×H(通常約為2400)的卷積特徵映射,總共有WHk個錨點。

Translation-Invarient Anchors(平移不變的anchors)

anchor的一個重要特性是它是平移不變的,無論是在錨點還是計算相對於錨點的region proposal的函數。如果在圖像中平移目標,proposal也應該平移,並且同樣的函數應該能夠在任一位置預測提議。平移不變特性是由這種anchor的方法保證的。與multiBox比較,MultiBox方法使用k-means生成800個錨點,這不是平移不變的。所以如果平移目標,MultiBox不保證會生成相同的提議。

平移不變特性也減小了模型的大小。MultiBox有(4+1)×800維的全連接輸出層,而當k=9個錨點的情況下有(4+2)×9維的卷積輸出層。因此,對於VGG-16,輸出層具有2.8e4個參數(對於VGG-16為512×(4+2)×9,比MultiBox輸出層的6.1e6個參數少了兩個數量級(對於MultiBox中的GoogleNet為1536×(4+1)×800)。如果考慮到特徵投影層,proposal層仍然比MultiBox少一個數量級。因此這個算法在PASCAL VOC等小數據集上有更小的過擬合風險。

多尺度的錨點作為回歸參考

錨點設計提出了一個新的方案來解決多尺度(和長寬比)。多尺度預測有兩種流行的方法。第一種方法是基於圖像/特徵金字塔,例如DPM和基於CNN的方法。圖像在多個尺度上進行縮放,並且針對每個尺度計算特徵映射(HOG或深卷積特徵),這種方法通常是有用的,但是非常耗時。第二種方法是在特徵映射上使用多尺度(和/或長寬比)的滑動窗口。例如,在DPM中,使用不同的filter大小(例如5×7和7×5)分別對不同長寬比的模型進行訓練。如果用這種方法來解決多尺度問題,可以把它看作是一個「filter金字塔」。第二種方法通常與第一種方法聯合採用。

基於錨點方法建立在錨點金字塔上,這是更具成本效益的。這種方法參照多尺度和長寬比的anchor box來分類和回歸邊界框。它只依賴單一尺度的圖像和特徵映射,並使用單一尺寸的filter(特徵映射上的滑動窗口)

由於這種基於錨點的多尺度設計,可以類似於Fast R-CNN檢測器簡單地使用在單尺度圖像上計算的卷積特徵。多尺度錨點設計是共享特徵的關鍵組成部分。

損失函數

為了訓練RPN,我們為每個錨點分配一個二值類別標籤(含有目標或不含目標)。我們給兩種錨點分配一個正標籤:(i)具有與實際邊界框的重疊最高交並比(IoU)的錨點,或者(ii)具有與實際邊界框的重疊超過0.7 IoU的錨點。(注意,單個真實邊界框可以為多個錨點分配正標籤。通常第二個條件足以確定正樣本;但我們仍然採用第一個條件,因為在一些極少數情況下,第二個條件可能找不到正樣本,因為可能所有的IOU值均小於0.7)。對於所有的真實邊界框,如果一個錨點的IoU低於0.3,我們給這個錨點分配一個負標籤(表示背景)。那些既不是正標籤也不是負標籤的錨點不會有助於訓練目標函數。

應用Fast rcnn中的多任務損失函數:
fasterrcnn_4.png

默認情況下,我們設置λ=10(權重因子)

對於邊界框的回歸,採用如下坐標的參數化:

fasterrcnn_5.png

其中,x,y,w和h表示邊界框的中心坐標及其寬和高。變量x,x_ax^∗分別表示預測邊界框,錨盒和實際邊界框。這可以被認為是從錨盒到鄰近的實際邊界框的回歸。

訓練RPN

RPN可以通過反向傳播和隨機梯度下降(SGD)進行端對端訓練[35]。使用「以圖像為中心」的採樣策略來訓練這個網絡。每個小批量數據(mini-batch)都從包含許多正標籤於負標籤的實例錨點的單張圖像中產生。對所有錨點的損失函數進行優化是可能的,但是這樣會偏向於負樣本,因為它們是佔主導地位的。取而代之的是,我們在圖像中隨機採樣256個錨點,計算一個小批量數據的損失函數,其中採樣的正錨點和負錨點的比率可達1:1。如果圖像中的正樣本少於128個,我們使用負樣本填充mini-batch。

RPN 和 Fast R-CNN特徵共享

以上描述了如何訓練 RPN 網絡,而沒有考慮基於 region proposal 的目標檢測網絡如何利用這些 proposals。對於檢測網絡,作者採用了 Fast R-CNN。RPN 和、 Fast R-CNN 如果都獨立訓練,需要單獨修改它們的卷積層。因此有需要開發一種允許兩個網絡間共享卷積層的技術,而不是分別學習兩個網絡。論文中作者描述了 3 種方法用來實現特徵共享:

  1. 交替訓練。 首先訓練 RPN,用 RPN 輸出的 proposals 訓練 Fast R-CNN。Fast R-CNN 微調後用於初始化 RPN 網絡參數,如此循環迭代。(本文所有實驗中使用的解決方案)
  2. 近似聯合訓練。 RPN 和 Fast R-CNN 整合到一個網絡里一起訓練。在每次SGD迭代中,前向傳遞生成region proposal,在訓練Fast R-CNN檢測器將這看作是固定的、預計算的proposal。反向傳播像往常一樣進行,其中對於共享層,組合來自RPN損失和Fast R-CNN損失的反向傳播信號。這個解決方案很容易實現。但是這個解決方案忽略了關於proposal邊界框的坐標(也是網絡響應)的導數,因此是近似的。在我們的實驗中,我們實驗發現這個求解器產生了相當的結果,與交替訓練相比,訓練時間減少了大約25−50%25−50%。(大多github上開源代碼,均採用這種端到端訓練方式
  3. 非近似聯合訓練。 如上所述,由RPN預測的邊界框也是輸入的函數。Fast R-CNN中的RoI池化層接受卷積特徵以及預測的邊界框作為輸入,所以理論上有效的反向傳播求解器也應該包括關於邊界框坐標的梯度。在上述近似聯合訓練中,這些梯度被忽略。在一個非近似的聯合訓練解決方案中,我們需要一個關於邊界框坐標可微分的RoI池化層。這是一個重要的問題,可以通過「RoI扭曲」層給出解決方案,這超出了本文的範圍。

基於交替訓練法,作者描述了一種4-step的訓練方式:

step 1. 訓練 RPN 網絡,採用 ImageNet 預訓練的模型進行初始化,並進行微調
step 2. 利用 step1 的RPN生成 proposal,由 Fast R-CNN 訓練一個單獨的檢測網絡,該網絡同樣由ImageNet預訓練模型進行初始化。此時,兩個網絡還未共享卷積層
step 3. 用檢測網絡初始化 RPN 訓練,固定共享的卷積層,只微調 RPN 獨有的層,現在兩個網絡實現了卷積層共享
step 4. 保持共享的卷積層固定,微調 Fast R-CNN 的 fc 層。這樣,兩個網絡共享相同的卷積層,構成一個統一的網絡

一些細節

在單尺度圖像上訓練和測試RPN和目標檢測網絡。我們重新縮放圖像,使得它們的短邊是s=600像素。多尺度特徵提取(使用圖像金字塔)可能會提高精度,但不會表現出速度與精度的良好折衷。在重新縮放的圖像上,最後卷積層上的ZF和VGG網絡的總步長為16個像素,因此在調整大小(〜500×375)之前,典型的PASCAL圖像上的總步長為〜10個像素。即使如此大的步長也能提供良好的效果,儘管步幅更小,精度可能會進一步提高。

對於錨點,使用3個尺度,邊界框面積分別為128,256和512個像素,以及1:1,1:2和2:1的長寬比。這些超參數不是針對特定數據集仔細選擇的,如上所述,我們的解決方案不需要圖像金字塔或濾波器金字塔來預測多個尺度的區域,節省了大量的運行時間。

跨越圖像邊界的anchor box需要小心處理。在訓練過程中,我們忽略了所有的超出圖像邊界錨點,所以不會造成損失。對於一個典型的1000×600的圖片,總共將會有大約20000(≈60×40×9)個錨點。跨界錨點被忽略,每張圖像約有6000個錨點用於訓練。如果跨界異常值在訓練中不被忽略,則會在目標函數中引入大的,難以糾正的誤差項,且訓練不會收斂。但在測試過程中,我們仍然將全卷積RPN應用於整張圖像。這可能會產生跨邊界的提議邊界框,我們剪切到圖像邊界。

一些RPN proposal互相之間高度重疊。為了減少冗餘,我們在proposal區域根據他們的cls分數採取非極大值抑制(NMS)。我們將NMS的IoU閾值固定為0.7,這就給每張圖像留下了大約2000個提議區域。正如我們將要展示的那樣,NMS不會損害最終的檢測準確性,但會大大減少proposal的數量。在NMS之後,我們使用前N個proposal區域來進行檢測。接下來,我們使用2000個RPN proposal對Fast R-CNN進行訓練,但在測試時評估不同數量的proposal。

附上一張圖,不知道在哪個地方找的,我找不到鏈接註明了,侵刪

fasterrcnn最有用圖.jpg