論文閱讀:R-CNN

一.簡介

        R-CNN來源於論文“Rich feature hierarchies for accurate object detection and semantic segmentation”,論文原文地址爲http://arxiv.org/abs/1311.2524
        其基本思想是“將檢測任務轉換爲分類任務”
R-CNN的算法原理圖

二.算法原理

2.1模塊設計

(1)產生區域建議模塊
        本文中使用Selective Search的方法產生2000個Region Propopals。
(2)特徵提取模塊
        對於每一個Region Proposal,首先對這些區域進行膨脹處理,在其 box 周圍附加了pp個像素,也就是人爲添加了邊框,在本文中p=16p=16
        通過Selective Search產生的Region Proposals大小不一,爲了適應AlexNet的輸入圖像的尺寸要求,作者無視Region Proposals的大小和形狀,將膨脹後的每一個Region Proposal都暴力地resize到227×227227 \times 227的尺寸大小
        之後使用AlexNet對於每一個Region Proposal都抽取出一個4096維的特徵向量

2.2模型訓練

在R-CNN的訓練階段,主要可分爲以下幾個步驟:
(1)有監督的預訓練
    在paper中,作者藉助Caffe這一深度學習框架的CNN相關庫,在ILSVRC2012的數據集上訓練了一個CNN(此CNN爲AlexNet),其實此時訓練出來的CNN只具備圖像分類的能力。關於ILSVRC2012數據集的介紹可以參考這篇博客:ILSVRC2012數據集介紹
(2)針對特定領域的Fine-tuning
        爲了使得上一步中我們預訓練的CNN能夠適應新的任務(目標檢測)和新領域(變形的候選窗口中的圖像),作者使用resize的候選窗口中的圖像進行SGD(隨機梯度下降)訓練(即Fine-tuning)
        上一步中訓練得到的CNN的最後一層的分類層(softmax層)爲1000個節點,根據Fine-tuning使用的數據集不同,將分類層改成N+1N+1個節點,其中NN爲此步驟中使用的數據集的類別數目,需要加的11是背景。對於VOC數據集,N=20N=20;對於ILSVRC2013數據集,N=200N=200
        同時,這一步中使用的AlexNet除了需要改造最後一層softmax層的節點個數以外,爲了模型精簡,作者還去掉了倒數第二層的FC7
        選取IoU>=0.5的bounding box;在SGD訓練中,設置學習率爲0.001;在每一輪的SGD迭代中,在一張圖像的所有類別中採樣32個正窗口和96個背景窗口組成一個128大小的mini-batch
(3)物體類別分類器
        此時需要訓練一個二分類器,輸出結果爲positive和negative
        首先需要明確定義好什麼樣子的example屬於positive和negative,定義好之後就可以爲每一個方框打上label。以識別汽車爲例,對於一個方框包含了一輛汽車,定義爲positive;若一個方框完全沒有包含汽車,那它就是一個背景,定義爲negative;如果一個方框一部分與汽車重疊,使用IoU的閾值(threshold),R-CNN中threshold取0.3,如果一個區域與ground truth的IoU值低於設定的閾值,那麼可以講它看成是 negative,否則爲positive。很自然地,將判斷屬於positive的example定義爲ground truth
        此時到目前爲止,已經實現了特徵提取和打上label,就可以使用此數據及標籤來最訓練並優化一個SVM
        由於數量過大內存裝不下,這裏作者採用的方法爲hard negative mining

2.3模型測試

        在測試階段,R-CNN在每張圖片上提取大約2000 個Region Proposals
        然後對於每個Region Proposal使用“特徵提取模塊”進行先膨脹再resize,送進AlexNet以讀取特徵,然後用 SVM 進行類別的識別,併產生分數
        Region Proposals有 2000 個,所以會有很多重疊,針對每個類,通過計算 IoU 指標,採取非極大性抑制,以最高分的區域爲基礎,剔除掉那些重疊位置的區域

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章