1.回顧
1.1 RCNN
算法流程:
- 使用Selective Search方法在輸入的每一張圖片上生成2000個左右的候選區域;
- 對每個候選區域,使用深度卷積網絡提取特徵;
- 特徵送入每一類的SVM分類器,判別是否屬於該類;
- 使用迴歸器進一步修正候選框位置。
1.2 Fast RCNN
1.2.1 改進之處:
- 卷積不再是對每個候選區域做,而是對整張圖片,減少了重複計算。
- 使用ROI pooling進行特徵的尺寸變換,將候選區域變換爲一樣大小,這樣纔可以輸入全連接層。
- 將分類器放進網絡裏面一起進行訓練,用softmax代替SVM。
1.2.2.算法流程
- 深度卷積網絡提取圖像特徵;
- 使用Selective Search方法在輸入的每一張圖片上生成2000個左右的候選區域;
- 將以上兩部分送入ROI Pooling層,使候選區域大小一樣,然後傳入全卷積層;
- 分爲兩個輸出層,其中一個使用softmax進行分類,另一個輸出四個值(邊框迴歸)。
2. Faster R-CNN
2.1 改進之處
(1)使用RPN網絡生成候選區域
(2)將候選區域生成,特徵提取,分類器分類,迴歸器迴歸這四步全都交給深度神經網絡來做,大大提高了操作的效率。
2.2 總體結構
- 首先,輸入圖片統一縮放到固定大小;
- 接着深度卷積網絡提取圖像特徵;
- 接着圖像特徵傳入RPN網絡;
- 接着是ROI Pooling層,傳入的是圖片特徵和proposal,輸出的是proposal feature maps;
- 最後是全連接層進行分類和再一次迴歸。
2.3 anchors
對於卷積特徵圖,每個點生成k(9)個不同大小的anchor作爲初始的檢測框,寬高比分別爲1:1、1:2、2:1三種,其實就是多尺度操作。
2.4 RPN 網絡
1)首先經過3×3卷積(輸入的M×N大小經過一系列卷積(不考慮池化層)操作後變爲(M+2)×(N+2)(卷積的填充P=1),再經過3×3卷積就可以變爲M×N大小。總體來說(池化層考慮進來)最終的特徵圖大小爲(M/16)×(N/16)(4個池化層,每個池化縮小兩倍));
2)兩條線路,上面的通過softmax生成正例和負例的分類;下面的計算對應的邊界框迴歸偏移量;
3)最後的proposal層綜合正例以及偏移量獲取精確的proposal,同時剔除太小和超出邊界的proposals。
2.5 損失函數
其中,i是mini-batch中的anchor的索引,是第i個anchor作爲object的預測概率。如果anchor爲正,則ground-truth標籤爲1,如果anchor爲負,則ground-truth標籤爲0。 是代表預測邊界框的4個參數化座標的向量,是與正anchor關聯的ground-truth的4個參數化座標。分類損失是兩個類別(object與非object)之間的對數損失。對於迴歸損失,使用,其中R是smooth L1損失函數。表示僅對正anchor激活迴歸損失,否則不計算迴歸損失。cls和reg層的輸出分別由和組成。
這兩項通過Ncls和Nreg歸一化,並通過平衡參數λ加權。在當前的實現中,等式(1)中的Ncls項數值等於mini-batch大小,而Nreg項的數值等於anchor的數量。默認情況下,設置λ= 10。
2.6 訓練
第一步,訓練RPN。該網絡使用ImageNet預訓練的模型初始化,並針對region proposal任務端到端進行了微調。在第二步中,使用步驟1 RPN生成的proposal,通過Fast R-CNN訓練一個單獨的檢測網絡。該檢測網絡也由ImageNet預訓練模型初始化。此時,兩個網絡不共享卷積層。在第三步中,使用檢測網絡初始化RPN訓練,但是調整了共享卷積層,並且僅微調了RPN唯一的層。現在,這兩個網絡共享卷積層。最後,保持共享卷積層固定不變,對Fast R-CNN的唯一層進行微調。這樣,兩個網絡共享相同的卷積層並形成統一的網絡。可以進行類似的交替訓練進行更多迭代,但是觀察到這樣做的提升很小。