1. 程式人生 > >目標檢測--R-FCN: Object Detection via Region-based Fully Convolutional Networks

目標檢測--R-FCN: Object Detection via Region-based Fully Convolutional Networks

本文針對目標檢測問題,對候選區域進行分塊處理,以此來解決分類和檢測之間的一個矛盾:分類網路具有一定的平移不變性,而目標檢測需要對位置保持敏感性。a dilemma between translation-invariance in image classification and translation-variance in object detection。

目標分塊處理,一個很直接的結果就是對目標區域性遮擋效果比較好。
本文沒有探討解決目標尺度問題。

1 Introduction
R-CNN 目標檢測系列將目標檢測問題分為兩個步驟:卷積特徵提取+候選區域分類,這兩個步驟通過 RoI 池化層連線起來。卷積特徵提取獨立於RoI,RoI後面的計算不能共享計算。造成這種情況是由於歷史原因:早期的網路模型如 AlexNet and VGG Nets 有兩個子網路:卷積網路以空間池化層結束,全連結層。這個空間池化層就演變為後來的 RoI 池化層。

最近提出的分類網路如 Residual Nets (ResNets) [ 9 ] and GoogLeNets [ 24 , 26 ] 都是全卷積網路,很自然的想法就是對檢測系統使用全卷積網路,不要RoI 池化層,這樣可以共享計算。但是實驗發現這樣做的效果不好。ResNet paper
[ 9 ]又加入了 RoI 池化層,這樣做提高了檢測精度,但是增加了計算量,因為對每個候選區域的計算沒有共享該計算。

去掉RoI 池化層為什麼效果會不好了,這主要是因為類網路具有一定的平移不變性,而目標檢測需要對位置保持敏感性。這裡我們提出了一個簡單的解決方法:對候選區域進行分塊處理,這裡使用了k×k = 3×3 , 這9個區域分別表示:上中下左中右。{ top-left, top-center,top-right, …, bottom-right}

這裡寫圖片描述

輸入一幅影象,經過卷積網路提取整個影象的卷積特徵,然後使用一個 k*k*(C+1)-d 卷積網路提取 k*k position-sensitive score maps,假設 k=3, 就是將一個候選區域分成 3*3=9個塊,對應9個 position-sensitive score maps,上圖顯示第一個 position-sensitive score map是 top-left,就是目標左上塊的卷積響應圖,其他響應圖以此類推。得到9個分塊響應圖之後,對於一個候選區域,我們可以從這9個分塊響應圖中得到完整的候選區域響應圖。再對這個完整的候選區域響應圖進行處理,得到分類結果。

行人分塊檢測示意圖:
這裡寫圖片描述

候選區域框發生偏移的效果:
這裡寫圖片描述

整個系統如下所示,使用 RPN提取候選區域,卷積計算都共享

這裡寫圖片描述

R-FCN 和 Faster R-CNN 對比:
這裡寫圖片描述

這裡寫圖片描述

檢測效果圖:
這裡寫圖片描述
這裡寫圖片描述