1. 程式人生 > >論文筆記 R-FCN: Object Detection via Region-based Fully Convolutional Networks

論文筆記 R-FCN: Object Detection via Region-based Fully Convolutional Networks

插一句,我又回來啦~

這篇論文主要採用“位置敏感度圖”的方法,將FCN 網路引入到目標檢測中來,將影象分類和目標檢測很好地結合。因此這種方法可以和很多FCN中的影象分類框架結合,比如ResNets等,使其應用到目標檢測中來。本文實驗了101層的ResNet在VOC資料下結果,取得了mAP 83.6%和 速度 170ms一張圖的結果(速度比Faster RCNN快)。程式碼開源:https://github.com/daijifeng001/r-fcn 程式碼支援在Titan,TitanX,K40,K80上跑~~下次有時間可以跑跑玩玩。

想法來源:

一般常見的目標檢測主要有兩個子網路:(1)一個獨立於RoI的共享的全連線層子網路(2)涉及RoI決策的不共享計算的子網路。這樣進行網路的分解主要來源於目標檢測問題之前,人們大量地對於影象分類的研究。其中的一些經典網路如AlexNet,VGG等,在卷積子網路的結尾直接連線一個pooling層,跟著是一些全連線層(fc)。因此,影象分類網路中的pooling層也就自然而然地出現在了目標檢測網路中。

隨著ResNets,GoogLeNets等全連線卷積(fully convolutional)的設計網路的出現,自然而然地讓作者想到將傳統網路改成fully convolutional進行目標檢測。為了提高精度並滿足檢測要求,作者在ResNet的檢測流程中加入RoI pooling層到卷積之間,使得其網路可以達到對於區域特定的目標,來完成作者認為的目標檢測所需要不同於分類的translation-invariant。

網路結構:

整體來說,本文在FCN網路中使用一個位置敏感的RoI pooling層,得到一個“位置敏感度圖”作為輸出,完成一個端到端的目標檢測網路結構,其主要網路流程如下圖:



圖中可以清楚看出,整個R-FCN網路依舊是採用RPN+detection兩個部分,分別進行候選proposal提取和檢測。RPN類似於原始設計,進行前景背景的分離,而在R-FCN的結尾連線著RoI pooling層,該層產生對應於每一個RoI區域的分數。

在R-FCN的後面階段裡,所有卷積權值共享。和fast rcnn相比,主要差別就在後面跟的是ResNet,ResNet101有100個卷積層,一個pooling層一個1000類的fc層,本文為了應用在目標檢測,將pooling層和fc層去除,只保留其卷積層得到的feature map,進一步產生分數圖進行檢測。

位置敏感分數圖:

將RoI矩形分成k*k個網格,針對每一個位置為(i,j)處分數的計算,主要不僅針對該處的softmax響應的分數,同時結合了其相對於RoI的位置,其計算公式如下(x0,y0為RoI的top-left角座標):

為了簡化計算,對於一個RoI區域內計算均值作為該RoI的vote,接著算對應的softmax分數。

對於迴歸和loss函式部分,整體全部和Fast RCNN一致。這裡我不再細說。作者給出一個簡單的視覺化圖如下:


實驗結果:

主要進行了和Faster RCNN和ResNet-101的對比,我認為和ResNet-101的對比對於目標檢測沒什麼意義,因此主要放圖和Faster RCNN的,如下: