1. 程式人生 > >Object Detection(一)RCNN

Object Detection(一)RCNN

近段時間,筆者開始系統的看了看目標檢測方面的文章,以後可能會在這個方向上發展。所以這裡準備寫個目標檢測系列,先是RCNN系列(從RCNN一直到Mask RCNN,以及YOLO和SSD)。之後可能還會寫語義分割,目標追蹤,3D檢測方向blog。

區域卷積神經網路(R-CNN)

2014年 CVPR RBG大神-Ross Girshick開創性的提出區域卷積神經網路(Regions with CNN features,簡稱 R-CNN),藉助CNN良好的特徵提取效能,使用RegionProposal的方式將目標檢測問題轉化為一個分類問題和一個迴歸問題。
下面就來簡單的概述下RCNN是如何工作的。


具體來說主要分為以下四步:

  1. 對每張輸入影象使用選擇性搜尋selective search來選取多個高質量的提議區域 。這個演算法先對影象基於畫素資訊做快速分割來得到多個區域,然後將當下最相似的兩區域合併成一個區域,重複進行合併直到整張影象變成一個區域。最後根據合併的資訊生成多個有層次結構的提議區域,併為每個提議區域生成物體類別和真實邊界框。
  2. 選取一個預先訓練好的卷積神經網路,去掉最後的輸出層來作為特徵抽取模組。對每個提議區域,將其變形成卷積神經網路需要的輸入尺寸後進行前向計算抽取特徵。
  3. 將每個提議區域的特徵連同其標註做成一個樣本,訓練多個支援向量機(SVM)來進行物體類別分類。
  4. 使用bounding box regression來對目標框做修正。

在第一步中,使用的selective search是2012年提出的一個方法,其核心也是藉助SVM將相似的區域不斷合併,結構如下。

第二步中用到的卷積神經網路是在ImageNet上預訓練的AlexNet。
第三步中分類時一共分了N+1類(N個目標類別 + background)
下面再詳細介紹下第四步

Bounding-box regression

首先演算法的輸入是N個pair對

其中

是第i個框的座標值,前兩個為該框中心點的座標,後兩個分別為寬和高。
然後

為ground truth
我們的目標就是要學習一個轉換,將proposed box P 對映到 ground-truth box G.
我們將這個對映定義為四個轉換函式dx§,dy§,dw§,dh§
於是我們就可以通過下面的方法得到預測框


其中的每一個d都是一個線性函式,所以又可以表示成

w是一個可學習的vector
現在我們就可以得到優化目標

其中的t就是我們的迴歸目標,定義如下

簡單的來說就是我們通過上面所述的這些方法,對每一個P得到一個修正值t,P和t做運算過後就得到了最後的預測框。

小結

R-CNN 對之前物體識別演算法的主要改進是使用了預先訓練好的卷積神經網路來抽取特徵,有效的提升了識別精度。
但R-CNN存在如下幾個缺點

  • 多個候選區域對應的影象需要預先提取,佔用較大的磁碟空間
  • 每一個RegionProposal都要通過CNN做前向運算,非常消耗資源,從而導致速度過慢。
    當然在訓練的時候我們可以事先算好每個區域的特徵並儲存,因為訓練中不更新卷積網路的權重。但在做預測時,我們仍然需要計算上千次的前向計算,其帶來的巨大計算量使得 RCNN 很難在實際應用中被使用。

更多細節請參考論文地址
下一篇將介紹在RCNN基礎上進行改進得到的Fast RCNN