论文地址:Single-Shot Refinement Neural Network for Object Detection
项目地址:RefineDet
0x01 Abstract
当前的目标检测网络主要分为两大类:
-
single-stage:SSD、YOLO、YOLO9000 -
two-stage:Faster RCNN 、 R-FCN、Mask R-CNN
single-stage通过对位置,比例和长宽进行规则和密度采样来检测对象。two-stage首先选取目标区域,然后对目标分类。single-stage方法速度快,但是检测精度比two-stage低。
因此作者提出了RefineDet方法,同行继承了two-stage和single-stage两者的优点。它有两个模块构成,一个是anchor细化模块(ARM)一个是目标检测模块(ODM)。
ARM模块用来减小分类器的搜索空间,粗略地描述anchor的位置和大小。通过连接模块(TCB)将ARM中的特征,传输给ODM模块,以获取更加准确的目标位置和大小。
其实这里我们可以知道,这个网络的好处就是将那个原来two-stage的串行结构转化成了并行结构。很不错的思想!!!
0x02 网络结构
和SSD一样,RefineDet采用前馈网络,该网络产生固定数量的框,并且区分框中的不同类别对象,最后非极大值抑制输出最终结果。
RefineDet有两个互相连接的模块ARM和ODM组成。这两个模块之间通过TCB模块连接
而且这里的TCB是将不同层次的ARM特征转化为ODM,它这里有一个回传的操作,将高层次的特征通过去卷机操作(实际是一种转置卷积),使特征图之间的尺寸匹配,然后与低层次的特征相加。
针对小目标的识别,作者这里采用了两步级联回归。在ARM中先调整anchor的位置和大小,然后用这种粗略的操作作为ODM的输入,最后ODM再进一步检测和识别物体,这种做法会有更加精确的检测结果。
single-stage精度落后于two-stage的一个主要原因是类别不平衡问题。为了解决这种问题,作者采用了Negative anchor过滤。在训练阶段,针对ARM中的anchor,如果negative confidence大于一个阈值hard Negative anchor和ARM anchor来训练ODM。
RefineDet的损失函数由两部分组成,即ARM中的损失和ODM中的损失。损失函数定义为
其中i表示一个batch中的第几个anchor,anchor_i的ground truth的类别 ,anchor_i的ground truth位置和大小,positive anchor数量。negative confidence大于一个阈值