1. 程式人生 > >Fast R-CNN(理解)

Fast R-CNN(理解)

0 - 背景

  經典的R-CNN存在以下幾個問題:

  • 訓練分多步驟(先在分類資料集上預訓練,再進行fine-tune訓練,然後再針對每個類別都訓練一個線性SVM分類器,最後再用regressors對bounding box進行迴歸,並且bounding box還需要通過selective search生成)
  • 時間和空間開銷大(在訓練SVM和迴歸的時候需要用網路訓練的特徵作為輸入,特徵儲存在磁碟上再讀入的時間開銷較大)
  • 測試比較慢(每張圖片的每個region proposal都要做卷積,重複操作太多)

  在Fast RCNN之前提出過SPPnet來解決R-CNN中重複卷積問題,但SPPnet仍然存在與R-CNN類似的缺陷:

  • 訓練分多步驟(需要SVM分類器,額外的regressors)
  • 空間開銷大

  因此,該文提出的Fast RCNN便是解決上述不足,在保證效果的同時提高效率。基於VGG16的Fast RCNN模型在訓練速度上比R-CNN快大約9倍,比SPPnet快大約3倍;測試速度比R-CNN快大約213倍,比SPPnet快大約10倍,在VOC2012資料集上的mAP大約為66%。

1 - 整體思路

1.1 - 訓練

  • 輸入是$224 \times 224$的固定大小圖片
  • 經過5個卷積層+2個降取樣層(分別跟在第一和第二個卷積層後面)
  • 進入ROIPooling層(其輸入是conv5層的輸出和region proposal,region proposal個數大約為2000個)
  • 再經過兩個output都為4096維的全連線層
  • 分別經過output各為21和84維的全連線層(並列的,前者是分類輸出,後者是迴歸輸出)
  • 最後接上兩個損失層(分類是softmax,迴歸是smoothL1)

  fast R-CNN模型的流程圖如下:

        

1.1.1 - ROIPooling

  由於region proposal的尺度各不相同,而期望提取出來的特徵向量維度相同,因此需要某種特殊的技術來做保證。ROIPooling的提出便是為了解決這一問題的。其思路如下:

  • 將region proposal劃分為$H \times W$大小的網格
  • 對每一個網格做MaxPooling(即每一個網格對應一個輸出值)
  • 將所有輸出值組合起來便形成固定大小為$H \times W$的feature map
1.1.2 - 訓練樣本

  訓練過程中每個mini-batch包含2張影象和128個region proposal(即ROI,64個ROI/張),其中大約25%的ROI和ground truth的IOU值大於0.5(即正樣本),且只通過隨機水平翻轉進行資料增強。

1.1.3 - 損失函式

  多損失融合(分類損失和迴歸損失融合),分類採用log loss(即對真實分類的概率取負log,分類輸出K+1維),迴歸的loss和R-CNN基本一樣。

  總的損失函式如下:

$$L(p,u,t^u,v)=L_{cls}(p,u)+\lambda [u\geqslant 1]L_{loc}(t^u,v)$$

  分類損失函式如下:

$$L_{cls}(p,u)=-log\ p_u$$

  迴歸損失函式如下:

$$L_{loc}(t^u,v)=\sum_{i\epsilon \{x,y,w,h\}}smooth_{L_1}(t_i^u-v_i)$$

  其中有:

$$smooth_{L_1}(x)=\left\{\begin{matrix}0.5x^2\ \ \ \ \ \ if\ |x|< 1\\|x|-0.5\ \ otherwise\end{matrix}\right.$$

1.1.4 - 改進全連線層

  由於卷積層計算針對的是一整張圖片,而全連線層需要對每一個region proposal都作用一次,所以全連線層的計算佔網絡計算的將近一半(如下圖)。作者採用SVD來簡化全連線層計算。

        

 1.1.5 - 訓練整體架構總結

  圖片引用自部落格

    

 

1.2 - 測試

1.2.1 - 測試整體架構總結

  圖片引用自部落格

    

 

2 - 思考

2.1 - 改進

  • 卷積不再是重複對每一個region proposal,而是對於整張影象先提取了泛化特徵,這樣子減少了大量的計算量(注意到,R-CNN中對於每一個region proposal做卷積會有很多重複計算)
  • ROIPooling的提出,巧妙的解決了尺度放縮的問題
  • 將regressor放進網路一起訓練,同時用softmax代替SVM分類器,更加簡單高效

2.2 - 不足

  region proposal的提取仍然採用selective search,整個檢測流程時間大多消耗在這上面(生成region proposal大約2~3s,而特徵提取+分類只需要0.32s),之後的Faster RCNN的改進之一便是此點。

3 - 結果

3.1 - mAP

  FRCN相比其他演算法表現更好,且注意到,VOC12由於資料集更大而使得模型效果提高很多。(這一角度也說明了資料對於當前深度學習的重要性不容忽視!)

3.2 - 速度

          

3.3 - 多工訓練(multi-task)

  由於本文提出的模型是基於R-CNN通過multi-task訓練方式進行改進的,因此要說明multi-task的有效性。一共分為S/M/L三組,每組對應四列,分別為:

  • 僅採用分類訓練,測試也沒有迴歸
  • 採用論文中的分類+迴歸訓練,測試沒有迴歸
  • 採用分段訓練,測試沒有迴歸
  • 採用論文中的分類+迴歸訓練,測試有迴歸

3.4 - 單尺度vs多尺度

  多尺度表示輸入影象採用多種尺度輸入,在測試的時候發現多尺度雖然能在mAP上得到些許提升但也增加了時間開銷(作者給出原因:深度卷積網路可以學習尺度不變性)。

          

4 - 參考資料

https://blog.csdn.net/u014380165/article/details/72851319