1. 程式人生 > >經典論文重讀---目標檢測篇(二):Fast RCNN

經典論文重讀---目標檢測篇(二):Fast RCNN

核心思想

RCNN的缺點

R-CNN is slow because it performs a ConvNet forward pass for each object proposal, without sharing computation.

SPPnet的缺點

SPPnet also has notable drawbacks. Like R-CNN, training is a multi-stage pipeline that involves extracting features, fine-tuning a network with log loss, training SVMs, and finally fitting bounding-box regressors. Features are also written to disk

FAST RCNN貢獻

The Fast R-CNN method has several advantages:

  1. Higher detection quality (mAP) than R-CNN, SPPnet
  2. Training is single-stage, using a multi-task loss
  3. Training can update all network layers
  4. No disk storage is required for feature caching

引言部分

深度卷積網路在影象識別和目標檢測領域取得了很大的成功。目前的方法:RCNN、SPPnet、overfeat、segDeepM都有一定的侷限性,他們都是多階段的pipline,速度慢,結果不精確。

模型與網路越來越複雜是因為對物體定位的準確性要求越來越高,由此帶來的兩大挑戰:

  • 要產生大量的候選框
  • 候選框只是一個粗略的定位,還需要進一步調整才能達到精確定位

由此作者提出了Fast RCNN,採用的是VGG16網路架構,並在當時取得了state-of-the-art的效果。

之後作者詳細解釋了下RCNN與sppnet的缺點,對於RCNN來說,主要有:

  • Training is a multi-stage pipeline.首先對卷積網路進行fine-tune,之後訓練SVM分類器來代替採用softmax啟用函式的全連線層,在之後訓練一個邊框迴歸器
  • Training is expensive in space and time.訓練時間空間的複雜度都很高
  • Object detection is slow.檢測速度慢

作者一針見血的指出,RCNN比較慢的原因在於:它對每一個proposal都過了一遍卷積網路,而SPPnet就沒有采用這種策略,作者總結了下SPPnet的優點與缺點:

  • 優點在於:SPPnet計算出整個影象的feature map,然後為每個候選區域從feature map中提取出相應的feature vector(通過max pooling得到)
  • 缺點在於:SPPnet也是一個multi-stage pipeline,並且無法更新卷積層的引數

FAST RCNN

模型結構如下:

這裡寫圖片描述

其中roi pooling層的引入對與速度的提升起到了至關重要的作用,作者對ROI pooling層進行了詳解。roi pooling layer會通過max pooling的方式一個region proposal對應的feature map變為一個小型的feature map(在原文中是7x7的feature map)。根據原文可得具體操作如下:

  1. 根據輸入的image得到對應的feature map,找到roi在feature map上對應的區域位置。
  2. 將roi在feature map上對應的區域位置劃分成大小相同的 H × W 個section(原文中是 7 × 7 )
  3. 對每一塊section採用max pooling得到該roi最終的feature map

具體例子如下,來源於deepsense

這裡寫圖片描述

FAST RCNN論文細節

rcnn,sppnet與FRCN在fine-tune上的差異

首先sppnet不能夠通過 spatial pyramid pooling layer更新權值,而FRCN則可以通過反向傳播更新權值。因為與RCNN一樣,SPPnet每個ROI都來自不同的圖片。並且每個ROI都有著非常大的感受野,而前向傳導處理的是整個感受野,故訓練的輸入非常大。而對於FRCN,SGD minibatch是通過先隨機取樣N張圖片,再從每張圖片隨機取樣R/N個ROI作為一個minibatch的。(原文中 N = 2 , R = 128 )

除了以上的hierarchical sampling策略,FRCN並沒有分階段訓練,而是採用streamlined training process直接對 softmax classifier and bounding-box regressors進行fine-tune和優化。

loss函式的設計

FAST RCNN有兩個輸出層:

  • 第一個輸出: p = ( p 0 , . . . , p k ) ,對於 k + 1 類物體每個的可能性大小, p 由softmax層計算得出
  • 第二個輸出: t k = ( t x k , t y k , t w k , t h k ) ,即對於所有K種物體來說,他們的邊框位置

文中使用聯合了分類損失和邊框迴歸損失作為多工損失函式:

(1) L ( p , u , t u , v ) = L c l s ( p , u ) + λ [ u 1 ] L l o c ( t u , v ) L c l s = l o g p u L l o c ( t u , v ) = i ( x , y , w , h ) s m o o t h L 1 ( t i u v i ) s m o o t h L 1 ( x ) = { 0.5 x 2 i f | x | < 1 | x | 0.5 o t h e r w i s e
其中每個RoI區域都有 ground-truth class u和ground-truth bounding-box regression target v。即 v = ( v x , v y , v w , v h ) ,當 u 1 [ u 1 ] 取值為1,否則為0(即為背景)。超引數 λ 是用來調整兩個任務的損失權重的,在文中設定為 λ = 1 .

通過RoI池化層的反向傳播

普通的max pooling層的反向傳播示意圖如下,參考部落格

這裡寫圖片描述

通過反向傳播求出梯度,對於輸入層節點 x i 和輸出層節點 y j