目标检测论文阅读:RFB Net

Receptive Field Block Net for Accurate and Fast Object Detection

论文链接:https://arxiv.org/abs/1711.07767
代码链接:https://github.com/ruinmessi/RFBNet
这周接着来看ECCV 2018的文章。这篇RFB Net在我看上一周提到的那篇综述的时候,出现的频率特别高,于是本着好奇的心态研究一下,也和大家做一个简单的分享。

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模块可以很好地整合进其它网络当中。当然,这还需要实验去进一步的验证,从作者给出的实验和解释来看,还是很值得期待的。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值