論文鏈接:https://arxiv.org/abs/1605.06409
代碼鏈接:https://github.com/daijifeng001/R-FCN
——————————————————————————我是正文的分割線——————————————————————
0. 引言
本文提出了region-based fully convolutional networks(RFCN)用於目標檢測。
在此之前的RCNN系列的目標檢測框架通常包含兩部分:(i)ROI Pooling之前的一個共享的全卷積網絡;(ii)ROI Pooling之後的不共享的ROI-wise的子網絡。這主要是因爲歷史上先驅的分類網絡如AlexNet,VGGNet等都是類似的結構——一個卷積組成的網絡,接pooling層,再接幾個fc層。這樣物體分類網絡中的最後一個pooling層可以方便地替換成ROI Pooling,然後用在物體檢測網絡中。
現在時代已經翻到了新的篇章,現在的state of the art 的物體分類網絡如ResNet,GoogLeNet都是全卷積網絡,我們想在目標檢測方面也全卷積。但是之前的嘗試都精度比較低。爲了解決這一問題,在ResNet的文章裏在兩部分conv層之間插入了RoI Pooling layer,這樣通過加深ROI-wise的子網絡的深度提高了精度,但同時卻降低了速度,因爲在計算每一個RoI時計算不共享。
前面提到的通過ROI-wise的子網絡提高精度,這主要是解決了圖像分類和物體檢測之間的差異:分類需要特徵具有平移不變性,檢測則要求對目標的平移做出準確響應。現在的大部分CNN在分類上可以做的很好,但用在檢測上效果不佳。SPP,Faster R-CNN類的方法在ROI pooling前都是卷積,是具備平移不變性的,但一旦插入ROI pooling之後,後面的網絡結構就不再具備平移不變性了。這樣就能用於物體檢測。當然這種設計也導致了訓練和測試時更加耗時,因爲ROI pooling後的子網絡在計算每一個RoI時計算不共享。
本文提出了一種Region-based Fully Convolutional Network (R-FCN),其結構是FCN中的一種,爲了將translation variance 包含進FCN,我們用FCN的輸出設計了一組 position sensitive score maps,它包含物體的位置信息,其頂端設有RoI Pooling層來處理位置信息,之後再沒有權重層。這樣,RFCN就將幾乎所有的計算都共享,可以達到比faster rcnn快2.5-20倍。
1. our approach
- Backbone architecture:ResNet 101去掉最後一層全連接層,保留前100層,再接一個1*1*1024的全卷積層(100層輸出是2048d,爲了降維引入了一個1*1的卷積層,則輸出爲1024d)。
- k^2*(C+1)的conv層:Backbone architecture的輸出是W*H*1024,經過k^2*(C+1)的conv層得到channel=k^2*(C+1),大小爲W*H的position sensitive score map。k = 3表示把一個ROI劃分成3*3,表示分別預測9個位置(上左,上中,上右,中左,中中,中右,下左,下中,下右)包含(C+1)個物體的score。如下圖所示,在3*3的區域內,每一個區域內都預測(C+1)類的得分,比如下圖左上角的bin預測的是可能是人這個類且是人的左上部位的score(也預測是其他C個類且是該類坐上部位的score)。
- ROI pooling: 輸入是k^2*(C+1)*W' *H'(W'和H'是ROI的寬度和高度)的score map,輸出爲(C+1)*k*k大小的score map,然後k*k個bin直接進行求和(每個類單獨做)得到每一類的score,然後進行softmax得到每類的最終得分
- 損失函數:和faster
RCNN類似,由分類loss和迴歸loss組成,分類用交叉熵損失(log loss),迴歸用L1-smooth損失
- 訓練的樣本選擇策略:online hard example mining。主要思想就是對樣本按loss進行排序,選擇前面loss較小的,這個策略主要用來對負樣本進行篩選,使得正負樣本更加平衡。
- 訓練細節:
- decay = 0.0005
- momentum = 0.9
- 單尺度訓練:圖片resize到短邊600
- 使用8個GPU進行訓練,每個GPU 1張圖,選擇B=128個ROIs進行反向傳播
- fine-tune learning rate = 0.001 for 20k mini-batches, 0.0001 for 10k mini-batches on VOC.
- the 4-step alternating training between training RPN and training R-FCN.(類似於Faster RCNN)
- 使用atrous(hole算法)來解決stride reduce的問題
2. experiments
下文選自reference【1】
- VOC2007和VOC2010上與Faster R-CNN的對比:R-FCN比Faster RCNN好!
- 深度影響對比:101深度最好!
- region proposal算法對比:RPN比SS,EB好!
- COCO庫上與Faster R-CNN的對比:R-FCN比Faster RCNN好!
- 效果示例:
reference:
1.http://blog.csdn.net/baidu_32173921/article/details/71741970