1. R-CNN
Rich feature hierarchies for accurate object detection and semantic segmentation [CVPR14] pdf
- 在輸入圖片上通過selective search方法選擇RoI,也就是Region Proposal(候選框),R-CNN中的R就來自於這個詞。
- 對於每個proposal,通過CNN提取特徵
- 對於提取的特徵,bbox迴歸確定邊界框位置,SVM用來做分類確定目標的類別。
R-CNN問題:
- 要有專門的訓練目標函數:log loss, hinge loss, least squares
- 訓練麻煩而且時間長
- 推斷過程也很慢
對於每個候選區域用一個CNN,後來出現的SPPNet解決了輸入尺寸不確定的問題:
SPPNet提出了空間金字塔池化,將輸出不同尺寸的feature map通過SPP層變成固定的長度的全連接層輸入
2. Fast R-CNN
Fast R-CNN [ICCV15] pdf
- 用一個convnet施加在輸入圖片上(卷積共享,提升速度)。
- 在這個convnet輸出的feature map上找到輸入圖片上對應的RoI,特徵圖上的區域就是輸入圖像上RoI的特徵。
- 將這些區域的特徵分別通過RoI pooling層(借鑑SSPNet的思想),變成固定長度的全連接層輸入
- 分類和迴歸也放入到網絡中去。
Fast R-CNN問題:
圖像進入網絡之前還需要在CPU上用傳統算法ss找RoI,這步操作佔據了檢測時間的大部分,差不多兩秒。
3. Faster R-CNN
Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks [NIPS15] pdf
- 用一個convnet施加在原始輸入圖片上
- 在這個convnet輸出的feature map上施加一個Region Proposal Network (RPN),用來代替之前在原始圖像上的傳統方法。產生很多個候選框。RPN後接也兩個loss,classification loss爲二分類,判斷這個框是不是物體,用來過濾不要的候選框,bbox regression loss微調給定的邊框,使之anchor box可以更接近gt的框。
- 後面的步驟和RCNN一樣,classification loss爲多分類。
RPN
- 經過VGG或者ZFNet產生的特徵圖作爲RPN的輸入。
- 在特徵圖上執行3x3的滑窗操作,每個滑窗對應的區域映射爲低維特徵(256-d for ZF and 512-d for VGG, with ReLU following),後接兩個全連接分支:一個分類一個迴歸。
- 每個3x3滑窗的中心,在原始圖像上對應的感受野上有個anchor boxes(論文中是9個:3個尺度和對應的3個長寬比),所以每個滑窗會得到2k個分類結果和4k個迴歸結果。
- 假如特徵圖大小有,則會產生個anchors.
論文輸出特徵圖60x40,大概要2w個框
RPN具有平移不變性
訓練RPN
爲了訓練RPN,需要對每個anchor構造一個二分類的label,即這個框是不是物體。
標記爲正標籤:i)跟gt的IOU最大的框爲正. ii)跟gt的IOU大於0.7的爲正。
標記爲負標籤:跟gt的IOU小於於0.3的爲負。大於0.3小於0.7的對損失函數不做貢獻。
損失函數:
:log loss,
:smooth L1.
迴歸的損失求的是預測和真實之間一種變換的因子,,由下面公式給出:
RPN訓練細節
SGD
mini-batch爲1,因爲一張圖像就產生很多個框。在一張圖像中隨機選256個anchor
將特徵圖上超過邊界的框過濾掉,不過在測試過程中,超過邊界的框不過濾,需要clip,也就是超出的部分切掉。
通過NMS,設置閾值0.7,將重疊的框再過濾掉。
然後再在這些框中取top128做正樣本。