Single-Shot Refinement Neural Network for Object Detection

论文链接:https://arxiv.org/pdf/1711.06897v1.pdf
代码链接:https://github.com/sfzhang15/RefineDet
今天接着看CVPR 2018的文章,不过总的来说,这篇文章亮点不是很多,谈不上insight,大致上可以看做将Faster RCNN的two stages检测方法和SSD结合了起来,在保证performance的情况下,取得了不错的速度。文章的内容不是很多。

1. Introduction

目前,检测方法主要分为two stages和one stages,前者的准确度较高,后者的速度较快。Two stages的方法之所以准确度高和速度慢,是因为它采用了RPN机制,对候选框进行初步的筛选,提取RoI得到初步结果后,再通过第二阶段对其进行进一步的回归和分类。

作者就从这两种方法的区别当中得到了思路,他提出了一个one stage的方法,但是通过两个不同的模块来模仿faster rcnn的两个不同的阶段,从而在保证速度的前提下提高了监测效果。

主要的模型框架如下:

目标检测有什么期刊 目标检测 期刊_github


上面的模块是anchor refinement module,简称ARM,用于初步生成proposal,得到class-agnostic的候选框,对应的是faster rcnn的RPN阶段;下面的模块是object detection module,简称ODM,用于对上个模块的结果进行进一步的回归和分类,对应faster rcnn的R-CNN阶段……而提速的原因也很简单,没有从特征图中提取RoI特征并pooling的过程,而是直接把整个特征图进行了传递。作者把该网络成为RefineDet。

2. Network Architecture

ARM

该模块和RPN的思路类似,用于对物体进行初步的分类和回归,且分类不带类别信息(只区分前景和背景),主要作用如下:

  1. 过滤掉部分negative anchors,减少搜索空间;这个对结果的提升效果比较明显,作者认为two stages方法之所以效果好,很大一部分原因是因为RPN可以过滤掉极端样本,解决imbalance问题,得到比较好的采样结果
  2. 给ODM进一步的分类和回归提供一个比较原始的信息

大部分机制和SSD比较像,比如Anchor的匹配,overlap阈值选择为0.5。另外,从结构图中可以看到,和SSD类似,这也是一个multi scales的检测框架,作者会在每个scale的feature map上得到n个refined anchor boxes,并将这些boxes的信息传入下一个模块,在传入之前会进行过滤,如果一个refined anchor box的negative confidence,也就是背景类的预测分数大于某个预设的阈值(比如0.99),就排除它,不考虑使用它训练ODM模块,这就是作者说的过滤部分negative anchors的功能……相对的是,在inference的时候,如果refined anchor box的negativea confidence比阈值大,也会在ODM中排除它。

比较值得注意的一点是,作者认为two stages的方法会大大提升检测效果,尤其是对小目标的物体,不过原因没有细谈,有想法的同学不妨留言聊聊这个问题。

ODM和TCB

ODM是什么已经说过了,ODM接受的是ARM经过Hard Negative Mining后的结果(虽然ARM reject了一部分anchor,仍然要做这一步骤,正负比例为1:3)。实际上本文的ODM也没有太多可以说的内容,都是大家熟悉的,主要谈谈TCB;TCB是指把ARM中的特征转化为ODM特征的模块……TCB的实现方式如下图:

目标检测有什么期刊 目标检测 期刊_github_02


应该也是很通俗,看一下就知道怎么做的了。比较值得说的是,TCB同样包含了不同scales的feature map融合的思路,和FPN有一点像,不过它将high semantic的较小feature map增大的方法是通过3x3的deconv实现的而不是upsample,不过这两者在效果上有没有差别没有看到作者有相关的论证,稍微有点可惜。笔者对这两者的研究也不是很充足,有机会希望研究和大家分享下~

其它

具体的网络设置就不说了,比较特殊的地方:

  1. Loss函数有两个部分组成的,ARM和ODM,各自的求法和常见的求法都一样
  2. 作者的结果都使用了数据增广,部分结果使用了multi scales testing strategy(感觉槽点有点大,毕竟不是without whistles,总是觉得有点水分)

3. Experiment

PASCAL VOC的测试结果如下:

目标检测有什么期刊 目标检测 期刊_目标检测有什么期刊_03


结果谈不上经验,但是速度FPS确实很快,实际上作者在Input size并不大的情况下取得了很好的效果。

COCO的测试结果如下,可惜并没有贴出速度= =:

目标检测有什么期刊 目标检测 期刊_github_04

总的来说,这篇文章技巧性的东西会比较多,没有太多深入的分析,但是由于速度很快效果也不差,应该还是有一定的适用空间,有兴趣的可以详细看看代码。