Faster RCNN的神器是什麼?

2021-02-19 智能算法

前幾期我們一起學習了,R-CNN, SPP-Net, Fast RCNN等網絡,連結如下:
目標檢測算法Fast RCNN詳解
目標檢測算法SPP-Net詳解
目標檢測算法R-CNN詳解

由於每期都是逐步改進,重複的不在贅述,所以建議先閱讀前面的,這期我們繼續改進,學習一下Faster RCNN都做了哪些改進?

我們知道Fast RCNN的主要貢獻是將分類和回歸整合到了網絡中,雖然速度提升了不少,但是還是存在一個很大的問題,就是SS算法選擇候選框,因為這個算法很難在GPU上運行,所以Faster RCNN就將選擇候選框的方法也集成到了網絡中。從R-CNN, Fast RCNN到Faster RCNN,從框架上都做了哪些改變呢?如下表:

 

從上表中,可以看到在R-CNN時候三大步驟是獨立的,候選框選擇是SS算法,特徵提取是深度網絡,而分類和回歸是單獨的機器學習算法;Fast RCNN將分類回歸也整合到了網絡中;而今天要學的Faster RCNN將SS算法選擇候選,替換成了RPN(Region Proposal Network)深度網絡。接下來我們先一起看一下Faster RCNN的整體框架。

1. Faster RCNN整體框架

我們先看看Faster RCNN的大致流程,主要流程跟前面的Fast RCNN都差不多,唯一不一樣的就是候選框的選取,在Fast RCNN的時候是用SS算法進行選取,而在Faster RCNN這裡用了RPN網絡,如下圖:


步驟如下:

將原始輸入圖像輸入到卷積網絡進行特徵提取,得到特徵圖。

對獲取到的特徵圖進行利用RPN網絡進行提取候選框。

利用特徵映射的方法將候選框的位置映射到特徵圖相應位置,並提取特徵。

將提取的特徵經過ROI Pooling層來固定特徵數量。

將經過ROI Pooling的的特徵輸入到共享全連接層。

最後將共享全連接層的輸出分別經過各自的全連接層利用softmax進行分類以及進行邊框回  歸。

核心改進在於利用的RPN網絡代替SS算法提取了候選框。其他地方跟之前的Fast RCNN大致相同。接下來,我們一起重點看一下RPN網絡長什麼樣子?

2. RPN網絡詳解

通過上面的學習,我們知道Faster RCNN的重要改進在於RPN層,我們來一起看一下這個RPN層是怎麼實現網絡提取的,如下圖:

首先,我們經過卷積網絡得到特徵圖之後,假設特徵圖的尺寸為W*H*D,先將特徵圖經過一個3*3*256的卷積層,將特徵圖的深度固定為256。

接下來對W*H*256的特徵圖的每個像素都生成K個anchor boxes,映射到輸入圖像上,可以直接理解為,基於特徵圖生成了W*H*K個候選框。

稍後會一起看下如何生成候選框。

然後,利用特徵圖上的每個像素的256個特徵,對該像素產生到原圖上的候選框進行分類和回歸。

我們通過前面學的FCN知道全連接層就相當於是1x1的卷積操作。

所以這裡就直接用1x1的卷積層來直接對該像素產生的候選框進行分類,由於是提取候選框,所以該分類僅分兩類:

目標和背景,每個候選框有兩個得分,故而得到的分類結果就是一個W*H*2K的分類得分圖。

同樣,邊框回歸也利用1x1的卷積層代替全連接層,對映射到原圖上的候選框進行回歸,每個回歸結果由向量[x,y,w,h]組成,所以得到的回歸圖的尺寸為W*H*4K.

對於上面第二步說的特徵圖上的每個像素都產生K個anchor boxes,如下圖:


假如K=9的話,特徵圖上的一個像素產生的K個anchor boxes對應到原圖上就是上圖的9個候選框。分三組比例尺寸(1:1,1:2,2:1),三組size(128,256,512),共9個候選框,這樣總共產生W*H*K個候選框。

對RPN網絡的大致流程理解了,那麼具體該怎麼訓練網絡呢?

RPN網絡訓練

我們以具體尺寸為例,來看下這個網絡該怎麼訓練,假如我們最後一層卷積層提取到的特徵圖尺寸為40*60*256,如下圖:

最後一個卷積層輸出的特徵圖再進行一次3*3的卷積操作得到新的特徵圖;

