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


 

系列博客鏈接:

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

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

(三)目標檢測算法之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的,可以直接讀我的文章。

 

本文概述:

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

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

2、RPN原理

  2.1 anchors

  2.2 候選區域的訓練

3、Faster R-CNN的訓練

4、效果對比

5、Faster R-CNN總結

 

引言:

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

1、Faster R-CNN

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

 

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

 

          圖1 Faster RCNN基本結構

  • 1、首先向CNN網絡(VGG-16)輸入任意大小圖片
  • 2、Faster RCNN使用一組基礎的conv+relu+pooling層提取feature map。該feature map被共享用於后續RPN層和RoI Pooling層。
  • 3、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
  • 4、第2步得到的高維特征圖和第3步輸出的區域,合並(可以理解成候選區映射到特征圖中,類似第(三)節SPPNet中1.1"映射")輸入RoI池化層(類), 該輸出到全連接層判定目標類別。
  • 5、利用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)。

 

2、 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訓練是得到特征向量做分類預測和回歸預測。

3、Faster R-CNN的訓練

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

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

  • Fast R-CNN regression (bbox regression)

 

4、效果對比

 

  

 

5、Faster R-CNN總結

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

可以改進的需求:

  • RPN(Region Proposal Networks) 改進 對於小目標選擇利用多尺度特征信息進行RPN
  • 速度提升 如YOLO系列算法,刪去了RPN,直接對Region Proposal(候選區)進行分類回歸,極大的提升了網絡的速度


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM