arxiv 論文: https://arxiv.org/abs/1311.2524
簡介
R-CNN 算是證明深度學習應用在 Object Detection 問題的分水嶺
在此之前都是透過人工處理特徵, mAP (mean Average Precision) 提升非常緩慢, 但是後來 CNN 以及透過大樣本訓練出來的模型的出現, 我們就可以用深度學習方式取出圖片特徵, 並且有還不錯的進步
Computer Vision 在深度學習上的應用主要是上面範例圖中的四大題目, 其中 R-CNN 要解決的是 Object Detection, 其主要貢獻為
- 透過 CNN 提取特徵
- 用大樣本 pretrain model 之後再透過 小樣本做 fine-tune 解決 overfitting 的問題
訓練
整個過程大概可分為幾個部份, 以下會再根據每個階段做簡單介紹
- Region Proposal
- CNN extract feature
- SVM classfication
- bounging box regression
Region Proposal
Object Detection 一開始會先透過 sliding window 的方式提取出多個建議框, 然後再去判讀建議框內是否有我們要判別的物體, 而這個建議框就是這邊提到的 Region Proposal, 在往後的文章及論文中提到的 ROI (Region of Interest) 也是指一樣的東西
傳統的作法是透過 sliding window 搭配不同的 window size 暴力提取 Region Proposal, 而 R-CNN 是透過 Selective Search 演算法提取約 2000 個 Region Proposal, 大概的作法是
- 透過 Efficient Graph-Based Image Segmentation 取得原始分割區域
- 計算區域相似度, 將相似度高的區域合併
- 顏色空間多樣化
- 相似多樣化
- 顏色相似度: 對每個 color channel 取 25 bins 做 color histogram
- 紋理相似度: SIFT-like feature
- 大小相似度: 讓小區域先合併
- 吻合相似度: 合併後 ROI 差異
- 提取每個區域的 ROI
Selective Search 細節可參考: http://blog.csdn.net/mao_kun/article/details/50576003
CNN extract feature
Preprocess
- Resize Region Proposal
- Normalization
根據 SS 提取出來的 Region Proposal 大小不一, 因此在輸入 CNN 之前會先對 Region Proposal 做切割或是變形 (Crop/Warp) resize 成相同大小, 這篇論文是 resize 成 (227, 227), 之後再個別對每個 Region Proposal 減掉個別的 mean 做 normalization
CNN
經過 resize 跟 normalization 後的 Region Proposal 再當作 input 輸入 CNN, 最後 output 4096 維的 feature. 因為我們有 2000 個 Region Proposal, 所以這邊的 output 就會是 (2000, 4096)
SVM classification
SVM 是用來做 binary classification 的分類器, 假設我們有 20 種物件要做辨別, 那就需要 20 個 SVM 分類器, 權重矩陣就是 (4096, 20)
因此 Region Proposal 經過 CNN 再經過 SVM 最後 ouput 會是 (2000, 4096) X (4096, 20) = (2000, 20), 最後再對剩下的分類結果做 NMS(non maximum suppression)[^NMS], 剔除重疊的 Region Proposal, 得到得分比較高的 Region Proposal
[^NMS]: NMS (detail) 可以視為局部最大搜索
Bounding Box Regression
對所有分類剩餘的 Region Proposal 做 Regression 修正位置成為最終要輸出的 bounding box
我們在計算最後的 mAP 時是根據 IOU (Intersection over Union), 也就是兩個 Region 的交集面積 / 兩個 Region 的聯集面積, 以面積覆蓋率來計算定位精準度, 因此我們透過 SS 選出來的 Region Proposal 即使經過 SVM 分類成功, 還是有可能因為 IOU 的關係,算出來的 mAP 不夠高
以上圖舉例, 黃色框是 SS 取出的多個 Region Proposal, 紅色框是我們事先標記好的實際位置, 我們稱之為 Ground Truth
- 經過 SS 取出的的結果
- 透過 NMS[^NMS] 把重複的 Region Proposal 剔除
- 我們會發現實際上定位的紅色框與黃色框還是有一定差距, 這邊再透過 Regression 對黃色框做修正
結果
雖然在論文中有做了其他實驗, 例如更換 CNN 架構, 測試不同資料集, 但是這邊介紹 R-CNN 主要是因為他是 Deep Learning 在 Object Deteion 上應用的里程碑, 實際上 mAP 還是達不到可以做產品的標準, 而且訓練的時間也非常長, 需要的硬碟空間也非常大, 這些缺點都會在之後的系列論文中一一改善
Reference
- RCNN blog
- Detection 系列文章 - 馮校
- Detection 系列文章 - venus
補充
因為 Deep Learning 在圖片上的結果是相對其他領域顯著的, 所以我接下來會紀錄一些這邊的發展過程, 但是一些比較久遠的論文(像這篇就是)我會先跳過技術細節, 因為這些之後也會被取代掉, 而且因為實作成本太大, 所以我也不會實際去測試過, 如果有錯誤再麻煩告知, 也歡迎討論