RCNN- 將CNN引入目標檢測的開山之作
前面一直在寫傳統機器學習。從本篇開始寫一寫 深度學習的內容。 可能需要一定的神經網絡基礎(可以參考 Neural networks and deep learning 日后可能會在專欄發布自己的中文版筆記)。
RCNN (論文:Rich feature hierarchies for accurate object detection and semantic segmentation) 是將CNN方法引入目標檢測領域, 大大提高了目標檢測效果,可以說改變了目標檢測領域的主要研究思路, 緊隨其后的系列文章:( RCNN),Fast RCNN, Faster RCNN 代表該領域當前最高水准。
【論文主要特點】(相對傳統方法的改進)
- 速度: 經典的目標檢測算法使用滑動窗法依次判斷所有可能的區域。本文則(采用Selective Search方法)預先提取一系列較可能是物體的候選區域,之后僅在這些候選區域上(采用CNN)提取特征,進行判斷。
- 訓練集: 經典的目標檢測算法在區域中提取人工設定的特征。本文則采用深度網絡進行特征提取。使用兩個數據庫: 一個較大的識別庫(ImageNet ILSVC 2012):標定每張圖片中物體的類別。一千萬圖像,1000類。 一個較小的檢測庫(PASCAL VOC 2007):標定每張圖片中,物體的類別和位置,一萬圖像,20類。 本文使用識別庫進行預訓練得到CNN(有監督預訓練),而后用檢測庫調優參數,最后在檢測庫上評測。
看到這里也許你已經對很多名詞很困惑,下面會解釋。先來看看它的基本流程:
【基本流程 ===================================】
RCNN算法分為4個步驟
- 候選區域生成: 一張圖像生成1K~2K個候選區域 (采用Selective Search 方法)
- 特征提取: 對每個候選區域,使用深度卷積網絡提取特征 (CNN)
- 類別判斷: 特征送入每一類的SVM 分類器,判別是否屬於該類
- 位置精修: 使用回歸器精細修正候選框位置

【基礎知識 ===================================】
Selective Search 主要思想:
- 使用一種過分割手段,將圖像分割成小區域 (1k~2k 個)
- 查看現有小區域,按照合並規則合並可能性最高的相鄰兩個區域。重復直到整張圖像合並成一個區域位置
- 輸出所有曾經存在過的區域,所謂候選區域
其中合並規則如下: 優先合並以下四種區域:
- 顏色(顏色直方圖)相近的
- 紋理(梯度直方圖)相近的
- 合並后總面積小的: 保證合並操作的尺度較為均勻,避免一個大區域陸續“吃掉”其他小區域 (例:設有區域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)
- 合並后,總面積在其BBOX中所占比例大的: 保證合並后形狀規則。

上述四條規則只涉及區域的顏色直方圖、梯度直方圖、面積和位置。合並后的區域特征可以直接由子區域特征計算而來,速度較快。
有監督預訓練與無監督預訓練:
(1)無監督預訓練(Unsupervised pre-training)
預訓練階段的樣本不需要人工標注數據,所以就叫做無監督預訓練。
(2)有監督預訓練(Supervised pre-training)
所謂的有監督預訓練也可以把它稱之為遷移學習。比如你已經有一大堆標注好的人臉年齡分類的圖片數據,訓練了一個CNN,用於人臉的年齡識別。然后當你遇到新的項目任務時:人臉性別識別,那么這個時候你可以利用已經訓練好的年齡識別CNN模型,去掉最后一層,然后其它的網絡層參數就直接復制過來,繼續進行訓練,讓它輸出性別。這就是所謂的遷移學習,說的簡單一點就是把一個任務訓練好的參數,拿到另外一個任務,作為神經網絡的初始參數值,這樣相比於你直接采用隨機初始化的方法,精度可以有很大的提高。
對於目標檢測問題: 圖片分類標注好的訓練數據非常多,但是物體檢測的標注數據卻很少,如何用少量的標注數據,訓練高質量的模型,這就是文獻最大的特點,這篇論文采用了遷移學習的思想: 先用了ILSVRC2012這個訓練數據庫(這是一個圖片分類訓練數據庫),先進行網絡圖片分類訓練。這個數據庫有大量的標注數據,共包含了1000種類別物體,因此預訓練階段CNN模型的輸出是1000個神經元(當然也直接可以采用Alexnet訓練好的模型參數)。