【論文泛讀】 Faster R-CNN:利用RPN實作實時目標檢測
文章目錄
- 【論文泛讀】 Faster R-CNN:利用RPN實作實時目標檢測
- 前言
- 摘要 Abstract
- 介紹 Introduction
- 相關作業 Related Work
- Faster R-CNN
- Region Proposal Networks 區域推薦網路
- 錨點 Anchor
- 平移不變性錨點
- 損失函式 Loss Function
- 訓練RPNs
- Faster R-CNN的訓練
- 實驗細節
- 總結
論文鏈接: Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks (arxiv.org)
現在開始讀目標檢測的論文,我先總結了一下關于目標檢測的相關論文和一些代碼資源,都在我們的鏈接
紅色的是目標檢測必讀的一些論文,今天我讀的論文就是2015的何愷明大神的又一巨作Faster R-CNN

前言
R-CNN是目標檢測領域中十分經典的方法,相比于傳統的手工特征,R-CNN將卷積神經網路引入,用于提取深度特征,后接一個分類器判決搜索區域是否包含目標及其置信度,取得了較為準確的檢測結果,Fast R-CNN和Faster R-CNN是R-CNN的升級版本,在準確率和實時性方面都得到了較大提升,
在Fast R-CNN中,首先需要使用Selective Search的方法提取影像的候選目標區域(Proposal),而新提出的Faster R-CNN模型則引入了RPN網路(Region Proposal Network),將Proposal的提取部分嵌入到內部網路,實作了卷積層特征共享,Fast R-CNN則基于RPN提取的Proposal做進一步的分類判決和回歸預測,因此,整個網路模型可以完成端到端的檢測任務,而不需要先執行特定的候選框搜索演算法,顯著提升了演算法模型的實時性,
Faster R-CNN是截止目前,RCNN系列演算法的最杰出產物,two-stage中最為經典的物體檢測演算法,推理第一階段先找出圖片中待檢測物體的anchor矩形框(對背景、待檢測物體進行二分類),第二階段對anchor框內待檢測物體進行分類,
講Faster R-CNN,就不得不講講R-CNN和Fast R-CNN的原理,這里只是粗略的講一下,具體可以看論文
R-CNN(Region with CNN feature)可以分為4個步驟
- region proposal(Selective Search方法,具體可以去看他的論文,主要講的就是生成1K ~ 2 K個候選框,用顏色等特征進行融合)
- feature extraction(Deep Net):用卷積神經網路對每個region提取特征(Alex-net),去掉了全連接層
- Classification(SVM):對proposal提取到的特征進行分類,用的方法是SVM,每一類都有一個SVM分類器
- rect refine(regression):使用回歸器對propoposal進行修正,
同樣的R-CNN有一些缺點
- 測驗速度慢,每張圖片需要 2 s
- 訓練速度慢,程序極其繁瑣
- 訓練所需空間大,要數百GB的空間
Fast R-CNN用VGG-16作為backbone,比R-CNN訓練時間快9倍,測驗推理快213倍,
大概也是分為4個步驟
- region proposal(SS):與R-CNN相同
- feature extraction(Deep net):將影像輸入網路得到相應的特征圖,然后將SS演算法生成的候選框投影到特征圖上獲得相應的特征矩陣,
- classification(Deep net):將每個特征矩陣通過ROI pooling層縮放到7x7大小的特征圖,接著將特征圖展評通過一系列全連接層得到預測結果,
- refine(Deep net)
注意:R-CNN存在著重復計算的問題(proposal的region有幾千個,多數都是互相重疊,重疊部分會多次重復提取特征,浪費時間),作者借助SPP-net搞出了Fast-RCNN,跟R-CNN最大區別就是Fast-RCNN將proposal的region映射到CNN的最后一層feature map,這樣一張圖片只需要提取一次特征,而且把分類也在卷積神經網路一起解決了
摘要 Abstract
最新的檢測網路都依賴區域推薦演算法來推測物體位置,像SPPnet[和Fast R-CNN已經大幅削減了檢測網路的時間開銷,但區域推薦的計算卻變成了瓶頸,本論文將引入一個區域推薦網路(RPN)和檢測網路共享全影像卷積特征,使得區域推薦的開銷幾近為0,一個RPN是一個全卷積網路技能預測物體的邊框,同時也能對該位置進行物體打分,RPN通過端到端的訓練可以產生高質量的推薦區域,然后再用Fast R-CNN進行檢測,通過共享卷積特征,我們進一步整合RPN和Fast R-CNN到一個網路,用近期流行的“術語”說,就是一種“注意力”機制,RPN組件會告訴整合網路去看哪個部分,對于非常深的VGG-16模型[3],我們的檢測系統在GPU上達到了5fps的檢測幀率(包括所有步驟),同時也在PASCAL VOC2007,2012和MS COCO資料集上達到了最好的物體檢測精度,而對每張圖片只推薦了300個區域,在ILSVRC和COCO 2015競賽中,Faster R-CNN和RPN是多個賽道都贏得冠軍的基礎,
介紹 Introduction
區域推薦方法和基于區域的卷積神經網路(RCNNs)的成功推動了物體檢測水平的進步,但是推薦顯然是最先進檢測系統的瓶頸,區域推薦仍然是目標檢測的主要耗時階段,
在這篇論文中,展示一個演算法上的改變——使用深度卷積神經網路計算推薦區域——將引出一個優雅而高效的解決方案,在給定檢測網路完成的計算的基礎上,讓區域的計算近乎為0,提出了一個新型的區域推薦網路(Region Proposal Networks,RPNs),它和當今世界最棒的檢測網路(當時是VGG16和ZFnet)共享卷積層,通過在測驗階段共享卷積,讓計算推薦區域的邊際成本變得很低,(大約每張圖片10ms)
RPNs被設計用來高效地預測各種尺度和寬高比的區域推薦,這里提出了一個“Anchor(錨點)”,使用“錨點”盒(“anchor” boxes)作為不同尺度和寬高比的參照物,我們的模式可以看做是一個回歸參照物的金字塔,這避免了窮舉各種尺度和寬高比的影像或過濾器,這個模型在單一尺度影像的訓練和測驗時表現優異,因而運行速度大為受益,
為了統一RPNs和Fast R-CNN物體檢測網路,我們提出一種介于區域推薦任務調優和之后的物體檢測調優之間的訓練方法,同時還能保證固定的推薦,這個方法可以很快收斂,并產生一個統一的網路,該網路在兩個任務上共享卷積特征,
在ILSVRC和COCO 2015競賽中,Faster R-CNN和RPN是多項分賽長的第一名,包括ImageNet 檢測,ImageNet定位,COCO檢測和COCO分割,RPNs從資料中完全學會了推薦區域,而且使用更深或更有表達力的特征(比如101層的Resnet)效果會更好,Faster R-CNN和RPN也用于多個其他領先名詞的團隊所使用,這些結果都說明我們的方法不僅實用省時,而且有效精準,
相關作業 Related Work
這里略微提一下
首先是物體推薦,物體推薦演算法大部分有幾種,廣泛使用的有基于grouping super-pixels(如Selective Search, CPMC等演算法),還有就是基于滑動視窗的,比如EdgeBox,
其次就是深度神經網路在目標檢測上的影響,R-CNN是一個端到端的模型,它利用CNNs進行分類物體類別和背景,還有一些模型比如OverFeat、MultiBox 方法,這些可能得去看相關的論文,
總結起來,這種卷積計算的共享,越來越受關注,OverFeat中針對分類、定位、檢測時會只從一個影像金字塔計算卷積特征,尺寸自適應的SPP也是建立在共享卷積特征圖智商的,在基于區域的物體檢測[1][30]和語意分割上很有效,Fast R-CNN使得端到端的檢測器訓練全部建立在共享卷積特征之上,表現出了有引人注目的精度和速度,
Faster R-CNN
Faster R-CNN有兩個模塊組成,整個網路是一個單一、通以的目標檢測網路,
- 第一個模塊是深度卷積網路用于生成推薦區域
- 第二個模塊是Fast R-CNN用來推薦的區域的檢測器
其實又可以細分為四個部分,Conv Layer,Region Proposal Network(RPN),RoI Pooling,Classification and Regression,就如下面論文中的圖一樣

-
Conv layers:卷積層包括一系列卷積(Conv + Relu)和池化(Pooling)操作,用于提取影像的特征(feature maps),一般直接使用現有的經典網路模型ZF或者VGG16,而且卷積層的權值引數為RPN和Fast RCNN所共享,這也是能夠加快訓練程序、提升模型實時性的關鍵所在,
-
Region Proposal Networks:RPN層是faster-rcnn最大的亮點,RPN網路用于生成region proposcals.基于網路模型引入的多尺度Anchor,通過Softmax對anchors屬于目標(foreground)還是背景(background)進行分類判決,并使用Bounding Box Regression對anchors進行回歸預測,獲取Proposal的精確位置,并用于后續的目標識別與檢測,
-
Roi Pooling:綜合卷積層特征feature maps和候選框proposal的資訊,將propopal在輸入影像中的坐標映射到最后一層feature map(conv5-3)中,對feature map中的對應區域進行池化操作,得到固定大小(7×77×7)輸出的池化結果,并與后面的全連接層相連,
-
Classification and Regression: 全連接層后接兩個子連接層——分類層(cls)和回歸層(reg),分類層用于判斷Proposal的類別,回歸層則通過bounding box regression預測Proposal的準確位置,
Region Proposal Networks 區域推薦網路
RPN網路用于生成區域候選框Proposal,基于網路模型引入的多尺度Anchor,通過Softmax對anchors屬于目標(foreground)還是背景(background)進行分類判決,并使用Bounding Box Regression對anchors進行回歸預測,獲取Proposal的精確位置,并用于后續的目標識別與檢測,
經典的檢測方法生成檢測框都非常耗時,如OpenCV adaboost使用滑動視窗+影像金字塔生成檢測框;或如RCNN使用SS(Selective Search)方法生成檢測框,
而Faster RCNN則拋棄了傳統的滑動視窗和SS方法,直接使用RPN生成檢測框,這也是Faster RCNN的巨大優勢,能極大提升檢測框的生成速度,

上圖中展示了RPN網路的具體結構,可以看到,feature map 經過一個3×3卷積核卷積后分成了兩條線,上面一條通過softmax對anchors分類獲得foreground和background(檢測目標是foregrounnd),因為是2分類,所以它的維度是2k scores,
下面那條線是用于計算anchors的bounding box regression的偏移量,以獲得精確的proposal,它的維度是4k coordinates,
而最后的proposcal層則負責綜合foreground anchors和bounding box regression偏移量獲取proposal,同時剔除太小和超出邊界的propocals,其實網路到這個Proposal Layer這里,就完成了目標定位的功能
錨點 Anchor
Anchor是RPN網路中一個較為重要的概念,傳統的檢測方法中為了能夠得到多尺度的檢測框,需要通過建立影像金字塔的方式,對影像或者濾波器(滑動視窗)進行多尺度采樣,RPN網路則是使用一個3×3的卷積核,在最后一個特征圖(conv5-3)上滑動,將卷積核中心對應位置映射回輸入影像,生成3種尺度(scale){ 12 8 2 , 25 6 2 , 51 2 2 128^2,256^2,512^2 1282,2562,5122?}和3種長寬比(aspect ratio){1:1,1:2,2:1}共9種Anchor,

平移不變性錨點
在我們的目標檢測中,我們有一個平移不變性,如果我們用K-means生成800個錨點,是不滿足平移不變的,就算是用MultiBox也不能保證,但是作者的方法用卷積輸出層有平移不變性,并且可以降低模型的引數,大約有降低了兩個數量級,并且在小資料集中也有更低的過擬合的風險,
損失函式 Loss Function
在訓練RPN時,我們對每個錨點設定兩個標簽(物體 or 背景),并且我們將錨點設為正樣本如果它是兩種情況之一,
- 具有與實際邊界框的重疊最高交并比(IoU)的錨點
- 具有與實際邊界框的重疊超過0.7 IoU的錨點
通常是用第二個條件來確定正樣本,但是還是會用第一個條件,因為在極少數的情況下,第二個條件找不到正樣本,如果一個錨點的IoU比率低于0.3,我們給非正面的錨點分配一個負標簽,既不正面也不負面的錨點不會有助于訓練目標函式,
根據Fast R-CNN中的損失函式,Faster R-CNN的損失函式類似定義為
L
(
{
p
i
}
,
{
t
i
}
)
=
1
N
c
l
s
∑
i
L
c
l
s
(
p
i
,
p
i
?
)
+
λ
1
N
r
e
g
∑
i
p
i
?
L
r
e
g
(
t
i
,
t
i
?
)
\begin{aligned} L\left(\left\{p_{i}\right\},\left\{t_{i}\right\}\right) &=\frac{1}{N_{c l s}} \sum_{i} L_{c l s}\left(p_{i}, p_{i}^{*}\right) \\+\lambda & \frac{1}{N_{r e g}} \sum_{i} p_{i}^{*} L_{r e g}\left(t_{i}, t_{i}^{*}\right) \end{aligned}
L({pi?},{ti?})+λ?=Ncls?1?i∑?Lcls?(pi?,pi??)Nreg?1?i∑?pi??Lreg?(ti?,ti??)?
上述公式中,i表示anchors index,pi表示foreground softmax predict概率,
p
i
?
p_i?
pi???代表對應的GT predict概率(即當第i個anchors與GT間IoU>0.7,認為該anchor是foreground,
p
i
?
p_i?
pi???=1,反之IOU<0.3時,認為該anchors是background,
p
i
?
p_i?
pi????=0);
至于那些0.3小于IOU<0.7的anchors則不參與訓練,一般一張圖片取256個anchors,一般bg和fg=1;1
t代表predict bounding box,
t
?
t?
t?代表對應的foreground anchors對應的GT box,
在損失函式中,回歸損失是利用Smooth L1函式
S
m
o
o
t
h
L
1
(
x
)
=
{
0.5
x
2
,
∣
x
∣
≤
1
∣
x
∣
?
0.5
,
o
t
h
e
r
w
i
s
e
Smooth_{L1}(x)=\begin{cases} 0.5x^2,|x| \leq 1 \\\ |x|-0.5,otherwise\end{cases}
SmoothL1?(x)={0.5x2,∣x∣≤1 ∣x∣?0.5,otherwise?
L r e g = S m o o t h L 1 ( t ? t ? ) L_{reg}=Smooth_{L1}(t-t^{\ast}) Lreg?=SmoothL1?(t?t?)
相比于L2損失函式,L1對離群點或例外值不敏感,可控制梯度的量級使訓練更易收斂,
對于bounding box regression,我們有以下公式
t
x
=
(
x
?
x
a
)
/
w
a
,
t
y
=
(
y
?
y
a
)
/
h
a
,
t
w
=
log
?
(
w
/
w
a
)
,
t
h
=
log
?
(
h
/
h
a
)
t
x
?
=
(
?
x
a
)
/
w
a
,
t
y
?
=
(
y
?
?
y
a
)
/
h
a
,
t
w
?
=
log
?
(
w
?
/
w
a
)
,
t
h
?
=
log
?
(
h
?
/
h
a
)
\begin{aligned} t_{\mathrm{x}}=\left(x-x_{\mathrm{a}}\right) / w_{\mathrm{a}}, & t_{\mathrm{y}}=\left(y-y_{\mathrm{a}}\right) / h_{\mathrm{a}}, \quad t_{\mathrm{w}}=\log \left(w / w_{\mathrm{a}}\right), \quad t_{\mathrm{h}}=\log \left(h / h_{\mathrm{a}}\right) \\ t_{\mathrm{x}}^{*}=\left(-x_{\mathrm{a}}\right) / w_{\mathrm{a}}, & t_{\mathrm{y}}^{*}=\left(y^{*}-y_{\mathrm{a}}\right) / h_{\mathrm{a}}, \quad t_{\mathrm{w}}^{*}=\log \left(w^{*} / w_{\mathrm{a}}\right), \quad t_{\mathrm{h}}^{*}=\log \left(h^{*} / h_{\mathrm{a}}\right) \end{aligned}
tx?=(x?xa?)/wa?,tx??=(?xa?)/wa?,?ty?=(y?ya?)/ha?,tw?=log(w/wa?),th?=log(h/ha?)ty??=(y??ya?)/ha?,tw??=log(w?/wa?),th??=log(h?/ha?)?
其中x, y, w, h 對應兩組框的中心點的坐標和它的寬和高,變數x,
x
a
,
x
?
x_a,x?
xa?,x??分別對應predicted box , anchor box 和 ground-truth box的中心點橫坐標(同理x,y , w , h)我們可以這么認為bounding box regression就是把anchor box 擬合到ground-truth box,在我們的公式中,用于回歸的特征是相同空間大小的在feature maps,
訓練RPNs
論文中是利用SGD演算法,并且以圖片為中心,如果利用所有的錨點去計算損失函式,可能會計算冗余,所以一般來說會隨機選擇256個錨點,正樣本和負樣本的比例大約是1:1,也就是各為128個,如果不夠,會填補,然后初始化是利用均值為0.01的高斯分布,
Faster R-CNN的訓練
Faster R-CNN的訓練方式有三種
- 使用交替優化演算法訓練
- 近似聯合訓練
- 聯合訓練
對于提取proposals的RPN,以及分類回歸的Fast R-CNN,如何將這兩個網路嵌入到同一個網路結構中,訓練一個共享卷積層引數的多任務(Multi-task)網路模型,
這里先介紹交替訓練的方法,
- 訓練RPN網路,用ImageNet模型M0初始化,訓練得到模型M1
- 利用第一步訓練的RPN網路模型M1,生成Proposal P1
- 使用上一步生成的Proposal,訓練Fast R-CNN網路,同樣用ImageNet模型初始化,訓練得到模型M2
- 訓練RPN網路,用Fast R-CNN網路M2初始化,且固定卷積層引數,只微調RPN網路獨有的層,訓練得到模型M3
- 利用上一步訓練的RPN網路模型M3,生成Proposal P2
- 訓練Fast R-CNN網路,用RPN網路模型M3初始化,且卷積層引數和RPN引數不變,只微調Fast R-CNN獨有的網路層,得到最終模型M4
由訓練流程可知,第4步訓練RPN網路和第6步訓練Fast R-CNN網路實作了卷積層引數共享,總體上看,訓練程序只回圈了2次,但每一步訓練(M1,M2,M3,M4)都迭代了多次,對于固定卷積層引數,只需將學習率(learning rate)設定為0即可,并且本論文也是用這種交替優化演算法進行訓練的,
實驗細節
- 首先過濾掉超出影像邊界的anchors
- 對每個標定的ground truth,與其重疊比例IoU最大的anchor記為正樣本,這樣可以保證每個ground truth至少對應一個正樣本anchor
- 對每個anchors,如果其與某個ground truth的重疊比例IoU大于0.7,則記為正樣本(目標);如果小于0.3,則記為負樣本(背景)
- 再從已經得到的正負樣本中隨機選取256個anchors組成一個minibatch用于訓練,而且正負樣本的比例為1:1,;如果正樣本不夠,則補充一些負樣本以滿足256個anchors用于訓練
總結
該論文提出了RPN來生成高效,準確的區域推薦,通過與下游檢測網路共享卷積特征,區域推薦步驟幾乎是零成本的,我們的方法使統一的,基于深度學習的目標檢測系統能夠以接近實時的幀率運行,學習到的RPN也提高了區域提議的質量,從而提高了整體的目標檢測精度,
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/291353.html
標籤:其他
上一篇:個人博客管理系統
