RCNN是CNN應用在object detection的開山之作,加上後續的Fast-RCNN,Faster-RCNN都是非常經典的工作,這三篇文章一環套一環的改進思路簡直是快準狠(跪拜rbg大牛><)。筆者不是做檢測的(所以沒有折騰過代碼不清楚實驗細節),在paper reading聽了別人報告之後很喜歡RCNN系列文章,就記錄下對原理的理解和感悟吧。
1 論文信息
發表會議:CVPR2014
代碼
2 Motivation
就像論文開頭所說,“Features matter”,描述力強的特徵對目標檢測任務來說十分有必要,考慮將CNN強大的表示能力用於目標檢測中,就是考慮“fill the gap between image classification and object detection”,而對於一個目標來說,要判斷它是哪個目標,實質上是一個分類問題。
3 Method
3.1 簡介
RCNN是pipeline approach,主要流程是,獲取proposal(selective search)–> 提特徵(CNN)–> 得到每個proposal的得分(SVM)–> 目標定位(bounding box regression),如下圖:
3.2 細節記錄
3.2.1 selective search
這一步得到2k左右個proposal。
3.2.2 Extract CNN features
- 上一步的proposal直接忽視長寬比,把warped region輸入CNN網絡
- 這裏finetune CNN時,用和groud truth的IoU overlap>0.5的proposal作爲該類的正例樣本,其餘的都是反例樣本,而因爲正例太少,所以實驗中固定正反例樣本比例爲1:3
3.2.3 Compute score
- 爲每個類訓練SVM,這樣每個框都會得到對應於每個類的score
- 訓練SVM時,用ground truth作爲正例樣本,和ground truth的IoU overlap<0.3的作爲反例樣本
3.2.4 bounding box regression
- 取和ground truth的IoU overlap>0.6的proposal用於訓練迴歸模型
- 用proposal 的的pool5特徵
Φ5(Pi) 學習一個w∗=argminw∗∑Ni(ti∗−wT∗Φ5(Pi))2+λ||w∗||2 , 其中P1 是4維向量,代表第i個proposal的左上角點座標(x,y)和proposal的(width, height). - 根據w計算一個對於位置的變換
d∗(P)=wT∗Φ5(P) , 其中d就是代表proposal和對應的ground truth之間的變換。
4 Experiment
本文中實驗佔了較大篇幅,對於細節問題的探討也很值得學習。
4.1 怎麼warp
即如何把大小不一的region proposal統一到CNN要求的輸入大小,作者嘗試多種方案後決定直接忽略長寬比做resize。
4.2 正反例的定義
可以看到在finetune CNN時和訓練SVM時,對於正反例的定義是不一樣的,作者應該做了大量實驗去找overlap的合適取值。相對而言對SVM的正反例定義要嚴格些,因爲它得出的score要拿出來分類,而CNN只是提特徵,且CNN訓練需要較多的數據。
4.3 softmax還是SVM
CNN本身就是分類網絡,其中softmax分類器的輸出可以作爲proposal的score,一方面是實驗結果顯示用SVM效果好,另一方面,由於finetune CNN用的正反例不是真實的正反例,只是一種近似。
4.4 CNN爲什麼rich
在論文的Fig6中,對比了CNN對於多種object特性(截斷,視角,長寬比等)的敏感度(越不敏感說明泛化能力越好)。
5 Summary
CNN這種rich feature確實提升了目標檢測的性能,當前RCNN的需要改進的地方有:
- 較複雜的pipeline
- 對一張圖的proposal分別提取CNN,因爲大量proposal互相重複導致對圖片的區域進行多次計算。
- warp使region失真
後續的Fast、Faster RCNN也都主要是根據以上幾點改進模型。