【R-CNN目標檢測系列】六、Faster R-CNN論文解讀

寫在前面

這10幾天忙於實習公司模型訓練和天池比賽,因此沒有多少時間用於更新這個系列文章第六篇——Faster R-CNN論文解讀。在前面一篇博客【計算機視覺——RCNN目標檢測系列】五、Fast R-CNN論文解讀主要介紹了Fast R-CNN網絡架構,在這篇博客中我們將主要介紹Faster R-CNN,雖然還有Mask R-CNN作爲最終改進版,但Mask R-CNN主要用於圖像分割網絡,因此我們在此先不做詳細介紹,帶有時間再做詳細學習之後再做詳細介紹。之後我們也會針對Fast R-CNN和Faster R-CNN進行實戰,解讀官方源代碼或手動實現,框架將會使用TensorFlow和keras,大家敬請期待。


一、 Faster R-CNN概況

經歷了R-CNN和Fast R-CNN的前期積累,Ross Girshick與何愷明、任少卿和孫劍合作對Fast R-CNN進行改進,改進版本就是Faster R-CNN。之所以稱之爲Faster,就是因爲相比於Fast R-CNN,Faster R-CNN將推薦區域生成、分類和定位全部融入到一個網絡當中,極大加快了Faster R-CNN的訓練與測試,綜合性能有較大提高,並且達到了實時的效果。接下來我們來介紹Faster R-CNN網絡。在小型網絡上能達到17fps,在VOC數據集上取得59.9%的mAP,大型網絡上也能到5fps,mAP爲78.8%。在介紹Faster R-CNN之前,我們對Fast R-CNN進行一個簡單回顧。

1.1 Fast R-CNN網絡回顧

同樣地,我們對Fast R-CNN的架構與缺點進行簡單說明。首先來看下Fast R-CNN的網絡架構:

  1. Fast R-CNN首先在輸入圖像上執行選擇性搜索算法(SS),獲取大量的推薦區域。
  2. 接着將輸入圖像送入VGG16進行特徵提取,之後將得到的特徵圖、輸入圖像尺寸、輸入尺寸和原始圖像中的目標框(RoI)全部送入RoI池化層,得到池化後目標框對應特徵圖。
  3. 之後利用各個目標框的特徵圖進行分類與預測,之後並利用非極大抑制(NMS)去除重複候選框。
  4. Fast R-CNN在訓練時採用了多任務損失函數,將分類與預測合併到一個網絡當中,並且在有必要時可採用SVD分解對全連接層權重進行分解,從而加快前向傳播速率。

雖然Fast R-CNN得到了與R-CNN相當的性能,mAP在66%-67%,並且將R-CNN的84小時的訓練時間降低至9.5小時,測試時間從47秒將降低至0.32秒。但是Fast R-CNN存在如下兩個缺點:
5. 推薦區域的生成仍然是利用選擇性搜索算法,必須在CPU上進行,未和分類和預測一起融入到一個網絡中,大大降低了Fast R-CNN的速率。
6. Fast R-CNN訓練和測試速度相比於R-CNN都有大幅度提升,但仍未達到實時的要求。


二、 Faster R-CNN

接下來,我們將從RPN和網絡架構兩方面來介紹Faster R-CNN。

2.1 RPN

相比於Fast R-CNN,Faster R-CNN最重要的改進就是引入了區域生成網絡(Region Proposal Network,RPN)。在Faster R-CNN 中提出的RPN取代了Fast R-CNN中的選擇性搜索算法(Selective Search,SS),從而使得區域生成、分類和定位三大任務全部融合到一個網絡中,並可以利用GPU實現加速。下圖中是RPN的架構圖。接下來來重點介紹RPN。
在這裏插入圖片描述
在這裏我們首先來看下anchor。需要提醒一下,在RPN網絡的輸入是原始圖像經Fast R-CNN中特徵提取網絡(VGG或者ZF)提取出來的特徵圖。RPN首先要做的就是獲取區間區域,這裏使用的是滑動窗口法。如果把輸入特徵看成圖像,那麼圖像的每一個位置,考慮9個可能的候選窗口:三種面積{1282,2562,5122}\left\{ {{128}^{2}},{{256}^{2}},{{512}^{2}} \right\} 與三種比例 {1:1,1:2,2:1}\left\{ 1:1,1:2,2:1 \right\}。這些候選窗口稱爲anchor。它的中心叫做錨點。下面是anchor的示意圖。
在這裏插入圖片描述需要注意的是,每個尺寸爲 H×WH\times W的特徵圖在經過滑動窗口處理之後會的通道數爲256的新的特徵圖,尺寸仍然爲H×WH\times W 。之後分別進行兩次全連接操作分別到2k2k個分類結果和4k4k個預測結果。這裏的kk指的是anchor的個數,只不過在Faster R-CNN在中規定成上9而已。即在Faster R-CNN中,我們需要返回的有18個分類分數和36個預測結果。需要特別指出的是,RPN網絡返回的18個分類分數值是指前景(物體)的概率和背景的概率。36個預測結果是指9組對原圖偏移量,每組4個。

接下來我們來說下RPN的損失函數,具體損失函數表達式如下:

