R-FCN論文翻譯
R-FCN: Object Detection viaRegion-based Fully Convolutional Networks
2018-02-06 11:43:35
代碼地址:https://github.com/daijifeng001/r-fcn(matlab版)
摘要
我們使用R-FCN(region-based, fully convolutional networks)進行精確和有效的物體檢測。對比之前的區域檢測器(Fast/Faster R-CNN [6 , 18] 應用於每一個區域子網格要花費數百次),我們的區域檢測是基於整幅圖片的全卷積計算。為了達到這個目標,我們使用了一個“位敏得分地圖”(position-sensitive score maps)來權衡在圖像分類中的平移不變性和在物體檢測中的平移變換性這樣一種兩難境地。我們的方法采用了全卷積圖片分類主干部分,例如用於物體檢測的最新的殘差網絡(ResNets)[9],在PASCAL VOC(e.g.,83.6% mAP on the 2007 set)數據集的實驗上,我們使用了101層ResNet達到了很好的效果。同時,我們僅僅使用了170ms/每張圖片,比Faster R-CNN匹配快了2.5~20倍左右。公開的代碼可以在此網站中訪問到:https://github.com/daijifeng001/r-fcn
1 簡介
比較流行的關於物體檢測的深度網絡[8,6,18]可以通過RoI pooling layer[6]分成兩個子網絡:(i)獨立於RoI的共享的、全卷積的子網絡,(ii)不共享計算的RoI-wise子網絡。這種分解[8]來源於較早之前的分類框架,例如:AlexNet[10]和VGGNets[23],它們由兩個子網絡組成,一個是以spatial pooling layer結束的卷積子網絡,另一個是若干個fully-connected(fc) layers。因此,在圖片分類網絡中的spatial pooling layrer很自然的在本實驗中被轉變成了物體檢測網絡[8,6,18]中的RoI pooling layer。
但是最近最好的圖片分類的網絡,例如殘差網絡(ResNets)[9]和GoogleNets都是用全卷積設計的。通過分析,使用所有的卷積層去構建一個進行物體檢測的共享的卷積網絡是一件十分自然的事,而不把RoI-wise 子網作為隱藏層。然而,通過實證調查,這個天真的想法需要考慮到極差的檢測精度與網絡的較高的分類精度不匹配的問題。為了解決這個問題,在殘差網絡(ResNet)[9]中, Faster R-CNN檢測器的RoI pooling layer 中插入了兩組卷積層,它們創造了一個更深的RoI-wise子網來提高准確度,由於每個RoI的計算不共享,因此速度會比原來的要慢。
我們認為上述設計主要是為了解決圖片分類的平移不變性與物體檢測之間的平移變換性之間的矛盾。一方面,圖像級別的分類任務側重於平移不變性(在一幅圖片中平移一個物體而不改變它的判別結果),因此深度全卷積網絡結構很適合處理這類圖片分類的問題。通過在ImageNet classification [9,24,26]上的良好表現得以證明。

圖1:基於R-FCN的物體檢測核心思想。在本插圖中,通過全卷積網絡產生一個kxk=3x3的position-sensitive score maps.對於每一個在RoI中的kxk個bins,pooling僅僅在k²個maps中的其中一個呈現(通過不同的顏色進行標記)
另一方面,目標檢測任務需要定義物體的具體位置,從某種程度上說是平移可變換的。例如,平移一個候選框和物體的重疊程度。我們假定在圖片分類網絡中,卷積層越深,對平移越不敏感。為了解決這個兩難境地(圖片分類中的平移不變性和目標檢測中的平移變換性),在ResNet文獻[9]中的檢測算法中插入了RoI pooling layer到卷積層——這個區域特異性操作破壞了平移不變性,而且當評估不同區域時,post-RoI卷積層不再是平移不變的了。然而,這種設計犧牲了訓練和測試的效率,因為它引入了大量的region-wise layers(表1)。
在本篇文獻中,我們開發出了一個稱之為R-FCN(Region-based Fully Convolutional Network)的框架來用於物體檢測。我們的網絡由共享的全卷積結構組成,就像FCN一樣[15]。為了把平移變換特性融合進FCN中,我們創建了一個位敏得分地圖(position-sensitive score maps)來編碼位置信息,從而表征相關的空間位置。在FCN的頂層,我們附加了一個position-sensitive RoI pooling layer 來統領這些得分地圖的信息,這些得分地圖不帶任何權重層(卷積或全連接層)。整個結構是端對端的學習。所有可學習的層在整幅圖片中都是可卷積的並且可共享的,並且可以編碼用於物體檢測的空間信息。圖 1說明了這個關鍵的思路,表1比較了區域檢測的各種算法。

