天天看點

R-FCN論文詳解筆記

一、論文相關資訊

時間:2016年

題目:R-FCN: Object Detection via Region-based Fully Convolutional Networks

paper位址:https://arxiv.org/abs/1605.06409

code: https://github.com/daijifeng001/r-fcn.

作者:Jifeng Dai 等

二、論文詳情

背景與介紹

之前的region-based 目标檢測架構如Fast-RCNN, Faster-RCNN等可用被分為兩個子網絡,一個是用于提取特征的骨幹網,一個是基于每個RoI的分類子網絡,這兩個子網絡以RoI層界分開。前面的骨幹網獨立于具體的RoI,所有的RoI都共享這部分的計算,而後面的那部分子網絡則是單獨對于每個RoI的,計算資源不共享,第二個子網絡需要針對每個ROI做計算,這樣會做很多重複性的工作,導緻很大的計算資源消耗,是以R-FCN的一大出發點就是解決這個問題,通過使用卷積網絡讓幾乎所有計算都共享。

深層的卷積層對位置偏移是不敏感的,對于平移不變的分類任務來說能表現很好,但是當引入到對位置變化敏感的目标檢測時檢測精度就下降很多。

這裡的位置敏感舉例:當一個預測框中的内容變化後,模型對這個内容變化之後預測框與之IoU變化有響應。

為了解決這個問題,有人在ResNet的pipeline中插入ROI層,位于卷積層中間,即RoI層之後接一個針對每個RoI的卷積子網絡。這樣的話雖然之後的卷積網絡對位置敏感了,但是由于基于region-wise,效率很低。

而這篇文章提出了基于區域的全卷積網絡來解決這個問題。為了将位置變化融合進FCN,在骨幹網之後添加一系列通過卷積得到的位置敏感得分圖作為FCN的輸出,在FCN上面添加一個位置敏感的ROI池化層擷取這些得分圖的資訊。這樣整個網絡中可學習層都是卷積層,端到端的訓練,在整幅圖檔上共享計算,并且編碼了用于目标檢測的位置資訊。

R-FCN的架構圖:

R-FCN論文詳解筆記

網絡由backbone(ResNet-101的前100層),RPN(生成 RoIs),backbone後的跟的最後一層卷積層,這一層有兩個分支,分别對應的是分類分支和回歸分支,這兩個分支的卷積層産生若幹位置敏感的score maps,然後RPN得到的RoI在這些maps上通過位置敏感的一個RoI pooling做池化操作,得到RoI-wise的結果。上圖隻顯示了一個分支,沒有展現完善。

backbone後的卷積層(分類分支為例)對每個category輸出k×k個 position-sensitive score maps,也就是 k×k個channel,那麼C個種類+背景就會有k×k(C+1)channels。其中,對于每個種類,其k×k個maps中,每個maps分别編碼該類物體位置上的一部分,例如如果人用的k×k是3×3=9,則9個maps中每個maps分别對應人的左上,中上(頭),右上,,,右下(右腳)等。

R-FCN以一個位置敏感的RoI pooling layer結尾,該層聚合了最後一個卷積層的輸出并且生成每個RoI的得分。這裡position-sensitive RoI layer作選擇性的pooling,即對于每個類,pooling layer 輸出的k×k個bins中的每個bin隻聚合k×k個score map中的一個。觀察上圖中bin中的顔色可知。

具體細節如位置敏感的score maps、RoI pooling layer等在後面還會講到。

骨幹網絡結構(backbone)

論文中的backbone基于ResNet-101,ResNet-101有100個卷積層跟着一個全局平均池化層和一個1000分類的全連接配接層,這裡将全局平均池化層和全連接配接層去掉,然後隻使用卷積層來計算特征圖。由于ResNet-101最後一個卷積層輸出是2048-d,這裡使用一個随機初始化的1×1卷積作降維,然後跟着用k×k(C + 1)-channel的卷積層來生成score maps。

generate RoI

通過RPN來生成RoIs,RPN本身是一個全卷積的架構。

位置敏感的score maps 和位置敏感的RoI pooling

為了明确的将位置資訊編碼到每個RoI中,通過一個規則網格将每個RoI舉行分成k×k個bins,對于每個w ×h尺寸的RoI 矩形,其每個bin的尺寸為(w/k) ×(h/k)。最後一個卷積層針對每個類輸出k×k個score map,對于其中的第(i,j)個bin (0 ≤ i, j ≤ k − 1),我們對一個位置敏感的RoI pooling 去對第(i,j)個score map做池化操作。

