R-CNN系列算法詳解:R-CNN —》Fast R-CNN —》Faster R-CNN 進階之路

寫在前面:大家好!我是【AI 菌】,一枚愛彈吉他的程序員。我熱愛AI、熱愛分享、熱愛開源! 這博客是我對學習的一點總結與思考。如果您也對 深度學習、機器視覺、算法、Python、C++ 感興趣,可以關注我的動態,我們一起學習,一起進步~
我的博客地址爲:【AI 菌】的博客
我的Github項目地址是:【AI 菌】的Github


溫馨提示:Faster R-CNN目標檢測實戰手把手教程也將在下週更新,想學習的盆友,可以關注我的博客動態。

在這裏插入圖片描述


綜述

在這裏插入圖片描述我們常說的R-CNN系列,一共包含三個版本:R-CNN、Fast R-CNN、Faster R-CNN。從命名上看,R是Region的縮寫,CNN指我們常說的卷積神經網絡。那麼R-CNN其實就是使用推薦區域的卷積神經網絡。由Fast、Faster很容易知道,版本的更迭解決的是一個實時性的問題

R-CNN算法最早在2013年被提出,它的出現打開了運用深度學習進行目標檢測的大門,從此之後,目標檢測的精準度與實時性被不斷刷新。R-CNN系列算法自提出之際,就非常引人注目,以至於在之後的很多經典算法中,如SSD、YOLO系列、Mask R-CNN中都能看到它的影子。

學習R-CNN系列算法不僅能夠讓我們瞭解到基礎的目標檢測算法的思路,而且能夠讓學習者更加輕鬆地掌握SSD、YOLO系列、Mask R-CNN等算法。因爲相比一些one-stage 的目標檢測算法,Faster R-CNN作爲two-stage的算法理解起來並不算簡單。正是如此,當我們掌握了R-CNN系列算法後,再去學習經典的one-stage算法,就會變得異常簡單。

R-CNN、Fast R-CNN採用的還是傳統的SS算法生成推薦區域,計算非常耗時,達不到實時檢測的效果。直到Faster R-CNN才使用RPN代替了原來的SS算法,才使得目標檢測的時間大大縮短,達到實時性的效果。因此,本篇博客先會對R-CNN、Fast R-CNN進行一個簡明扼要地講解,大家只需瞭解算法的思路和演進過程即可;之後,會着重講解R-CNN 系列的靈魂之作——Faster R-CNN,而這部分纔是大家需要着重瞭解的

一、R-CNN

2013年11月,Ross Girshick等人最早提出了R-CNN算法,打開了利用深度學習進行目標檢測的大門。在當時來說,R-CNN算法的目標檢測水平超羣,比傳統的目標檢測方法有了很大提升。實驗表明,R-CNN算法在PASCAL VOC數據集取得了很好的成績,這種算法的平均精確度比之前在VOC2012數據集上的測試效果(53.3%)還要高出30%。並且,由該算法提出的論文《Rich feature hierarchies for accurate object detection and semantic segmentation》獲得了世界計算機視覺頂會CVPR2014的最佳論文獎

在這裏插入圖片描述
如上圖所示,R-CNN目標檢測算法流程主要分四個步驟:

  1. 使用SS(Selective Search)方法,使一張圖片生成1000~2000個候選區域(region proposals)。
  2. 對每一個候選區域,都使用深度神經網絡(AlexNet)提取特徵,得到1*4096的特徵向量。
  3. 將每一個特徵向量送入每一類的SVM分類器,判斷是否屬於該類。
  4. 對已分類的推薦框進行線性迴歸,對這些框進行精細地調整,得到更加準確的邊界框座標。
    注:迴歸器細節將在後文Faster R-CNN中具體講解。

R-CNN算法的檢測效果很好,但是檢測速度很慢,因此總體效率不高。其主要原因在於:

  • 提取特徵操作非常冗餘。檢測時,需要將每個推薦區域都送入訓練好的模型(AlexNet)進行前向傳播,因此每張圖片大約要進行1000~2000次前向傳播。
  • 訓練速度慢,過程繁瑣。要單獨分別訓練三個不同的模型:CNN用來提取圖像特徵、SVM分類器用來預測類別、迴歸器精細修正建議框的位置。分開訓練,耗時耗力。
  • 使用Selective Search算法生成推薦區域,這個過程大約耗時2s,也是它不能達到實時性檢測的一個原因。

