RCNN論文筆記

 個人博客:http://www.chenjianqu.com/

原文鏈接:http://www.chenjianqu.com/show-69.html

 

RBG大佬的論文<Rich feature hierarchies for accurate object detection and semantic segmentation>

素質三連

1.論文貢獻

提出R-CNN(Regions with CNN features)算法,這是一個兩階段目標檢測算法。

關鍵點 :

1)使用selective search生成region proposals

1)使用CNN提取region proposals的特徵

2)數據不足時,現在進行預訓練,然後進行特定領域的微調。

2.實驗結果

在VOC 2012上,該算法的mAP比之前的模型提高了30%,達到53.3%的mAP

3.待解決的問題

速度太慢了,訓練過程過於麻煩,不是端對端的模型。

預備知識

1.目標檢測

    目標檢測是我們用於識別圖像中目標位置的技術。如果圖像中有單個目標,並且我們想要檢測該目標的位置,則稱爲圖像定位。如果想要堅持圖像中多個目標的位置,就是目標檢測。

 1.jpg

    近幾年來,目標檢測算法取得了很大的突破。比較流行的算法可以分爲兩類:

    一類是基於Region Proposal的R-CNN系算法(R-CNN,Fast R-CNN, Faster R-CNN等),它們是two-stage的,需要先算法產生目標候選框,也就是目標位置,然後再對候選框做分類與迴歸。

    另一類是Yolo,SSD這類one-stage算法,其僅僅使用一個卷積神經網絡CNN直接預測不同目標的類別與位置。

    第一類方法是準確度高一些,但是速度慢,但是第二類算法是速度快,但是準確性要低一些。

 

2.Intersection-Over-Union (IoU)

    物體檢測需要定位出物體的bounding box,定位精度評價公式IOU:IOU=(A交B)/(A並B),用面積來看,公式爲IOU=Sab/(Sa+Sb-Sab),圖:

2.png

3.Mean Average Precision (mAP)

    類別平均精度均值。使用loU判斷檢測是否正確需要設定一個閾值,最常用的閾值是0.5,即如果loU>0.5,則認爲是真實的檢測(true detection),否則認爲是錯誤的檢測(false detection)。計算圖片得到的每個檢測框(置信度大於閾值)的loU值,用計算出的loU值與設定的loU閾值比較,就可以計算出該圖片中類C的正確檢測次數True Positives。對於每個圖像,我們都有ground truth的數據(即知道每個圖像的真實目標信息),因此也知道了該圖像中類C的實際目標的數量Total Objects。

    因此可以計算該圖片中類C的檢測精度:3.png

    計算所有圖片中類C的平均精度:4.png

    計算所有類別的平均精度的平均值(mAP,Mean Average Precision)5.png

4.Non-Maximum Suppression (NMS)

    非極大值抑制

6.png

    如上圖,定位車輛,算法生成了一堆bounding box,我們需要判別哪些是沒用的。假設有6個矩形框,根據分類器給出的置信度做排序,從小到大分別屬於車輛的概率分別爲A、B、C、D、E、F。

    (1)從最大概率的矩形框F開始,分別判斷A~E與F的重疊度IoU是否大於某個設定的閾值;

    (2)假設B、D與F的重疊度超過閾值,那麼就扔掉B、D;並標記第一個矩形框F,是我們保留下來的。

    (3)從剩下的矩形框A、C、E中,選擇概率最大的E,然後判斷E與A、C的重疊度,重疊度大於一定的閾值,那麼就扔掉;並標記E是我們保留下來的第二個矩形框。

    就這樣一直重複,找到所有被保留下來的矩形框。

 

5.Hard Negative Mining (難例挖掘)

    目標檢測中的正負樣本:在目標檢測中我們會事先標記好ground_truth,接下來在圖片中隨機提取一系列sample,與ground_truth重疊率IoU超過一定閾值的(比如0.5),則認爲它是positive sample,否則爲negative sample。考慮到實際負樣本數>>正樣本數,我們爲了避免network的預測值少數服從多數而向負樣本靠攏,取正樣本數:負樣本數大約爲1:3,顯而易見,用來訓練網絡的負樣本爲提取的負樣本的子集,那麼,我們當然選擇負樣本中容易被分錯類的困難負樣本來進行網絡訓練。

    困難負樣本(hard negative):困難負樣本是指哪些容易被網絡預測爲正樣本的proposal,即假陽性(false positive),如roi裏有二分之一個目標時,雖然它仍是負樣本,卻容易被判斷爲正樣本,這塊roi即爲hard negative,訓練hard negative對提升網絡的分類性能具有極大幫助,因爲它相當於一個錯題集。

    難例挖掘(hard negative mining):我們先用初始樣本集去訓練網絡,再用訓練好的網絡去預測負樣本集中剩餘的負樣本,選擇其中得分最高,即最容易被判斷爲正樣本的負樣本爲困難樣本,加入負樣本集中,重新訓練網絡,循環往復。然後我們會發現:網絡的分類性能越來越強了。

 