下式,極為改池化操作的式子:

R-FCN論文詳解筆記

其中θ代表的是網絡的所有可學習參數,rc(i,j)是c類别第(i,j)個bin的響應值,zi,j,c則是C類别的score maps中對應的那個score map。x0,y0指的是改RoI的左上角位置。x,y是bin中的坐标值,取整數。

R-FCN論文詳解筆記

式子與下圖對應:

R-FCN論文詳解筆記
我的疑問:我認為這裡x0,y0取RoI左上角的話,那麼x,y的取值範圍一個是RoI的範圍,而不是bin的範圍,否則每個bin的值都是該bin對應哪個map以RoI左上角開始的一個小的bin大小的池化接結果了。暫時擱置疑問。

然後每個bin的值決定該類的得分,這裡簡單的将每個bin的值相加作為該類的得分。然後将每個類的得分輸入一個softmax函數得出其類别估計得分。該輸出會用于計算交叉熵損失以及在inference的時候給RoIs排序。

bounding box regression

對于bounding box regression也是相似的方法,除了以上kk(C + 1)-d的卷積層,再加上一個4kk維的旁支卷積層做邊框回歸。然後位置敏感的RoI pooling就對改卷積層輸出的4kk個maps做池化,産生4kk維的向量(for each RoI)。然後該向量通過被聚合到一個4維的向量,這個4維向量 t = (tx, ty, tw, th)用于該RoI的邊框回歸。注意,這裡為了簡化執行的類别無關的邊框回歸,也可應用類别相關的邊框回歸(将次元置為4kkC)。

由于RoI層之後沒有需要學習的layer了,是以region-wise 的計算幾乎忽略不計。

Train

損失函數:由分類的交叉熵損失和回歸損失組成。

R-FCN論文詳解筆記

cs是ground truth label,0為背景,意思隻在非背景時計算回歸損失。 Lreg沿用Fast RCNN中定義的,t表示ground truth box。λ=1。

IoU門檻值為0.5,大于等于0.5為positive,否則negative。

online hard example mining (OHEM)

假定每個圖檔N個proposal,forward之後得到這N個proposal的loss,然後根據loss sort所有RoIs(both positive and negative)并選擇前B個最高損失值的RoIs。然後在這選中的RoIs上執行back propagation。由于RoI-wise 計算可忽略,是以時間成本基本不受N的影響。

其他參數

weight decay =0.0005 , momentum = 0.9 。

采用單一尺寸圖檔訓練,resize到最短邊為600pixels。

每個GPU存一個圖檔,然後選擇B=128,作者使用8個GPU,是以mini-batch size就是8的倍數。

VOC上,前20k mini-batches使用0.001的學習率,後10k使用0.0001。

為了使RPN和R-FCN共享參數,像Faster RCNN那樣采用4步法交替訓練RPN和R-FCN。

Inference

輸入圖檔,backbone提取特則得到feature maps,然後RPN部分提出RoIs,針對每個RoI R-FCN部分估計其類别得分和邊框回歸參數。

結果使用0.3的IoU門檻值來做nms非極大值抑制。(作者為了與其他方法公平比較,實驗時RoIs隻使用了300個)

Visualization of position-sensitive score maps

當RoI與ground truth貼合時候的sore maps:

R-FCN論文詳解筆記

當RoI與ground truth不重合時的score maps:

R-FCN論文詳解筆記

結果:

放上了使用ResNet-101做骨幹網,情況下Faster R-CNN和R-FCN的對比。使用了線上難樣本挖掘(HNEM),固定了前向傳播時的RoIs個數N,選取128個樣本反向傳播,300個RoIs用于檢測inference。

R-FCN論文詳解筆記

note

  • 當把R-FCN的k設定為1時,最後一個卷積層隻産生一個score map,RoI pooling layer也隻通過一個1*1網格生成一個bin的池化結果,于是這部分從一個position sensitive RoI Pooling layer 就退化成了一個average RoI pooling layer了,這時就會失去其位置敏感特性,無法拟合。
  • 文章中提到A trous 這個trick,用于把resnet最後一個池化層的步長從2減小到1,這樣原圖到特征圖的stride(即縮小了多少倍)就從32變成了16,進而提高了RPN 和R-FCN共享的feature map的分辨率。然後我沒有仔細查這個A trous,待補充或者就不會補充了。🐕

繼續閱讀