R-CNN論文解讀

論文鏈接:https://arxiv.org/abs/1311.2524

論文題目:《Rich feature hierarchies for accurate object detection and semantic segmentation》2014
【用於精確物體定位和語義分割的豐富特徵層次結構】

先來介紹一下幾個基本的概念:

  • 分類是對圖像中僅有的主體分類;
  • 定位就是對圖像中僅有的主體進行分類並給出位置;
  • 檢測則是對多個主體進行定位和分類;
  • Bounding box:(bx, by, bw, bh),bx和by分別爲要識別主體的中心點座標,而bw和bh爲識別主體的長寬,這樣只需要四個參數就可以將主體的位置確定。

Abstract

在規範的PASCAL VOC數據集上,目標檢測的性能在過去多年已經趨於穩定,效果最好的方法是將多種低層次的圖像特徵和高層次的上下文環境結合在一起的複雜系統。在本篇論文中,我們提出了一種簡單且可擴展的檢測算法,它相比了之前在VOC 2012上最好的結果將平均準確率均值(map)提高了30%——達到了53.3%。我們的方法結合了兩個關鍵點:
在這裏插入圖片描述

  1. 一是在候選區域自底向上的使用高性能的CNN網絡,用以定位和分割目標對象;
  2. 二是當帶有標籤的訓練數據不足時,使用遷移學習,對在大規模數據集上已經做過訓練的神經網絡進行微調(fine-tune),這樣可以有一個比較大的性能提升;

由於我們將候選區域(Region Proposals)和 CNNs 結合在了一起,所以我們的方法叫做 R-CNN:Regions with CNN features。我們也將R-CNN 和 OverFeat(最近提出的一種基於類似的CNN結構的滑動窗口檢測)進行了對比,發現 R-CNN 在200類的 ILSVRC2013 數據集上性能明顯優於 OverFeat。

1. Introduction

自從AlexNet在2012 ImageNet大賽奪得冠軍,卷積神經網路就收到了越來越多的關注,於是一個新的問題就出現了:如何將卷積神經網絡在ImageNet上的訓練結果泛化到目標檢測領域?
我們回答這個問題是通過在圖像分類和目標檢測之間建立聯繫,這篇論文是第一次將CNN運用在PASCAL VOC數據集上大幅度提高目標性能的成果,爲了實現這個結果,我們聚焦於兩個問題:

  1. 使用神經網絡做定位
  2. 如何使用小樣本來訓練一個高性能的模型

不同於圖像分類,檢測是要在一張圖片中定位多個物體,一種方法是把定位看作一個迴歸問題,然而Szegedy等人的工作表明這不是一個好方法;另一種方法是使用滑動窗口檢測器,問題在於滑窗的大小,步長,選擇幾種窗口?理論上爲了遍歷圖像上的所有目標,可能要生成數以萬計的候選框,因此只用滑窗的方法是不可行的。我們的方法是使用SS算法生成2000個候選框。

第二個問題的解決我們是通過遷移學習,後面會展開介紹。

2. Object detection with R-CNN

我們的目標檢測系統由三個模塊組成。第一個產生類別無關的候選區域,這些候選區域定義了我們的檢測器要探測區域的集合;第二個模塊是一個大型卷積神經網絡,它會從每個區域抽取特定大小的特徵向量;第三個模塊是制定類別的SVM的集合。在本節中,我們展示了每個模塊的設計、描述了它們在測試階段的用法、以及參數如何學習的細節,並且展示了在 PASCAL VOC 2010-12 和 ILSVRC2013 上的檢測結果。

2.1 Model design

候選區域
最近大量的論文都提出了產生類別無關的候選區域的方法,主要包括:

  • objectness
  • selective search
  • category-independent object proposals
  • constrained parametric min-cuts(CPMC)
  • multi-scale combinatorial grouping
  • Ciresan等

在這裏我們選擇的是selective search選擇候選區域,它是一種基於特點規則篩選候選框的方法,這種方法無需訓練,運行傳統分割算法提取很多初始候選框,按照相似度合併候選框,最終留下固定數量的候選框,一般這個具體的數量選擇2000個。

