論文地址:https://arxiv.org/abs/1605.06409
Github代碼:Matlab版榆骚,Python版
背景
在Fast R-CNN中坏晦,rbg利用 ROI Pooling 解決了不同尺寸 proposal 的特征提取問(wèn)題丛晦,在其升級(jí)版 Faster R-CNN 中rbg進(jìn)一步提出了 RPN 網(wǎng)絡(luò)掉冶,通過(guò)共享輸入圖像的卷積特征准夷,快速生成 proposal双抽。縱觀整個(gè) R-CNN 系列的發(fā)展過(guò)程琳要,我們可以發(fā)現(xiàn)寡具,F(xiàn)ast R-CNN中之所以引進(jìn) ROI Pooling 是因?yàn)榫W(wǎng)絡(luò)中全連接層的存在。事實(shí)上稚补,一些state of art的圖片分類(lèi)網(wǎng)絡(luò)均為全卷積網(wǎng)絡(luò)童叠,如ResNet、GoogLeNet等课幕。所以很自然地厦坛,是否可以將目標(biāo)檢測(cè)的網(wǎng)絡(luò)也用全卷積網(wǎng)絡(luò)來(lái)實(shí)現(xiàn)?事實(shí)證明乍惊,如果簡(jiǎn)單地丟棄全連接層(實(shí)現(xiàn)融合特征和特征映射)粪般,檢測(cè)的效果會(huì)很差。
作者認(rèn)為這主要來(lái)源于這樣的一對(duì)矛盾:
圖像分類(lèi):要求圖像具有平移不變性(translation invariance)
目標(biāo)檢測(cè):要求圖像具有位置敏感性(translation variance)
Region based Fully Convolutional Network(R-FCN)的提出即是為了解決這樣的一對(duì)矛盾污桦,R-FCN中的一個(gè)關(guān)鍵層是位置敏感ROI池化層(position-sensitive RoI pooling layer)。
R-FCN結(jié)構(gòu)
首先來(lái)看一下R-FCN的網(wǎng)絡(luò)結(jié)構(gòu)匙监。和Faster R-CNN一樣凡橱,R-FCN也是 基于region proposal的兩級(jí)檢測(cè)架構(gòu)小作。
“對(duì)于region-based的檢測(cè)方法,以Faster R-CNN為例稼钩,實(shí)際上是分成了幾個(gè)subnetwork顾稀,第一個(gè)用來(lái)在整張圖上做比較耗時(shí)的conv,這些操作與region無(wú)關(guān)坝撑,是計(jì)算共享的静秆。第二個(gè)subnetwork是用來(lái)產(chǎn)生候選的boundingbox(如RPN),第三個(gè)subnetwork用來(lái)分類(lèi)或進(jìn)一步對(duì)box進(jìn)行regression(如Fast RCNN)巡李,這個(gè)subnetwork和region是有關(guān)系的抚笔,必須每個(gè)region單獨(dú)跑網(wǎng)絡(luò),銜接在這個(gè)subnetwork和前兩個(gè)subnetwork中間的就是ROI pooling侨拦。我們希望的是殊橙,耗時(shí)的卷積都盡量移到前面共享的subnetwork上。因此狱从,和Faster RCNN中用的ResNet(前91層共享膨蛮,插入ROI pooling,后10層不共享)策略不同季研,本文把所有的101層都放在了前面共享的subnetwork敞葛。最后用來(lái)prediction的卷積只有1層,大大減少了計(jì)算量与涡∪切常”
R-FCN 首先也是一個(gè)RPN的網(wǎng)絡(luò),用于生成和訓(xùn)練proposal(ROI)递沪。所不同的是豺鼻,F(xiàn)aster R-CNN中,ROI Pooling層直接對(duì)ROI進(jìn)行分塊池化輸出用于分類(lèi)和回歸的特征向量款慨。
R-FCN中儒飒,則將每一個(gè)ROI劃分成k×k個(gè)格,池化輸出每個(gè)格的位置得分檩奠,再通過(guò)投票方式得到 ROI 最后的輸出特征向量桩了。的首先生成 k^2(C+1) 通道大小的輸出。其中埠戳,C 為類(lèi)別數(shù)(+1為背景)井誉, k^2 表示將ROI區(qū)域劃分成 k×k個(gè)格,如上圖所示整胃。如 k=3颗圣,則對(duì)應(yīng)9個(gè)格,分別為上左(左上角),上中在岂,上右奔则,中左,中中蔽午,中右易茬,下左,下中及老,下右(右下角)抽莱,如下圖所示:
Backbone網(wǎng)絡(luò):ResNet101——去除原始網(wǎng)絡(luò)最后的平均池化層和全連接層,保留100層的卷積層用于特征提取骄恶。為了降維食铐,100層卷積層之后又添加了一層1×1×1024的卷積層,使輸出維度變成1024(原始的是2048)叠蝇。之后再接一層卷積層用于產(chǎn)生得分圖璃岳。
位置敏感得分圖&位置敏感ROI Pooling:將w×h大小的ROI劃分成k×k個(gè)格(大小 ≈ \frac{w}{k}×\frac{h}{k})。對(duì)每個(gè)格進(jìn)行位置敏感池化操作悔捶,如下式:
r(i,j|Θ) = \sum_{(x,y)∈bin(i,j)}^{}z_i,_j,_c(x+x_0,y+y_0|Θ)/n
式中铃慷,r(i,j|Θ)是第(i,j)個(gè)格的池化響應(yīng);z_i,_j,_c表示k^2(C+1) 中的一個(gè)得分圖蜕该;(x_0,y_0)表示ROI左上角的格犁柜。
k^2個(gè)得分圖通過(guò)投票(eg.求均值)后得到ROI上 C+1 維的輸出向量。后接一個(gè)softmax層得到每一類(lèi)的最終得分堂淡,并在訓(xùn)練時(shí)計(jì)算損失馋缅,如下圖。
ROI的位置回歸:R-FCN的位置回歸方式與R-CNN和Fast R-CNN相似绢淀。上面說(shuō)到萤悴,在base網(wǎng)絡(luò)的 feature map 之后連接了一層卷積用于產(chǎn)生k^2(C+1)維的位置敏感得分圖。此處仍然從base網(wǎng)絡(luò)上連接一個(gè) 4k^2 通道的得分圖(與位置敏感得分圖并列)皆的,用來(lái)做 ROI 的坐標(biāo)微調(diào)覆履。同樣對(duì)這個(gè) 4k^2 大小的得分圖進(jìn)行 ROI Pooling操作,輸出 t=(t_x, t_y, t_w, t_h) 大小的 4 維坐標(biāo)向量费薄。
訓(xùn)練的相關(guān)細(xì)節(jié):損失函數(shù)與Fast RCNN相似硝全,分類(lèi)部分為交叉熵?fù)p失,回歸部分為平滑L1損失楞抡,總的損失為這兩部分的和:
L(s, t_{x, y, w, h}) = L_{cls}(s_{c^*}) + \lambda[c^* > 0]L_{reg}(t, t^*)
- IoU大于0.5的ROI被當(dāng)做正樣本伟众,其余作為負(fù)樣本
- 采用單尺度訓(xùn)練,尺度大小為600像素(min(w, h))召廷。每張圖片通過(guò)OHEM選取128個(gè)hard example做反向傳播
- 分別用學(xué)習(xí)率為0.001凳厢,20k次迭代账胧;學(xué)習(xí)率為0.0001,10k次迭代在VOC數(shù)據(jù)集上做微調(diào)
- 采用類(lèi)似Faster R-CNN中的4步訓(xùn)練策略交替訓(xùn)練RPN網(wǎng)絡(luò)和R-FCN網(wǎng)絡(luò)
推理部分:與Faster R-CNN等類(lèi)似,采用閾值0.7的NMS進(jìn)行非極大值抑制数初。
à trous卷積和stride調(diào)整:R-FCN調(diào)整了部分卷積核的stride大姓野(conv4及之前的保持stride=16,conv5的stride由2變?yōu)?)泡孩。同時(shí),conv5上的卷積采用à trous卷積(空洞卷積)寺谤,補(bǔ)償減小stride帶來(lái)的影響仑鸥。
實(shí)驗(yàn)結(jié)果
VOC數(shù)據(jù)集
1. 與Faster R-CNN的對(duì)比
2. ResNet深度、ROI生成策略的影響