二、Fast R-CNN

2015年,Ross Girshick等人在R-CNN的基礎上進行了改進,解決了上述影響R-CNN效率的前兩個問題。與R-CNN相比,訓練速度快了9倍;測試速度快了213倍;在Pascal VOC數據集上,準確率從62%提升到了66%。

在這裏插入圖片描述

如上圖所示,Fast R-CNN算法的流程主要分爲下面三個步驟:

  • 依然先使用SS(Selective Search)方法,使一張圖片生成1000~2000個候選區域。
  • 將圖像輸入到一個CNN(VGG-16)得到相應的特徵圖,然後將已經生成的候選框投影到特徵圖上獲得相應的特徵矩陣。
  • 將每個特徵矩陣通過ROI Pooling層縮放到7*7大小,然後將特徵圖展平,在通過一系列全連接層得到預測的類別信息和目標邊界框信息。

Fast R-CNN的改進點:

  • ROI Pooling層。這個方法是針對R-CNN的第一個問題提出來的,用來解決提取特徵操作冗餘的問題,避免每個推薦區域都要送入CNN進行前向計算。核心思路是:將圖像只輸入CNN提取特徵,只進行一次前向計算。得到的特徵圖由全部推薦區域共享。然後再將推薦區域(SS算法得到)投影到特徵圖上,獲得每個推薦區域對應的特徵圖區域。最後使用ROI Pooling層將每個特徵圖區域下采樣到7*7大小。
  • 將原來三個模型整合到一個網絡,易與訓練。R-CNN算法使用三個不同的模型,需要分別訓練,訓練過程非常複雜。在Fast R-CNN中,直接將CNN、分類器、邊界框迴歸器整合到一個網絡,便於訓練,極大地提高了訓練的速度。

Fast R-CNN的瓶頸:
雖然Fast R-CNN算法在檢測速度和精確度上了很大的提升。但是它仍然不能滿足實時目標檢測,最大的原因在於:採用SS算法生成推薦區域的方法很耗時,處理每張圖像大約需要消耗2秒,大大限制了目標檢測的速度。

三、Faster R-CNN

2015年,由任少卿、何凱明、Ross Girshick、孫劍組成的微軟研究團隊,提出了Region Proposal Networks取代了原來的SS算法,幾乎不消耗計算時間,使得生成推薦區域過程變得非常高效,解決了Fast R-CNN的瓶頸問題

Faster R-CNN算法將Region Proposal Networks與Fast R-CNN進一步合併爲一個單個網絡。當採用非常深的VGG-16模型作爲骨幹網絡時,基於該方法的檢測系統在GPU上的幀速率爲5fps,基本達到實時檢測的水平。同時在PASCAL VOC2007、2012和MS COCO數據集上,其檢測精度也達到了最好的水平。

在這裏插入圖片描述
如上圖所示,Faster R-CNN算法流程主要有以下4個步驟:

  1. Conv layers。首先將圖像輸入到CNN(VGG-16)提取圖像特徵,得到的feature maps 將被共享用於後面的RPN和ROI Pooling。
  2. Region Proposal Networks。RPN用於生成推薦區域。該網絡通過softmax判斷anchors屬於positive還是negative,再利用邊界框迴歸修正anchors獲得精確的推薦框proposals。
  3. ROI Pooling。該層以feature maps和proposals同時作爲輸入,綜合這些信息後提取proposal feature maps,送入後續全連接層判定目標類別。
  4. Classifer。將proposal feature maps輸入全連接層與預測proposals的類別;同時再次進行邊界框迴歸,獲得檢測框最終的精確位置。

相比Fast-RCNN,改進後的Faster R-CNN算法不僅速度上很很大提升,基本可以達到實時的檢測幀率;檢測精度也有所提高
Faster R-CNN在 PASCAL VOC 數據集上的檢測效果:
在這裏插入圖片描述
Faster R-CNN在 MS COCO 數據集上的檢測效果:
在這裏插入圖片描述
想要深入瞭解Faster R-CNN算法的盆友,可以參見我的另一篇博文:Faster R-CNN論文詳解

本博文會持續更新,敬請期待。。。

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