论文: FoveaBox: Beyond Anchor-based Object Detector
代码: https://github.com/taokong/FoveaBox
作者: Tao Kong, Fuchun Sun, Huaping Liu, Yuning Jiang, Jianbo Shi
一、FoveaBox的提出
大多数state-of-the-art的检测器依赖于anchor boxes来枚举目标对象的可能位置、尺寸和宽高比。在two-stage的检测器中,anchors是预测候选框的回归参考;在one-stage的检测器中,anchors是最终bouding boxes的参考。但是它们的性能和泛化能力受限于anchor boxes的设计。其缺点主要体现在:
- anchor boxes引入了额外的超参数。在设计anchor boxes时的一个重要因素是它可以覆盖多少的对象位置空间。
- 在特定数据集上设计的anchor boxes并不总是适用于其它的应用,这影响了泛化能力。
- 会造成背景-前景的不均衡性
作者考虑到我们人类可以很自然地识别视觉场景中的物体,不需要枚举候选框。受此启发,一个直觉性的问题是,anchor boxes方案是引导物体搜索的最佳方法吗? 如果答案是否定的,我们能否设计出一个精确的不依赖于anchors或者candidate boxes的物体检测框架吗?
为此作者提出了FoveaBox,这是一个anchor-free的object detection框架。FoveaBox主要受人的眼睛的fovea的启发: 视野(对象)的中心具有最高的视敏度。 FoveaBox同时预测object的中心区域位置和在每个有效位置的边界框。
FoveaBox在训练和测试时不依赖于anchor,因此它对bouding boxes的分布更加鲁棒,而且相较于基于anchor的检测器,其泛化能力也更强。
二、FoveaBox的介绍
FoveaBox是一个简单、统一的网络,包括一个骨干网络和两个task-specific的子网络。骨干网络负责提取输入图像的特征。第一个子网络在骨干网络输出的特征图上进行逐像素的分类;第二个子网络在响应的位置进行bounding box的预测。 为了简洁性和公平的对比,这里采用了RetinaNet的设计, 如Figure 4所示。
2.1 Feature Pyramid Network Backbone and Scale Assignment
FoveaBox的骨干网络采取了ResNet(ResNeXt) + FPN, FPN的每一个level负责检测一定尺寸的物体。FoveaBox中构建了的金字塔level。 level特征图的分辨率是输入图像的。所有金字塔level具有256个通道。
尽管我们的目标是预测目标对象的边界,但是由于对象尺度变化较大,直接预测这些数字不稳定。作者根据特征金字塔的level的数量,将objects的尺寸划分为几个bins,
对于level ,basic面积由以下公司计算
设置为 16, 对于level 负责的尺寸范围是
根据经验设置,来控制每一层金字塔的尺度范围,作者通过试验发现是一个最好的选择。
在训练时,不在相应尺寸范围的目标对象将会被忽略。要注意的是可能被网络的多个金字塔检测,这是不同于之前方法中只把物体映射到一层特征金字塔。
在这里简单了解一下这个区域范围的特征, 层的上限是, 层的下限是, 两者相除得到,当时,两者是有交集的。
当时,level 的检测范围是
2.2 Object Fovea
在每一个level的特征图的分类输出的通道数是K个,即类别的数目。每一个通道是一个二值mask,表示它是该类的一个概率。
下面介绍object的fovea区域和分类分支。
给定输入图像中的一个ground-truth box的左上和右下角的点,我们首选将其映射到步长是金字塔,
这个物体的fovea(正样本)区域定义为, 由如下公式计算得到:
是缩小系数,论文中设置为0.3。fovea区域内部的cell被赋予这个标签groud-truth box的标签
通过产生,论文中设置为0.4。负区域指的是特征图中除了,如果一个cell既不是正样本,也不是负样本,在训练时将会忽略。由于正(fovea)区域在整个特征图中只占一小部分,所以这里使用Focal Loss来训练这个分支的分类误差。
2.3 Box Prediction
Object fovea仅编码对象目标存在的可能性,为例确定其位置,还需要对每一个潜在的实例预测bouding box。 对于任意一个ground-truth bounding box ,我们的目标是使特征图(x, y)位置的网络输出通过变换可以映射到。
是将输出空间投影到以1为中心空间的归一化因子。论文中使用smooth L1 Loss训练预测框的误差。
对于bouding box的训练,我们将在
2.4 Inference
在预测时作者采用了常规的方法,流程如下:
- 首先使用0.05的confidence阈值过滤掉低的预测
- 根据score选择top-1000的bboxes
- 分别对每类使用NMS(阈值是0.5)
- 对于每一张图像,根据score选择top-100的预测
三、FoveaBox的实验结果
四、FoveaBox的不足
五、疑惑
- 金字塔的level 3, 4, 5, 6, 7是如何实现的? (待查看源码)
- 在预测时选择top-100,之后呢?需要怎么处理这100个候选框呢?