【論文解讀】Faster R-CNN 實時目標檢測
前言
Faster R-CNN 的亮點是使用RPN來提取候選框;RPN全稱是Region Proposal Network,也可理解為區域生成網絡,或區域候選網絡;它是用來提取候選框的。RPN特點是耗時少。
Faster R-CNN是“RCNN系列算法”的杰出產物,也是two-stage中經典的物體檢測算法。two-stage的過程是:
第一階段先找出圖片中待檢測物體的anchor矩形框。(對背景、待檢測物體進行二分類)
第二階段對anchor框內待檢測物體進行分類。
簡單來說:先產生一些待檢測框,再對檢測框進行分類。關鍵點是如何找到“待檢測框”,這些待檢測框中包含目標物體,雖然暫時不知道它的類別。
論文地址:Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Network
開源代碼:https://github.com/endernewton/tf-faster-rcnn
一、網絡框架
Faster RCNN主要分為4個主要內容:
CNN提取特征,生成feature maps;
RPN網絡提取候選框;
ROI pooling確定具有物體區域的feature maps;
指定區域進行分類。
ps:上圖的RoI poloing單詞寫錯了,正確是RoI pooling
Faster RCNN的4個主要內容:
CNN提取特征,生成特征圖feature maps。共享基礎卷積層,用于提取整張圖片的特征。例如VGG16,去除其中的全連接層,只留下卷積層,輸出下采樣后的feature maps。該feature maps被共享用于后續RPN層和全連接層。
RPN網絡提取候選框。該層通過softmax判斷anchors屬于positive或者negative,再利用bounding box regression修正anchors獲得精確的proposals。
ROI pooling確定具有物體區域的feature maps。該層收集輸入的feature maps和proposals,綜合這些信息后提取proposal feature maps,送入后續全連接層判定目標類別。
指定區域進行分類。對候選檢測框進行分類,并且再次微調候選框坐標。利用proposal feature maps計算proposal的類別,同時再次bounding box regression獲得檢測框最終的精確位置。(在RPN中,網絡會根據先前人為設置的anchor框進行坐標調整,所以這里是第二次調整)
二、思路流程
引用《一文讀懂Faster RCNN》中的模型結構圖:
輸入是任意大小PxQ的圖像;流程步驟如下:
首先縮放至固定大小MxN,然后將MxN圖像送入網絡;
Conv layers基于VGG-16模型提取特征,其中包含了13個conv層+13個relu層+4個pooling層;
RPN網絡首先經過3x3卷積,再分別生成positive anchors(包含物體的邊界框),和對應bounding box regression偏移量,然后計算出proposals(最有可能包含物體的區域);
Roi Pooling層則利用proposals從feature maps中提取proposal feature送入后續全連接和softmax網絡作classification(即分類proposal到底是什么object)。
三、CNN提取特征
Faster R-CNN的主干網絡可以基于VGG16模型,去除其中的全連接層,只留下卷積層,提取整張圖片的特征。
在論文中可能經常會將主干網絡稱為backbone network。主干網絡的作用就是用來提取圖片特征的,這個不是一成不變的,可以替換,比如使用殘差網絡ResNet。
VGG-16網絡中的16代表的含義是含有參數的有16個層,分別是13個卷積層+3個全連接層。下面看看VGG-16的網絡結構:
其中,13層的卷積層就是在不斷地提取特征,池化層就是使圖片的尺寸不斷在變小。
四、RPN網絡提取候選框
RPN全稱是Region Proposal Network,也可理解為區域生成網絡,或區域候選網絡;它是用來提取候選框的。
4.1、RPN思路流程
RPN網絡的任務是找到proposals。輸入:feature map。輸出:proposal。
RPN總體流程:
生成anchors(anchor boxes)。
判斷每個 anchor box 為 foreground(包含物體) 或者 background(背景) ,二分類;softmax分類器提取positvie anchors 。
邊界框回歸(bounding box regression) 對 anchor box 進行微調,使得 positive anchor 和真實框(Ground Truth Box)更加接近。
Proposal Layer生成proposals。
4.2、feature maps與錨框 anchor boxes
feature maps 的每一個點都配9個錨框,作為初始的檢測框。重要的事說三遍:
錨框作為初始的檢測框!、 錨框作為初始的檢測框!、 錨框作為初始的檢測框!
雖然這樣得到的檢測框很不準確,但后面可通過 bounding box regression 來修正檢測框的位置。
下面介紹那9個anchor boxes?錨框,先看看它的形狀:
這里一共有9個框框,綠色3個,紅色3個,藍色3個。有3種形狀,長寬比分別是1:1, 1:2, 2:1
4.3、判斷anchor boxes是否包含物體
在feature map上,設置了密密麻麻的候選anchor boxes? 錨框。為什么會有這么多?因為 feature maps 的每一個點都配9個錨框,如果一共有1900個點,那一共有1900*9=17100個錨框了。
設 feature maps 的尺寸為 W*H,那么總共有 W*H*9個錨框。(W:feature maps的寬;H:feature maps 的高。)
然后用cnn去判斷哪些anchor box是里面有目標的positive anchor,哪些是沒目標的negative anchor。所以,RPN做的只是個二分類。
關于cnn的模型結構,可以參考下圖:
4.4、修正邊界框
已知anchor box 包含物體稱為positive anchors,那怎么調整,才能使得 anchor box 與 ground truth 更接近?
圖中紅框為positive anchors,綠框為真實框(Ground Truth Box,簡稱GT)
positive anchors 和GT的梯度可以有dx, dy, dw, dh四個變換表示,bounding box regression通過線性回歸學習到這個四個梯度,使positive anchors 不斷逼近GT,從而獲得更精確的proposal。
bounding box regression 思路,簡單一點的,可以先做平移,再做縮放,最終包含物體anchor box和真實框很接近。
4.5、Proposal(最有可能包含物體的區域)
通過上面的判斷anchor boxes是否包含物體,對有物體的anchor boxes通過回歸進行修正它的尺子,最終包含物體anchor box和真實框很接近。RPN會輸出一些框框,和這些框框包含物體的概率。
總結一下,Proposal 的輸入有三個:
softmax 分類矩陣
Bounding Box Regression 坐標矩陣
im_info?保存了縮放的信息
輸出為:
rpn_rois: RPN 產生的 ROIs (Region of Interests,感興趣的區域)
rpn_roi_probs:?表示 ROI 包含物體的概率
RPN 只挑選出了可能包含物體的區域(rpn_rois)以及其包含物體的概率(rpn_roi_probs)。在后續處理中,設定一個閾值 threshold,如果某個ROI包含物體的概率的概率大于閾值,再判斷其類別;否則直接忽略。
整個RPN的作用就是:
用神經網絡回歸檢測框,并且對檢測框進行二分類(positive、negative);
輸出過濾后的positive檢測框(RoI)。
RPN輸出的proposals, 一個表示所有ROI的N×5的矩陣,其中N表示ROI的數目。第一列表示圖像index,其余四列表示其余的左上角和右下角坐標,坐標信息是對應原圖中的絕對坐標。
五、ROI pooling
ROI就是region of interest,指的是感興趣區域;如果輸入是原圖,roi就是目標;如果輸入是feature maps,roi就是特征圖像中目標的特征了。pooling就是池化。
Roi Pooling層收集輸入的feature maps 和 proposals(最有可能包含物體的區域),綜合這些信息提取proposal feature map,進入到后面可利用全連接操作來進行目標識別和定位。
Rol pooling層有2個輸入:
原始的feature maps;(cnn卷積出來后的用于共享的那個特征圖)
RPN輸出的proposal boxes(proposals、大小各不相同)。
RPN在特征圖中會產生尺寸不一致的Proposal區域,而在Faster RCNN中,之后的分類網絡輸入尺寸固定為7*7,所以對于任意大小的輸入,都用7*7的網格覆蓋原區域。
如下圖所示,能看到紅色框、綠色框雖然它們的尺寸不是一樣的,但是它們都是7*7的;
在7*7中每個格子上,取當前格子覆蓋區域內的最大值(max pooling);這里對應紫色的部分。
六、指定區域進行分類
此部分輸入是:從RoI Pooling獲取到7x7=49大小的proposal feature maps(包含物體的特征圖)
引用《一文讀懂Faster RCNN》中的分類結構圖:
處理過程:
通過全連接層與softmax計算每個proposal具體屬于那個類別,輸出cls_prob概率向量。
同時再次利用bounding box regression獲得每個proposal的位置偏移量bbox_pred,用于回歸更加精確的目標檢測框。
七、Faster RCNN損失函數
損失函數
RPN網絡與分類網絡,輸出都是“坐標回歸數值”與“分類數值”,所以兩個網絡的Loss函數都可以用如下式子表達:
其中,是分類損失函數,在RNP網絡中使用二分類損失函數,在分類網絡中使用多分類損失函數。
是一個用來平衡分類與回歸loss比例的因子。前面的控制了:只有正例框才會產生檢測框回歸loss。?(正例框:包含了物體的框)
正例框有兩種情況:(1)IoU數值大于0.7;這個可以找到很多的正例框。(2)IoU最高的anchor box;是用來防止一些IoU很小的罕見的檢測框;比如IoU都小于0.6時,這時選擇個IoU最高的框。
八、模型效果
模型數據:
模型效果1如下:
模型效果2如下:
九、開源代碼
開源代碼:https://github.com/endernewton/tf-faster-rcnn
用于目標檢測的Faster RCNN。該版本代碼支持VGG16、Resnet V1和Mobilenet V1模型。
代碼的運行環境:
系統:ubuntu 16.04(x64)
語言:Python3.5
深度框架:TensorFlow1.0(GPU 版本)
其他依賴庫:cv2、cython、easydict=1.6、numpy等。
本文參考:https://zhuanlan.zhihu.com/p/31426458
https://zhuanlan.zhihu.com/p/82185598
https://blog.csdn.net/LLyj_/article/details/87521925
論文地址:Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Network
開源代碼:https://github.com/endernewton/tf-faster-rcnn
本文只提供參考學習,謝謝。
機器學習 神經網絡
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。