RFBNet,是一篇沒有公式,通俗易懂,圖文并茂,格式優雅的好文,文中提出了RFB,是一個可以內建至其他檢測算法的子產品,從論文的fig2、3、4、5中也很容易了解,就是受啟發于人類視覺感覺系統,提出的RFBNet基于SSD的backbone,結合了Inception、蟲洞卷積的思想,來盡量模拟人類的視覺感覺,最終實驗結果也非常好。
訓練也沒有特别的tricks,占用資源不大,但效果就是好,源碼也看着很舒服,跑起來很容易,速度快,自己的資料集也友善訓練測試,實驗結果非常work,并通過實驗結果證明RFB性能的優秀;如果硬是要找缺點的話,就是效果好,但不知道為什麼效果好,解釋不了,文中也未給出性能好的原因,隻是結合人類視覺認知的觀點。。。
名詞定義:
1 RFB:Receptive Field Block,本文提出的輕量級、并可內建至各類檢測算法的子產品,結合了Inception、蟲洞卷積的思想,可以參照論文的fig2、3、4、5了解;
Abstract
1 現有主流的目标檢測器一般兩條路子:
1.1 使用強有力的主幹網(如ResNet-101、Inception)提取高判别性的特征,但計算開銷大,運作速度慢;
1.2 使用輕量級的主幹網(如MobileNet),運作速度快,但性能就弱一點;
2 本文提出RFB,并将RFB內建至SSD,形成RFBNet;通過設計的RFB子產品,即使在輕量級主幹網上也能提取到高判别性特征,最終RFBNet速度快,性能好;
3 RFB受啟發于人類視覺的Receptive Fields結構,将RFs的尺度、離心率(size and eccentricity of RFs)納入考慮範圍,最終提升了特征的判别性與魯棒性;
4 RFBNet在Pacal VOC、COCO上性能很好,Pacal VOC上map超過80%,但因為主幹網輕量級(MobileNet、VGG16輕量級網絡),速度也很快;---- 是以整體上是一個很實用的網絡結構;
1 Introduction
主流的2-stage目标檢測算法,如RCNN、Fast RCNN、Faster RCNN在Pascal VOC、MS COCO上性能棒棒哒,一般包含兩階段:
1st stage:提類别無關、不可知(category-agnostic)的region proposals;
2nd stage:基于proposals的CNN特征,作進一步bbox cls與reg;
以上方案中,提取proposals特征的CNN主幹網占據着重要角色,我們希望提取到的目标特征,不僅判别性強,而且具有魯棒的位置平移不變性;
現有sota目标檢測算法也都證明了以上觀點:一般都基于強有力的主幹網,如ResNet-101、Inception;FPN使用自頂而下的方式建構特征金字塔,結合了高低層feature map上的特征,Mask RCNN使用RoIAlign生成更精确的regional features,都使用到了性能強悍的主幹網提取到的高判别性特征,弊端就是計算量過大,導緻前向預測耗時也很大;
為了提升模型檢測的速度,1-stage的目标檢測算法應運而生,直接省略了region proposals生成的階段,如YOLO、SSD,盡管可以達到實時的運作速度了,但對比sota的2-stage方法,卻損失了10% ~ 40%的精度;更新的1-stage檢測算法,如DSSD、RetinaNet提升了檢測精度,性能上完全不輸2-stage檢測算法,但依舊使用強大的主幹網(如ResNet-101),耗時又增大了;
那如果我們想檢測器性能佳、速度快,怎麼辦?作者給了個方向:使用輕量級的主幹網,但增加一些人工設計機制(hand-crafted mechanisms),使得提取到的特征表達能力更強,這比無腦的加layer、加conv顯得更加優雅;神經學發現,在人類視覺皮層中,群體感受野(population RF,pRF)的尺度是其視網膜圖(retinotopic maps)偏心度的函數,雖然各個感受野之間有差異,但其尺度都是随着視網膜圖的偏心度而增加的,如fig 1;這一發現揭示了目标區域要盡量靠近感受野中心的重要性,有助于提升模型對小尺度空間位移的魯棒性;一些傳統的淺層特征描述子,如hsog、derf受啟發于以上方案,在局部圖像比對上取得了很不錯的性能;