6.Visual Object Classes Challenge (VOC)

    PASCAL VOC 挑戰賽主要有 Object Classification 、Object Detection、Object Segmentation、Human Layout、Action Classification 這幾類子任務。網站:http://host.robots.ox.ac.uk/pascal/VOC/voc2012/

 

RCNN的提出

    特徵抽取問題:之前,CV領域主要由SIFT和HOG推動的,SIFT和HOG都是blockwise orientation histograms,因此可以將其與靈長類視覺通路的第一個皮層區域V1中的複雜細胞聯繫起來。但是衆所周知,視覺識別發生在視覺信息流下游的幾個階段,這表明人腦中的特徵抽取可能有層次的,多階段的,RCNN就是一個多階段的目標檢測模型。

    將CNN應用在目標識別任務,需要解決兩個問題:

    第一個問題是,目標檢測不僅需要分類,同時要給出目標的位置。一個方法是迴歸,但效果不是很好;還有就是滑動窗口,但這裏的模型使用了5個卷積層,這使得特徵圖有很大的receptive field(195x195)和stride(32x32),使用滑動窗口難以精確定位。因此這裏使用選擇性搜索(SS)算法 生成region proposals。

    測試時,一張輸入圖片生成2000個region proposals,用CNN對每個proposal抽取固定長度的特徵向量,然後使用SVM對特徵向量進行分類。但是CNN的輸入圖片的分辨率是固定的,因此需要使用affine image warping將每個proposal縮放至CNN輸入的分辨率。

    上述的方法稱爲R-CNN:Regions with CNN features,過程如下圖:

7.png

    第二個問題是,數據集的缺乏,當前可用的數據集不足以訓練一個大型的卷積神經網絡。解決辦法是先unsupervised pre-training,接着supervise fine-tunning。論文的第二大貢獻是遷移學習,即先在通用數據集上進行預訓練,接在在特定任務數據集上進行微調。RCNN模型先在大型數據集ILSVRC上訓練,然後在小型數據集PASCAL上進行fine-tuning。實驗表示在VOC2010上fine-tuning使得mAP提高了8%,mAP達到54%。相比之下,DPM方法纔到33%。

    可視化:HOG類似的特徵提取算法的一個優點是簡單性:很容易理解它們攜帶的信息。作者也嘗試分析卷積神經網絡是如何工作的:通過’lobotomized’ CNN模型,發現94%的全連接層參數都可以去掉,影響不大;學習特徵的主要是卷積層。

    BBR:最後通過對模型的輸出進行分析,作者還發現簡單的bounding box regression方法可以顯著減少錯誤定位。

 

模型細節

    RCNN的目標檢測系統由三部分組成:產生region proposals;CNN從region proposals中抽取特徵;SVM用於將特徵向量分類。

1.Region proposal

    產生Region proposal的方法有很多,包括:objectness,  selective search,  category-independent object proposals,  constrained parametric min-cuts(CPMC),  multi-scale combinatorial grouping,  Ciresan 等。這裏使用的是SS方法,有關SS算法可以翻閱《選擇性搜索(SS)算法》。

2.Feature extraction

    使用AlexNet抽取每個region Proposal 的特徵向量。AlexNet輸入是減去訓練集均值的227x227的rgb圖像。因此每個region proposal需要縮放至227x227x3。這裏縮放的方法是直接warping(扭曲)至227x227。在warping之前,拓展bounding box的邊界使其在warping之後有p=16個像素的margin。warping之後的圖片如下:

8.png

3.SVM

    測試階段,先在圖片上運行selective search(使用fast mode),產生2000個region proposals。然後warp每個region proposal,傳入CNN生成特徵向量。接着使用訓練好的SVM對抽取的特徵進行評分。最後應用NMS,即如果某個region和更高分的region的IoU(intersection-over-union)大於某一閾值的話,則去掉低分的region。

    RCNN有兩個比傳統方式高效的地方:1.CNN參數對所有分類參數共享;2.CNN計算得到的特徵向量是低維的,這意味着SVM的參數不會太多。

    計算proposal和特徵提取所需的時間:13s在GPU上,53s在CPU上。而之後是SVM分類和NMS,時間計算依賴於類別數。因爲SVM分類就是一個矩形乘法,2000x4096的特徵矩陣乘以4096xN的SVM權重,其中N是類別數。

