Faster RCNN网络简介
介紹
Faster RCNN網絡是目標檢測領域里程碑式的一個網絡。這個網絡的提出,真正將深度學習方法端到端的應用到目標檢測領域。大幅提升了目標檢測的檢測速度和檢測準確程度。論文的RPN、Anchor等思想對后續的論文和研究工作也有不小的影響。下面,我們一起來看一下Faster RCNN到底是如何具體進行目標檢測的。
總體網絡結構
如圖所示,我們先總體介紹一下數據流是如何傳輸的。之后再分開每一部分進行重點介紹。
對于一張輸入的彩色圖片,首先經過CNN層進行特征提取。在Faster R-CNN的原始論文中,他們使用的是預訓練好的VGG16網絡用于特征提取。VGG網絡去掉全連接層,只保留卷積的部分。這個對應的就是圖中的conv layer。
卷積層提取完特征之后,對于特征圖的數據,分成兩部分,分別進入RPN網絡(候選區域選擇網絡),和ROI pooling網絡。對于RPN而言,這個網絡所做的工作是挑選出圖片中可能的候選區域,區分前景和背景。這些信息用來輔助最終的目標檢測的決策。ROI Pooling所要做的是收集輸入的feature maps和proposals,綜合這些信息后提取proposal feature maps,送入后續全連接層判定目標類別。
classifer用于做出最后判斷。包括圖像類別和位置。
下圖可以更清晰的展示整個Faster R-CNN的網絡結構。
下面具體對各個部分進行詳細解釋。conv layer沒什么可解釋的,直接從RPN開始。
RPN網絡
介紹RPN網絡之前,有必要先來談談目標檢測問題存在的難點。這也是RPN網絡提出的創新解決方案的關鍵所在。
做目標檢測,可能存在最大的問題就是尺度變換多樣。 比如說對人臉的目標檢測而言,一張圖片中,人臉有大有小。如何將這些大小不一的圖片全部識別出來,并不算太容易。在過去,常常采用的方式是滑移窗口和圖像金字塔的形式。通過滑移窗口掃描圖像,以及圖像金字塔的尺度變化來解決這個多尺度檢測問題。然而這種方法無論是速度還是檢測效果都不算好。RPN網絡通過引入全卷積神經網絡(FCN fully convolutional network)實現了一種端到端的候選區域提取。
對于輸入圖像,首先經過VGG的卷積網絡進行特征提取,提取效果如圖所示:
經過VGG網絡之后,輸入圖像長度和寬度變窄,但是特征維度變多。
Anchor
對于目標檢測而言,我們需要獲取獲取目標所在的位置(通常用矩形框來表示),我們這里使用Δx_center\Delta x\_centerΔx_center,Δy_center\Delta y\_centerΔy_center,Δwidth\Delta widthΔwidth,Δheight\Delta heightΔheight來進行表示。那么如何可以保證多尺度的預測呢?論文中介紹了一個Anchor的概念,將圖片中放入很多的Anchor,并且每個Anchor都有不同尺度的縱橫比。以此來實現多尺度的預測。
需要理解的是雖然anchors是基于卷積特征圖定義的,但是最終的anchos是相對于原始圖片的。由于只有卷積層和池化層,特征圖的維度是原始圖片的尺寸程比例關系的,即數學的表述,如果圖片尺寸W*H,特征圖的尺寸是w/r * h/r,其中r是下采樣率(subsampling ratio)。如果在卷積特征圖空間位置定義anchor,則最終的圖片會是由r像素劃分的anchors集,在VGG中 r =16。
按照論文中所說的,每一個Anchor都對應不同尺寸和縱橫比一共有9個候選框。下圖展示了這是怎樣一種結構方式:
按照Faster RCNN原始論文中的數據,如果我們滑移步長為16個像素的話,600*800大小的圖像中一共就會有1989個Anchor,每個Anchor都可以生成9個候選框,那么一幅圖像一共就有1989*9=17901個候選框了。好像是有點多了,如果這樣直接把這么多的候選框都扔到后面進行學習的話,整個網絡的速度也不會快到哪里去。所以,我們需要先對候選框進行一些篩選。
候選框的篩選
首先一點是RPN并不是對所有的Anchor都生成9個候選框的。上圖左側有一個2k scores,表示的是做一個二分類,分別是前景還是背景。只有對于前景的物體才會生成候選框的。對于已經生成的候選框而言,我們需要對那4個位置進行回歸的位置微調。
做完這些還不夠,我們接下來還需要使用非極大值抑制(Non-maximum suppression)算法來進一步縮小候選框的數量。非極大抑制算法是用來處理Anchor的重疊候選框的算法。只保留IoU大于某一閾值的候選框,其余的候選框全部丟棄。
在原始的Faster RCNN論文中最后選擇了2000個候選框送到下一階段的ROI Pooling中了,如果你覺得太多,也可以將這個數值設置的更小一點。
ROI Pooling
RPN 處理后,可以得到一堆沒有 class score 的 object proposals。待處理問題為,如何利用這些邊界框 bounding boxes,并分類。
一種最簡單的方法是,對每個 porposal,裁剪,并送入pre-trained base 網絡,提取特征;然后,將提取特征來訓練分類器. 但,這就需要對所有的 2000 個 proposals 進行計算,效率低,速度慢。
Faster R-CNN 則通過重用卷積特征圖(conv feature map) 來加快計算效率. 即,采用 RoI(region of interest) Pooling 對每個 proposal 提取固定尺寸的特征圖。
但是,我們為什么要用ROI Pooling,其他方法行不行呢?ROI Pooling又到底有什么好處?
先來看一個問題:對于傳統的CNN(如AlexNet和VGG),當網絡訓練好后輸入的圖像尺寸必須是固定值,同時網絡輸出也是固定大小的vector or matrix。如果輸入圖像大小不定,這個問題就變得比較麻煩。有2種解決辦法:
- 從圖像中crop一部分傳入網絡
- 將圖像warp成需要的大小后傳入網絡
可以看到無論采取那種辦法都不好,要么crop后破壞了圖像的完整結構,要么warp破壞了圖像原始形狀信息。
回憶RPN網絡生成的proposals的方法:對positive anchors進行bounding box regression,那么這樣獲得的proposals也是大小形狀各不相同,即也存在上述問題。所以Faster R-CNN中提出了RoI Pooling解決這個問題。
由于proposal是對應M×\times×N尺度的,所以首先使用spatial_scale參數將其映射回(M/16)×\times×(N/16)大小的feature map尺度;再將每個proposal對應的feature map區域水平分為PooledW×\times×pooledH的網格;對網格的每一份都進行max pooling處理(步長為2的max pooling)。
這樣處理后,即使大小不同的proposal輸出結果都是PooledW×\times×pooledH固定大小,實現了固定長度輸出。
分類
對于最后的ROI Pooling的的特征,我們再接兩個全連接層。之后用于回歸和分類預測任務。注意這里的回歸是在RPN基礎之上進一步調整。相當于一個精修操作。
參考資料
[1] 深度學習論文翻譯解析(四):Faster R-CNN: Down the rabbit hole of modern object detection
[2] 一文讀懂Faster RCNN
總結
以上是生活随笔為你收集整理的Faster RCNN网络简介的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何利用CycleGAN实现男女性别转换
- 下一篇: vscode pylint报错的问题