R-FCN: Object Detection via Region-based Fully Convolutional Networks
背景介紹
R-CNN 系列的方法,如 SPPnet、Fast R-CNN、Faster R-CNN 等方法在 Object Detection 上取得了很大的成功。這些方法的網絡結構被 RoI pooling 層分成兩個子網絡:共享的全卷積子網,RoI-wise 的子網絡。這樣設計的一個主要的原因是,借鑒自那些經典的分類網絡結構,如 AlexNet、VGG Nets 等,這些網絡結構都是卷積子網絡,再接一個 pooling層,之後再接幾個全連接配接層。很容易将分類網絡的 spatial pooling 層對應到 RoI pooling,将分類網絡轉化成一個用于 detection 的網絡。
目前 state-of-art 的分類網絡,如 ResNet、GoogleNet,都是全卷積網絡。很自然地将這樣的分類的全卷積網絡的結構應用到 Detection 網絡上。ResNet 的論文中提出了,一種使用 ResNet 作為特征引擎的 Faster R-CNN 方法,将 RoI pooling 層插在兩個卷積子網絡之間。RoI-wise 子網絡越深,那麼對于有 N 個 Proposal 的圖像,那麼子網絡就需要重複計算 N 次,雖然子網絡越深,準确度可能越高,但是這應一定程度上是以犧牲速度為代價的。這一點可以從實驗結果部分Tabel 4 中 Faster R-CNN+++ 與 R-FCN 的時間消耗對比中可以看到。

