【目標檢測】對RCNN論文的一些理解
RCNN可謂是深度學習應用目標檢測的開山之作,RCNN提出之前,目標檢測往往用傳統的HOG、SIFT等方法提取特徵,RBG大神認為CNN既然在圖片分類產生了巨大作用,為何不能用來提特徵呢?於是RCNN就誕生了。
在設計神經網路應用目標檢測的時候,首先我們可能考慮將其作為一個regression問題,也就是通過滑動視窗在一張圖片上不斷滑動,網路學習出窗窗是不是有物體,並且不斷修正object的bounding box的位置資訊,雖然神經網路具有強大的學習能力,但這種情況過於複雜,因為要不斷變化sliding windows的大小,訓練的時候很容易導致網路不收斂並且測試的時候速度也非常慢!而且對於同一物體處於不同圖片不同大小,那麼便是新樣本了,想要完全去擬合是十分困難的,於是RCNN的設計思路主要解決了如下兩個問題:
1.經典的目標檢測演算法使用滑動窗法依次判斷所有可能的區域。本文則預先提取一系列較可能是物體的候選區域,之後僅在這些候選區域上提取特徵,進行判斷。
2. 經典的目標檢測演算法在區域中提取人工設定的特徵,論文則設計深度神經網路進行特徵提取,可供使用的有兩個資料庫:
一個較大的識別庫(ImageNet 2012):標定每張圖片中物體的類別。一千萬圖片1000類。
一個較小的檢測庫(PASCAL VOC2007):標定每張圖片中,物體的類別和位置,一萬圖片20類。
先使用識別庫進行預訓練,然後運用檢測庫進行微調。
流程
RCNN的即基於區域的卷積神經網路,整個RCNN的流程主要分為以下獨立
1.利用傳統計算機視覺的方法(selective search)生成一系列的候選框。
2.將每一個候選框resize到相同大小(224*224)放入神經網路進行訓練。(PASCAL VOC 2007)
3.將最後一層卷積層得到的特徵圖拿來作為input,訓練每一個類別的SVM分類器(使用PASCAL VOC 2007資料集的話也就是20類,訓練21類,為物體類+背景類)
4. 將最後一層卷積層得到的特徵圖拿來作為input,對候選框進行邊界迴歸。
候選區域生成
使用了Selective Search方法從一張圖片中產生2000-3000個候選框。基本思路如下:
使用一種過分割手段,將原始圖片分割成小區域。
檢視現有的小區域,合併可能性最高的小區域,重複直到整張圖片合併到一個區域。
輸出所有存在過的小區域,即region proposals
合併規則
優先合併以下四種區域:
顏色相近;紋理相近;合併後總面積小的;合併後,總面積在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檔案,難以細查具體實現。
特徵提取(訓練CNN網路)
預處理
使用深度網路提取特徵之前,將所有圖片resize到統一尺寸,227*227
此處有一些細節可做變化:外擴的尺寸大小,形變時是否保持原比例,對框外區域直接擷取還是補灰。會輕微影響效能。具體細節如下:
各向異性縮放:
這種方法很簡單,就是不管圖片的長寬比例,管它是否扭曲,進行縮放就是了,全部縮放到CNN輸入的大小227*227。
各項同性縮放:
因為圖片扭曲後,估計會對後續CNN的訓練精度有影響,於是作者也測試了“各向同性縮放”方案。有兩種辦法:
先擴充後裁剪
直接在原始圖片中,把bounding box的邊界進行擴充套件延伸成正方形,然後再進行裁剪;如果已經延伸到了原始圖片的外邊界,那麼就用bounding box中的顏色均值填充;
最終論文采取的是各向異性縮放。
預訓練
網路結構
基本借鑑Hinton 2012年在Image Net上的分類網路2,略作簡化3。
此網路提取的特徵為4096維,之後送入一個4096->1000的全連線(fc)層進行分類。
學習率0.01。
訓練資料
使用ILVCR 2012的全部資料進行訓練,輸入一張圖片,輸出1000維的類別標號。
調優訓練
把最後一層fc層改為4096-21 學習率設定為0.01,每一個batch包含32個正樣本(屬於20類)和96個背景。用PASCAL VOC2007的資料進行引數調優。
對於每一張圖片的候選區域,如果候選區域與GT的IOU>0.5則認為是正樣本 否則認為是負樣本。
SVM分類器
將每一個候選區域產生的特徵圖送入每一個類別的SVM二分類器中,注意在這裡正樣本只採用GT樣本,候選區域與GT的IOU<0.3設定為負樣本,其他候選區域丟棄。(注意這裡的IOU與深度網路中的IOU定義是不同的!論文中是這樣解釋的,候選區域中負樣本數量太多,所以IOU設定的大一點能夠加大正樣本的比例,防止最終結果向負樣本傾斜。同時論文也試驗了在SVM中用IOU<0.5的作為負樣本,發現效果沒有0.3好,所以才採用0.3,這是一個理解上的難點。神經網路需要大量的訓練資料,SVM是可以適應小規模資料集的)
BBOX迴歸
目標檢測的衡量標準是重疊面積:許多看似精準的檢測結果,往往因為候選框不夠準確,重疊面積很小,因此需要對每個BBOX進行位置精修。
迴歸器,對每一類目標,使用一個線性迴歸器進行精修。正則項λ=10000。
輸入為深度網路pool5層的4096維特徵,輸出為xy方向的縮放和平移。
訓練樣本為判定為本類的BBOX,和GT重疊面積大於0.6的候選框。
結果
論文發表的2014年,DPM已經進入瓶頸期,即使使用複雜的特徵和結構得到的提升也十分有限。本文將深度學習引入檢測領域,一舉將PASCAL VOC上的檢測率從35.1%提升到53.7%。
本文的前兩個步驟(候選區域提取+特徵提取)與待檢測類別無關,可以在不同類之間共用。這兩步在GPU上約需13秒。
同時檢測多類時,需要倍增的只有後兩步驟(判別+精修),都是簡單的線性運算,速度很快。這兩步對於100K類別只需10秒。