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

论文: 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所示。

在这里插入图片描述

2.1 Feature Pyramid Network Backbone and Scale Assignment

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

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

对于level P l P_l Pl,basic面积 S l S_l Sl由以下公司计算
S l = 4 l ∗ S 0 S_l = 4^l*S_0 Sl=4lS0

S 0 S_0 S0设置为 16, 对于level l l l 负责的尺寸范围是
[ S l / η 2 , S l ∗ η 2 ] [S_l / \eta ^ 2, S_l * \eta ^ 2 ] [Sl/η2,Slη2]

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

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

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

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

2.2 Object Fovea

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

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

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

x 1 ∗ = x 1 2 l , y 1 ∗ = y 1 2 l , x 2 ∗ = x 2 2 l , y 2 ∗ = y 2 2 l x_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} x1=2lx1,y1=2ly1,x2=2lx2,y2=2ly2

c x ∗ = x 1 ∗ + 0.5 ( x 2 ∗ − x 1 ∗ ) , c y ∗ = y 1 ∗ + 0.5 ( y 2 ∗ − y 1 ∗ ) c_x^* = x_1^* + 0.5(x_2^* - x_1^*), c_y^* = y_1^* + 0.5(y_2^* - y_1^*) cx=x1+0.5(x2x1),cy=y1+0.5(y2y1)

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

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

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

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

2.3 Box Prediction

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

t x 1 = l o g 2 l ( x + 0.5 ) − x 1 z t_{x1} = log\frac{2^l(x + 0.5) - x_1}{z} tx1=logz2l(x+0.5)x1
t y 1 = l o g 2 l ( y + 0.5 ) − y 1 z t_{y1} = log\frac{2^l(y + 0.5) - y_1}{z} ty1=logz2l(y+0.5)y1
t x 2 = l o g x 2 − 2 l ( x + 0.5 ) z t_{x2} = log\frac{x_2 - 2^l(x + 0.5)}{z} tx2=logzx22l(x+0.5)
t y 2 = l o g y 2 − 2 l ( y + 0.5 ) z t_{y2} = log\frac{y_2 - 2^l(y + 0.5)}{z} ty2=logzy22l(y+0.5)

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

对于bouding box的训练,我们将在 R n e g 内 部 的 c e l l 都 参 与 训 练 , 这 与 分 类 的 训 练 是 不 同 的 。 R^{neg}内部的cell都参与训练,这与分类的训练是不同的。 Rnegcell

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个候选框呢?
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值