系列博客連接:
(一)目標檢測概述 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個值 表矩形左上和右下角點座標。9個矩形共有3種形狀,長寬比爲大約爲 三種,如圖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(候選區)進行分類迴歸,極大的提高了網絡的速度