论文地址:Single-Shot Refinement Neural Network for Object Detection
项目地址:RefineDet
0x01 Abstract
当前的目标检测网络主要分为两大类:
single-stage
:SSD、YOLO、YOLO9000two-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
大于一个阈值 θ ( θ=0.99 ),那么在训练ODM时将它舍弃。也就是通过hard Negative anchor
和ARM anchor来训练ODM。
RefineDet的损失函数由两部分组成,即ARM中的损失和ODM中的损失。损失函数定义为
L({ pi},{ xi},{ ci},{ ti})=1Narm(∑iLb(pi,[l∗i≥1