(五)目標檢測算法之Faster R-CNN

 

系列博客連接:

(一)目標檢測概述 https://www.cnblogs.com/kongweisi/p/10894415.htmlhtml

(二)目標檢測算法之R-CNN https://www.cnblogs.com/kongweisi/p/10895055.htmlpython

(三)目標檢測算法之SPPNet https://www.cnblogs.com/kongweisi/p/10899771.html算法

(四)目標檢測算法之Fast R-CNN https://www.cnblogs.com/kongweisi/p/10900021.html網絡

寫在最前面:https://zhuanlan.zhihu.com/p/31426458,這是某知乎大佬關於我今天所寫的超級棒的文章,放在最前面,徹底能夠不看個人文章去看這位大佬的。框架

固然,大佬的文章深度和精度都很足,所以文章篇幅比較長,想簡單一些瞭解(其實個人也不是特別簡單,很想簡單點。。囧~~)Faster R-CNN的,能夠直接讀個人文章。函數

 

本文概述:spa

一、Faster R-CNN:區域生成網絡+Fast R-CNN

  候選區域生成(Region Proposal Network),特徵提取,分類,位置精修設計

二、RPN原理

  2.1 anchors3d

  2.2 候選區域的訓練code

三、Faster R-CNN的訓練

四、效果對比

五、Faster R-CNN總結

 

引言:

在Fast R-CNN還存在着瓶頸問題:Selective Search(選擇性搜索)。要找出全部的候選框,這個也很是耗時。那咱們有沒有一個更加高效的方法來求出這些候選框呢?

一、Faster R-CNN

在Faster R-CNN中加入一個提取邊緣的神經網絡,也就說找候選框的工做也交給神經網絡來作了。這樣,目標檢測的四個基本步驟(候選區域生成,特徵提取,分類,位置精修)終於被統一到一個深度網絡框架以內。

 

 Faster R-CNN能夠簡單地當作是區域生成網絡+Fast R-CNN的模型,用區域生成網絡(Region Proposal Network,簡稱RPN)來代替Fast R-CNN中的選擇性搜索方法,結構以下:

 

          圖1 Faster RCNN基本結構

  • 一、首先向CNN網絡(VGG-16)輸入任意大小圖片
  • 二、Faster RCNN使用一組基礎的conv+relu+pooling層提取feature map。該feature map被共享用於後續RPN層和RoI Pooling層。
  • 三、Region Proposal Networks。RPN網絡用於生成region proposals該層經過softmax判斷anchors屬於foreground或者background,再利用bounding box regression修正anchors得到精確的region proposals,輸出其Top-N(默認爲300)的區域給RoI pooling。
    • 生成anchors -> softmax分類器提取fg anchors -> bbox reg迴歸fg anchors -> Proposal Layer生成region proposals
  • 四、第2步獲得的高維特徵圖和第3步輸出的區域,合併(能夠理解成候選區映射到特徵圖中,相似第(三)節SPPNet中1.1"映射")輸入RoI池化層(類), 該輸出到全鏈接層斷定目標類別。
  • 五、利用proposal feature maps計算每一個region proposal的不一樣類別機率,同時bounding box regression得到檢測框最終的精確位置

 

                        圖2 Faster RCNN基本結構

 

解釋:

圖2展現了python版本中的VGG16模型中的faster_rcnn_test.pt的網絡結構,能夠清晰的看到該網絡對於一副任意大小PxQ的圖像,首先縮放至固定大小MxN,而後將MxN圖像送入網絡;

而Conv layers中包含了13個conv層+13個relu層+4個pooling層;RPN網絡首先通過3x3卷積,再分別生成foreground anchors與bounding box regression偏移量,而後計算出region proposals

而Roi Pooling層則利用region proposals從feature maps中提取region proposal feature送入後續全鏈接和softmax網絡做classification(即分類region proposal究竟是什麼object)。

 

二、 RPN(Region Proposal Networks)原理

RPN網絡的主要做用是得出比較準確的候選區域。整個過程分爲兩步

  • 用n×n(默認3×3=9)的大小窗口去掃描特徵圖,每一個滑窗位置映射到一個低維的向量(默認256維),併爲每一個滑窗位置考慮k種(在論文設計中k=9)可能的參考窗口(論文中稱爲anchors,錨框)
  • 低維特徵向量輸入兩個並行鏈接的1 x 1卷積層而後得出兩個部分:reg窗口迴歸層(用於修正位置)和cls窗口分類層(是否爲前景或背景機率)

              圖3 RPN層基本結構

 上圖3展現了RPN網絡的具體結構。能夠看到RPN網絡實際分爲2條線,上面一條經過softmax分類anchors得到foreground和background(檢測目標是foreground)