特徵提取
在這裏插入圖片描述在這裏我們選擇的卷積神經網路是AlexNet,它的結構如上圖所示,包括五個卷積層和三個全連接層。由SS算法選取得到的2000個候選框區域,由於大小不一致我們先要集體resize爲227x227的RGB圖像,每個候選框通過五個卷機層和兩個全連接層由FC7輸出4096-D的特徵向量,則2000個候選框共可以得到2000*4096維度的特徵。

如何將2000個大小不一的候選框統一轉換爲 227x227 的尺寸呢?這個轉換有很多辦法,我們使用了最簡單的一種。無論候選區域是什麼尺寸和寬高比,我們都把候選框變形成想要的尺寸。具體的,變形之前,我們現在候選框周圍加上16的padding,再進行各向異性縮放。

2.2 Test-time detection

在測試時,我們先在測試圖片上通過SS算法選擇2000個候選框,然後扭曲每個候選框resize到227x227,再通過卷積神經網絡得到 2000*4096 維度的特徵。訓練這樣就得到了所有打分區域,我們應用貪心非極大值抑制對和該類得分最高的候選框IoU值超過一定閾值的框捨棄。

Run-time分析

兩個屬性使得檢測很高效:

  1. 類別之間的CNN參數是共享的;
  2. 與其他的方法(spatial pyramids with bag-of-visual-word encodings)相比,通過CNN計算得到的特徵向量的維度是低維的。使用UVA檢測系統得到的特徵向量維度比我們高兩個數量級(360k vs. 4k-dimensional);

共享的結果就是計算候選框特和特徵的耗時可以分攤到所有類別上(GPU:每張圖片13s,CPU:每張圖片53s)。唯一和類別有關的計算是特徵之間的點積、SVM的權重、NMS。實踐中,所有的點積都可以批量化成一個單獨矩陣間運算。特徵矩陣的典型大小是2000×4096,SVM權重的矩陣是4096xN,其中N是類別的數量。

分析表明R-CNN不需要使用近似技術(比如hashing)就可以擴展到上千個類別,即使有10萬類,結果矩陣乘法在現代多核CPU上也只需要10s。這種高效性不只是因爲候選框和特徵共享。由於較高維度的特徵,UVA系統存儲100k linear predictors需要134GB的內存,而我們只要1.5GB,比我們高了兩個數量級。

有趣的是R-CCN和最近Dean等人使用DPMs和hashing做檢測的工作相比,他們用了1萬個干擾類, 每五分鐘可以處理一張圖片,在VOC2007上的mAP能達到16%。我們的方法1萬個檢測器由於沒有做近似,可以在CPU上一分鐘跑完,達到59%的mAP(3.2節)。

2.3 Training

帶監督的預訓練

我們使用caffe訓練的AlexNet做遷移學習,獲得的CNN性能幾乎匹配Krizhevsky等人的結果,在ILSVRC2012大型輔助測試集上的top-1錯誤率僅僅高了2.2個百分點,這種差異是因爲我們簡化了訓練過程。

特定域的微調

爲了將我們的CNN用在新的檢測任務和新的域(扭曲之後的候選框)上,我們繼續使用SGD算法訓練參數。除了將原來的AlexNet的最後一層1000神經元(因爲ImageNet數據集是1000分類的)將它改爲(N+1)個神經元(其中N代表目標檢測的種類數,多的“1”代表背景類),CNN結構沒有變化。對於VOC,N=20,對於ILSVRC2013,N=200。

有一個問題是微調時每個框的標籤是什麼呢?答案就是一個21維的特徵向量,如果該框域某一類的ground truth的IoU值大於等於0.5,就將其作爲該類的正樣本,其餘的爲負樣本,另外正樣本還包括了ground truth。SGD開始的learning_rate爲0.001(是初始化預訓練時的十分之一),這使得調優得以有效進行而不會破壞初始化的成果。每輪SGD迭代,我們統一使用32個正例窗口(跨所有類別)和96個背景窗口,即每個mini-batch的大小是128。另外我們傾向於採樣正例窗口,因爲和背景相比他們很稀少。

目標分類器

這裏的訓練樣本的標籤如何準備的呢?訓練每一個類別的分類器時,對每個候選框計算與該類別的ground truth的IoU值,IoU值小於0.3的作爲該類別的負樣本,正樣本爲嚴格的ground truth,其餘的全部丟棄。每個候選框對應的標籤就是0或者1,它代表該框屬不屬於這個類;那麼SVM算法的輸入是4096維度的特徵向量,輸出爲一個在0到1之間的概率值,然後關於20個類別訓練得到20分類器,在測試階段對2000個候選框的每一個候選框使用每一個分類器來判斷它屬於每一個類的概率

