[Paper Share - 4]R-FCN :Object Detection via Region-based Fully Convolutional Networks

導讀
本文是何凱明的作品。文章為了解決圖像分類中平移不變性和目標檢測中平移變換性的困境,構造position-sensitive score map,并且整個網絡是全卷積網絡,從而在處理一張圖像時基本上共享了所有的計算。論文鏈接

1.Introduction

最近圖像分類任務中state-of-the-art的網絡比如Residual Net和GoogLenet都是全卷積網絡。因此很自然的想法就是把目標檢測也用全卷積網絡來實現。但是這樣的想法實在是naive,這樣得到網絡并不能達到分類網絡的準確率。這是因為對于圖像分類,我們需要增加網絡對圖像的平移不變性,而目標檢測卻正好相反,目標的定位需要平移變換性(translation variance)。什么意思呢?

平移不變性:對于圖片分類來說,一張圖片進行一定的平移,網絡應該還是給出同樣的結果。比如一張喵星人的圖,向左平移5個像素,那它應該還是一只喵。所以,對于分類,我們需要增加網絡的平移不變性。而卷積網絡就具有平移不變性。所以深的全卷積網絡在Image Net上表現會更好。
平移變換性:但是在目標檢測中,我們需要定位一個Object,這是和位置相關的,如果這個目標發生了一定的平移,我們希望網絡還能正確給出他的坐標,而不是平移前的坐標。網絡對于自己預測的BOX應該給出一個有意義的響應來說明這個BOX有多正確的覆蓋目標物體。比如說,有個proposal只覆蓋了一只喵的3/4,而另一只proposal只覆蓋了一只喵的1/2,那么網絡應該告訴我,第一個proposal更好。

為了解決這個困境,像ResNet的檢測框架就在卷積層中間插入了RoI Pooling,這樣RoI Pooling后面的卷積層就不再是平移不變性。但是這樣的設計犧牲了訓練的效率,因為它引入了不少region-wise layers。如下圖所示。


table 1

因此本文提出R-FCN,使用的共享計算的基礎網絡是FCN,為了引入平移變換性到FCN,作者設計了位置敏感的特征圖(position-sensitive score maps)。每一個score map都編碼了對應某個空間的位置信息。比如某個score map對應著目標的左上角。后面會詳細解析下這是什么意思。在這些score map之后跟著幾個層,但是都是不需要學習的層。整個結構可以實現end-to-end的訓練。

2.Our approach

overview

和RCNN一樣,本文的方法也包含兩個階段:1.region proposal 2.region classification 。雖然目前也有不是基于region proposal的方法,但是沒有基于region proposal方法好。R-FCN需要學習的參數全部在卷積層,并且是對整個圖像計算共享的。在最后一層卷積層,將會生成kk組position-sensitive score maps,其中每組position-sensitive score maps里面包含C+1個position-sensitive score map分別對應C個類別加一個背景類別。然后,在position-sensitive score maps后面跟著一個position-sensitive RoI Pooling。這個Pooling層和我們普通的不一樣。我們普通的RoI Pooling對所有的通道都會進行Pooling,但是這個不同。我們先看下圖.

figure1

Position-Sensitive RoI Pooling
在進行PSRoI Pooling時,假設我們pooling后的大小為k
k,這里k=3,但是主要pooling后的結果是有C+1個通道的。假設我想得到pooling結果中黃色那部分的特征,在圖中是左上角那塊C+1通道的特征,其實就是一個C+1維的向量。
image.png

  1. 那么第一步,因為這里要計算左上角黃色的特征,所以我先從k*k==9組position-sensitive score maps中拿出黃色那組score maps,這組score maps是C+1通道的
  2. 第二步,將RoI區域劃分成3*3份,映射到黃色的這組score maps上,然后拿出左上角的那塊[w/k,h/k,C+1]大小的特征塊,用average或者max的方法計算得到一個C+1維的向量。該向量就是該區域池化的結果。其他顏色快進行同樣操作。

事實上后面的公式就是表達這個意思。


image.png

特別說明的是這里用的是average pooling。式子中,Rc(i,j)是指Pooling后的結果中第i,j個向量的在c通道的響應。如果,i=0,j=0,那正好對應我上面說的左上角,黃色區域。Zi,j,c是指score maps上面第i,j組score maps上c通道上的點,i=0,j=0時,正好是黃色那組score maps。而x0,y0是RoI左上角坐標。這里說的bin,其實就是將RoI劃分成k*k個區域,每個區域叫一個bin。然后你可以看到x,y的變化范圍是只有w/k,h/k這么大。當i=0,j=0時,x,y的變化范圍是[0,w/k],[0,h/k],加上x0和y0的話正好對應左上角黃色那塊區域。n就是一個bin的點數。這是average pooling。

這么說應該解析清楚了吧。然后就是將PSRoI Pooling后的結果進行一個投票。這里作者只是使用了簡單的平均投票。然后產生一個C+1維的投票結果向量。然后使用softmax來計算損失。

Box Regression
而對于box的回歸,作者簡單起見,使用的是與類別無關的box回歸,也就是說,產生一個4kk的score maps,最后用同樣的PSRoI Pooling和投票,得到一個4維的向量。當然也可以用和類別相關的box 回歸,每個類別回歸一個box,但這樣子計算量又會非常大。

Train
然后是訓練部分,這里沒什么特別值得注意的地方,一方面就是loss 使用類別loss和box reg loss的加權,然后正樣本的IoU取0.5。有一點作者特別強調的是,這個網絡可以很輕易的在訓練過程中使用OHEM(online hard example mining)技術。這是當然了,因為subnet沒有卷積計算。Proposal的數目大也沒影響。當然大的Proposal可能有利于訓練的精度提高,但是后面的實驗也說了,到2000時并沒啥增長了。另外,作者訓練時,按照loss對RoIs進行排序,選擇大loss的RoIs。當然這是普遍的做法。另外就是交替訓練。
另外還有一些像NMS的技巧,A trous的引入和stride的修改。這些不在詳細說。
Visualization
然后作者展示了投票過程。box overlap目標時,給出的響應會不一樣。

image.png

3.Experiments

然后作者展示了一些結果。其實個人感覺無論是效果上還是速度上都沒有很大的提升,沒有足夠亮眼的成果,只能說訓練和測試快了一點,但是效果沒有state-of-the-art。引用作者的說法

Our method achieves accuracy competitive with the Faster R-CNN counterpart, but is much faster during both training and inference

不過,這個想法倒是很不錯,前面[Paper Reading -3]中曠視科技的借鑒了這個想法倒是有不錯的提升。這里我就不貼了,同學們有心情就看下原文,沒心情忽略也不影響對整個文章的理解。


今晚的Paper Share就分享到這里啦。下一次我將會分享圖像檢索的論文,因為最近要搞這個項目了。當然目標檢測,分類等論文我也會持續關注。還有些論文看了還沒來得及寫。后面繼續努力。
------少俠阿朱 2017.12.01于深圳

轉載請注明出處哦,http://www.lxweimin.com/p/9d11f4409a08

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容