一文讀懂 R-CNN,Fast R-CNN,Faster R-CNN 發展史

R-CNN 系列算法是目標檢測 two-stage 類的表明算法,本文將從 問題背景,創新點,框架模塊,訓練流程,檢測流程五個方面比較,瞭解它們的的發展歷程,以及發展緣由。

1、任務描述

目標檢測是爲了解決圖像裏的物體是什麼,在哪裏的問題。輸入一幅圖像,輸出的是圖像裏每一個物體的類別和位置,其中位置用一個包含物體的框表示。
查看源圖像算法

須要注意,咱們的目標,同時也是論文中常說的感興趣的物體,指咱們關心的類別(行人檢測只檢測人,交通檢測只關心交通工具等),或者數據集包含的類別,並非圖像裏全部的物體都是目標,好比建築,草坪也是物體,但他們經常是背景。緩存

從計算機視覺的角度看,目標檢測是分類+定位,從機器學習的角度看,目標檢測是分類+迴歸網絡

2、設計思路

今天介紹的 R-CNN 系列算法,都基於深度學習,它們把目標檢測大體分爲四部分完成:架構

  • 先從整幅圖裏選取最可能有物體的一些候選區域,這些區域通常用長方形框表示,這一步能縮小尋找範圍
  • 既然用到深度學習,那就須要學習圖像的深層特徵,這裏咱們只關心上一步選出區域的圖像特徵,提取的特徵可用於分類迴歸任務
  • 分類就是常規的分類方法,不過這裏是多分類
  • 第一步給的候選框通過篩選後,不必定精準,還須要根據 ground truth 做調整
  • 分類和定位任務能夠同時訓練,也能夠依次訓練

在這裏插入圖片描述

3、名詞解釋

  • Selective Search:一種產生候選區的方法,沒有用到深度學習,須要在 CPU 上訓練,比較耗時,簡稱 SS。
  • Region proposal:直譯爲成區域建議(有些彆扭),就是生成候選區的過程,相似於比賽前的海選,其中的 region 是矩形區。方法有 Selective Search,論文中產生 2000 個候選區,下面簡稱這部分產生的區域爲候選區。
  • Bounding box:直譯爲邊界框,就是最後輸出定位的那個矩形框。嚴格來講,分爲人工標註的 ground truth 和 predicted 兩種類型。有時候簡稱爲 BB。
  • Region of interest(ROI):感興趣的區域,有時候論文把 region proposal 產生的區域叫 ROI。
  • Non maximum suppression(NMS):非極大值抑制,簡稱爲 NMS 算法,其思想是搜素局部最大值,抑制極大值,在目標檢測的目的是輸出最合適的邊界框。
  • Fully connected layer:全鏈接層,我下面簡寫爲 FC 層。
  • Feature map:卷積層的輸出,可翻譯爲特徵圖。

4、比較說明

下面我將從問題背景,創新點,框架模塊,訓練流程,檢測流程五個方面比較介紹他們的發展過程。我更側重它們的宏觀思路,而沒有介紹具體細節,也沒有涉及實驗和代碼。框架

5、發展歷程

首先用一張圖說明三個架構的區別。
在這裏插入圖片描述
能夠看出,他們的發展是從訓練分散到統一的過程,開始還須要藉助外部的模塊 SS,後來能夠構造一個聯合框架。機器學習

從訓練的角度,開始的訓練是多階段的(multi-satge:生成候選區→提取特徵→分類→定位),後來的訓練中,提取特徵+分類+定位一次性完成。工具

從是否須要 region proposal 的角度,它們都是須要的,是 region based 方法,統稱爲 two-stage 方法,而其餘方法如 YOLO 不須要這個階段,是 one-stage 方法。性能

1. R-CNN

問題背景——學習

  • 傳統視覺特徵 SIFT 和 HOG 用於檢測系統,性能提高緩慢
  • CNN 用於分類效果好,可否提高檢測性能

創新點——編碼

  • 把 CNN 用於生成 region proposal,用 CNN 提取的特徵代替 SIFT 和 HOG 這些傳統特徵;
  • 採用大樣本下有監督預訓練+小樣本微調的方式解決小樣本難以訓練甚至過擬合等問題。

框架模塊——

  • 生成候選區模塊
  • 提取特徵的 CNN 模塊
  • 用於分類的 SVM 模塊
  • 修正邊界框模塊

訓練流程——

  • 有監督的預訓練:在大型輔助數據集(ILSVRC2012 classification)上進行 CNN 預訓練,獲得一個分類器(CNN)
  • 特定領域的微調:根據檢測任務微調 CNN,把最後 1000 維的分類層替換成 N+1 維的分類層(N 是檢測數據集的類別數,1 是背景)
  • SVM 分類器訓練:因爲SVM是二分類器,須要爲每一個類別訓練單獨的SVM。對於某一類,一片區域包含該類物體爲正樣本,不包含爲負樣本。如何判斷是否爲正?設定 IOU 閾值,低於閾值的爲負樣本
  • 邊界框迴歸訓練:提升定位精度

檢測流程——

  • 輸入一張多目標圖像
  • 採用 selective search 算法提取約 2000 個建議框,對區域 / 框變形
  • 處理後的區域/框輸入 CNN 提取特徵
  • 對區域進行分類,用非極大抑制提取分數最高(最可能的類)的框
  • 對框進行迴歸修正,選擇分數最高的框

