Faster R-CNN簡介及其發展 by hs

1、簡介算法

  1. 發展的過程大致能夠歸納爲R-CNN——Fast R-CNN——Faster  R-CNN——Mask R-CNN,都是將神經網絡應用於目標檢測的典型表明,首先是R-CNN將CNN應用於目標檢測中取得了較大的成效,後面幾個網絡都是在前面的基礎上進行了改進,在速度和準確率方面都有了很大的提高。
  2. 我的的看法就是全部的改進的原則都是儘量將任務都交給神經網絡來完成,這樣的話不只在檢測速度上會有很大的提高,並且因爲神經網絡處理數據的能力也比其餘方法優秀不少,準確率上也會有提高。

2、參考文獻網絡

  1. CVPR2014: Rich feature hierarchies for accurate object detection and semantic segmentation
    論文下載: http://export.arxiv.org/pdf/1311.2524
    參考博客: https://blog.csdn.net/liumingpei/article/details/80386685
  2. 2015 ICCV:Fast R-CNN
    論文:https://arxiv.org/abs/1504.08083
    博客:https://blog.csdn.net/CSDNbaiduyun/article/details/81239454
  3. 2015 NIPS:Faster R-CNN--Towards Real-Time Object Detection with Region Proposal Networks
    論文:http://arxiv.org/abs/1506.01497v3
    博客:https://blog.csdn.net/u011718701/article/details/53758927

3、R-CNN數據結構

四步:函數

一、提取region proposals。論文采用的是SS(選擇性搜索方法),提取的的proposals數目爲2000個。優化

二、將2000個proposals變形爲227*227大小輸入AlexNet中獲得4096維的特徵,造成一個2000*4096維特徵矩陣。url

三、將提取的特徵輸入SVM(二分類)進行分類,假設有20類物體,則獲得2000*20的得分矩陣,其中行表示2000個候選框,列表示20類目標,值爲得分。spa

四、對每一列進行非極大值抑制(NMS),最終獲得的proposals就是最後獲得該類別的目標候選框,即從2000箇中選擇得分高的且不重疊的proposal,最後再進行邊界迴歸優化檢測框。.net

4、Fast R-CNNblog

一、採起SS方法提取2000個region proposals,而後將整張圖片輸入網絡獲得一個特徵圖(conv feature map)圖片

二、將2000個region proposal從原圖映射到特徵圖上,映射方法是按比例映射,再利用ROI Pooling獲得2000個相同大小的feature map(對應於2000個region proposals在conv feature map上的映射)

三、將最終獲得的feature map輸入到兩個全鏈接層提取特徵向量,再分別用於分類和邊界迴歸。

改進:

一、引入特徵圖,大大簡化了對region proposals提取特徵的運算

二、引入roi pooling,較以前的直接變形更完整地保留了原圖的信息

三、除了region proposals提取,其它步驟都實現了end-to-end的聯合訓練

5、Faster R-CNN

一、將proposals的提取整合到了網絡中,即引入了RPN網絡,其它的和Fast R-CNN基本一致。

RPN網絡:

                                        

 

一、RPN網絡的做用就是將region proposals的提取整合到了網絡中,並且RPN網絡和Fast R-CNN網絡共用了卷積網絡,幾乎沒有增長計算量。

二、RPN提取候選框的方法是對conv feature map上的每一個點爲中心取9種不一樣比例大小的anchors,再按照比例映射到原圖中即爲提取的region proposals。具體的實現方法如上圖,先用一個256維的3*3卷積核以步長爲1進行特徵提取,這樣就能夠獲得一個256*1的特徵向量,將這個256長度的特徵向量分別輸入兩個全鏈接層,其中一個輸出長度爲2*9=18表示9個anchors是物體和不是物體的機率(不太懂爲何兩個機率都要預測),另外一個輸出長度爲4*9=36表示每一個proposals的四個座標。

三、在獲得了機率和bbox的座標以後映射到原圖中獲得region proposals,再進行一次NMS獲得最終輸入Fast R-CNN網絡的proposals。

四、訓練方式有三種,通常採起交替訓練的方法,即RPN網絡和Fast R-CNN網絡交替訓練

  1) 使用在ImageNet上預訓練的模型初始化共享卷積層並訓練RPN。

    2) 使用上一步獲得的RPN參數生成RoI proposal。再使用ImageNet上預訓練的模型初始化共享卷積層,訓練Fast R-CNN部分(分類器和RoI邊框修訂)。

      3) 將訓練後的共享卷積層參數固定,同時將Fast R-CNN的參數固定,訓練RPN。(從這一步開始,共享卷積層的參數真正被兩大塊網絡共享)

      4) 一樣將共享卷積層參數固定,並將RPN的參數固定,訓練Fast R-CNN部分。

6、一些解釋

一、爲什麼要在softmax先後都接一個reshape layer?

其實只是爲了便於softmax分類,至於具體緣由這就要從caffe的實現形式提及了。在caffe基本數據結構blob中以以下形式保存數據:blob=[batch_size, channel,height,width] 對應至上面的保存bg/fg anchors的矩陣,其在caffe blob中的存儲形式爲[1, 2x9, H, W]。 而在softmax分類時須要進行fg/bg二分類,因此reshape layer會將其變爲[1, 2, 9xH, W]大小, 即單獨「騰空」出來一個維度以便softmax分類,以後再reshape回覆原狀。貼一段caffe softmax_loss_layer.cpp的reshape函數的解釋,很是精闢: "Number of labels must match number of predictions; " "e.g., if softmax axis == 1 and prediction shape is (N, C, H, W), " "label count (number of labels) must be N*H*W, " "with integer values in {0, 1, ..., C-1}."; 綜上所述,RPN網絡中利用anchors和softmax初步提取出foreground anchors做爲候選區域。

二、 NMS算法

其實特別簡單,就是從一堆proposals中先選出一個得分最高的proposal,而後計算剩餘的proposals與這個得分最高proposal的IOU,高於必定的閾值的就直接捨去,這樣就剩下了與被選中的proposal重疊區域很少的proposals,再重複這個操做就行。

 

三、ROI pooling與RoIAlign Pooling

roi pooling:每次都向下取整,而後採用max pooling

roialign pooling:不進行取整操做,保留浮點數,最後進行對每一個小區域進行採樣操做(通常爲2*2效果最好),採樣點的值由雙線性差值計算獲得,最後再進行max pooling操做。對小目標的檢測效果影響較大。

相關文章
相關標籤/搜索