RCNN/fast-RCNN/faster-RCNN經典目標檢測算法技術演進思路回顧

 2020-12-15

分享人工智能技術乾貨,專注深度學習與計算機視覺領域!

早期從事深度學習目標檢測算法的,無不接觸RCNN、fast-RCNN、faster-RCNN這些經典的目標檢測算法,它們是基於anchor based思想而設計的,也是屬於two-stage的目標檢測框架,該系列算法改變了目標檢測領域的研究思路。後來的YOLO、SSD以及anchor free的CornerNet等後發目標檢測系列算法也都或多或少的從前者的算法思想裏獲得靈感,從而讓後進目標檢測算法在速度和性能上取得了後來居上的關鍵性進展。雖然現在我們已經很少有用到RCNN、fast-RCNN、faster-RCNN,但是它們作爲目標檢測算法的鼻祖,有很多技術思路依然對現在產生影響,所謂溫故而知新是也,本文就讓我們一起來回顧RCNN、fast-RCNN及faster-RCNN迭代發展的目標檢測算法技術演進思路!

RCNN(Regions with CNN features),基於Region Proposal所提出的目標檢測算法,由Ross B. Girshick於2014年所發表,見論文《Rich feature hierarchies for accurate object detection and semantic segmentation》,在Pascal voc 2010的數據集上讓目標檢測算法躍上了新臺階,取得了mAP 53.7%的優越性能,該算法也是第一個真正可以工業級應用的解決方案,它的技術思路如下:

1、Selective Search獲取RP候選框(約2000個);

2、在原圖上根據候選框crop或warp出候選區域縮放到227x227大小;

3、採用CNN對每一個候選區域進行特徵提取;

4、從頭訓練一個SVM支持向量機,對CNN提取的特徵進行分類;

5、訓練線性迴歸器,對邊框座標進行精調;

總的來說,RCNN有三個模塊構成,第一個爲區域推薦(Region Proposal),採用Selective Search的方法提取將近2000個候選框;第二個爲特徵提取(Feature extraction),採用CNN網絡模型進行微調用於提取候選框特徵;第三個爲後處理部分,包括針對特定類別的SVM分類器和邊框迴歸器,採用softmax loss和L2 loss進行算法驅動。整個算法的設計是分段式的,無法做到端到端訓練,其主要缺點包括:

1、步驟繁瑣,分段訓練,無法端到端一次性訓練完成;

2、目標空間特徵失真,因全連接層輸入尺寸必須統一,所以每個候選框都需要進行crop和warp到227x227大小再進行特徵提取,最終影響性能;

3、訓練慢,每個候選框都要進行一次前向CNN特徵提取;

4、磁盤空間耗用大,需要保存大量的已提取特徵文件供後續訓練用;

5、CNN特徵未有與分類器和迴歸器聯動,訓練分類器和迴歸器時特徵未有參與學習更新;

Ross B. Girshick於2015年發表了《Fast R-CNN》,針對RCNN存在的一些缺陷,作者借鑑了SPPNet思想,在SPP(Spatial Pyramid Pooling)檢測的基礎上提出了兩個主要的改進:第一點是ROI提取特徵後,把物體框的迴歸和分類這兩個任務的loss融合一起訓練,相當於端到端的多任務(multi-task)訓練,這讓整個訓練過程不在是分階段多步驟分別進行,訓練效率更加高效;第二點是把SPP換成了ROI pooling,不再需要每個候選框都要進行一次CNN前向特徵提取,可以根據不同尺寸的候選區域特徵圖統一pooling到固定尺寸7x7再輸入到全連接層,最後將L2迴歸損失替換爲smooth L1 loss,提高了loss的穩定性。正如論文標題那般簡潔精妙,該算法構思精巧,流程更爲緊湊,大幅提升了目標檢測的速度,它的技術思路如下:

1、Selective Search獲取RP候選框(約2000個),與RCNN一致;

2、整張圖像一次性輸入CNN提取特徵圖feature maps,相當於進行了Proposals批處理;

3、根據原圖與特徵圖feature maps的映射關係(一般是縮放16倍),提取相應的ROI候選框特徵圖;

4、ROI pooling層將每一個ROI候選框特徵圖池化到7x7固定大小;

5、最後由兩個全連接層輸出兩個特徵向量,一個是softmax分類得分,另一個是邊框迴歸,然後基於NMS非極大值抑制得到正確的目標框;

