1. 程式人生 > >Fast R-CNN 目標檢測演算法詳細總結分析(two-stage)(深度學習)(ICCV 2015)

Fast R-CNN 目標檢測演算法詳細總結分析(two-stage)(深度學習)(ICCV 2015)

論文名稱:《 Fast R-CNN 》

論文下載:https://arxiv.org/pdf/1504.08083.pdf

論文程式碼:https://github.com/rbgirshick/fast-rcnn


一、 網路結構:

(1)
(2)
圖2 Fast R-CNN網路結構

將整幅影象作為卷積網路的輸入,經過一些列卷積和最大池化層後,得到整幅圖的conv feature map.同時用Selective Search 方法提取2k個object proposals,找出整幅圖的卷積特徵對映中每個object proposals所對應的feature map, 它們經過一個ROI pooling layer 形成一個固定長度的feature map(全連線層要求輸入大小相同),再經過兩個全連線層,生成固定長度的feature vector。使用softmax網路進行分類,最後再進行邊界框的迴歸。

ROI pooling層能實現training和testing的顯著加速,並提高檢測accuracy。該層有兩個輸入:

  • 從具有多個卷積核池化的深度網路中獲得的固定大小的feature maps;
  • 一個表示所有ROI的N*5的矩陣,其中N表示ROI的數目。第一列表示影象index,其餘四列表示其餘的左上角和右下角座標;

ROI pooling具體操作如下:

(1)根據輸入image,將ROI對映到feature map對應位置;

(2)將對映後的區域劃分為相同大小的sections(sections數量與輸出的維度相同);

(3)對每個sections進行max pooling操作;

這樣我們就可以從不同大小的方框得到固定大小的相應 的feature maps。值得一提的是,輸出的feature maps的大小不取決於ROI和卷積feature maps大小。ROI pooling 最大的好處就在於極大地提高了處理速度。

二、訓練:

分類和邊框迴歸同時訓練,損失函式為:

Fast R-CNN的損失函式

三、測試過程:

(1)任意size圖片輸入CNN網路,經過若干卷積層與池化層,得到特徵圖;

(2)在任意size圖片上採用selective search演算法提取約2k個建議框;

(3)根據原圖中建議框到特徵圖對映關係,在特徵圖中找到每個建議框對應的特徵,並在RoI池化層中將每個特徵框池化到H×W的size;

(4)固定H×W大小的特徵框經過全連線層得到固定大小的特徵向量;

(5)第4步所得特徵向量經由各自的全連線層,分別得到兩個輸出向量:一個是softmax的分類得分,一個是Bounding-box視窗迴歸;

(6)利用視窗得分分別對每一類物體進行非極大值抑制剔除重疊建議框,最終得到每個類別中迴歸修正後的得分最高的視窗。

四、創新點:

  1. 只對全圖進行一次特徵提取,不用對2K個建議框都進行卷積特徵提取,大大縮短執行時間和硬體資源消耗。
  2. 在卷積層與全連線層之間加入SPP-net,替換之前的pool5,SPP層對特徵進行池化,併產生固定長度的輸出,這個輸出再給全連線層,使得網路適應任意尺寸的影象輸入。
  3. 網路末尾採用並行的不同全連線層,可輸出分類結果和邊界框迴歸結果,實現端到端的多工同時訓練,減少硬體快取。
  4. 採用SVD對Fast R-CNN網路末尾並行的全連線層進行分解,減少計算複雜度,加快檢測速度。

五、存在問題:

  1. 仍然使用Selective Search方法進行候選框的提取,複雜耗時。
  2. 仍然沒有實現實時目標檢測。