上面的0.3是基於網絡結構搜索出來的,在{0,0.1,…,0.5}之間進行驗證,我們發現設置爲0.5時map會降低5個百分點,設置爲0時會降低4個百分點。

一旦特徵提取出來,並應用標籤數據,我們優化了每個類的線性SVM。由於訓練數據太大,難以裝進內存,我們選擇了標準的hard negative mining method

【難負例挖掘算法,用途就是正負例數量不均衡,而負例分散代表性又不夠的問題,hard negative
就是每次把那些頑固的棘手的錯誤,再送回去繼續練,練到你的成績不再提升爲止.這一個過程就叫做
’hard negative mining‘】

高難負例挖掘算法收斂很快,實踐中只要在所有圖像上經過一輪訓練,mAP就可以基本停止增加了。附錄B中,我們討論了,爲什麼在fine-tunning和SVM訓練這兩個階段,我們定義得正負樣例是不同的。

【fine-tunning階段是由於CNN對小樣本容易過擬合,需要大量訓練數據,故對IoU限制寬鬆:
 IoU>0.5的建議框爲正樣本,否則爲負樣本; SVM這種機制是由於其適用於小樣本訓練,
 故對樣本IoU限制嚴格:Ground Truth爲正樣本,與Ground Truth相交IoU<0.3的建議框爲負樣本。】

我們也會討論爲什麼訓練一個分類器是必要的,而不只是簡單地使用來自調優後的CNN的最終fc8層的輸出。

【爲什麼單獨訓練了一個SVM而不是直接用softmax,作者提到,剛開始時只是用了ImageNet
預訓練了CNN,並用提取的特徵訓練了SVMs,此時用正負樣本標記方法就是前面所述的0.3,
後來剛開始使用fine-tuning時,也使用了這個方法,但是發現結果很差,於是通過調試選擇了
0.5這個方法,作者認爲這樣可以加大樣本的數量,從而避免過擬合。然而,IoU大於0.5就作
爲正樣本會導致網絡定位準確度的下降,故使用了SVM來做檢測,全部使用ground-truth樣
本作爲正樣本,且使用非正樣本的,且IoU小於0.3的“hard negatives”,提高了定位的準確度】。

2.4 Results on PASCAL VOC 2010-12

遵循了PASCAL VOC 的最佳實踐步驟,我們是在 VOC 2007 的數據集上驗證我們的設計思想和超參數,在VOC 2012數據集上對CNN網絡進行微調,並優化SVM。我們最終分別提交了有和無邊框迴歸的算法。
在這裏插入圖片描述表一展示了在VOC 2010上的比較結果。

2.5 Results on ILSVRC2013 detection

在這裏插入圖片描述從上圖可以看出來,R-CNN的結果遠遠領先於OverFeat,在這裏使用到神經網絡結構的算法有OverFeat、NEC-MU、UvA-Euvision、Toronto A 和 UIUC-IFP,這表明如何將CNN用到物體檢測是非常重要的,這將會導致不同的結果。

3. Visualization,ablation,and modes of error

3.1 可視化學習到的特徵

第一層卷積核學習到的特徵很容易理解,他們捕捉的是定向的邊緣和顏色特徵,理解後面的層越來越難,我們提出了一種非參數方法來直接展示網絡學習到了什麼。
在這裏插入圖片描述我們可視化了第五個池化層,第五個池化層的feature map大小爲 6x6x256=9216-D,忽略邊界效應,每個池化層單元的感受野爲195x195,中心的pool5單元幾乎是全局視角,而接近邊緣有較小的帶剪裁的支持。

在Figure 4中每行展示了調優過後的CNN網絡結構pool5單元的最大的16個激活值,256個不同單元的可視化在附錄D中。這些單元被選擇作爲整個網絡學習到的代表採樣,在第二行,觀察到狗臉和點陣時單元激活,第三行時一個紅色物體的探測器,這個網絡似乎學到了一些類別調優相關的特徵,這些特徵都是形狀、紋理、顏色和材質特性的分佈式表示。而後續的fc6層則對這些豐富的特徵建立大量的組合來表達各種不同的事物。

3.2 Ablation studies

沒有調優之前的各層表現力

