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