本文轉載自:
http://blog.csdn.net/surgewong/article/details/51873372
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) 是在第 (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 定義基本上是一致的:
在該網絡框架下,所有可學習的層,都是卷積層,使用 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%。
回望過去,最近一年多以來,在通用物體檢測上確實取得了非常了不起的成就。