1. 程式人生 > >目標檢測論文閱讀:RFB Net

目標檢測論文閱讀:RFB Net

Receptive Field Block Net for Accurate and Fast Object Detection

1. Background

這篇論文要解決的問題很簡單,作為單階段的檢測方法,它試圖尋找速度和精度之間的平衡,就像之前很多single stage的方法一樣,在精度近似甚至更優的情況下實現高速度。
不過這篇文章的出發點很有趣,作者認為目前很多single stage的方法為了提高精度,會採用類似ResNet-101這樣較深的網路,從而限制了效率。而手工設計的策略(注意是策略不是特徵、這篇文章本質上還是CNN網路)相較於單純加深網路會有更高的效率。因此作者使用VGG這種light model作為特徵抽取網路(這裡的VGG採用的是SSD中較為高效的結構,並且可以直接和SSD結果進行比較),但在特徵整合上下了一些功夫,提出了RFB模組,並得到了很好的效果。
關於這個RFB模組設計的靈感,其實來源於人類的視覺系統,看下面這張圖:
在這裡插入圖片描述

這張圖其實我也看得似懂非懂,歡迎大家交流吧。只能說看到這裡我都嚇哭了,這年頭不學點生物學、神經學之類的都不好意思說自己是搞CV的。
總之,作者從這張圖得到了如下靈感:

  1. 人類的視覺系統是由多個具有不同感受野的部分複合而成的。而一般的CNN每層的感受野都是固定的,這會損失一些資訊,失去對不同視野的分辨能力,比如靠近中心部分的更重要、需要被強化等。
  2. 看到1,可能有些人自然而然地會想起Inception。確實,Inception模組的並行結構採用的就是不同大小的卷積核,確實是將不同的感受野綜合起來了。但是作者說,Inception中所有的kernels取樣中心是相同的。我個人是這麼理解的,根據之前提到的發現,不同的感受野應該具備不同的離心率,套用到CNN網路,kernels越大,取樣點應該離中心點越遠,應該儘可能地分佈地比較散而不是像Inception那樣kernel大小變化了仍然聚在一起。
    因此,作者給出的最後設計草稿是這樣的:
    在這裡插入圖片描述

大致思想就是通過調節空洞卷積的rate來調節不同大小的卷積核的離心率,比如5x5分支的取樣點和中心的距離就比3x3和1x1的更遠。這個思想應該借鑑了很多ASPP,有興趣的可以去了解這篇文章。
本文的主要貢獻也就是提出了這個模組,並且在用RFB模組簡單替代了SSD中的top層後,取得了相當好的效果。作者認為,這是因為RFB模組對kernels的大小和離心率之間的關係進行了建模。

2. Method

RFB模組設計

根據上述的設計思路,作者給出了具體的實現:
在這裡插入圖片描述

左邊的RFB和最早給出的設計思路基本一致,其中1x1的Conv和Inception一樣,主要用於減少計算量和進行跨通道的資訊融合。右面的RFBs則是RFB進一步優化的結果,其中3x3的Conv代表兩個連續的3x3卷積,用於替代5x5卷積,而1x3和3x1的conv則出於同樣的減少引數量的目的。另外,RFBs使用了較多的小kernel,除了運算量方面的考慮,也更適合關注比較區域性的資訊;比如應用於較淺的層。

網路結構

最終的網路結構如下:
在這裡插入圖片描述

作者的網路是以SSD為基礎的,因為VGG16是一個light model,本身也方便做對比,我在這裡也截取了SSD的網路結構:
在這裡插入圖片描述

可以看到,原來的conv4_3和conv7_fc的特徵現在都要經過RFB模組的處理了。其中,conv4_3模組使用的是RFB-s。而使用特徵抽取網路後的top層被替換成了RFB模組,之所以最後兩個沒有替換,是因為此時它們的feature map已經太小,使用5x5的conv已經顯得過大了。
當然這個結構只是大概的,如果想要了解得更具體,尤其是對SSD也不熟的情況下,建議去看原始碼,不是很複雜。

3. 實驗結果

關於對比實驗這裡就不詳細論述了,感覺沒有太多需要注意的地方。最後來看一下結果:

直觀上來說,RetinaNet800是最好的,但是要考慮到Inference time以及特徵網路的問題。如果對比RetinaNet500和RFB Net 512,會發現RFB Net的效果和速度其實非常優秀。另外,這裡的RFB NET512-E是作者對RFB Net做出進一步改進的結果,改進的地方包括:在RFB-s之前concat conv7和conv4_3的特徵,仿照了FPN的思路……以及為每個RFB模組新增7x7的conv分支。可以看到,優化後,結果已經和RetinaNet500持平,但速度快大概三倍。

RFB Net的另一個特點就是可以從scratch中訓練,即不需要預訓練也可以較好地收斂。RFB Net300在VOC 07+12上可以取得77.6%的成績,而預訓練模型則是80.5%。

作者認為,RFB模組可以很好地整合進其它網路當中。當然,這還需要實驗去進一步的驗證,從作者給出的實驗和解釋來看,還是很值得期待的。