paper連結:https://arxiv.org/pdf/1311.2524.pdf
code連結:http://www.cs.berkeley.edu/~rbg/rcnn
本文是2014年CVPR上發表的第一篇将深度學習應用到目标檢測上的算法。
Introduction
對于計算機視覺來說,分層、多階段的過程對識别其中的特征更有幫助。
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIwczX0xiRGZkRGZ0Xy9GbvNGL2EzXlpXazxSP9cnW1ZVbaVnRXFGNWhkYxokMMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZwpmLwUTOyQzMxETM4AjMwEjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
算法大緻思路步驟:
- 輸出圖像;
- 提取大約2000個自下而上的建議區域;
- 使用大型卷積神經網絡(CNN)計算每個建議的特征;
- 使用特定類别的線性支援向量機對每個區域進行分類。
反向傳播的随機梯度下降對于訓練卷積神經網絡(CNNs)是有效的。
使用深度神經網絡定位對象,并使用少量帶注釋的檢測資料訓練高容量模型。
檢測需要在圖像中定位(可能定位很多對象),其一是将之看做回歸問題,效果不是很好(YOLO中也将之看做回歸問題,确實精度不如Fast R-CNN等算法,但是提升了速度,降低了複雜性),其二就是建立滑動視窗檢測器(如檢測行人和人臉),這些CNNs隻有2個卷積層和池化層。作者提出考慮滑動視窗方法,搭建具有5個卷積層的高層網絡。(OverFeat也使用CNN進行目标檢測,R-CNN的mAP高于OverFeat)
論文中闡述R-CNN面臨兩個挑戰:
- 在使用滑動視窗方法時,網絡具有5個卷積層的高層單元在輸入圖像中具有很大的感受野和步幅,影響了精确定位;
- 标記資料的稀缺。
解決方案:
- 使用“識别使用區域”的方法,輸入圖像生成大約2000個類别無關的區域建議,使用CNN從每個建議中提取固定長度的特征向量,然後用類别特定的線性支援向量機對每個區域進行分類;
- 大資料集上的監督預訓練(ILSVRC),在小資料集上的領域特定微調(PASCAL)。
R-CNN
Model Design
分為三個部分:
- 第一個生成與類别無關的區域建議,這些建議定義了我們的檢測器可用的候選檢測集;
- 第二個子產品是一個大型卷積神經網絡,它從每個區域提取固定長度的特征向量;
- 第三個子產品是一組特定類别的線性支援向量機。
Region proposals
對象性、選擇性搜尋、類别無關的對象建議、限制參數最小割(CPMC)、多尺度組合分組、将CNN應用于規則間隔的正方形作物來檢測
Feature extraction
從每一個區域建議中提取一個4096維的特征向量;
通過五個卷積層和兩個全連接配接層向前傳播減去平均值的227×227 RGB圖像來計算特征。
為了計算區域建議的特征,将該區域的圖像資料轉換成與CNN相容的形式(其架構要求輸入固定的227 × 227像素大小);
不管候選區域的大小或縱橫比如何,我們都将它周圍的一個緊密包圍框中的所有像素扭曲到所需的大小。
(下圖為扭曲後為227×227像素大小的圖像)
Test-time detection
對測試圖像進行選擇性搜尋,提取大約2000個區域建議,并且扭曲每個建議區域,并通過CNN進行傳播,以計算特征;
然後對于每個類别,使用為該類别訓練的SVM對每個提取的特征向量進行評分。
給定圖像中的所有已評分區域,我們應用貪婪的非最大值抑制,如果一個區域與大于學習門檻值的較高評分標明區域有交叉-重疊(IoU)重疊,則拒絕該區域。
(中間的training和results略)
Object proposal transformations
對于檢測,我們考慮的對象提案是任意圖像矩形。而卷積神經網絡需要227 × 227像素的固定大小的輸入。
兩種解決方案:
- 帶“上下文語境”的圖檔:直接在原始圖檔中,把bounding box的邊界進行擴充延伸成正方形,然後再進行裁剪;如果已經延伸到了原始圖檔的外邊界,那麼就用bounding box中的顔色均值填充;
- 先把bounding box圖檔裁剪出來,然後用固定的背景顔色填充成正方形圖檔(背景顔色也是采用bounding box的像素顔色均值:一般為灰色);
- 将圖像進行扭曲,進而達到227*227像素的正方形。