下面一條用於計算對於anchors的bounding box regression偏移量,以得到精確的proposal。而最後的Proposal層則負責綜合foreground anchors和bounding box regression偏移量獲取proposals,

同時剔除過小和超出邊界的proposals(有一些分類實在太爛的區域,咱們直接丟掉,不然計算量會很是大)。其實整個網絡到了Proposal Layer這裏,就完成了至關於目標定位(至關於完成了選擇性搜索(SS)生成候選區)的功能。

2.1 anchors

 

  舉個例子:

  • 3*3卷積核的中心點對應原圖上的位置,將該點做爲anchor的中心點,在原圖中框出多尺度、多種長寬比的anchors, 三種尺度{ 128,256,512 }, 三種長寬比{1:1,1:2,2:1}

 

 解釋:

所謂anchors,實際上就是一組的矩形。

 

[[ -84.  -40.   99.   55.] [-176.  -88.  191.  103.] [-360. -184.  375.  199.] [ -56.  -56.   71.   71.] [-120. -120.  135.  135.] [-248. -248.  263.  263.] [ -36.  -80.   51.   95.] [ -80. -168.   95.  183.] [-168. -344.  183.  359.]]

 

 其中每行的4個值 (x_1, y_1, x_2, y_2) 表矩形左上和右下角點座標。9個矩形共有3種形狀,長寬比爲大約爲 \text{width:height}\in\{1:1, 1:2, 2:1\} 三種,如圖4。實際上經過anchors就引入了檢測中經常使用到的多尺度方法。

 

 圖4 anchors示意圖

 注:關於上面的anchors size,實際上是根據檢測圖像設置的。在python demo中,會把任意大小的輸入圖像reshape成800x600(即圖2中的M=800,N=600)。再回頭來看anchors的大小,anchors中長寬1:2中最大爲352x704,長寬2:1中最大736x384,基本是cover了800x600的各個尺度和形狀


那麼這9個anchors是作什麼的呢?借用Faster RCNN論文中的原圖,如圖5,遍歷Conv layers計算得到的feature maps,爲每個點(每個像素的中心)都配備這9種anchors做爲初始的檢測框。這樣作得到檢測框很不許確,不用擔憂,後面還有2次bounding box regression能夠修正檢測框位置。

圖5

其實RPN最終就是在原圖尺度上,設置了密密麻麻的候選Anchor。而後用cnn去判斷哪些Anchor是裏面有目標的foreground anchor,哪些是沒目標的backgroud。因此,僅僅是個二分類而已!

anchor的個數也是咱們關心的一個問題,以下圖通過CNN後獲得的特徵是51 x 39(通道數忽略),那麼對於9種形狀的anchor,一共有51 x 39 x 9 = 17901個anchor從RPN層輸出,對於更高維度的圖像,輸出的特徵會更大,帶來訓練參數過大的問題

 

 

 

2.2 候選區域的訓練

  • 訓練樣本anchor標記
    • 1.每一個ground-truth box有着最高的IoU的anchor標記爲正樣本
    • 2.剩下的anchor/anchors與任何ground-truth box的IoU大於0.7記爲正樣本,IoU小於0.3,記爲負樣本
    • 3.剩下的樣本所有忽略
    • 正負樣本比例爲1:3
  • 訓練損失
    • RPN classification (anchor good / bad) ,二分類,是否有物體,是、否
    • RPN regression (anchor -> proposal) ,迴歸
    • 注:這裏使用的損失函數和Fast R-CNN內的損失函數原理相似,同時最小化兩種代價

候選區域的訓練是爲了讓得出來的正確的候選區域, 而且候選區域通過了迴歸微調。

在這基礎之上作Fast RCNN訓練是獲得特徵向量作分類預測和迴歸預測。

三、Faster R-CNN的訓練

Faster R-CNN的訓練分爲兩部分,即兩個網絡的訓練。前面已經說明了RPN的訓練損失,這裏輸出結果部分的的損失(這兩個網絡的損失合併一塊兒訓練):

  • Fast R-CNN classification (over classes) ,全部類別分類N+1

  • Fast R-CNN regression (bbox regression)

 

四、效果對比

 

  

 

五、Faster R-CNN總結

  • 優勢
    • 提出RPN網絡
    • 端到端網絡模型
  • 缺點
    • 訓練參數過大
    • 對於真實訓練使用來講仍是依然過於耗時

能夠改進的需求:

  • RPN(Region Proposal Networks) 改進 對於小目標選擇利用多尺度特徵信息進行RPN
  • 速度提高 如YOLO系列算法,刪去了RPN,直接對Region Proposal(候選區)進行分類迴歸,極大的提高了網絡的速度
相關文章
相關標籤/搜索