新特徵圖的平面上共有40x60=2400個點,每個點都可以對應到原始圖片上得到9個anchor,所以移動可以得到40x60x9大約20000個候選區域。

計算所有候選區域是否為目標的得分。

把所有超出圖片的候選區域都限制在圖片區域內,給置信度得分排序,選出得分最大的前12000個候選區域。

在選出的候選區域裡面,候選區域之間往往會有大量的重疊,這裡基於上一步的得分,採取非極大值抑制(NMS)。

NMS之後再選出score得分最大的前2000個,接著對這2000個候選區域進行標定,比如候選與某個標定區域的IoU大於0.7的記為正樣本,如果與任意一個標定框的IoU都小於0.3,那麼該候選區域記為負樣本,其餘的不作為樣本訓練。

在訓練RPN層分類回歸任務時,隨機抽取256個區域來訓練,正負樣本比例為1:1,如果正樣本數量小於128,則用負樣本填充。

在訓練整個Faster RCNN的分類回歸任務的時候,隨機抽取64個與真實類別標註框IoU大於等於0.5的區域作為前景,256-64個IoU大於0.1且小於0.5的區域作為背景來訓練具體類別。

到這裡,我們基本上介紹完了Faster RCNN的框架以及RPN網絡的流程。但是明白了原理不代表知道具體怎麼訓練,下期我們深入一步,去學下這個網絡的損失函數該怎麼構建。

好文章,我在看♥

