把Faster-RCNN的原理和實現闡述得非常清楚

  • 2019 年 10 月 28 日
  • 筆記

這篇文章把Faster R-CNN的原理和實現闡述得非常清楚,於是我在讀的時候順便把他翻譯成了中文。

原文:http://www.telesens.co/2018/03/11/object-detection-and-classification-using-r-cnns/

翻譯原文

https://www.cnblogs.com/vincent1997/p/10889171.html

以下內容有刪減,推薦看原文:

在這篇文章中,我將詳細描述最近引入的基於深度學習的對象檢測和分類方法,R-CNN(Regions with CNN features)是如何工作的。事實證明,R-CNN在檢測和分類自然圖像中的物體方面非常有效,其mAP遠高於之前的方法。R-CNN方法在Ross Girshick等人的以下系列論文中描述。

  1. R-CNN(https://arxiv.org/abs/1311.2524)
  2. Fast R-CNN(https://arxiv.org/abs/1504.08083)
  3. Faster R-CNN(https://arxiv.org/abs/1506.01497)

這篇文章描述了最後一篇論文中R-CNN方法的最終版本。我首先考慮介紹該方法從第一次引入到最終版本的演變,然而事實表明這是一項偉大的事業。我決定詳細描述最終版本。

幸運的是,在TensorFlow,PyTorch和其他機器學習庫中,網上有許多R-CNN算法的實現。我使用了以下實現:

https://github.com/ruotianluo/pytorch-faster-rcnn

本文中使用的大部分術語(例如,不同層的名稱)遵循代碼中使用的術語。

理解本文中提供的信息應該可以更容易地遵循PyTorch實現並進行自己的修改。

1. 文章組織

  • 第1部分 – 圖像預處理:在本節中,我們將描述應用於輸入圖像的預處理步驟。這些步驟包括減去平均像素值和縮放圖像。訓練和推理之間的預處理步驟必須相同。
  • 第2節 – 網絡組織:在本節中,我們將描述網絡的三個主要組成部分 — 「head」network,region proposal network(RPN)和分類網絡。
  • 第3節 – 實現細節(訓練):這是該文章最長的部分,詳細描述了訓練R-CNN網絡所涉及的步驟。
  • 第4節 – 實現細節(推理):在本節中,我們將描述在推理過程涉及的步驟,使用訓練好的R-CNN網絡來識別有希望的區域並對這些區域中的對象進行分類。
  • 附錄:這裡我們將介紹R-CNN運行過程中一些常用算法的細節,如非極大值抑制和Resnet50架構的細節。

2. 圖像預處理

在將圖像送入網絡之前,以下預處理步驟需要應用於圖像。對於訓練和測試,這些步驟必須相同。平均向量(3×1,每個數值對應於每個顏色通道)不是當前圖像中像素值的平均值,而是對所有訓練和測試圖像都相同的配置值。

3. 網絡組織

RCNN用神經網絡來解決兩個主要的問題:

  • 在輸入圖像中識別可能包含前景對象的區域(Region of Interest—RoI)。
  • 計算每個RoI的對象類概率分佈—如計算RoI包含特定類對象的概率,然後用戶可以選擇概率最高的對象類作為分類結果。

RCNN包含三種主要網絡:

  1. Head
  2. Region Proposal Network(RPN)
  3. Classification Network

R-CNN使用預訓練網絡如ResNet50的前幾層來識別輸入圖像的特徵。在一個數據集上使用針對不同問題的網絡是可能的,因為神經網絡顯示可以「遷移學習」(https://arxiv.org/abs/1411.1792)。

網絡的前幾層學習檢測一般特徵,如邊緣和顏色斑點,這些特徵在許多不同的問題上都是很好的識別特徵。後一層學習到的特徵是更高層次、更具體的問題特徵。這些層既可以被移除,也可以在反向傳播期間微調這些層的權重。從預訓練網絡初始化的前幾層構成「head」網絡。然後,由head網絡生成的feature map通過Region Proposal Network(RPN),該網絡使用一系列卷積和全連接層來生成可能包含前景對象的ROI(上述問題1)。然後使用這些有可能的ROI從head網絡產生的feature map中裁剪出相應的區域。這稱為「Crop Pooling」。然後,通過crop Pooling產生的區域通過分類網絡,該分類網絡學習對每個ROI中包含的對象分類。

另外,你可能會注意到ResNet的權重以奇怪的方式初始化:

如果您有興趣了解此方法的工作原理,請閱讀我關於初始化卷積和完全連接層的權重的文章。

Initializing Weights for the Convolutional and Fully Connected Layers

3.1. 網絡架構

下圖顯示了上述三種網絡類型的各個組件。我們展示了每個網絡層的輸入和輸出的維度,這有助於理解網絡的每個層如何轉換數據。並表示輸入圖像的寬度和高度(在預處理之後)。

4. 實現細節:Training

在本節中,我們將詳細描述訓練R-CNN所涉及的步驟。一旦了解了訓練的工作原理,理解推理就會輕鬆得多,因為它只是簡單地使用了訓練中涉及的一部分步驟。訓練的目標是調整RPN和分類網絡中的權重並微調head網絡的權重(這些權重從預訓練的網絡如ResNet初始化)。回想一下,RPN網絡的任務是產生有前景的ROI而分類網絡的任務是為每個ROI分配對象類分數。因此,為了訓練這些網絡,我們需要相應的ground truth,圖像中對象周圍bounding boxes的坐標和這些對象的類。這些ground truth來自開源的圖像數據庫,每個圖像附帶一個注釋文件。此注釋文件包含bounding box的坐標和圖像中每個對象的對象類標籤(對象類來自預定義對象類的列表)。這些圖像數據庫已被用於支持各種對象分類和檢測挑戰。兩個常用的數據庫是:

  • PASCAL VOC:VOC 2007數據庫包含9963張訓練/驗證/測試圖像,包含20個對象類別的24,640個注釋。
    • :人
    • 動物:鳥,貓,牛,狗,馬,羊
    • 交通工具:飛機,單車,船,巴士,汽車,摩托車,火車
    • 室內:瓶,椅子,餐桌,盆栽,沙發,電視/顯示器
  • COCO(Common Objects in Context):COCO數據集要大得多。它包含> 200K標記圖像,包含90個對象類別。

我使用較小的PASCAL VOC 2007數據集進行訓練。R-CNN能夠在同一步驟中訓練region proposal網絡和分類網絡。

5. 實現細節:Inference

推理期間執行的步驟如下所示:

不使用anchor target layer和proposal target layer。RPN網絡應該學習如何將anchor分類為背景框和前景框並生成良好的bounding box係數。proposal layer簡單地將bounding box係數應用於排名靠前的anchor boxes並執行NMS以消除具有大量重疊的框。為清楚起見,下面顯示了這些步驟的輸出。生成的框被發送到分類層,在該分類層中生成類分數和類特定的bounding boxes回歸係數。

紅色框顯示按分數排名的前6個anchor。綠框顯示應用RPN網絡計算的回歸參數後的anchor boxes。綠色框似乎更緊密地貼合潛在的對象。注意,在應用回歸參數之後,矩形仍然是矩形,即沒有剪切。還要注意矩形之間的重要重疊。通過應用非極大值抑制來解決該冗餘

紅色框顯示NMS前的前5個bounding boxes,綠色框顯示NMS之後的前5個框。通過抑制重疊的方框,其他方框(得分列表中的較低位置)有機會向上移動

為了顯示最終的分類結果,我們應用另一輪NMS並將目標檢測閾值應用於類別分數。然後,我們繪製對應於滿足檢測閾值的ROI的所有變換的bounding box。結果如下所示。