Feature Selective Anchor-Free Module for Single-Shot Object Detection论文阅读翻译
论文下载地址:点击此链接跳转.
这是博主自己在github整理的目标检测方向论文的合集,应该算比较全,目前2020ECCV持续更新中,欢迎下载…
一、Abstract
作者针对single-shot目标检测器提出了一个简单有效的FSAF模块,可插入带FPN的single-shot检测器中。FSAF模块解决了基于anchor的检测的两个限制:1) 启发式引导的特征选择; 2) 基于重叠的anchor采样。FSAF模块想要将在线特征选择应用于多层的anchor-free分支的训练。具体地说也就是在特征金字塔的每一层上添加anchor-feree分支,允许在任意层上以anchor-free的方式去进行框的编码解码。在训练过程中,作者动态地将每个实例分配到最合适的特征层级。在推理时,FSAF模块可以通过并行输出预测与基于anchor的分支联合工作。
二、Introduction
目标检测的一个挑战是目标的尺度变化,通常为实现尺度不变性会构建一个特征金字塔或多层特征塔,多尺度的特征图会同时产生预测。此外,anchors还可进一步解决尺度变化问题。anchors用于将所有可能的实例框的连续空间离散为预定义位置、尺度和长宽比的有限数量框。实例框与anchor的匹配是基于IoU进行的,在特征金字塔中,大anchor通常是与高层特征图相关联,小anchor与底层特征图相关联。这是因为上层特征图会有更多语义信息,适合检测大目标,而下层特征图会有更多细粒度细节,适合检测小目标。结合anchor的特征金字塔设计在目标检测中取得了良好的效果。
但是这种设计会有两个局限性: 1) 启发式引导的特征选择; 2) 基于重叠的anchor采样。在训练时每个实例总是根据IoU大小来与anchor进行匹配。anchor通过定义好的规则(如框的大小)与特定层级的特征图相关联。因此为每个实例选择特征级别是基于特定启发式的,如上图所示,一个大小为5050像素的car和另一个大小为6060像素的car实例可以被分配到两个不同的特征层级,而另一个4040大小的car可能被分配到与5050大小的car相同的特征层级。也就是anchor的匹配机制本质上是启发式的,这就导致了训练时每个实例所选择的特征层级可能并不是最佳的。因此作者提出了一种简单有效的FSAF模块来解决这两个限制。其动机是让每个实例能够自由地选择最佳的特征层级来优化网络,因此不应该使用anchor来约束特征选择,作者以anchor-free的方式对实例进行编码以学习分类和回归的参数。大体如下图,每层特征金字塔都有一个anchor-free分支,独立于基于anchor的分支,并且与基于anchor的分支类似,它由一个分类子网和一个回归子网组成,一个实例可以被分配给anchor-free分支的任意层级。
在训练过程中是根据实例的内容去动态地为每个实例选择最合适的实例框大小和特征级别。然后在所选特征层级上学习检测所分配的实例。在推理时,FSAF模块可以独立运行,也可与基于anchor的分支联合运行。FSAF模块不依赖于backbone,可应用于带特征金字塔结构的single-shot检测器。此外,anchor-free分支的实例化和在线特征选择可以是多种多样的。在这项工作中,作者使FSAF模块的实现简单且计算代价可忽略不计,可大幅度提升加入的骨干网的检测效果。它预测了K个目标类在每个空间位置的概率。
三、Feature Selective Anchor-Free Module
3.1 Network Architecture
下图是加了FSAF模块后的retinanet,作者在retinanet每层特征图的头部引入两个额外的卷积层,这两个卷积层分别负责anchor-free分支的分类和回归预测。也就是在分类子网的特征图上加一个K个滤波器的3×3卷积层,后接sigmoid函数,与基于anchor的分类分支并行,在回归子网的特征图上类似地加上带有四个滤波器的3×3卷积层,接ReLU函数,预测以anchor-free方式编码的框的偏移量。这样anchor-free分支与基于anchor的分支以多任务的方式共同工作,共享每个金字塔层级的特征。
3.2 Ground-truth and Loss
给定一个目标实例,类标签k和边框坐标b=[x,y,w,h]已知,实例可能会被分配给任一特征层级Pl,b在Pl上的映射框记作
b
p
l
b^l_p
bpl=[
x
p
l
x^l_p
xpl,
y
p
l
y^l_p
ypl,
w
p
l
w^l_p
wpl.
h
p
l
h^l_p
hpl],
b
p
l
b^l_p
bpl=b/2l,以及有效框
b
e
l
b^l_e
bel和忽略框
b
i
l
b^l_i
bil。
3.2.1 Classification Output
分类输出的GT是K个映射,每个映射对应一个类。实例以三种方式影响第k个GT。首先有效框 b e l b^l_e bel区域是’car’类的图中显示的白色正区域,表示该实例的存在。忽略框排除掉有效框区域的灰色部分,表示这块区域的梯度不参与反向传播,相邻特征图的忽略框区域也要被忽略,如果两个实例的有效框在某一层级重叠,较小的实例应当有更高的优先级。GT的其余区域是由0填充的负(黑色)区域,表示没有目标存在。对一幅图像来说,anchor-free分支的分类损失总和是所有非忽略区域的focal loss的总和,并用所有有效框区域内的像素点总数做归一化。
3.2.2 Box Regression Output
回归分支输出的GT是4个与类无关的偏移图。实例只影响偏移映射上的ble区域。对ble区域中的每一个像素位(i, j),作者将映射框 b p l b^l_p bpl表示为一个4维向量 d i , j l d^l_{i,j} di,jl,表示该点位置到边界框四条边的距离,并且四维向量还会以一个归一化常数S来相除,S=4.0。有效框之外的灰色区域会被忽略,anchor-free分支总的回归loss是所有有效区域的IOU loss的平均值。
3.3 Online Feature Selection
anchor-free分支的设计允许我们使用任意金字塔层级的特征来学习每个实例,为找到最佳特征层级,FSAF模块会根据实例的内容去选择最佳Pl,而不是像基于anchor的方法那样根据实例框的大小来选择。对实例I计算在Pl上的分类损失和回归损失如下所示,其中N(
b
e
l
b^l_e
bel)是
b
e
l
b^l_e
bel区域内的像素个数。
下图展示了在线特征选择过程。首先将实例I传递至特征金字塔各层级,然后根据上两式来计算实例I的Focal loss和GIOU loss的和,最后选择损失总和最小的最佳金字塔级Pl*来学习该实例:
对于一个训练批次,特征会针对其分配的相应实例来进行更新,这样做是作者直觉上认为这样选择的特征是当前最适用于对当前实例建模的。它的损失在特征空间中形成一个下界,通过训练来进一步降低这个下界。在推理时,我们不需要去选择特征,因为最合适的特征金字塔层级会自然地输出较高的置信度分数。
为验证在线特征选择的重要性,作者在消融实验中与一种启发式特征选择做了比较。启发式特征选择完全依赖于框的大小,根据下式将一个实例I分配到特征金字塔的Pl’级:
这里224是规范的ImageNet预训练大小,l0是宽高为224的实例应该映射到的目标层级,选l0=5因为ResNet使用第五个卷积组的输出的特征图来做最终的分类。
3.4 Joint Inference and Training
当插入到RetinaNet中时,FSAF模块会与基于anchor的分支一起工作,如图4。基于anchor的分支在训练和推理中所有超参都不变。
3.4.1 Inference
FSAF模块只是在全卷积的RetinaNet中添加了几个卷积层,所以推理仍然和通过网络传递一幅图像一样简单。对于anchor-free分支,设置置信度分数阈值为0.05,对每个金字塔层级中最多top-1k个得分位置的预测进行解码。这些来自所有层级的预测会与来自基于anchor的分支的预测框合并,然后进阈值为0.5的NMS,得到最终检测结果。
3.4.2 Initialization
backbone网络在ImageNet1k上进行预训练,对FSAF的卷积层,作者以偏置bias=-log((1-π)/π)和高斯权重σ=0.01初始化分类层,其中π指定在训练刚开始时每个像素位输出的目标得分在π附近。并以偏置b=0.1和σ=0.01初始化回归层。初始化有助于在早期迭代中稳定网络的学习,避免较大的损失。
四、Experiments
五、个人总结
这篇文章主要是在Retinanet的基础上在分类和回归子网上各添加了一条anchor-free分支,由于基于anchor的检测器的anchor的匹配机制本质上是启发式的,一般是根据框的大小来分配特征层级,这会导致训练时每个实例所选择的特征层级可能并不是最佳的,为解决这个问题,作者提出了一种Online Feature Selection,根据每个实例在各特征层级的分类和回归损失和来决定其在哪个特征层级做检测。最后anchor-free分支和anchor-based分支的检测结果会进行结合,在ResNeXt-101上ap能达到44.6。其实这篇与标签分配的联系好像也没那么大,主要还是各实例在特征层级的自动分配的方法,还是可以学习一下。