【目标检测】RefineDet :Single-Shot Refinement Neural Network for Object Detection

论文:《Single-Shot Refinement Neural Network for Object Detection》 CVPR2018

论文地址https://arxiv.org/pdf/1711.06897v1.pdf

代码链接https://github.com/sfzhang15/RefineDet

参考文章https://blog.csdn.net/u014380165/article/details/79502308

                  https://blog.csdn.net/woduitaodong2698/article/details/85258458

                  https://www.cnblogs.com/hellcat/p/10357220.html

1、主要思想​​​​

  • 引入two stage类型的object detection算法中对box的由粗到细的回归思想(由粗到细回归其实就是先通过RPN网络得到粗粒度的box信息,然后再通过常规的回归支路进行进一步回归从而得到更加精确的框信息,这也是two stage类型的object detection算法效果优于one stage类型的一个重要原因)。
  • 引入类似FPN网络的特征融合操作用于检测网络,可以有效提高对小目标的检测效果,检测网络的框架还是SSD。

2、网络结构

Figure1是RefineDet网络的结构图(直观的特点就是two-step cascaded regression),主要包含三个部分:anchor refinement module (ARM) 、object detection module (ODM)、transfer connection block (TCB)
【目标检测】RefineDet :Single-Shot Refinement Neural Network for Object Detection

整体来看该网络和tow stage的结构很像(都可以概括为two-step cascaded regression),一个子模块做RPN的事,另一个子模块做SSD的事。因此SSD是直接在default box的基础上进行回归的,而在RefineDet中是先通过ARM部分生成refined anchor boxes(类似RPN网络输出的propsoal),然后在refined anchor boxes基础上进行回归,所以能有更高的准确率,而且得益于特征融合,该算法对于小目标物体的检测更有效。

2.1、anchor refinement module (ARM)

anchor refinement module (ARM)部分类似Faster RCNN算法中的RPN网络,主要用来得到bbox(类似Faster RCNN中的ROI或proposal)和去除一些负样本(这是因为负样本数量远大于正样本)。因此基于4层特征最后得到的还是两条支路,一个bbox的坐标回归支路,另一个是bbox的二分类支路。我们知道在Faster RCNN算法中RPN网络存在的意义就是生成proposal(或者叫ROI),这些proposal会给后续检测网络提供较好的初始信息,这也是one stage的object detection算法和two stage的object detection算法的重要区别,这里的anchor refinement module基本上扮演了RPN网络的角色,如果一定要说不同点的话,那应该就是这里的输入利用了多层特征,而RPN网络的输入是单层特征。

2.2、transfer connection block (TCB)

该部分是做特征的转换操作,也就是将ARM部分的输出feature map转换成ODM部分的输入,这部分其实和FPN算法的特征融合很像,FPN也是这样的upsample后融合的思想。

具体结构如Figure1所示:

【目标检测】RefineDet :Single-Shot Refinement Neural Network for Object Detection

2.3、object detection module (ODM)

部分和就基本上是SSD了,也是融合不同层的特征,然后做multi class classification和regression。主要的不同点一方面在于这部分的输入anchors是ARM部分得到的refined anchors,类似RPN网络输出的proposal。另一方面和FPN算法类似,这里的浅层feature map(size较大的蓝色矩形块)融合了高层feature map的信息,然后预测bbox是基于每层feature map(每个蓝色矩形块)进行,最后将各层结果再整合到一起。而在SSD中浅层的feature map是直接拿来用的(并没有和高层的feature map融合),也就是对bbox的预测是在每一层上进行的,预测得到结果后再将各层结果整合在一起,这是非常重要的区别。这样做的好处就是对小目标物体的检测效果更好,这在FPN和RON等算法中已经证明过了。

3、loss函数的设计

网络训练过程是端到端的训练方法,loss函数也是常规的分类softmax和目标检测的框回归smoothL1。损失函数公式如下所示:

【目标检测】RefineDet :Single-Shot Refinement Neural Network for Object Detection

其中【目标检测】RefineDet :Single-Shot Refinement Neural Network for Object Detection 的含义为在框回归的时候只计算正样本的loss。

4、训练方式和推理过程

在coco的数据集上,选用vgg16的网络结构,全部的图片resize到512x512的条件下,batch size设置为32,使用4张显卡来训练,0.9动量,0.0005的权重衰减率,前280k次的迭代使用的学习率为10e-3,后80k和40k次的迭代使用的学习率分别为10e-4、10e-5。

在推理阶段ARM将置信度高于0.99的负样本过滤掉,ODM只会输出置信度前400个物体预测样本,然后使用非极大值抑制(阈值为0.45),只会留下置信度为前200个预测样本作为最终的输出结果。

5、实验结果

【目标检测】RefineDet :Single-Shot Refinement Neural Network for Object Detection【目标检测】RefineDet :Single-Shot Refinement Neural Network for Object Detection

速度和SSD相近,精度明显更高,精度更高没什么好说的,速度在多了下面一部分卷积层和反卷积层的情况下没有明显下降,作者分析有两点原因,anchors较少以及基础网络后的附加网路层数少、特征选取层更少(4个,我记得SSD有5个),作者原文:  

1. 我们使用了较少的anchor,如512尺度下,我们总共有1.6W个框,而SSD有2.5W个框。我们使用较少anchor也能达到高精度的原因是二阶段回归。虽然我们总共预设了4个尺度(32,,64,128,256,)和3个比例(0.5,1,2),但是经过第一阶段的回归后,预设的anchor被极大的丰富了,因此用于第二阶段回归的anchor,具备着丰富的尺度和比例。    

2. 第2个原因是,由于显存限制,我们只在基础网络的基础上,新加了很少的卷积层,并只选了4个卷积层作为检测层。如果增加更多卷积层,并选择更多检测层,效果应该还能得到进一步提升。