L({pi},{ti})=1NclsiLcls(pi,pi)+λNregipiLreg(ti,ti)Lcls(pi,pi)=pilogpiLreg(ti,ti)=smoothL1(titi)smoothL1(x)={0.5x2x<1x0.5x1(1) \begin{aligned} & L(\{{{p}_{i}}\},\{{{t}_{i}}\})=\frac{1}{{{N}_{cls}}}\sum\limits_{i}{{{L}_{cls}}({{p}_{i}},p_{i}^{*})}+\frac{\lambda }{{{N}_{reg}}}\sum\limits_{i}{p_{i}^{*}{{L}_{reg}}({{t}_{i}},t_{i}^{*})} \\ & {{L}_{cls}}({{p}_{i}},p_{i}^{*})=-p_{i}^{*}\log {{p}_{i}} \\ & {{L}_{reg}}({{t}_{i}},t_{i}^{*})=smoot{{h}_{{{L}_{1}}}}({{t}_{i}}-t_{i}^{*}) \\ & smoot{{h}_{{{L}_{1}}}}(x)=\left\{ \begin{matrix} 0.5{{x}^{2}} & \left| x \right|<1 \\ \left| x \right|-0.5 & \left| x \right|\ge 1 \\ \end{matrix} \right. \end{aligned}\tag1

其中, ii爲每個小批量樣本中每個anchor的下標, pip_i則是每個anchor爲一個物體(前景)的概率,對於Ground Truth爲前景的, pip_i^*就是1,若是爲背景那麼pip_i^* 則爲0。同時在損失函數中, λ\lambda爲平衡參數,用於平衡分類樣本個數NclsN_{cls} 和迴歸樣本個數NregN_{reg} ,默認爲10。

同時我們對RPN整個訓練中正負樣本的組成進行說明。對於正樣本,我們規定爲如下兩個部分:所有的Ground Truth和與Ground Truth之間IoU高於0.7的候選。對於所有與Ground Truth之間IoU小於0.3的候選框。

那麼RPN可以利用BP算法和SGD進行端到端訓練。在論文中RPN的訓練是隨機選擇256個anchor,並且保證正負樣本數量比例爲1:1。若正樣本少於128,那麼填充負樣本。同時RPN的初始化權重服從N(0,0.01)N(0,0.01) 。訓練時,前60k個小批量樣本學習率爲0.001,後20個小批量樣本的學習率爲0.0001。L2正則化係數爲0.0005,動量因子爲0.9。

2.3 Faster R-CNN架構

接下來我們來對Faster R-CNN架構進行分析。Faster R-CNN整體架構如下圖所示。從上圖可以看出,Faster R-CNN就是RPN與Fast R-CNN的組合。同時RPN與Fast R-CNN共享特徵提取網絡的輸出。這也就使得RPN與Fast R-CNN能夠都是使用GPU加速。
在這裏插入圖片描述從上個圖可以看出,Faster R-CNN的架構如下:

  1. 首先將圖像作爲輸入到特徵提取網絡(例如:VGG16、ZF或者ResNet),獲取對應的深度特徵圖。
  2. 之後將特徵圖送到RPN網絡,生成對應原始圖中候選區域的特徵圖,並給出候選區域屬於物體(前景)和背景的概率與相對於原圖的偏移量。
  3. 最後將候選區域的特徵圖送入RoI池化層,最後進行分類與定位,並了利用NMS剔除重複候選框,閾值爲0.7。

接下來我們來介紹Faster R-CNN的幾種訓練方式。論文中提到了三種訓練方式:輪流訓練、近似聯合訓練和聯合訓練。Faster R-CNN利用的是第一種——4步輪迴訓練。接下來我們對這3中訓練進行詳細介紹。首先是第一種訓練方式——輪迴訓練。4步輪迴訓練過程如下:

  1. 利用ImageNet預訓練模型 M0M_{0},之後訓練RPN得到模型 M1M_{1}
  2. 利用模型M1M_{1} 生成推薦區域P0P_{0}
  3. 利用P0P_{0}訓練Fast R-CNN,然後利用ImageNet初始化得到模型M2M_{2}
  4. 訓練RPN,並利用M2M_{2}進行初始化,固定卷積層參數,微調RPN獨有的層,得到模型M3M_{3}
  5. 利用M3M_{3} 初始化訓練Fast R-CNN,微調獨有的層得到模型M4M_{4}

雖然整個訓練過程只進行兩次epcoh,但是每個部分(M1,M2,M3,M4)(M_{1},M_{2},M_{3},M_{4})進行很多次迭代(80k,60k)。
接下來介紹近似聯合訓練。近似聯合訓練就是把RPN與Fast R-CNN當成一個整體進行訓練。相比於輪流訓練,近似聯合訓練的訓練時間下降了20%-25%。但是反向計算到共享卷積層時RPN網絡損失和Fast R-CNN網絡損失疊加進行優化,但此時把候選區域當成固定值看待,忽視了Fast R-CNN一個輸入即候選區域的導數,則無法更新訓練。
最後一種是聯合訓練,它也是是把RPN與Fast R-CNN當成當成一個整體進行訓練。但將候選區域當成變量,在反向傳播過程中需要計算梯度。至於梯度的計算請參考另一篇論文:Instance-aware Semantic Segmentation via Multi-task Network Cascades。


歡迎關注我的微信公衆號:AI那點小事
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章