爲了減少計算量提高計算速度,fast-RCNN採用SVD分解全連接層去掉次要成分,然後再使用multi-task loss(多任務損失)函數,將邊框迴歸直接加到CNN網絡中訓練,同時直接用CNN替代R-CNN用的SVM進行分類。不考慮Selective Search候選區域劃分部分,fast-RCNN算法是端到端訓練的,可一次性輸入整張圖像即可獲得所有候選框特徵圖,共享了卷積層特徵圖,大大加快了訓練速度,解決了RCNN訓練繁瑣需分多步驟、時間和空間開銷大及檢測速度慢等問題。

fast-RCNN的運行速度已接近實時,但受限於Selective Search的候選框生成速度,依然存在檢測瓶頸,因此作者聯合Kaiming He於2016年發表了《Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks》,首次提出了Region Proposal Network,將RPN網絡用於候選框提取上來,不僅共享了前面幾個卷積層的特徵獲得ROI候選框和較快的運行速度,還在目標檢測準確度上獲得了較大的性能提升,真正實現了端到端的訓練,它的技術思路如下:

1、整張圖像一次性輸入CNN提取特徵圖feature maps;

2、RPN在feature maps基於anchor based生成候選框,既對每像素進行二分類判斷是否爲背景還是目標,也進行目標邊框粗迴歸;

3、ROI pooling將候選框池化到固定大小並送入全連接網絡;

4、兩個全連接網絡,一個輸出softmax類別,另一個精調輸出邊框座標值;

faster-RCNN的快主要在於RPN,該網絡是直接在CNN提取特徵圖feature maps上窗口滑動,將卷積核的中心位置映射回輸入原圖,可以在原圖上得到多尺度的候選框,最終生成三種尺度128*128、256*256、512*512和三種長寬比1:1、1:2、2:1共九種Anchors,所以對於M*N大小的特徵圖會在原圖像中生成M*N*9個Anchors,每個anchor都會對應一個softmax loss和一個迴歸框,softmax loss用於判斷該anchor是背景還是有目標,最終會根據候選框score抽樣挑選輸出128個positive和128個negative共256個anchor候選框,如果positive不足的則以negative來填充,是否positive是根據候選框與實框的IOU佔比,大於0.7爲positive,小於0.3爲negative,其餘捨棄。因此,RPN網絡的主要任務就是抽樣挑選合適的候選框(ROI)送入ROI pooling層並進行邊框粗迴歸,其包含兩個損失函數,一個是二分類損失函數softmax loss,另外一個是粗調邊框迴歸損失函數smooth L1 loss。之後的網絡連接與fast-RCNN一樣,ROI pooling層的輸出進入全連接層,分別進行目標分類和邊框迴歸,這裏再多了兩個損失函數,一個是多分類損失函數softmax loss,另一個是精調邊框迴歸損失函數smooth L1 loss,因此整個faster-RCNN網絡擁有四個損失函數,這讓整個網絡在訓練學習時可以相互制約參考提升性能。faster-RCNN作爲two-stage的目標檢測網絡,雖然在速度和性能上取得了較大的改進,但是在訓練時依然比較複雜,其訓練步驟如下:

  1. RPN網絡之前的backbone使用ImageNet預訓練模型初始化權重,使用抽樣後的256個正負例anchor框開始訓練RPN網絡,backbone權重也參與微調。
  2. 使用第一階段訓練好的RPN,生成正例預測框,供Fast RCNN分類迴歸網絡進行訓練,此時Fast RCNN backbone權值也使用ImageNet預訓練模型初始化。截止第二步,RPN與Fast RCNN使用兩個不同的backbone,沒有卷積層權值共享。
  3. 使用第2步中訓練好的Fast RCNN網絡中相應的backbone權值,初始化RPN網絡之前的backbone,RPN部分使用第1步的訓練結果進行初始化。第3步只微調RPN中的權值。截止第三步,Fast R-CNN與RPN開始共享backbone網絡權值。
  4. backbone與RPN權值不再改變,使用第2步訓練的Fast RCNN部分結果初始化Fast RCNN,再次微調訓練。

faster-RCNN在第三步之後,其權值參數都有參與梯度反向傳播更新,真正做到了端到端訓練,不管是在訓練測試速度上,還是在目標檢測精度上都比fast-RCNN更優,讓目標檢測算法在工程實用化上更加的受認可和普及,也開啓了後來的YOLO/SSD等one-stage算法。

文章來源:知乎