RFB论文阅读_特征抽取

题目:DSSD: Deconvolutional Single Shot Detector
接收场块网,用于精确,快速的目标检测

RFB论文阅读_设计思路_02

RFB论文阅读_神经网络_03

作为单阶段的检测方法,作者试图寻找速度和精度之间的平衡,就像之前很多single stage的方法一样,在精度近似甚至更优的情况下实现高速度。
不过这篇文章的出发点很有趣,作者认为目前很多single stage的方法为了提高精度,会采用类似ResNet-101这样较深的网络,从而限制了效率。
而手工设计的策略(注意是策略不是特征、这篇文章本质上还是CNN网络)相较于单纯加深网络会有更高的效率。
因此作者使用VGG作为特征抽取网络(这里的VGG采用的是SSD中较为高效的结构,并且可以直接和SSD结果进行比较),但在特征整合上下了一些功夫,提出了RFB模块,并得到了很好的效果。
总之,作者从这张图得到了如下灵感(第三页的图):
1、人类的视觉系统是由多个具有不同感受野的部分复合而成的。而一般的CNN每层的感受野都是固定的,这会损失一些信息,失去对不同视野的分辨能力,比如靠近中心部分的更重要、需要被强化等。
2、看到1,可能有些人自然而然地会想起Inception(谷歌提的那个)。确实,Inception模块的并行结构采用的就是不同大小的卷积核,确实是将不同的感受野综合起来了。
但是作者说,Inception中所有的kernels采样中心是相同的。根据之前提到的发现,不同的感受野应该具备不同的离心率,套用到CNN网络,kernels越大,采样点应该离中心点越远,应该尽可能地分布地比较散而不是像Inception那样kernel大小变化了仍然聚在一起。

RFB论文阅读_深度学习_04

因此,作者给出的最后设计草稿是这样的(如):
大致思想就是通过调节空洞卷积的rate来调节不同大小的卷积核的离心率,比如5x5分支的采样点和中心的距离就比3x3和1x1的更远。这个思想应该借鉴了很多ASPP。
本文的主要贡献也就是提出了这个模块,并且在用RFB模块简单替代了SSD中的top层后,取得了相当好的效果。
作者认为是因为RFB模块对kernels的大小和离心率之间的关系进行了建模。

RFB论文阅读_设计思路_05

RFB论文阅读_卷积_06

根据上述的设计思路,作者给出了具体的实现:

左边的RFB和最早给出的设计思路基本一致,其中1x1的Conv和Inception一样,主要用于减少计算量和进行跨通道的信息融合。
右面的RFBs则是RFB进一步优化的结果,其中3x3的Conv代表两个连续的3x3卷积,用于替代5x5卷积,而1x3和3x1的conv则出于同样的减少参数量的目的。
另外,RFBs使用了较多的小kernel,除了运算量方面的考虑,也更适合关注比较局部的信息;比如应用于较浅的层。

RFB论文阅读_卷积_07

最终的网络结构如第一张图所示:

作者的网络是以SSD为基础的,为了方便做对比,我在这里也截取了SSD的网络结构:

可以看到,原来的conv4_3和conv7_fc的特征现在都要经过RFB模块的处理了。其中,conv4_3模块使用的是RFB-s。
而使用特征抽取网络后的top层被替换成了RFB模块,之所以最后两个没有替换,是因为此时它们的feature map已经太小,使用5x5的conv已经显得过大了。

RFB论文阅读_神经网络_08

直观上来说,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论文阅读_深度学习_09

结合第8页和第9页的PPT来看,好像RetinaNet的效果更好,
问题:APs相差8%,就能相差这么大的吗?(见yolov3和ssd的检测效果)

RFB论文阅读_神经网络_10