2. Fast R-CNN

問題背景——

  • R-CNN 的訓練是多階段的(multi-stage):預訓練 CNN→針對檢測微調→訓練分類器→訓練邊界框迴歸器
  • R-CNN 的時間空間消耗大:爲了訓練 SVM 分類器和邊界框迴歸器,每一個區域的特徵都要提取出來,而且存到磁盤上
  • R-CNN 檢測慢:檢測時須要提取每一個區域的特徵,但生成的區域有重疊,因此計算也有重疊。

創新點——

  • 與 R-CNN、SPPnet 相比有更高的檢測精度(mAP)
  • 訓練是單階段的(single-stage),損失是多任務的(multi-task),指把預訓練的 CNN 針對檢測任務微調後,分類和迴歸任務能一塊兒完成
  • 訓練能夠更新全部網絡層
  • 特徵緩存不須要磁盤存儲

框架模塊——

與R-CNN 模塊大體相同,相比 R-CNN 模塊有一些改變。

  • 網絡輸入:圖片組以及每幅圖片的一組 RoI
  • CNN 模塊:最後一個最大池化層由 RoI 池化層代替
  • 分類模塊:Fast R-CNN 使用 softmax classifier,R-CNN 和 SPPnet 使用 one-vs-rest linear SVMs。
  • 分類和定位:CNN 網絡的最後一個全鏈接層和 softmax 替換爲兩個同級層,R-CNN 是獨立的兩個模塊,須要單獨訓練

訓練流程——

  • 有監督的預訓練,獲得 CNN
  • 特定領域的微調:首先改變模型,就是上面提到的輸入改變,CNN 的 ROI 池化引入,還有分類迴歸模塊的改變;
  • 接着,輸入圖片和區域後,就能實現端到端的多任務訓練,不須要單獨訓練分類和迴歸模塊。

檢測流程——

  • 輸入一張多目標圖像
  • 採用 selective search 獲得的預選區域
  • 用卷積層和池化層處理這幅圖片,生成 feature map;
  • 對於每一個候選區域,用一個 RoI 池化層從上一層的 feature map 中提取定長的特徵向量;
  • 同時完成分類迴歸任務:每一個 feature vector 送入一系列全鏈接層,這些全鏈接層最後會分支成 two sibling output layers: 一個能夠在K個對象類以及一個籠統的「背景」類上生成 softmax 機率估計;另外一層爲 K 個對象類中的每個輸出四個實數值(編碼精確的邊界框位置)。

與 R-CNN 相比

  • R-CNN 先用 SS 從圖片生成候選區(而後圖片就不用了),把候選區輸入CNN 提取特徵,由於生成的區域有重疊,因此計算重複;Fast R-CNN 先用 SS 從圖片生成 候選區,兵分兩路,先把整幅圖輸入 CNN 一次性提取特徵生成特徵圖,對於每一個候選區,用一個 RoI 池化層從上一層的 特徵圖中提取定長的特徵向量。
  • R-CNN 對分類和迴歸模塊分別訓練,Fast R-CNN 網絡末尾採用並行的兩個全鏈接層,可同時輸出分類結果和邊界框的迴歸結果,實現了端到端的多任務訓練。

3. Faster R-CNN

問題背景——

  • 繼Fast R-CNN後,在CPU上實現的區域建議算法 Selective Search、EdgeBoxes 等成了物體檢測速度提高上的最大瓶頸。

創新點——

  • 設計 Region Proposal Networks(RPN),利用 CNN 卷積操做後的特徵圖生成候選區,代替了Selective Search、EdgeBoxes 等方法,速度上提高明顯;
  • 訓練 Region Proposal Networks 與檢測網絡(Fast R-CNN)共享卷積層,大幅提升網絡的檢測速度。

框架模塊——

  • PRN + Fast R-CNN
  • Fast R-CNN 生成候選區域須要外部的 SS 模塊,而 Faster R-CNN 是一個統一的模塊,region proposal 部分由 PRN 完成

訓練流程——

四步交替訓練:

  • 訓練PRN:使用 ImageNet-pre-trained model 初始化,針對 region proposal 任務微調
  • 用第一步獲得的 PRN 訓練 Fast R-CNN:其中 Fast R-CNN 也用 ImageNet-pre-trained model 初始化(此時兩個網絡尚未共享特徵)。
  • 用 Fast R-CNN 初始化 PRN:固定共享的卷積層,僅微調 RPN 特有的層(此時兩個網絡開始共享)
  • 在保持共享卷積層固定不變的狀況下,微調 Fast R-CNN 的特有層。(兩個網絡共享相同的卷積層並造成統一的網絡)

檢測流程——

  • 輸入一張多目標圖像
  • 圖像通過 CNN 網絡生成特徵圖
  • 特徵圖分兩路,一路通過 PRN 獲得候選區域(通過 NMS ),另外一路繼續向後傳播。
  • 上一步獲得的高維特徵圖和區域建議同時輸入 RoI 池化層,提取對應區域建議的特徵
  • 區域特徵經過全鏈接層後,輸出該區域的分類得分以及迴歸後的 bounding-box

5、總結

在這裏插入圖片描述

相關文章
相關標籤/搜索