4.訓練過程

    有監督預訓練(Supervised pre-training):先在ILSVRC2012數據集上進行圖片分類訓練,這裏使用Caffe庫的AlexNet。

    特定領域的微調(domain-specific fine-tuning):爲了適應新的任務(目標檢測)和新的數據集上訓練(waped VOC windows),需要對預訓練的模型fine tuning,使用SGD,數據集是VOC的warped region proposals。使用預訓練的CNN層的權重,重新初始化FC層,VOC數據集有20分類,因此FC的輸出有21個(20分類+1背景)。

    對於SS得到region proposal,只有與ground-truth(真實數據)的IoU>=0.5纔是正樣本postives,其餘爲負樣本(negatives)。

    SGD的初始學習率爲0.001,是初始預訓練的1/10。訓練樣本傾向於正樣本,因爲與背景相比,他們更加罕見。每次SGD迭代的時候,所有分類均勻採樣32正樣本,96背景樣本,所以一個mini-batch是128。

    分類器:比如訓練一個二分類器檢測車輛,當region中包含一整輛車的時候是正樣本,不包含車的時候是負樣本。那如果包含一部分呢?方法是計算與ground truth的IoU,當IoU大於某一閾值時爲正樣本,小於則爲負樣本。經過對比,這裏設置IoU閾值爲0.3。

    得到特徵向量之後和標籤之後,對每一類訓練一個線性SVM,採用standard hard negative mining method(難例挖掘)訓練分類器。

4.結果

    作者在VOC2007上調參,然後在VOC2012上fine tune CNN和在訓練SVM,最終在VOC2010-2012上驗證。下面是各個算法在VOC2010上測試的結果:

9.png

    可以看到RCNN相比於傳統的目標檢測算法性能大幅提升。

 

CNN可視化

    這裏提出一個簡單無參數的方法之間顯示網絡學到了什麼。主要思想是從特徵圖中挑選出特定unit作爲目標檢測器。方法是這樣的:先數據集中所有抽取出來的proposal region(大約1000萬),計算每個proposal region對應某層輸出特徵圖的通道的激活值,然後按激活值對這些region進行排序,然後進行最大值抑制,最後展示激活值最高的若干個區域。

    可視化第5個池化輸出特徵圖,維度是6x6x256=9216,每個unit對應原始227x227圖片中的195x195個像素。下圖中的每一行顯示了CNN中pool5特徵圖某通道的前16個激活,模型在VOC 2007上fine tuning:

 

    從上圖可以看到,每個卷積通道學習到的特徵是不一樣的。比如第二行學習到的就是狗和點的陣列,第三行學習到的是紅色斑點。卷積網絡似乎學到了一些類別調優相關的特徵,這些特徵都是形狀、紋理、顏色和材質特性的分佈式表示。而後續的fc6層則對這些豐富的特徵建立大量的組合來表達各種不同的事物。

 

Ablation studies(消融研究)

    ablation study 就是爲了研究模型中所提出的一些結構是否有效而設計的實驗。如你提出了某某結構,但是要想確定這個結構是否有利於最終的效果,那就要將去掉該結構的網絡與加上該結構的網絡所得到的結果進行對比,這就是ablation study。(控制變量法)

Performance layer-by-layer, without fine-tuning: 爲了瞭解哪一層是影響模型性能的關鍵,作者在VOC 2007上對模型的最後幾層進行分析。作者首先分析沒有fine tuning的模型。下表是總的測試結果:

  11.png

從上表中可以看到,FC7的特徵泛化性能差於FC6的,也就是說FC7可以去掉,而且去掉F6結果也還行。去掉FC層可以省掉大部分參數。

Performance layer-by-layer, with fine-tuning:從Table2的4-6行中可以發現,fine-tuned對FC層的提升很大,而對ConvNet的提升不大,表明卷積層學到的主要是通用特徵。

Comparison to recent feature learning methods:RCNN的特徵提取方法優於傳統的方法。

 

Detection error analysis

    應用檢測分析工具[Diagnosing error in object detectors]去分析RCNN的誤差,理解fine-tuning如何提升模型。相關結果:

12.png

13.png

 

RCNN用於語義分割

    (對語義分割不瞭解。。。略)

 

結論

    RCNN開創了目標檢測的新時代。

 

 

參考文獻

[1]Ross Girshick,etc .Rich feature hierarchies for accurate object detection and semantic segmentation

[2] 理想幾歲. 目標檢測模型的性能評估--MAP(Mean Average Precision). https://www.cnblogs.com/zongfa/p/9783972.html.2018-09-03

[3] 計算機視覺life. 目標檢測綜述. https://blog.csdn.net/electech6/article/details/95240278. 2019-07-09

[4] v1_vivian. R-CNN論文詳解(論文翻譯). https://blog.csdn.net/v1_vivian/article/details/78599229. 2018-05-08

[5] 熱帶巨獸. 圖像處理中的hard negative mining(難例挖掘). https://blog.csdn.net/qq_36570733/article/details/83444245. 2018-10-27

 

 

 

 

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