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

R-FCN: Object Detection via Region-based Fully Convolutional Networks

論文鏈接:arxiv.org/abs/1605.0640

代碼鏈接:github.com/daijifeng001

CVPR2016的文章,和上周的FPN一樣是非常經典的文章。友情提醒下,FCN最早是用在分割上的,只搜FCN很容易出現分割方面的論文,如果想要搜檢測方面的應用,最好搜R-FCN。那麼,下面開始本次的內容。

1. 問題介紹

如圖所示,我們都知道,Faster RCNN在RPN階段通過共享特徵的方式節省了大量的計算量,但是到第二個階段,通過RoI pooling後獲得的每個RoI的特徵又要經過一個含有fc的子網路來對其進行分類和回歸。fc層本身其實就有參數多計算量大的特點,RoI後的每個feature map要經過兩個fc層一個class softmax(也是fc),無形中加大了計算量、浪費了時間。因此,一個自然而然的想法就產生了,能不能想辦法消除這種浪費,進一步提高檢測速度?

實際上,類似ResNet這種網路都是在最後才加個fc層用於分類的,參考這種思路再結合RPN的特徵共享,能不能直接在卷積層共享特徵後,直接抽出RoI然後接個fc層一步到位地分類和回歸而不是再經過一個子網路?放在Faster RCNN中,可以考慮用ResNet來做BackBone,提取出用於共享的特徵,然後RoI後直接進行分類回歸,這種思路就是Naive Faster RCNN……但是實驗發現了,這種思路的實驗結果很差,一個最明顯的特徵是檢測的精度和分類的精度差距很大。

那麼,原因是什麼呢?一方面,分類任務是有translation invariance特點的,就是說圖像中物體的移動並沒有太大的差別;但是另一方面,檢測任務卻是translation variant的,例如預測出的box就必須對它是否較好地覆蓋了object做出反饋,否則位置偏差就沒辦法修正。 ResNet文章就探討過這個問題,並通過強行在卷積層之間插入了RoI這種位置敏感層的方法來破壞分類的transalation invariance。

作者在本文中提出了另一種更為自然的思路來解決這種差異性,關鍵就是作者稱之為position-sensitive score maps的東西。具體來說,就是對RoI劃分網格,每個網格分別來預測物體的種類,並通過所有網格的結果來確定物體的種類。因為引入了網格位置的原因,物體的位移將使得每個網格的結果產生較大的不同,所以分類任務就會開始對位移敏感。

這裡有一個比較清晰的對比圖:

這裡每個RoI用的是3x3的網格。可以看到,隨著RoI位置的變化,每個網格在position-sensitive score maps中覆蓋的內容將會產生較大的變化,例如右上的網格就從原來正好覆蓋強響應區域(全白)的情況變成覆蓋沒有響應區域(全黑)的情況,因此3網格內的值完全不同,直接影響了最終分類結果,這就是大致的思路。下面來看怎麼得到這個score maps和具體的網路。

2. 實現

關鍵思路

position-sensitive scores maps的關鍵思路如下圖所示:

如圖所示,網路在經過常見的特徵提取網路後,會在最後的卷積層生成一個k^2(C+1)個通道數的網路,其中C代表的是類別個數,+1是因為還有個BG類。平攤下來,每個類別對應k^2的通道,這裡的kxk就是劃分網格的(例如我們在上面圖中舉出的例子就是3x3的網格,也就是k=3的情況)。換句話說,每個通道會生成一個網格數據,那麼在每個類別下的kxk個通道就會生成kxk個網格,組成一個變長為k的正方形作為position-sensitive scores maps.

具體細節

  • BackBone:作者選用的是ResNet,為了實現fully convolutional的效果,做了一些改變,移除了平均池化層和fc層,添加了一個1x1的卷積層用於減少通道數量和一個用於生成k^2(C+1)通道數的卷積層
  • positive-sensitive roi pooling:這個主要解決的是如何從k^2(C+1)個通道中的一個獲取roi的區域,來pooling成kxk中對應的網格值的問題。具體公式可以到論文中計算,主要用的還是平均值池化
  • 從position-sensitive scores maps到類別預測:在得到每個類別的kxk的scores maps後,求它們的平均值,得到的數作為該類別的分數,這樣可以得到C+1個類別的C+1個分數,然後用softmax就可以求出置信度
  • 如何進行邊框回歸:和類別預測非常相似,在生產k^2(C+1)個類別通道的同時,也生產4k^2個通道,然後用類似的思路進行邊框回歸。注意到這裡是沒有類別信息的,因此預測出來的框是class-agnostic的。

按照上面的思路,我們可以發現,這個網路實際上在RoI層之後就沒有需要學習的層了,這也體現出了R-FCN要精簡網路、加快運行的思路。最後放一個整體網路圖:

其它

除了上述細節外,還需要提的有兩點,一個是作者訓練時採用了改變的OHEM策略(online hard example mining),即會對所有的RoI按照Loss排序,選擇其中loss最大的若干個進行訓練。

另一個就是作者除了改變ResNet-101的網路結構,似乎也改變了一些細節,比如conv5 block的stride。

3. 實驗結果

作者做的對比實驗比較多,來看其中比較關鍵的幾個。先是之前提到的naive faster rcnn,結果如下:

可以看到,正如之前所說,naive faster rcnn的效果並不好;而R-FCN的kxk是1x1怎麼沒有辦法收斂?因為1x1本質上是沒有位置信息的,也就是說k=1的情況並沒有很好地反映位置的變化,完全背離了R-FCN的設計思路。

接下來是和Faster rcnn的全方位對比:

收益於RoI之後沒有需要學習的層,RoI數量的增加不會影響R-FCN的訓練時間,但是對於Faster RCNN則並非如此,甚至在RoI數量飽和後容易不收斂……而R-FCN的效果也是最好的。

最終的比較結果:

R-FCN使用了multi-sc train(也就是在訓練時會隨機選擇訓練圖片的尺度)後,取得了很可觀的效果。雖然不如Faster R-CNN+++,但是全面優於Faster RCNN,最重要的是速度非常快。

(以上數據均為在PASCAL VOC上的結果)

4. 總結

R-FCN感覺受FCN啟發還是挺大的。雖然作者提到了提高檢測速度的因素,但是我認為這篇文章最大的亮點還是在對分類位置變化不敏感性和檢測位置變化敏感性的分析,有點深入剖析任務本質的味道。


推薦閱讀:

論文應該怎麼去寫?一篇假文章,看看就好
在社交媒體上曬論文,會帶來更高的引用嗎?
論文數據哪裡找?這些網站不能少!
●關於職稱論文發表時間的要求(部分)
如何選擇SCI論文翻譯平台?

TAG:深度學習DeepLearning | 論文 | 目標檢測 |