該文的出發點就是為了減少重複計算,盡可能地共享網絡,是以對這種結構,提出了更深層次的了解:分類問題,具有平移不變性(translation invariance);檢測 (Detection) 問題,在一定程度上具有平移敏感性 ( translation variance)。前面提到的 将 RoI pooling 層插入到兩個卷積子網路之間,就是為了打破 translation invariance,使用這種 region-specific 操作也就是為了盡可能的捕捉檢測的 translation variance特性。
該論文巧妙地同時考慮這兩種互相沖突的特性,設計了一個用于 Detection 的共享的全卷積網絡結構。
論文概要
為了将 translation variance 引入到全卷積網絡中,論文中設計了一種特殊的卷積層作為全卷積網絡的輸出,該卷積層輸出 position-sensitive 的 score map,每個 score map 引入了位置的資訊,如 物體的頂部。在網絡的最後一層,再接一個 position-sensitive RoI pooling 層,完成對物體的檢測。在整個網絡架構中,所有可學習的層,都是卷積層,同時把空間位置資訊引入特征學習中,使得整個網絡可以進行 end-to-end 的學習。
該論文也采用 R-CNN 方法經典檢測步驟:生成 region proposal, region 分類。使用 RPN 來生成 proposal,類似于 Faster R-CNN,R-FCN 和 RPN 是特征共享的。在給定 Proposal Region(RoIs) 之後,R-FCN 将 RoIs 分類成目标物體或者背景。在 R-FCN 的網絡中,所有可學習的網絡都是卷積層,都是在全圖上進行操作的,最後一個卷積層為每個類别(包括背景)生成 k2 個 position-sensitive 的 score map,也就是總共 k2(C+1) 個通道的輸出。這個 k2 個 score map 對應描述一個 k*k 的網格的空間資訊。例如,k*k = 3*3,那麼這 9 個 score map,分别對應 {top-left, top-center, top-right, …, bottom-right} 位置的目标分類。R-FCN 的最後一層是一個 position-sensitive 的 RoI pooling 層,對于每個 RoI 從 k*k 的 bins 生成一個值,用于類别的分類。
該論文的方法采用 ResNet-101 的網絡結構,去掉最後的 average pooling 層和全連接配接層,隻使用其中的卷積層。ResNet-101 的最後一個卷積層的 feature map 的次元是 2048,新增加了一個卷積層,将次元降成 1024維,這樣共享的卷積層也就是 101層。最後再接上生成 k2(C+1) 個通道 position-sensitive score map 的卷積層。
為了将位置資訊引入到 position-sensitive 的 feature map 中,對于每個 RoI,将其分割成 k*k 個 bins,每個 bin 的大小 ≈wk∗hk 。最後一個卷積層,為每個類别生成 k2 個 score map。在第 (i,j)th 個 bin ( 0≤i,j≤k−1 ),在 (i,j)th 個 bin 上的 position RoI pooling 操作定義為
rc(i,j∣Θ)=∑(x,y)∈bin(i,j)zi,j,c(x+x0,y+y0∣Θ)n
其中 rc(i,j) 是在第 (i,j) 個bin 下第 c 個類的響應值, zi,j,c 是 k2(C+1) 個通道中的對應的通道, (x0,y0) 是 RoI 對應的起點坐标值, n 是對應的 bin 中像素點的個數,Θ 是網絡的參數。第 (i,j) 個 bin 的範圍是 ⌊iwk⌋ , ⌊jhk⌋ 。其實這個操作就是一個 average pooling 的過程,當然是用 max pooling 也可以。
每個類别上都可以得到 k*k 個 position-sensitive 的 score,文章直接對這些值求平均值,得到最終的 score,因為分母都相同,均為 k*k,是以這個 score 就可以寫成 rc(Θ)=∑i.jrc(i,j∣Θ) ,在對這個 RoI 分類時,采用 Softmax 的方式在每個類别上的響應可以寫成 sc(Θ)=∑Cc′=0erc′(Θ) ,在訓練過程中采用交叉熵的方式進行訓練。
類似于 R-CNN、Fast R-CNN 等,R-FCN 在最後的特征層,加一層 4k2 維的卷積層,用于 Bounding Box 的回歸。對于每個 RoI,将 position-sensitive 的 RoI pooling 作用于這樣的 4k2 個 map,得到一個 4k2 維的向量。類似于上面的操作,使用平均的方式,可以為每個 RoI 得到最終的一個 4 維的預測值,分别為 (x,y,w,h) 。當然也可以針對每個類别分别預測一個 4k2 個向量,類似于 SSD 中的操作。
網絡結構
文章采用 ResNet 101 的卷積層作為基礎的卷積網絡結構,再接一個卷積層用于降維,最後接一個産生 k2(C+1) 個 score map 的 position-sensitive 的卷積層,然後接一個 position-sensitive RoI pooling 層,最後使用 Softmax 用于判斷 RoI 的類别。與此同時還可以接一個産生 4k2 個 map 用于回歸 Bounding box 的位置,同樣應用 position-sensitive RoI pooling 層,最後得到一個回歸的位置。
訓練政策
該論文可以說是 Faster R-CNN 的改進版本,其 loss function 定義基本上是一緻的:
L(s,lx,y,w,,h)=Lcls(Sc∗)+λ[c∗>0]Lreg(t,t∗)
在該網絡架構下,所有可學習的層,都是卷積層,使用 Online Hard Example Mining (OHEM) ,幾乎不會增加訓練時間。
網絡隻使用一種 scale 的圖像訓練,圖像最短的邊寬度為 600 像素,每張圖像使用 128 個 RoI 用于反向傳播。沖量設定成 0.9,權值衰減設定成 0.0005。在 VOC 上 Fine-tuning 過程中,初始學習率設定成 0.001,訓練 20k 個mini-batches,學習率為 0.0001,10k 個 mini-batchs。
R-FCN 和 RPN 共享網絡參數,訓練方式和 Faster R-CNN 的訓練政策和步驟基本一樣。
使用了 atrous trick。
實驗結果
最後總結
該論文也可以歸為 R-CNN 系列,其充分利用目前分類最好的網絡 ResNet,無論是在準确度還是和速度上都相比 Faster R-CNN 都有很大的提高。R-FCN 使用 position-sensitive score map 将 localization 的 translation variant 的從網絡結構中抽離出來,能夠充分利用 ResNet 的強大分類能力。
R-FCN 使用全卷積網絡,其共享的卷積直接作用于全圖,使用 OHEM 不會給訓練帶來額外的時間消耗,同時使用 atrous trick 使得性能有一定的提升。在 Pascal VOC 2007 上的效果,已經到到了 83.6%。
回望過去,最近一年多以來,在通用物體檢測上确實取得了非常了不起的成就。