從fig 1中能說明幾個問題:
(A):1. 群體感受野的尺度是其視網膜圖偏心度的函數,其尺度與視網膜圖的偏心度正相關;
2. 不同視網膜圖上群體感受野的尺度不一樣;
(B):基于(a)中參數的pRFs的空間矩陣,圖中每個圓的半徑為合适離心率下RF的尺度;
除模型本身的替換上,還可以使用同等尺度的FRs對feature map上各個位置點上操作(set RFs at the same size with a regular sampling grid,其實就是單個feature map上正常的conv操作),但可能造成特征判别性、魯棒性的損失,如fig 3;
Inception:通過連接配接多個分支的conv操作(各個分支上最終得到的卷積核尺度不一,可能堆疊多個conv),最終獲得了多個尺度的RFs,Inception V1 ~ V3在目标檢測、圖像分類上性能棒棒哒,但所有的卷積核是在同樣的conv center上做的操作(all kernels in Inception are sampled at the same center,正常的conv操作就是在同樣的center上操作的(與center的距離相等),我的了解就是都使用了相同尺度的卷積核,盡管最終各個分支上達到了不同的感受野,但是通過堆疊相同尺度的conv操作達到的);
ASPP:Atrous Spatial Pyramid Pooling,利用到了多尺度資訊,上、下層feature map間連接配接多個并行的dilated conv分支,每個分支上使用不同的atrous rate,最終得到了對center的不同距離;但蟲洞卷積在前一個feature map上,使用了基于相同尺度的conv kernel,提取到的特征判别性還是不夠;
Deformable CNN:根據目标的尺度、外形自适應地調整RFs的空間分布,盡管其sampling grid是可變的,但卻未考慮到RFs離心率的影響,也即RFs内所有pixel對輸出響應的貢獻率相同,未使用到fig 1中的結論;
受啟發于人類視覺的Receptive Fields結構,本文提出RFB,将RFs的尺度、離心率納入考慮範圍,使用輕量級主幹網也能提取到高判别性特征,使得檢測器速度快、精度高;具體地,RFB基于RFs的不同尺度,使用不同的卷積核,設計了多分支的conv、pooling操作(makes use of multi-branch pooling with varying kernels),并通過蟲洞卷積(dilated conv)來控制感受野的離心率,最後一步reshape操作後,形成生成的特征,如fig 2所示:
從fig 2中可知,RFB也concate了多個conv分支,與Inception結構類似,每個分支上使用不同尺度的正常卷積 + 蟲洞卷積,通過正常卷積的不同卷積核尺度來模拟pRFs中的不同感受野,各個分支上通過各自dilated conv所得到的離心率,來模拟pRF的尺度與離心率的比例;
最終通過concate + 1 x 1 conv減少feature map通道數,得到feature map上spatial array of RF就與fig 1中人類視覺體系中的hV4比較類似了;---- 讀到這裡就明白了,RFB各種操作的良苦用心,就是為了模拟人類的視覺感覺模式,最終得到的結果與fig 1的hV4比較類似;
本文進一步将RFB內建至SSD,形成1-stage的RFBNet,RFBNet精度可以與sota的2-stage檢測算法相媲美,且不使用ResNet-101這種主幹網,僅用輕量級主幹網,速度很快;此外,實驗中将RFB子產品內建至MobileNet中,性能也很好,這充分表明了RFB本身的高泛化能力、和小強般的可适應性;
本文spotlight如下:
1. 提出RFB子產品,RFB受啟發于人類視覺的Receptive Fields結構,将RFs的尺度、離心率納入考慮範圍,即使通過輕量級的網絡結構,也能提取到高判别性的特征;
2 提出将RFB內建至SSD(直接使用RFB替換SSD的top conv層即可),形成RFBNet,速度快,性能好;
3. RFBNet在Pacal VOC、COCO上性能很好,Pacal VOC上map超過80%,但因為主幹網輕量級(MobileNet、VGG16輕量級網絡),速度也很快,實時;
2 Related Work
Two-stage detector
提到了RCNN、Fast RCNN、Faster RCNN、R-FCN、FPN、Mask RCNN,模型性能逐漸提升;
One-stage detector
有代表性的YOLO、SSD,直接在整個feature map上預測多個目标的cls score、bbox loc,都使用了輕量級的主幹網以提升模型檢測速度,但精度就弱于2-stage的方法了;
DSSD、RetinaNet将輕量級主幹網替換為ResNet-101,再使用到如de-conv、focal loss等微操,性能接近、甚至優于2-stage的目标檢測算法,但犧牲了檢測速度;
Receptive field
本文目标:提升1-stage目标檢測算法的性能,卻不引入大量的計算開銷;是以本文未使用直接替換高計算量主幹網的無腦做法,而是受啟發于人類視覺系統的RFs機制,引入RFB,在輕量級主幹網上也能提取到高判别性的特征;
RFs也已被深入研究,如Inception、ASPP、Deformable CNN,如fig 3:
Inception:通過連接配接多個分支的conv操作(各個分支上最終得到的卷積核尺度不一,可能堆疊多個conv),最終獲得了多個尺度的RFs;但所有的卷積核是在同樣的conv center上做的操作,需要更大的卷積核才能生成相同的采樣覆寫率(這個我不是很懂),可能丢失目标的重要資訊;
ASPP:利用到了多尺度資訊,上、下層feature map間連接配接多個并行的dilated conv分支,每個分支上使用不同的atrous rate,最終得到了對center的不同距離;但蟲洞卷積在前一個feature map上,使用了基于相同尺度的conv kernel,認為featre map上每個位置對目标的貢獻率相同,可能混淆目标本身和context,提取到的特征判别性還是不夠,;
RFB:強調了類似fig1 hV4的daisy-shape中,RF尺度與離心率間的關聯度,距離conv center比較近的位置,通過更小的kernel擷取賦予更大的權重(bigger weights are assigned to the positions nearer to the center by smaller kernels),使得靠近center位置的特征更加被強調出來,距離center越遠,其對對中特征的貢獻率越低;
目前,Inception、ASPP并未在1-stage檢測器中取得很好的性能,但RFB結合了二者的優點後,取得了不錯的性能提升;
3 Method
本節介紹視覺感覺皮層、RFB各個子產品,RFB模拟視覺感覺的方法,RFBNet的結構,訓練 / 測試方案等;
3.1 Visual Cortex Revisit
核磁共振技術(fMRI)可以毫米級精度地檢測到人腦活動,感受野模組化也成為衡量人腦活動的重要感覺方式,pRF模型:神經元的集合反應區域(pooled responses of neurons),基于fMRI + pRF,就可以進一步探索人腦視覺皮層内各區域間的關系,在視覺皮層中,研究人員發現了pRF尺度與偏心率呈正相關,且在不同感visual field maps中,其相關系數還不同;---- 不是很懂,但可結合fig 1了解;
3.2 Receptive Field Block
RFB是一個多分支的conv block,内部結構包含兩部分:
1 不同卷積核尺度的多分支conv,于Inception結構等價,用于模拟多尺度的pRFs;
2 蟲洞卷積操作,用于模拟人類視覺感覺中pRF尺度與離心率間的關系;
RFB子產品的可視化結果如fig 2所示;
Multi-branch convolution layer
Inception結構證明:使用多個分支的不同conv kernels,來擷取多尺度RFs,性能優于固定conv kernel的方案,RFB使用了最新的Inception結構:Inception V4、Inception-ResNet V2;
具體地:先1 × 1 conv降低feature map通道數,在每個分支上形成bottleneck結構,再接正常n × n conv;并替換5×5 conv為兩個堆疊的3×3 conv,不僅降低了參數量,也增加了模型的非線性能力,并進一步使用1 × n + n × 1 conv替換原始n × n conv,并還有一個如ResNet的shortcut設計,如fig 4;
Dilated pooling or convolution layer
結合fig 4,就是增加了蟲洞卷積,核心思想:在保持相同數量參數,生成更大分辨率feature map的前提下,增加各層feature map的感受野,使之擷取更多的上下文資訊;蟲洞卷積在SSD、R-FCN上性能很好,RFBNet使用蟲洞卷積來模拟人類視覺感覺中pRFs離心率的作用;
結合fig 4就很好了解了,每個分支的正常conv操作後,連接配接一個dilates conv層(即conv,ratio),可以注意到,正常conv的kernel size與dilate conv的ratio剛好是對應的,作者認為就可以模拟pRFs的尺度與離心率;---- 雖然我并不懂這個原理;
最後各個分支concate後再接1 x 1 conv,再與shortcut做element-wise sum,可視化結果就如fig 1、2所示了;
3.3 RFB Net Detection Architecture
RFBNet基于multi-scale + 1-stage的SSD, 将RFB子產品直接接到SSD的top conv層即可,速度快,效果好,還可以複用SSD的很多參數;
Lightweight backbone
複用了SSD的backbone VGG16,在ILSVRC CLS-LOC上做pre-train,将fc6、fc7全連接配接層參數做sub-sampling後變為conv layer,pool5改2×2-s2為3×3-s1(feature map尺度未降),并新增dilated conv以擴大感受野,忽略fc8和所有的dropout層;
RFB on multi-scale feature maps
SSD使用特征金字塔的多分支檢測目标,feature map尺度逐漸減少,感受野逐漸增大,RFBNet繼承SSD的結構,在高分辨率的conv4-3上接RFB-s子產品,模拟人類視網膜中的小尺度pRFs;最頂兩層未使用RFB子產品,作者說主要是feature map尺度太小了,沒法使用類似5 x 5尺度的卷積核;
3.4 Training Settings
RFBNet實作基于ssd.pytorch,訓練政策與SSD一緻:資料增強、OHEM、default box的尺度、長寬比設定,損失函數(loc:smooth L1 loss;cls:softmax loss),僅修改了 lr 的設定方式,新增卷積層使用MSRA的方法,對應代碼裡面的kaiming_normal;
4 Experiments
RFBNet在Pascal VOC 2007(20類)、MS COCO(80類)上測試,Pascal VOC計算mAP的gt bbox與pred bbox的IoU門檻值為0.5;COCO屌一點,COCO-style的AP評估标準為IoU門檻值從[0.5,0.95]區間,stride = 0.05,可以更全方位地評估檢測器性能;
4.1 Pascal VOC 2007
使用trainval_2007 + trainval_2012(二者因為資料有重複,是以取交集資料)訓練RFBNet,共訓練250個epochs;如果直接複用SSD中lr = 10-3訓練,會導緻RFBNet訓練時loss劇烈波動,不易收斂,實驗中采用的 “warmup” 政策:前5個epochs,将 lr 從10−6逐漸提升至4×10−3,再用正常訓練政策,在150 / 200 epochs上分别将 lr 減少10倍;
table 1為RFBNet性能,SSD300* / SSD512*通過資料增強生成更多的小尺度樣本圖檔用于模型訓練,RFBNet512的mAP:82.2%,與2-stage的R-FCN很接近,而R-FCN基于ResNet-101的主幹網,速度卻慢很多;
4.2 Ablation Study
來一波消融實驗,結果如table2、3:
RFB module
baseline:SSD300*(全新的資料增強方法),mAP:77.2%,替換最後的conv層至RFB-max pooling,就可以79.1%,說明RFB子產品的性能不錯;
Cortex map simulation
增加RFB-s:修改RFB參數來模拟cortex maps中pRFs尺度與離心率的比例,從table 2中可知mAP:79.1% -> 79.6%(RFB max-pooling),80.1% -> 80.5%(RFB-dilated conv);
More prior anchors
原版SSD在conv4_3、conv10_2、conv11 2上設定4個default boxes,其他層設定6個default boxes,但HR、S3FD認為檢測小尺度目标的低層feature map上(如conv4_3),若設定更多anchor,可以更友善召回小尺度目标;
于是在SSD、RFBNet的conv4_3上也都設定了6個default boxes,實驗結果發現對SSD沒性能提升,但對RFBNet确有性能提升(79.6% -> 79.8%);
Dilated convolutional layer
table 2中對比了RFB-max pooling、RFB-avg pooling、RFB-dilated conv三種方案,發現RFB-dilated conv性能最好(79.8% -> 80.5%),原因:前兩種方案(dilated pooling)雖然避免了新增額外的參數,卻限制了多尺度RFs的特征融合;
Comparison with other architectures
Inception-L:修改該子產品内參數,使之與RFB有相同尺度的RF;
ASPP-S:原版ASPP中參數訓練于圖像風格資料,對目标檢測而言,其RFs過大,實驗中也做了調整,使之RFs尺度與RFB保持一緻;
消融實驗也很容易做,在fig 5中把最頂層換成table 3中各個子產品,其他訓練流程、參數保持一緻,可以發現RFB還是最牛逼的,且作者認為RFB有更大尺度的RF,會帶來更精準的目标定位;
4.3 Microsoft COCO
COCO上來一波:訓練集trainval35k(train + val 35k set),複用SSD在COCO中減少default box尺度的政策(因COCO上目标尺度遠小于Pascal VOC),仍使用Pascal VOC類似的 “warmup” 政策,總共訓練120個epochs;
從table 4中可知,RFBNet性能很好,比baseline的SSD300*性能好,比基于ResNet-101主幹網的R-FCN快(輸入600 × 1000 pix圖像),RFBNet512與RetinaNet500性能比較接近,但RetinaNet500使用ResNet-101-FPN主幹網 + focal loss,RFBNet512僅基于輕量級的VGG16模型,速度快很多;
RetinaNet800雖然性能最好,但基于800 pix短邊圖像輸入,耗時就更長了;
RFBNet512-E使用兩種方案進一步提升模型性能(mAP:34.4%,耗時卻隻增加3ms):
1 與FPN類似,在使用RFB-s前,将conv7 fc的feature map上采樣(RFBNet是全卷積,是以conv7 fc也是4-d tensor),再與conv4_3做concate;
2 在所有RFB子產品中增加一個7 x 7卷積核的分支;---- 對應到RFB_Net_E_vgg.py代碼中,分為1 x 7的conv、7 x 1的conv、dilation = 7的蟲洞卷積等;
5 Discussion
Inference speed comparison
結合table 1、fig 6,RFBNet真膩害,速度快,實時,效果好,都集中在圖像左上角;
Other lightweight backbone
table 5,在MobileNet-SSD上添加RFB子產品,train + val35k上訓練,minival5k上測試,可以進一步提升性能,充分證明了RFB本身強大的泛化能力;
Training from scratch
現在訓練檢測器一般都是基于在ImageNet上已訓練好的分類模型,以該分類模型為backbone,再在檢測資料集上繼續訓練(相當于複用分類模型的參數,因為分類模型也有很強的特征提取能力);如果檢測器參數也從零訓練,一般效果都不怎麼好;
DSOD:無需預訓練模型,直接使用輕量級結構在VOC 2007上從零訓練, test set上mAP:77.7%,但若使用pre-trained模型訓練,性能竟沒有進一步提升;---- 煉丹啊,毫無道理可言;
RFN子產品竟然也有從零訓練的能力,作者将RFBNet-300也在VOC 07+12 trainval上training from scratch,在test set上mAP:77.6%,與DSOD旗鼓相當,但如果增加了輕量級VGG16作為pre-trained backbone,mAP就到了80.5%,真是神奇啊~~~
6 Conclusion
1 本文提出RFB,受啟發于人類視覺的Receptive Fields結構,不使用計算量大、層數深的主幹網,通過輕量級主幹網結構,結合RPB子產品,也能提取到高判别性的特征;
2 RFB度量了RFs的尺度、離心率間的關系,可以生成更有判别性、更魯棒的特征;
3 将RFB內建至SSD(輕量級的VGG16做主幹網),形成RFBNet,RFBNet在Pacal VOC、COCO上性能很好,Pacal VOC上map超過80%,與sota的2-stage檢測算法(使用高計算量的主幹網,如ResNet-101)性能相當,且因為RFBNet主幹網輕量級,運作速度很快;