我們主要看一下最後三層的表現力,pool5在上面已經說過,fc6是和pool5緊跟着的全連接層,爲了計算特徵,它是在pool5的輸出上乘了一個4096 x 9216的權重矩陣,並加了偏置。fc7是網絡的最後一層,它是在fc6的輸出上乘了一個4096x4096的矩陣。我們先來看沒有調優之前的網絡,分別使用pool5、fc6、fc7作爲特徵向量來做分類的表現力。可以看出來,fc7層的特徵泛化能力不如fc6層,這意味着29%的CNN參數(大於1680萬)可以直接移除,更令人驚喜的是,將fc6和fc7層直接移除仍然會產生很好的結果(相當於僅保留了6%的參數量)。這說明了CNN網絡的主要表達力來自於卷積層,而非全連接層,這個發現提醒我們在計算一個密集的feature map時僅僅使用卷積層的可能性,這表示可以直接在pool5的特徵圖上進行滑動窗口的實驗。
在這裏插入圖片描述
調優之後的各層表現力

通過調優可以使得map增加8個百分點,並且調優對fc6和fc7層的提升要大於對pool5層的提升,這說明從ImageNet學習到的pool5層的特徵泛化能力強,而在全連接層主要是要學習和特定訓練集相關的非線性分類器。

與其他方法的學習到的特徵的比較

具體的細節可以在論文中查看,上表table 2中的8-10是用其他方法學習到特徵的map。

3.3 Network architecture

在這裏插入圖片描述在這篇論文中大多數結果使用的網絡結構都是AlexNet,然後我們發現不同的網絡會對R-CNN的檢測產生不同的影響。如上表中的T-Net是TorontoNet,O-Net是一個16層的網絡結構——13個3x3的卷積層,5個最大池化層,3個全連接層。

3.4 Detection error analysis

我們應用了Hoiem等人的檢測分析工具來對我們的方法的錯誤模式進行分析,來理解調優到底是如何修正錯誤的,並和DPM的錯誤類型進行了對比。一個完整的分析工具的總結不在我們這篇論文的論述範圍內,但是我們鼓勵讀者自己去了解一些細節。下面我們展示了我們的分析結果:
在這裏插入圖片描述在這裏插入圖片描述

3.5 Bounding-box regression

基於上面的錯誤分析,我們可以看出來定位導致的map下降要比其他三種類型嚴重很多,因此受到DPM中邊框迴歸的靈感,我們也訓練了一個線性迴歸模型來對pool5的特徵進行預測。具體的細節下面會展開描述,通過前面的table1、table2、Figure 5都可以看出來使用了Bounding-box會將map提升3-4個百分點。

我們使用了一種簡單的邊框迴歸算法來提高定位表現力,在用每個類別的SVM算法對SS刪選出來的候選框進行打分之後,我們使用該類別的邊框迴歸模型對邊框進行預測。這和用在deformable part models中的邊框迴歸模型類似,主要的不同在於我們的方法中迴歸模型的輸入特徵是CNN計算得到的,而不想DPM中是根據幾何特徵計算推理得到。

具體細節:https://blog.csdn.net/v1_vivian/article/details/80292569

值得一提的是,我們並沒有使用候選框的中心座標和長寬來作爲迴歸模型的輸入,ground truth的中心座標和長寬作爲標籤直接構建模型;而是採用pool5的特徵作爲輸入,tx,ty,tw,th作爲標籤來構建迴歸模型,通過迴歸模型學習到w*.

在做邊框迴歸時,我們發現了兩個微妙的問題:

  1. 我們在做迴歸模型時使用到了正則化,其中參數設置爲1000;
  2. 在進行迴歸時,我們並非是使用所用的候選框來作爲樣本,而是對於每個類分別建立迴歸模型,然後挑選出與該類IoU大於等於0.6的候選框作爲該類的樣本;

在測試階段,我們先對每個候選框使用SVM做類別評分,然後根據類別使用迴歸模型調整邊框位置。最後再逐類通過非極大值抑制刪除了一些邊框就得到了我們最後的檢測框。看到這裏,整個R-CNN的流程應該已經全部介紹完了,我們總結一下它的流程繪成圖如下:
在這裏插入圖片描述

參考文章:

https://blog.csdn.net/v1_vivian/article/details/78599229
https://blog.csdn.net/u014380165/article/details/72851035

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