RCNN系列的內容已經有非常多同學分享出來了,這裏做個簡單的總結,和相關的理解。主要是概括算法流程以及特點,做個記錄,方便回顧。先簡單介紹下RCNN和Fast RCNN,在詳細記錄faster rcnn的RPN網絡的理解。
RCNN:
1. 流程
(1). 採用傳統方法Selective Search產生目標候選框
(2). 對每個候選框,用深度卷積神經網絡提取特徵得到feature map
(3). 每個框得到的feature map餵給SVM分類器,並通過線性迴歸調整bounding box的位置和大小,使得更接近 gt
2. 缺點:
(1)CNN網絡參數不共享
(2)採用SVM分類器,速度慢
(3)產生後選框ROI的大小不一樣,這樣導致CNN輸出與FC維度不統一
總的來說,RCNN比較笨,比較慢,進而提出SPP-net。SPP-net用CNN一次性提取特徵,並利用空間金字塔池化(spatial pyramid pooling)將大小不一致的proposal變成大小一樣的。
Fast RCNN
1. 流程:
(1)CNN提取輸入圖像特徵,得到feature map
(2)從feature map得到ROIs
(3)ROI pooling之後通過softmax 對每個ROI進行分類,並通過BBox reg調整bbox的位置
2. 缺點:
(1)通過Selective Search得到ROI十分耗時
Faster RCNN
1. 流程:
(1)同樣的用CNN提取輸入圖像的特徵,得到feature map
(2)通過RPN網絡對候選框進行二分類,判別候選框內容是前景還是背景,留下前景的候選框,拋棄背景候選框,並通過迴歸微調前景的BBox與標註gt接近。關於RPN網絡的操作流程及細節,下文會闡述
(3)ROI pooling
(4)通過多分類器對候選框進行多分類,即gt有幾類,這個就會分成相應的類別
(5)再進行BBox reg
2. loss的組成部分:
由上述總體流程,可以得知faster rcnn整體的loss由四個部分組成:
(1)RPN網絡進行二分類的loss(候選框是前景 or 背景)
(2)RPN網絡前景BBox與gt微調的loss,BBox reg loss
(3)多分類的loss,從RPN網絡得到的bbox進行多類別判斷的loss
(4)最後每個類別BBox reg微調的loss
3. RPN網絡
(1)RPN網絡的輸入是CNN得到的feature map,RPN在feature map上用3*3的滑動窗得到對應原圖的多個候選框。
什麼意思呢?feature map上的每一個點,都可以映射到原圖的一個區域(即感受野)。對feature map 每個點,對應原圖的區域,進行不同的形狀變換,得到不同大小形狀的框就是anchor box。feature map上的每一個點就是原圖區域anchoe box的中心點。爲了使得覆蓋範圍更廣,檢測的物體更多,並保證效率,faster rcnn基於3個不同尺寸大小,3種不同尺度變換的anchor box做變換,對於feature map的每一個點,在原圖區域得到9個anchor box。
(2)去掉超出圖像邊界的anchor box,把所有anchor box送入二分類層,判斷每個anchor box是前景還是背景;同時把anchor box送入迴歸層,調整box與gt接近。
4. 關於RPN的補充
(1)cls 和reg層都是全卷積網絡,用1*1的卷積核代替全連接
(2)anchor 具有平移不變性
(3)anchor的二分類時,有兩個方法判斷爲正例:與gt有最大的IOU的anchor認爲是正例;與gt的IOU大於0.7的anchor認爲是正例
(4)對重複的box,用nms進行合併進行篩選。若box1和box2重複IOU大於0.7,看box1與box2哪個二分類正例的得分高,誰高保留誰
(5)關於感受野理解補充可參考這位博主:https://blog.csdn.net/program_developer/article/details/80958716