相關焦點

  • 【源頭活水】Sparse R-CNN:簡化版fast rcnn
    算法,是faster rcnn算法的前身,由於其巨大計算量以及無法端到端訓練,故而提出區域提取網絡RPN加上fast rcnn的faster rcnn算法。1.2 faster rcnnfastrcnn的做法不是一個完全端到端的做法,比較麻煩,性能也一般,故faster rcnn提出採用可學習的RPN網絡代替
  • 實戰 | 源碼入門之Faster RCNN
    前言學習深度學習和計算機視覺,特別是目標檢測方向的學習者,一定聽說過Faster Rcnn;在目標檢測領域,Faster Rcnn表現出了極強的生命力,被大量的學習者學習,研究和工程應用。在此先附上源碼的地址(https://github.com/chenyuntc/simple-faster-rcnn-pytorch) ,並對源碼作者(陳雲)表示由衷的感謝和深深地敬意。本文章主要的目的是對該版本代碼的主要框架進行梳理,希望能夠對一些想學習源碼的讀者有一定的幫助。
  • Faster R-CNN
    Mask r-cnn[C]//Computer Vision (ICCV), 2017 IEEE International Conference on. IEEE, 2017: 2980-2988.
  • 深度學習目標檢測系列:faster RCNN實現|附python源碼
    本文將使用一個非常酷且有用的數據集來實現faster R-CNN,這些數據集具有潛在的真實應用場景。問題陳述數據來源於醫療相關數據集,目的是解決血細胞檢測問題。任務是通過顯微圖像讀數來檢測每張圖像中的所有紅細胞(RBC)、白細胞(WBC)以及血小板。
  • 筆記 | Faster RCNN詳解結構介紹
    Detection with Region Proposal Networks論文作者:Shaoqing Ren, Kaiming He, Ross Girshick, Jian Sun論文地址:Towards Real-Time Object Detection with Region Proposal Networks論文代碼:rbgirshick/py-faster-rcnn
  • 卷積神經網絡 物體檢測 Faster-RCNN
    繼204年rcnn,2015年SPPnet、fast rcnn後,2016年,hekaiming和rbg合作提出了faster rcnn(一作是renshaoqing),以解決region proposal的耗時問題;
  • Faster RCNN 官方源碼解讀
    否則請先點擊閱讀上一篇文章:白裳:一文讀懂Faster RCNNtorchvision 中 FasterRCNN 代碼文檔如下:https://pytorch.org/docs/stable/torchvision/models.html#faster-r-cnnpytorch.org
  • Mask R-CNN
    是對faster r-cnn的擴展,與bbox識別並行的增加一個預測分割mask的分支。Mask R-CNN 可以應用到人體姿勢識別。並且在實例分割、目標檢測、人體關鍵點檢測三個任務都取得了現在最好的效果。效果圖
  • 詳解目標檢測Faster R-CNN
    即,數學地表述,如果圖片尺寸 w×h,特徵圖的尺寸則是 w/r×h/r. 其中,r 是下採樣率(subsampling ratio). 如果在卷積特徵圖空間位置定義 anchor,則最終的圖片會是由 r 像素劃分的 anchors 集. 在 VGG 中,r=16.
  • 經典目標檢測方法Faster R-CNN和Mask R-CNN|基於PaddlePaddle深度...
    "Fast r-cnn." Proceedings of the IEEE international conference on computer vision. 2015.  https://arxiv.org/abs/1504.08083  Ren, Shaoqing, et al.
  • 目標檢測技術之Faster R-CNN詳解
    之前,我們介紹了目標物體檢測(object detection)是什麼以及它是如何用於深度學習的。去年,我們決定研究Faster R-CNN。通過閱讀原論文以及相關的參考文獻,我們對其工作原理及如何部署已經有了清晰的了解。
  • 一文看懂近年火到不行的CNN圖像識別:從R-CNN到Mask R-CNN
    在CNN的最終層,R-CNN增加了支持向量機(Support Vector Machine, SVM),用於簡單判斷區域中是否包含目標以及它是什麼(就像上圖中的第4步)。調整邊界框現在已經找到框中的物體,接下來能否調整邊界框,使其更貼近物體的真實範圍呢?
  • 如何評價Sparse R-CNN,目標檢測未來會如何發展?
    我之前跟mentor討論,他堅信cnn上也能像detr一樣去掉nms,但是我就勸他說不用position encoding 這樣的東西,cnn這個平滑性好像必須有這麼個設計,之後的嘗試也完全走偏了,這個認知在dense anchor的基礎上也是對的,但是之後就往怎麼增加feature map高頻上做了,完全沒意識到dense anchor有什麼問題,當然也承認,認識到我也一點不敢想能做成
  • 深度 | 像玩樂高一樣拆解Faster R-CNN:詳解目標檢測的實現過程
    數學上,如果圖片的尺寸是 w×h,那麼特徵圖最終會縮小到尺寸為 w/r 和 h/r,其中 r 是次級採樣率。如果我們在特徵圖上每個空間位置上都定義一個錨點,那麼最終圖片的錨點會相隔 r 個像素,在 VGG 中,r=16。
  • 經典解讀 | Cascade R-CNN詳細解讀
    連結 | https://zhuanlan.zhihu.com/p/42553957源碼連結:https://github.com/zhaoweicai/cascade-rcnn文章提出的cascade結構的效果是驚豔的,幾乎對於任意的R-CNN(Faster rcnn,FPN,R-FCN等)都可以帶來2到4個點的AP提升!!!而且實現十分簡單,已使用Pytorch在Pascal VOC上復現論文。此外,本篇文章的實驗講解部分對於理解R-CNN網絡有很大的幫助,建議詳細閱讀。   0. 本篇解析的內容結構   1. 簡單回顧R-CNN結構
  • 機器視覺目標檢測補習貼之R-CNN系列 — R-CNN, Fast R-CNN, Faster R-CNN
    把存在的目標從圖片中找出來,就是那麼簡單!
  • 【從零開始學Mask RCNN】一,原理回顧&&項目文檔翻譯
    訓練你自己的數據集閱讀這個例子作為開始:https://engineering.matterport.com/splash-of-color-instance-segmentation-with-mask-r-cnn-and-tensorflow-7c761e238b46?gi=468916310fd5 。
  • 用於圖像分割的卷積神經網絡:從R-CNN到Mask R-CNN
    在 CNN 的最後一層,R-CNN 添加了一個支持向量機(SVM),它可以簡單地界定物體是否為目標,以及是什麼目標。這是上圖中的第 4 步。提升邊界框現在,在邊界框裡找到了目標,我們可以收緊邊框以適應目標的真實尺寸嗎?我們的確可以這樣做,這也是 R-CNN 的最後一步。R-CNN 在區域提案上運行簡單的線性回歸,以生成更緊密的邊界框坐標從而獲得最終結果。
  • 後 R-CNN 時代:Faster R-CNN 系列真的勝了嗎?
    ResNet 的應用這個網絡去做 Faster R-CNN 的基礎網絡用於特徵提取,什麼都不用做,在 VOC數據集上取得了 3% 的性能提升,在 COCO 數據集上取得7%的性能提升,而且一舉贏得 2015年的 COCO 目標檢測賽冠軍