論文:R-FCN: Object Detection via Region-based Fully Convolutional Networks
作者:Jifeng Dai, Yi Li, Kaiming He and Jian Sun
鏈接:https://arxiv.org/pdf/1605.06409v2.pdf
代碼:https://github.com/daijifeng001/r-fcn
文章目錄
- 1、算法概述
- 2、R-FCN細節
- 3、實驗結果
1、算法概述
之前基于區域的目標檢測方法,像Fast/Faster R-CNN雖然在提取區域特征這部分做了共享,但基于子區域的分類和回歸部分,還沒有達到計算共享,幾百個候選框,依然需要做幾百次分類和回歸操作,這大大消耗了推理時間。本文所提基于區域的檢測器是全部采用卷積操作,幾乎所有的計算都是在整個圖像上共享的,為了實現所有操作共享這一目的,作者提出了位置敏感的分數圖來解決圖像分類中的平移不變性(translation-invariance)和目標檢測中的平移敏感(translation-variance)之間的矛盾。作者以ResNet101作為主干,在VOC 2007測試集上能達到 83.6%的mAP。推理時間為每張圖片170ms,是Faster R-CNN的2.5到20倍。
2、R-FCN細節
先說之前的基于區域候選框的目標檢測算法,它們可看作以RoI pooling層為切入點將整個網絡分為兩個子網絡(subnetworks),前部分子網絡為RoI Pooling之前的共享計算的全卷積子網絡,后一部分為RoI-wise的子網絡(全連接層),它們不共享計算。這主要是由于前期采用的經典分類網絡就是卷積+全連接這樣的設計結構造成的。現在例如ResNets和GoogLeNets都被設計成了全卷積網絡,類比到目標檢測網絡,是不是也可以將后部分的RoI-wise子網絡層替換成全卷積網絡?
要想分類得比較準,那就要網絡學習到平移不變性,即目標從圖像左邊平移到右邊,該目標的類別還是一樣,即對位置不敏感;但對于回歸任務,又要網絡學習到平移可變性,讓網絡對位置敏感,這樣才能保證網絡對于目標從圖像左邊平移到右邊后能正確預測到平移后目標的位置。要同時滿足這兩點,Faster RCNN通過插入RoI Pooling層實現了,但RoI Pooling帶有位置截斷屬性,經過RoI截取后,RoI對目標的感受野也被截斷了,相同的目標經過RoI Pooling層后可能得到不同的類別。結合網絡越深能提取到越高層特征的特性,若RoI pooling越靠近網絡前部,則會導致分類不準確,若RoI Pooling約靠近網絡后部,則會導致回歸不準確。
由于卷積神經網絡擅長提取圖像特征,但是對特征所處的位置不太敏感,所以作者在網絡中增加了位置敏感因素,使得全卷積網絡對目標的位置具有敏感特性。R-FCN的整體結構如下:
可以看到R-FCN,主體結構還是和Faster R-CNN大體上類似的,只是RoI Pooling這里做了一些變化,另外R-FCN也將Faster R-CNN的RoI-wise部分全部換成了卷積操作,使得基于區域的分類/回歸任務都可以共享計算。對比效果如下表:
- Backbone architecture
R-FCN主干網絡采用ResNet-101,它包含前面100層的卷積層加global average pooling層和1000類的fc層,作者只用了前面100層卷積層作為提取特征,最后一個卷積層輸出是2048維,作者用了一個隨機初始化的1024維的1x1卷積層作了降維處理,然后用了k*k(C+1)通道的卷積層用來生成分數圖。 - Position-sensitive score maps & Position-sensitive RoI pooling
為了顯式地將位置信息編碼到每個RoI中,作者通過網格將每個RoI矩形劃分為k * k個網絡格子。對于w * h的RoI區域,每個網格大小為w/k * h/k。作者通過最后一個卷積層將每個類別映射成k * k個分數圖。對第(i,j)個網絡(0<=i,j<=k-1),定義一個位置敏感RoI池化操作為:
- 分類
對該RoI每類的所有相對空間位置的分數取平均或者投票得到
然后通過softmax做分類
- Bounding-box回歸
也是采用類似分類的方法,通過最后一個卷積層使得每個RoI產生4k2維向量,經過投票后,用Fast R-CNN的參數化得到1個4維向量(tx,ty,tw,th)。
3、實驗結果
作者在VOC2007,VOC2012上測試結果如下:
可以看到,在mAP指標上,相對于Faster R-CNN,沒有掉點,但是在推理速度上提升很大。