论文: 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的设计。其缺点主要体现在:

  1. anchor boxes引入了额外的超参数。在设计anchor boxes时的一个重要因素是它可以覆盖多少的对象位置空间。
  2. 在特定数据集上设计的anchor boxes并不总是适用于其它的应用,这影响了泛化能力。
  3. 会造成背景-前景的不均衡性

作者考虑到我们人类可以很自然地识别视觉场景中的物体,不需要枚举候选框。受此启发,一个直觉性的问题是,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所示。

FoveaBox(Beyond Anchor-based Object Detector) 学习笔记

2.1 Feature Pyramid Network Backbone and Scale Assignment

FoveaBox的骨干网络采取了ResNet(ResNeXt) + FPN, FPN的每一个level负责检测一定尺寸的物体。FoveaBox中构建了{Pl},l=3,4,5,6,7\lbrace P_l \rbrace, l = 3, 4, 5, 6, 7的金字塔level。PlP_l level特征图的分辨率是输入图像的12l\frac{1}{2^l}。所有金字塔level具有256个通道。

尽管我们的目标是预测目标对象的边界,但是由于对象尺度变化较大,直接预测这些数字不稳定。作者根据特征金字塔的level的数量,将objects的尺寸划分为几个bins,

对于level PlP_l,basic面积SlS_l由以下公司计算
Sl=4lS0S_l = 4^l*S_0

S0S_0设置为 16, 对于level ll 负责的尺寸范围是
[Sl/η2,Slη2][S_l / \eta ^ 2, S_l * \eta ^ 2 ]

η\eta根据经验设置,来控制每一层金字塔的尺度范围,作者通过试验发现η=2\eta = 2是一个最好的选择。

在训练时,不在相应尺寸范围的目标对象将会被忽略。要注意的是可能被网络的多个金字塔检测,这是不同于之前方法中只把物体映射到一层特征金字塔。

在这里简单了解一下这个区域范围的特征, ll层的上限是Slη2=4lS0η2S_l * \eta ^ 2 = 4 ^ l * S_0 * \eta ^2, l+1l+1层的下限是Sl+1/η2=4l+1S0/η2S_{l+1} / \eta ^ 2 = 4^{l+1} * S_0 / \eta ^ 2, 两者相除得到4/η44/\eta^4,当η>2\eta > \sqrt2时,两者是有交集的。

S0=16,η=2S_0 = 16, \eta = 2时,level l=3,4,5,6,7l = 3, 4, 5, 6, 7 的检测范围是
[162,642],[322,1282],[642,2562],[1282,5122],[2562,10242][16 ^ 2, 64 ^ 2], [32 ^ 2, 128 ^ 2], [64 ^ 2, 256^2], [128 ^ 2, 512 ^ 2], [256 ^ 2, 1024 ^2]

2.2 Object Fovea

在每一个level的特征图的分类输出的通道数是K个,即类别的数目。每一个通道是一个二值mask,表示它是该类的一个概率。

下面介绍object的fovea区域分类分支

给定输入图像中的一个ground-truth box的左上和右下角的点(x1,y1,x2,y2)(x_1, y_1, x_2, y_2),我们首选将其映射到步长是2l2^l金字塔PlP_l

x1=x12l,y1=y12l,x2=x22l,y2=y22lx_1^* = \frac{x_1}{2^l}, y_1^* = \frac{y_1}{2^l}, x_2^* = \frac{x_2}{2^l}, y_2^* = \frac{y_2}{2^l}

cx=x1+0.5(x2x1),cy=y1+0.5(y2y1)c_x^* = x_1^* + 0.5(x_2^* - x_1^*), c_y^* = y_1^* + 0.5(y_2^* - y_1^*)

这个物体的fovea(正样本)区域定义为Rpos=(x1,y1,x2,y2)R^{pos} = (x_1^{**}, y_1^{**}, x_2^{**}, y_2^{**}), 由如下公式计算得到:

x1=cx0.5(x2x1)σ1x_1^{**} = c_x^* - 0.5(x_2^* - x_1^*)*\sigma_1
y1=cy0.5(y2y1)σ1y_1^{**} = c_y^* - 0.5(y_2^* - y_1^*)*\sigma_1
x2=cx+0.5(x2x1)σ1x_2^{**} = c_x^* + 0.5(x_2^* - x_1^*)*\sigma_1
y1=cy0.5(y2y1)σ1y_1^{**} = c_y^* - 0.5(y_2^* - y_1^*)*\sigma_1

σ1\sigma_1是缩小系数,论文中设置为0.3。fovea区域内部的cell被赋予这个标签groud-truth box的标签

通过σ2\sigma_2产生RnegR^{neg},论文中设置为0.4。负区域指的是特征图中除了RnegR^{neg}的区域,如果一个cell既不是正样本,也不是负样本,在训练时将会忽略。由于正(fovea)区域在整个特征图中只占一小部分,所以这里使用Focal Loss来训练这个分支的分类误差。

2.3 Box Prediction

Object fovea仅编码对象目标存在的可能性,为例确定其位置,还需要对每一个潜在的实例预测bouding box。 对于任意一个ground-truth bounding box G=(x1,y1,x2,y2)G = (x_1, y_1, x_2, y_2),我们的目标是使特征图(x, y)位置的网络输出(tx1,ty1,tx2,ty2)(t_{x1}, t_{y1}, t_{x2}, t_{y2})通过变换可以映射到GG

tx1=log2l(x+0.5)x1zt_{x1} = log\frac{2^l(x + 0.5) - x_1}{z}
ty1=log2l(y+0.5)y1zt_{y1} = log\frac{2^l(y + 0.5) - y_1}{z}
tx2=logx22l(x+0.5)zt_{x2} = log\frac{x_2 - 2^l(x + 0.5)}{z}
ty2=logy22l(y+0.5)zt_{y2} = log\frac{y_2 - 2^l(y + 0.5)}{z}

z=Slz = \sqrt {S_l}是将输出空间投影到以1为中心空间的归一化因子。论文中使用smooth L1 Loss训练预测框的误差。

对于bouding box的训练,我们将在RnegcellR^{neg}内部的cell都参与训练,这与分类的训练是不同的。

2.4 Inference

在预测时作者采用了常规的方法,流程如下:

  • 首先使用0.05的confidence阈值过滤掉低的预测
  • 根据score选择top-1000的bboxes
  • 分别对每类使用NMS(阈值是0.5)
  • 对于每一张图像,根据score选择top-100的预测

三、FoveaBox的实验结果

FoveaBox(Beyond Anchor-based Object Detector) 学习笔记

四、FoveaBox的不足

五、疑惑

  • 金字塔的level 3, 4, 5, 6, 7是如何实现的? (待查看源码)
  • 在预测时选择top-100,之后呢?需要怎么处理这100个候选框呢?

相关文章:

  • 2022-12-23
  • 2021-12-14
  • 2021-04-16
  • 2021-10-16
  • 2021-10-12
  • 2021-08-02
  • 2021-10-02
猜你喜欢
  • 2022-01-22
  • 2021-04-21
  • 2021-08-09
  • 2021-08-23
  • 2021-07-25
  • 2021-04-27
相关资源
相似解决方案