1. 程式人生 > >RCNN系列之Fast RCNN詳解

RCNN系列之Fast RCNN詳解

轉自:https://blog.csdn.net/u010725283/article/details/79017158

RCNN系列:RCNN,SPPNet,Fast RCNN,Faster RCNN,R-FCN。這一系列是個遞進關係,也是目標檢測使用two-stage方法的一個發展過程。想要更好的理解Faster RCNN和R-FCN,只能把這些演算法都梳理清楚了,才能明白演算法的整個優化過程。

本篇講解的是Fast RCNN。2015年,在SPPNet之後發表在IEEE。

理解了SPPNet之後,我們知道了RCNN已經進化到了SPPNet階段,那麼,Fast RCNN又更進一步。

再看SPPNet過程:

  1.  使用selective search演算法為每一張待檢測的圖片提取出2000左右的候選框,這一點和RCNN相同;
  2. 特徵提取階段,整個圖片輸入到SPPNet中,提取出整張圖片的feature map,然後將原圖上的候選框對映到feature map上。然後對各個候選框對應的feature map上的塊做金字塔空間池化,提取出固定長度的特徵向量;
  3. 使用SVM演算法對得到的特徵向量分類識別;
  4. 使用NMS做極大值抑制。

Fast RCNN的過程:

  1. 使用selective search演算法為每一張待檢測的圖片提取出2000左右的候選框,這一點和RCNN相同;
  2. 特徵提取階段,同樣是提取出整張圖片的feature map,然後將原圖上的候選框對映到feature map上。然後對各個候選框對應的feature map上的塊做ROI pooling,提取出固定長度的特徵向量;
  3. 對於上一步的每一個ROI,網路輸出每個類的概率和每個bounding box;
  4. 最後,使用NMS演算法。

Fast RCNN的整個演算法流程如下圖所示:

Fast RCNN的最大貢獻就是將SVM給去掉了,換句話說就是將分類器整合到了網路中,那麼在訓練過程中,由RCNN的三個階段(selective search,CNN,SVM)到了Fast RCNN的兩個階段(selective search ,Fast RCNN)。用機器學習的角度來看,就是一個過程的全域性最優要優於多個過程的全域性最優。

這樣就可以把Fast RCNN看作是一個分類器和迴歸器的整合。這個思想作者是借鑑了deepmultibox。

具體做法即是,使用Multi-task loss。

其中:

具體引數的設定可以參考論文。

那麼有了loss後,最重要的就是迭代過程的設定,具體看最後一層的網路結構:

cls_score層用於分類,輸出K+1維陣列,表示屬於K類和背景的概率;

bbox_predict層用於bounding box,輸出4*K維陣列,表示各個物體和Ground truth的偏移量。

基礎網路作者使用的是VGG。

連線詳細講解了VGG的網路結構。

Fast RCNN中一個關鍵點:ROI pooling

其實ROI pooling是SPP的一個特殊形式。ROI pooling只使用了一種尺度,統一將feature map對映到7*7的大小。

將SPP過程弄明白,ROI pooling就會很清楚了。

總結:Fast RCNN比SPPNet又更近一步,將SVM整合到網路中,將三個階段的訓練過程整合為兩個階段。這樣速度會提高,訓練難度同樣也會降低。

參考:

Fast R-CNN