前言
本文设计了一种新的目标检测框架,称为RefineDet,它通过两个互相连接的模块来对one-stage方法进行改进,从而在保持one-stage检测效率的同时,又能提升检测精度。这两个模块分别为:
- anchor refinement module(ARM):识别并移除negative anchor,以减小分类器的搜索空间,同时粗略地调制anchor的位置和大小,从而为后续的回归操作提供一个好的初始化。
- object detectionmodule(ODM):将ARM中经过调制的anchor作为输入,以进行更好的回归操作,并预测多类别标签。
这两个互相连接的模块模仿了two-stage检测器的结构,因此继承了two-stage检测器的三个优点:
- 使用two-stage结构以及启发式采样以解决类别不平衡问题;
- 使用two-step级联以回归bbox的参数;
- 使用two-stage特征来描述目标(RPN中首先对目标进行二分类,Fast R-CNN中进行多类别分类)。
除此之外,本文还设计了transfer connection block(TCB) 对ARM的特征进行迁移,以处理ODM中更具挑战性的任务,比如预测位置、尺度以及类别标签。
网络结构
上图是RefineDet的整体结构,它基于一个前向传播的卷积网络,由两个相互连接的模块,ARM和ODM组成。ARM是通过移除分类层,然后添加两个基础网络(VGG-16和ResNet-101)的一些辅助结构形成的;ODM包含TCB的输出,后跟预测层。
RefineDet中有三个核心组件:
- TCB,将ARM的特征转换为ODM的输入,以进行检测;
- two-step级联回归,精确回归目标的位置和大小;
- 负样本过滤,尽可能去除well-classified negative anchor,以缓和类别不平衡问题。
1. TCB
TCB用来连接ARM和ODM,它对ARM中来自不同层的特征进行转换,使其能够作为ODM的输入,这样的话ODM就能够共享ARM的特征。除此之外,TCB还实现了不同尺度的特征图的融合,通过对高级特征进行反卷积操作,以使维度匹配,然后通过element-wise sum方式将高级特征与低级特征结合起来,以提升检测的准确率。在相加操作之后还要添加一个卷积层,以确保特征的判别性。
2. two-step级联回归
通常one-stage检测器采用的是one-step回归,基于不同尺度的特征图来预测目标的位置和大小,但是这种方法并不总能达到很好的准确率,尤其当检测小目标的时候。基于此,本文提出two-step级联回归,先使用ARM调整anchor的位置和大小,然后ODM使用这些refined anchor进行更好的预测。
在ARM中,在特征图的每个cell处分配个anchor,也就是说每个anchor相对于其对应的cell的初始位置是固定的。然后在每个cell上预测四个偏移值 和两个置信度,偏移值是refined anchor相对于原始固定的anchor的offset,两个置信度分别是前景置信度(positive confidence)和背景置信度(negative confidence),这样在每个cell处就能得到个refined anchor。
在得到refined anchor之后,将它们传入ODM中相应的特征图中,以进一步生成目标类别标签以及准确的目标位置和大小。计算 个类别分数和4个精确的偏移值,这样每个refined anchor就有个输出。ARM和ODM实现的two-step级联回归能够得到更准确的检测结果,对小目标的检测效果比one-step回归更好。
3. 负样本过滤
为了尽可能去除背景置信度较高的负样本,减轻正负样本分类不平衡问题,本文提出负样本过滤机制。
- 在training阶段,对于一个refined anchor来说,如果其背景置信度大于一个给定的阈值(比如),那么这个样本将不会参与到ODM的训练中。也就是说,只将前景置信度较高的正样本,以及难以区分的负样本(hard negative)传入ODM中。
- 在inference阶段,如果一个refine anchor的背景置信度大于,那么该样本不会参与到检测中。
training&inference
1. 数据扩增
为了增强模型的鲁棒性,采用随机填充、随机裁剪和随机翻转等数据扩增方式。
2. backbone
本文使用VGG-16和ResNet-101作为backbone,为了捕获高级特征并且进行不同尺度的目标检测,在VGG-16后面添加了两个卷积层,在ResNet-101后面添加了一个残差块。注意VGG-16和ResNet-101都没有使用全部,而是截取了一部分。
3. anchor的设计和匹配
为了处理目标的多尺度问题,RefineDet中采用了4种不同步长大小的特征层,分别是8,16,32,64,每个特征层对应不同大小的anchor(anchor的大小是步长的4倍),并且anchor有三种长宽比,分别为0.5,1.0和2.0。在训练时,首先将每个gt与IoU最高的anchor匹配在一起,这样每个gt就都能分配一个anchor;然后对于剩下未被匹配的anchor,与任一个IoU大于0.5的gt匹配在一起。
4. 正负样本的筛选
即使经过ARM对于负样本的过滤,负样本的比例依然远远大于正样本。因此采用hard negative mining策略,选择loss的值排在前面的负样本,以确保负样本和正样本的比例低于3:1。
5. 损失函数
RefineDet的损失函数由两部分组成:ARM的损失和ODM的损失,定义如下:
- 是mini-batch中anchor的索引;
- 是anchor 的gt类别标签;
- 是anchor 的gt位置和大小;
- 是ARM中的置信度,说明anchor 是否是一个目标;
- 是anchor 在ARM中的初步坐标预测值;
- 是ODM中预测的目标类别;
- 是ODM中预测的bbox的坐标值;
- 和分别是ARM和ODM中正样本的数量;
- 二分类损失是在两个类上(object or not object)的交叉熵损失;
- 多分类损失是在多个类的置信度上的softmax损失;
- 回归损失是smooth L1 loss;
- 说明不考虑负样本的回归损失。
结论
本文提出的single-stage检测网络也算是SSD的衍生物,其中最核心的部分就是two-step级联回归,从而在single-stage检测器中模仿two-stage检测器的结构,以达到并且超越two-stage检测器的精度。