1. 程式人生 > >【目標檢測】RCNN演算法詳解

【目標檢測】RCNN演算法詳解

Girshick, Ross, et al. “Rich feature hierarchies for accurate object detection and semantic segmentation.” Proceedings of the IEEE conference on computer vision and pattern recognition. 2014.

Region CNN(RCNN)可以說是利用深度學習進行目標檢測的開山之作。作者Ross Girshick多次在PASCAL VOC的目標檢測競賽中折桂,2010年更帶領團隊獲得終身成就獎,如今供職於Facebook旗下的FAIR。
這篇文章思路簡潔,在DPM方法多年平臺期後,效果提高顯著。包括本文在內的一系列目標檢測演算法:

RCNN, Fast RCNN, Faster RCNN代表當下目標檢測的前沿水平,在github都給出了基於Caffe的原始碼

思想

本文解決了目標檢測中的兩個關鍵問題。

問題一:速度

經典的目標檢測演算法使用滑動窗法依次判斷所有可能的區域。本文則預先提取一系列較可能是物體的候選區域,之後僅在這些候選區域上提取特徵,進行判斷。

問題二:訓練集

經典的目標檢測演算法在區域中提取人工設定的特徵(Haar,HOG)。本文則需要訓練深度網路進行特徵提取。可供使用的有兩個資料庫:
一個較大的識別庫(ImageNet ILSVC 2012):標定每張圖片中物體的類別。一千萬影象,1000類。
一個較小的檢測庫

(PASCAL VOC 2007):標定每張圖片中,物體的類別和位置。一萬影象,20類。
本文使用識別庫進行預訓練,而後用檢測庫調優引數。最後在檢測庫上評測。

流程

RCNN演算法分為4個步驟
- 一張影象生成1K~2K個候選區域
- 對每個候選區域,使用深度網路提取特徵
- 特徵送入每一類的SVM 分類器,判別是否屬於該類
- 使用迴歸器精細修正候選框位置
這裡寫圖片描述

候選區域生成

使用了Selective Search1方法從一張影象生成約2000-3000個候選區域。基本思路如下:
- 使用一種過分割手段,將影象分割成小區域
- 檢視現有小區域,合併可能性最高的兩個區域。重複直到整張影象合併成一個區域位置
- 輸出所有曾經存在過的區域,所謂候選區域

候選區域生成和後續步驟相對獨立,實際可以使用任意演算法進行。

合併規則

優先合併以下四種區域:
- 顏色(顏色直方圖)相近的
- 紋理(梯度直方圖)相近的
- 合併後總面積小的
- 合併後,總面積在其BBOX中所佔比例大的

第三條,保證合併操作的尺度較為均勻,避免一個大區域陸續“吃掉”其他小區域。

例:設有區域a-b-c-d-e-f-g-h。較好的合併方式是:ab-cd-ef-gh -> abcd-efgh -> abcdefgh。
不好的合併方法是:ab-c-d-e-f-g-h ->abcd-e-f-g-h ->abcdef-gh -> abcdefgh。

第四條,保證合併後形狀規則。

例:左圖適於合併,右圖不適於合併。
這裡寫圖片描述

上述四條規則只涉及區域的顏色直方圖、紋理直方圖、面積和位置。合併後的區域特徵可以直接由子區域特徵計算而來,速度較快。

多樣化與後處理

為儘可能不遺漏候選區域,上述操作在多個顏色空間中同時進行(RGB,HSV,Lab等)。在一個顏色空間中,使用上述四條規則的不同組合進行合併。所有顏色空間與所有規則的全部結果,在去除重複後,都作為候選區域輸出。

作者提供了Selective Search的原始碼,內含較多.p檔案和.mex檔案,難以細查具體實現。

特徵提取

預處理

使用深度網路提取特徵之前,首先把候選區域歸一化成同一尺寸227×227。
此處有一些細節可做變化:外擴的尺寸大小,形變時是否保持原比例,對框外區域直接擷取還是補灰。會輕微影響效能。

預訓練

網路結構
基本借鑑Hinton 2012年在Image Net上的分類網路2,略作簡化3
這裡寫圖片描述
此網路提取的特徵為4096維,之後送入一個4096->1000的全連線(fc)層進行分類。
學習率0.01。

訓練資料
使用ILVCR 2012的全部資料進行訓練,輸入一張圖片,輸出1000維的類別標號。

調優訓練

網路結構
同樣使用上述網路,最後一層換成4096->21的全連線網路。
學習率0.001,每一個batch包含32個正樣本(屬於20類)和96個背景。

訓練資料
使用PASCAL VOC 2007的訓練集,輸入一張圖片,輸出21維的類別標號,表示20類+背景。
考察一個候選框和當前影象上所有標定框重疊面積最大的一個。如果重疊比例大於0.5,則認為此候選框為此標定的類別;否則認為此候選框為背景。

類別判斷

分類器
對每一類目標,使用一個線性SVM二類分類器進行判別。輸入為深度網路輸出的4096維特徵,輸出是否屬於此類。
由於負樣本很多,使用hard negative mining方法。
正樣本
本類的真值標定框。
負樣本
考察每一個候選框,如果和本類所有標定框的重疊都小於0.3,認定其為負樣本

位置精修

目標檢測問題的衡量標準是重疊面積:許多看似準確的檢測結果,往往因為候選框不夠準確,重疊面積很小。故需要一個位置精修步驟。
迴歸器
對每一類目標,使用一個線性脊迴歸器進行精修。正則項λ=10000
輸入為深度網路pool5層的4096維特徵,輸出為xy方向的縮放和平移。
訓練樣本
判定為本類的候選框中,和真值重疊面積大於0.6的候選框。

結果

論文發表的2014年,DPM已經進入瓶頸期,即使使用複雜的特徵和結構得到的提升也十分有限。本文將深度學習引入檢測領域,一舉將PASCAL VOC上的檢測率從35.1%提升到53.7%
本文的前兩個步驟(候選區域提取+特徵提取)與待檢測類別無關,可以在不同類之間共用。這兩步在GPU上約需13秒。
同時檢測多類時,需要倍增的只有後兩步驟(判別+精修),都是簡單的線性運算,速度很快。這兩步對於100K類別只需10秒。

以本論文為基礎,後續的fast RCNN4(參看這篇部落格)和faster RCNN5(參看這篇部落格)在速度上有突飛猛進的發展,基本解決了PASCAL VOC上的目標檢測問題。

  1. J. Uijlings, K. van de Sande, T. Gevers, and A. Smeulders. Selective search for object recognition. IJCV, 2013.
  2. A. Krizhevsky, I. Sutskever, and G. Hinton. ImageNet classification with deep convolutional neural networks. In NIPS, 2012
  3. 所有層都是序列的。relu層為in-place操作,偏左繪製。
  4. Girshick, Ross. “Fast r-cnn.” Proceedings of the IEEE International Conference on Computer Vision. 2015.
  5. Ren, Shaoqing, et al. “Faster R-CNN: Towards real-time object detection with region proposal networks.” Advances in Neural Information Processing Systems. 2015.