使用101層的Residual Net[9]作為主干,我們的R-FCN在PASCAL VOC 2007測試集上達到了83.6%的mAP,在2012測試集上達到了82.0%的mAP。同時,我們的結果實現了170ms/每張圖片的速度,比Faster R-CNN+ResNet-101 [9] 快了2.5~20倍。這個實驗結果說明了我們的方法成功的解決了基於全卷積網絡的圖像級別的分類問題中的平移不變性和平移變換性之間的矛盾,就像ResNet能夠被有效的轉換成全卷積目標檢測器(fully convolutional object detectors.)一樣。詳細的代碼參見:https://github.com/daijifeng001/r-fcn
2 方法
概述
對於下面的R-CNN[7],我們采用了兩種流行的目標檢測策略[7,8,6,1,18,22]:region proposal和region classification。盡管不依賴於region proposal的方法確實存在(比如[17,14])。region-bases system(基於區域的系統)在一些benchmark[5,13,20]上依然具有最好的准確率。我們通過Region Proposal Network(RPN)來抽取候選區域,它自身是一個全卷積結構。接下來[18],我們在RPN和R-FCN中共享這些特性。圖 2展示了整個系統的結構。

圖2:R-FCN的整體架構。Region Proposal Network(RPN)產生候選區域,然后RoI會被應用與得分maps。所有可學習的權重層在整幅圖片中都是可卷積的並且是可計算的。每個RoI的計算開銷都是可以忽略的。
考慮到proposal region, R-FCN結構用來將ROI分類為物體和背景。在R-FCN中,所有可學習的權重層都是可卷積的並且是在整幅圖片中進行計算。最后一個卷積層針對於每一個物體類別產生一堆K²個position-sensitive score maps 。因此有k²(C+1)個通道輸出層(C個物體目錄項+1個背景)。這K²個得分地圖由K×k個空間網格來描述相對位置。例如,對於K×K = 3×3,這9個得分地圖將物體類別編碼為9種情況(top-left,top-center,top-right,......,bottom-right)。
R-FCN以position-sensitive RoI pooling layer作為結束層。他將最后一個卷積層的輸出結果聚集起來,然后產生每一個ROI的得分記錄。和[8][6]不同,我們的position-sensitive RoI層產生的是selective pooling,並且k×k的每個條目僅僅聚集來自於k×k得分地圖堆里面的一個得分地圖。通過端對端的訓練,RoI 層帶領最后一層卷積層去學習特征化的position-sensitive score maps。圖 1說明了這個過程。圖 3、圖 4是兩個可視化的例子。本算法的具體細節介紹參見后面的條目。


Backbone architecture
本文獻中的R-FCN算法是基於ResNet-101[9]的,雖然其他的深度學習網絡[10][23]也可以應用。RstNet-101有100個帶global average pooling的卷積層,有一個1000級的fc層(fully-connected)。我們去掉了global average pooling和fc layer,然后只使用卷積層來計算feature maps。We use the ResNet-101 released by the authors of [9], pre-trained on ImageNet [20]。在ResNet-101中,最后一個卷積塊是2048-d(2048維度)我們附加了一個隨機初始化的1024d的1×1的卷積層來降低維度(更精確的,我們增加了卷積層的深度),然后我們使用了k²(C+1)個通道的卷積層來產生得分地圖,下面會有具體的介紹。
Position-sensitive socre maps & position-sentitive RoI pooling
為了在每個RoI中明確編碼位置信息,我們通過一個網格把每個RoI分成k×k個bins。對於w×h的RoI區域,每一個bin的大小≈w/k×h/k[8][6]。在我們的方法中,最后一個卷積層是被用來為每個類別產生k²個得分地圖。在第i行第j列的bin(0≤i , j≤k-1)中,我們定義了一個position-sensitive RoI pooling 操作,僅僅將結果匯集到在第(i,j)個得分圖上:

在這個公式中:rc是針對於第c個目錄的第(i,j)個bin的pooled response;Zi,j,c是k²(C+1)個得分圖的其中一個圖;(x0,y0)表示RoI的左上角;n表示bin中像素的個數;θ表示網絡中的所有可學習的參數。第(i,j)個bin的范圍是:

關於上述等式,在圖1中有解釋,其中一個顏色代表一個(i,j)對。上述等式使用的是平均池化,當然最大池化也有很好的表現。
這K²個得分圖用來對ROI區域進行投票。在本篇論文中我們通過平均得分來對ROI區域進行投票,從而產生(C+1)維的向量:

然后我們計算了每一個目錄項的softmax響應:

在訓練和評級的時候,他們被用來估計交叉熵損失(cross-entropy loss)。
進一步的,我們用相似的方法定位了邊界框回歸(bounding box regression)[7][6]。在k²(C+1)個卷積層,我們附加了一個4k²個卷積層用於邊界框回歸。Position-sensitive RoI pooling 在4k²的map中表現出來,對於每一個RoI,產生一個4k²位的向量,然后通過平均投票被聚合為一個4維向量。這個4維用 t = (t_x, t_y, t_w, t_h) 參數化一個邊框[6]。需要注意的是,為了簡單起見我們利用的是類別無關的邊界框回歸,但是對應的特殊類別也是可以使用的(比如,一個4k²個輸出層)。
Position-sensitive score maps 有一部分的靈感來自於實例級的語義分割FCNs[3]。進一步的,我們引入了position-sensitive RoI pooling layer 來統領物體檢測得分圖的學習。在ROI層之后,沒有可學習的層,所以能夠進行幾乎無代價的區域級計算,從而來加快訓練和測試。
訓練
在預先計算了region proposals之后,端對端地訓練R-FCN結構是非常簡單的。接下來[6],我們的損失函數(loss fuction)的定義由兩部分組成:交叉熵損失(cross-entropy loss)和邊界回歸損失(box regression loss):

上式中,C*是RoI的真實標簽(C* = 0表示的是背景):

是用於分類的交叉熵損失函數(cross-entropy loss):
L_reg 是邊界回歸損失函數(bounding box regression loss)如[6]中定義的一樣;
t* 表示真實邊框。[C*>0]指的是,如果參數為真,則等於1,否則為0;
λ 被初始化設置為1[6]。
當RoI與實際邊框的重疊部分至少有0.5的IOU時,那么我們認為是positive examples,否則是negative example。
在訓練時,我們的方法采用OHEM(online hard example mining)是非常容易的。每個RoI區域的計算是可忽略的,從而使得樣例挖掘(example mining)近乎是cost-free的。假定每張圖片有N個proposals,在前向傳播時,我們計算所有N個proposals的損失。然后我們對所有ROI按照損失進行排序。然后挑選B個具有最高損失的ROI。Backpropagation[19](反向傳播算法)是基於選擇的樣例來演算的。因為我們的每個ROI的計算都是近似可以忽略的,所以forward time基本上不會受N的影響。而OHEM Fast R-CNN[22]可能是會花費雙倍的時間。在下表3中,我們提供了一個詳細的時間數據。

我們使用了0.0005的權重衰減系數和0.9的動量。缺省情況下,我們使用單尺度(single-scale)的訓練:圖片被統一調整為600個像素的大小[6][18]。每個GPU處理1張圖片,選取B=128ROI來用於反向傳播。我們使用了8個GPU來訓練模型(所以有效的小批量(mini-batch)大小是8×)。我們微調了R-FCN,對於20k個mini-batches我們使用了0.001的學習速率;而對於VOC上的10k個mini-batches,我們使用了0.0001的學習速率。為了讓R-FCN擁有帶RPN的特征,我們采用了4步交替訓練[18],在RPN和R-FCN中交替訓練。
測試
正如圖2所描述的,RPN和R-FCN共享的特征地圖(feature maps)在一個單尺度為600的圖像上被計算。然后RPN部分選擇出了ROI,而R-FCN部分評估了catagogy-wise scores和regresses bounding boxes(針對每一個物體項 的得分)和regresses bounding boxs。在測試階段,我們評估了300個ROI區域,進行了公平的比較。結果通過non-maximum suppression(NMS)來進行后處理,使用了0.3IoU[7]的閾值,作為標准練習。
多孔算法和步長
我們的全卷積網絡架構是在用於語義分割的FCN基礎上進行修改的,並享有它的好處。特別的,我們將ResNet-101的stride從32像素減少到16像素,從而增加了得分圖分辨率。在conv4[9]之前的所有層(包括conv4)(步長為16)保持不變,在第一個conv5塊的stride=2改為stride=1,在conv5階段的所有的卷積濾波都被“hole algorithm”[2][15]進行修改,用來補償步長的減小。為了公平起見的比較,RPN是在conv4階段的頂層(和R-FCN共享)進行計算的。正如在[9]中使用Faster R-CNN一樣,所以RPN沒有被影響。下表顯示的是R-FCN的結果。(KxK=7x7,no hard example mining)trous trick將mAP提高了2.6個點。

