【論文解讀】Faster R-CNN 實時目標檢測

      網友投稿 1050 2025-03-31

      前言

      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包含物體的概率的概率大于閾值,再判斷其類別;否則直接忽略。

      【論文解讀】Faster R-CNN 實時目標檢測

      整個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小時內刪除侵權內容。

      上一篇:linux c之創建進程fork和vfork函數之間的區別
      下一篇:Outlook2016日歷授權他人訪問的設置方法(outlook邀請他人共享日歷)
      相關文章
      亚洲国产a∨无码中文777| 亚洲欧洲日韩国产| 亚洲一区二区三区国产精品无码| 国产成人精品日本亚洲专区 | 亚洲欧美中文日韩视频| 亚洲av成人综合网| 亚洲日韩在线视频| 亚洲成人免费电影| 亚洲乱人伦精品图片| 亚洲av无码一区二区三区天堂古代 | 亚洲精品无码AV中文字幕电影网站| 国产亚洲高清在线精品不卡| 亚洲二区在线视频| 亚洲一区动漫卡通在线播放| 亚洲AV无码成人专区| 亚洲日本久久一区二区va| 亚洲中文字幕在线无码一区二区| 亚洲国产日韩在线成人蜜芽 | 亚洲国产综合无码一区二区二三区| 国产精品久久久久久亚洲影视| 亚洲1区2区3区精华液| 久久精品国产亚洲av瑜伽| 婷婷亚洲天堂影院| 亚洲国产香蕉人人爽成AV片久久| 亚洲一区视频在线播放| 久久精品国产亚洲Aⅴ蜜臀色欲| 亚洲精品无码专区久久同性男| 国产精品亚洲综合| 亚洲精品国产V片在线观看 | 久久国产亚洲精品无码| 亚洲国产综合自在线另类| 亚洲va在线va天堂va手机| 亚洲一区二区三区写真| 久久久久亚洲精品无码网址色欲 | 亚洲无吗在线视频| 亚洲精品自偷自拍无码| 亚洲av日韩专区在线观看| 国内成人精品亚洲日本语音| 国产亚洲精品AAAA片APP| 99亚洲精品卡2卡三卡4卡2卡| 亚洲日本一区二区三区在线不卡|