可視化
在圖 3和圖 4中,我們展示了當kxk=3x3時,通過R-FCN學習到的position-sensitive score maps。這些特征圖受到物體的具體相對位置的強烈影響。例如:“top-center-sensitive”score map對於那些top-center位置關系的物體顯示了較高的分數。如果一個候選框與真實物體精確的重合了(圖 3),那么大多數的k²個bins會被強烈的激活,然后會得到較高的分數。相反的,如果候選邊框與真實物體並沒有完全准確的重合(圖 4),那么在ROI里的有一些k^2bins不會被激活,從而導致得分很低。
3 相關工作
R-CNN[7]已經說明了帶深度網絡的區域候選[27][28]的有效性。R-CNN計算那些關於裁剪不正常的覆蓋區域的卷積網絡,並且計算在區域直接是不共享的。SPPnet[8],Fast R-CNN[6]和Faster R-CNN[18]是半卷積的(semi-convolutional),在卷積子網絡中是計算共享的,在另一個子網絡是各自計算獨立的區域。
已經有物體檢測器可以被認為是全卷積模型。OverFeat [21] 通過在共享的卷積特征圖上滑動多尺度窗口來檢測目標。同樣的,在Fast R-CNN[6]和[12]中,也在研究能取代候選區域的滑動窗口。在這些情況下,可以將單尺度的滑動窗口改造成一個單層的卷積層。在Faster R-CNN中的RPN組件是一個全卷積檢測器,用來預測是一個關於多尺寸的參考邊框的實際邊框。原始的RPN是class-agnostic(class無關的)。但是對應的clss-specific是可應用的,接下來我們會演示的。
另一個用於物體檢測的是fc layer(fully-connected)用來基於整幅圖片的完整物體檢測,如[25][4][17]。

4 實驗
4.1 在PASCAL VOC上的實驗
我們在PASCAL VOC[5]上進行了實驗,PASCAL VOC上有20個物體目錄項。
我們在VOC2007和VOC2012的聯合訓練集上進行模型的訓練,接下來[6],然后在VOC2007測試集上進行了測試。通過mean Average Precision(mAP)來測量物體檢測的精度。
Comparisons with Other Fully Convolutional Strategies.
雖然全卷積檢測器很容易獲取,但是實驗證明它的精度非常高。我們使用ResNet-101網絡研究了如下幾種全卷積(或者近似是卷積的,每個ROI僅含有一個fc層)策略:
Naïve Faster R-CNN. 正如簡介里面介紹的,它在ResNet-101中使用所有的卷積層來計算共享的特征圖,並且在最后一個卷積層(con5之后)采用了ROI pooling。在每個ROI只有少量21-class fc layer被計算(所以變化的基本上是全卷積層)。a trous trick被用來進行公平的比較。
Class-specific RPN. RPN在[18]中進行訓練,其中,2-class(表明是否是物體)卷積分類層被替換為21-class卷積分類層。為了公平的比較,對於class-specific RPN,我們使用了帶a trous trick的ResNet-101的conv5 layer。
R-FCN without position-sensitivity. 通過設置K = 1,我們移除了R-FCN的position-sensitivity。這等價於每個ROI中的global pooling。
分析。Table2顯示了分析結果。我們注意到,在ResNet[9]的論文中,標准Faster R-CNN達到了76.4%的mAP(見Table3),它是由ResNet-101組成的,並且在conv4和conv5之后添加了ROI pooling layer。作為對比,簡單Faster R-CNN(在conv5之后添加了ROI pooling)只有相對較低的68.9%mAP(Table2)。這個對比通過實踐證明了,通過在Faster R-CNN的系統中插入ROI pooling layer來獲取空間信息的重要性。相似的觀點在文獻[19]中有提到。

4.2 在MS COCO上的實驗
接下來,我們在MS COCO數據集上進行了測試,該數據集擁有80個物體目錄項。我們的實驗使用了80k 訓練集,40k 評估集,20k 測試集。對於90k的迭代,我們使用了0.001的學習率;對於30k的迭代,我們使用了0.0001的學習速率,使用的有效mini-batch的大小是8.我們將訓練[18]從4步擴展到5步,當特征共享時,這種調整輕微地提高了精確度。當然,2步訓練已經足夠提高精度了,但是特征是不共享的。
結果在Table6中展示。我們的尺度R-FCN的基線結果是48.9%/27.6%,和Faster R-CNN的48.4%/27.2%是相近的。但是我們的測試速度比它快了2.5倍。當物體較小時[13],我們的方法表現的效果更好。我們的多尺度R-FCN在評估集上的結果是49.1%/27.8%;在測試集上的結果是51.5%/29.2%。考慮到COCO的物體尺度具有很大的范圍,我們進一步估算了多尺度測試[9],使用了{200,400,600,800,1000}等不同尺度。mAP的結果是53.2%/31.5%非常接近。不僅如此,我們的方法更加簡單,並且沒有添加類似於context或者iterative box regression[9]的東西,並且在訓練和測試上更快。


5 總結與展望
我們提出的RFCN是一個簡單、精確、有效的用於物體檢測的框架。我們的系統很自然的采用了最先進的圖片分類框架,就像基於全卷積的ResNets一樣。我們的方法比Faster R-CNN更精確,並且在訓練和預測上都比它要快。
我們特意使本篇論文中給出的R-FCN看起來簡單。其實仍然存在一系列的FCNS的正交擴展用來進行語義分割(如[2]),還有一些基於區域方法的擴展用來進行物體檢測(比如[9][1][12])。很高興我們的系統能夠享受到這些成果。

