论文阅读笔记10:FCOS:Fully Convolutional One-Stage Object Detection
论文地址:https://arxiv.org/pdf/1904.01355.pdf
代码地址:https://github.com/tianzhi0549/FCOS
Abstract
我们提出了一种全卷积的 one-stage 目标检测器(FCOS, Fully Convolutional One Stage), 它以对每个像素进行预测的方式来解决目标检测问题,类似于语义分割。几乎所有的 SOTA 物体检测器,如 RetinaNet,SSD,YOLOv3 和 Faster R-CNN 都依赖于预定义的 anchor box。相比之下,我们提出的 FCOS 不需要 anchor box,同时也不需要 proposals (即 One-Stage)。通过消除对预定义 anchor 的依赖,FCOS 完全避免了与 anchor box 相关的复杂计算,例如在训练期间计算 overlapping 并显着减少 training memory footprint。更重要的是,我们还避免了与 anchor 相关的所有超参数,这些参数通常对最终检测性能非常敏感。凭借唯一的后处理操作非最大抑制(NMS),我们的 FCOS 优于之前的 anchor-based one-stage detectors,并且结构更简单。我们首次展示了一种更加简单灵活的检测框架,可以提高检测精度。我们希望 FCOS 框架可以作为许多其他实例级任务简单而强大的替代方案。
Introduction
Anchor-based检测器存在的缺点:
- 如 Faster R-CNN 和 Focal Loss 所示,检测性能对于尺寸,宽高比和 anchor 数量非常敏感。 例如,在RetinaNet 中,根据 COCO 的 benchmark 上,仅仅改变这些超参数就会影响AP的性能提升4%[13]。 因此,对于 anchor-based 检测器需要仔细调整这些超参数。
- 即使经过精心设计,由于 anchor box 的比例和宽高比保持固定,detectors 在处理具有较大形状变化的物体集合时会遇到困难,特别是对于小物体。 预定义的 anchor box 也妨碍了探测器的泛化能力,因为它们需要在具有不同物体尺寸或宽高比的新探测任务上进行重新设定。
- 为了实现高召回率,anchor-based 检测器需要将 anchor box 密集地放置在输入图像上(例如,在特征金字塔网络(FPN)中, 对于短边像素为 800 的输入图像, 会产生超过 180K 的 anchor box)。 大多数这些 anchor box 在训练期间会被标记为 negative samples。 过多的 negative samples 加剧了 training 过程中正负样本之间的不平衡性。
- 当在训练期间计算所有 anchor box 和 GT box 之间的 IOU 时,过多数量的 anchor box 也显著增加了计算量和存储器占用量。
基于 anchor-based 的检测方法偏离全卷积预测的框架,而本文尝试类似于语义分割的像素级预测应用至目标检测任务中。因此,目标检测,语义分割,关键点检测等几种任务可以糅合到一个模型中。一些工作如 Dense-Box,UnitBox 曾利用基于 FCN-based 的框架进行目标检测。但这些方法在某一层的 feature map 上直接预测4D坐标及类别,如下图左侧所示,4D向量表示了边框的边距离该像素点的偏移。这些方法与语义分割的全卷积相类似,但每个位置需要回归一个连续的4D向量。为了处理不同大小的边框,DenseBox 将训练图片调整为固定尺寸。DenseBox 必须要在图像金字塔上进行检测,违反了全卷积对所有卷积只计算一次的思想。而且,这些方法大多应用在目标检测的特殊场景中,比如文本检测或者人脸检测。如下图右侧所示,较多的重叠框造成了模糊,无法确定重叠区域应该对哪个框进行回归。本文证明通过FPN结构可以消除这种模糊。本文发现在距离目标中心较远的位置会预测一定数量低质量的边界框。为了打压这些边框,本文设计了一个新的分支”center-ness”,用于预测一个像素与对应边框中心的偏差。所得的分数用于 down-weight 低质量的检测框,最后通过NMS将检测结果进行融合。
这个新的检测框架拥有以下优点:
- 检测任务现在与许多其他 FCN 可解决的任务(例如语义分割)相统一,从而可以更轻松地重复使用这些任务中的想法。
- 检测变为 proposal free 和 anchor free,这显著减少了超参数的数量。 超参数通常需要启发式调整,并且涉及许多技巧才能获得良好的性能。 而我们的新检测框架使检测器,特别是使它的 training 阶段变得相当简单。 此外,通过消除 anchor box,我们的新探测器完全避免了复杂的 IOU 计算以及训练期间 anchor box 和 GT box 之间的匹配,并将总的训练内存占用(training memory footprint)减少了2倍左右。
- 我们在 One-Stage Detectors 中实现了 SOTA 的结果。 我们的实验还表明,本文所提出的 FCOS 可以用作 Two-Stage Detectors 中的 RPN,并且可以实现比基于 anchor 的 RPN 更好的性能。 鉴于更简单的 anchor free Detectors 具有更好的性能,我们鼓励大家重新考虑物体检测中 anchor 的必要性,虽然目前这被认为是检测任务的事实标准(defacto standard for detection)。
- 我们所提出的 detector 只需做很小的修改就可以立即扩展到其他视觉任务,包括实例分割和关键点检测。 我们相信这种新方法可以成为许多实例级预测问题的新 baseline。
Related Work
Anchor-based Detectors
Anchor-free Detectors
Our Approach
在本节中,我们首先以逐像素预测的方式重新构造目标检测任务。 接下来,我们展示了我们如何利用多级预测(multi-level prediction)来改善召回率并解决训练中重叠边界框导致的模糊性。 最后,我们展示了我们提出的 “center-ness” 分支,它有助于抑制低质量的检测边界框并大幅提高整体性能.
Fully Convolutional One-Stage Object Detector
设$F_i \in R^{H×W×C}$是 backbone CNN 第 $i$ 层的 feature maps,$s$ 为该层之前的总步长。输入图片的真实框定义为$\lbrace B_i \rbrace$,$B_i=(x_0^{(i)},y_0^{(i)},x_1^{(i)},y_1^{(i)},c^{(i)})\in R^4×\lbrace1,2…C\rbrace$。其中$(x_0^{(i)},y_0^{(i)})$和$(x_1^{(i)},y_1^{(i)})$分别为边界框左上角点和右下角点的坐标,$c^{(i)}$为边界框内的object的类别。
对于 feature maps $F_i$ 上的的每一个位置$(x,y)$,我们都可以将其映射回输入图像的坐标$(\lfloor\frac{s}{2}\rfloor+xs,\lfloor\frac{s}{2}\rfloor+ys)$,它差不多刚好位于位置$(x,y)$的感受野中心附近。与 anchor based detectors 将输入图像上的位置视为 anchor box 的中心并对这些 anchor box 的目标边界框进行回归不同,我们直接回归每个位置的目标边界框。 换句话说,我们的 Detector 直接将 location 视为训练样本而不是将 anchor box 视为训练样本,这与用于语义分割的FCN相同。
具体而言,如果位置$(x,y)$落入到任何 GT Box 内部, 那么久将其视为正样本, 并且该位置的类标签$c^\star$就是$B_i$的类标签,否则它就是负样本并且$c^\star=0$(背景类)。除了用于分类的标签之外,我们还有一个 4D 的实数向量$t^\star=(l^\star,t^\star,r^\star,b^\star)$, 该向量是每个样本的回归目标。这里$l^\star,t^\star,r^\star,b^\star$是从 location 到 bbox 四条边的距离,如图1(左)所示。如果某个位置属于多个边界框,则会将其视为模糊样本。现在,我们只选择具有最小面积的边界框作为其回归目标(最简单的策略)。 在下一节中,我们将 展示通过多级预测,可以显著减少模糊样本的数量。 形式上,如果位置$(x,y)$与边界框$B_i$相关联,则该位置的训练回归目标可以表示为:
值得注意的是,FCOS 可以利用尽可能多的前景样本来训练回归量。(GT box 内的每个像素点都是正样本) 它与基于 anchor 的探测器不同,anchor-based detectors 仅仅将与 GT box 具有足够 IOU 的anchor box 作为正样本。我们认为,这可能是 FCOS 优于 anchor-based 的原因之一。
Network Outputs
对应于 training targets,我们网络的最后一层会预测用于分类的 80D 向量$\vec{p}$和 bounding box 坐标 4D 向量$\vec{t}=(l,t,r,b)$。跟随 R-CNN 的做法,我们不是训练多类分类器,而是训练 C 个二元分类器。与 R-CNN 类似,我们在 backbone 网络的特征图谱之后分别为分类和回归分支添加了 四个卷积层。此外,由于回归目标总是正的,我们使用$exp(x)$将任意的实数都映射到回归分支顶部的$(0,\infty)$。值得注意的是,FCOS 的网络输出变量比常用的 anchor based detectors 少 9 倍,其中每个位置有 9 个 anchor boxes。
Loss Function
我们定义我们的训练损失函数如下:
其中$L_{cls}$为 focal loss,$L_{reg}$为 IOU loss。$N_{pos}$为正样本数,$\lambda$在本文中为1来平衡$L_{reg}$的权重。求和是通过对feature maps $F_i$ 上的所有点进行计算得到的。$I_{\lbrace c_{x,y}^\star >0\rbrace}$是一个indicator function,当$c_i^\star>0$时为1,否则为0。
Inference
FCOS 的 Inference 很简单。给定输入图像,我们将其放入网络进行一次 forward 计算, 并获得 feature map $F_i$ 上的每个位置的分类分数$p_{x,y}$和回归预测值$t_{x,y}$。 跟随 R-CNN 的设定,我们选择$p_{x,y}>0.0$的位置作为正样本并通过上述公式来获得预测的边界框。
Multi-level Prediction with FPN for FCOS
在这里,我们展示了如何通过 FPN 的多级预测来解决所提出的 FCOS 存在的两个可能问题。
- CNN 中最后的 feature maps 的大步幅(例如,16)可能回导致相对较低的 best possible recall (BPR)。对于基于 anchor 的检测器,由于大步幅导致的低召回率可以通过降低 positive anchor boxes 所需的 IOU 分数来在一定程度上得到缓解。而对于 FCOS,乍一看可能认为其 BPR 会远低于基于 anchor 的检测器,因为 网络无法召回由于大步幅而最终在 feature map 上没有位置编码的对象。在这里,我们凭经验证明,即使步幅很大,基于 FCN 的 FCOS 仍然能够产生良好的BPR,它甚至可以比官方实现的 Detectron 中基于 anchor 的检测器 RetinaNet 的 BPR 更好。(参见表1)。因此,BPR 实际上不是 FCOS 无法解决的问题。此外,利用多级 FPN 预测,可以进一步改进 BPR 以匹配基于 anchor 的 RetinaNet 最佳BPR。
- 与 GT box 的多个重叠会导致在训练期间产生难以理解的模糊性,即哪个边界框应该在重叠位置进行回归?这种模糊性导致基于 FCN 的检测器的性能下降。在本文中,我们表明,使用多级预测可以极大地解决模糊性,并且与基于 anchor 的检测器相比,基于 FCN 的检测器可以获得相同的,有时甚至更好的性能。
我们在不同级别的特征图上检测到不同大小的对象。具体来说,我们使用定义为 $\lbrace P_3,P_4,P_5,P_6,P_7\rbrace$ 的五个级别的 feature map。$P_3$,$P_4$ 和 $P_5$ 由 backbone CNN 的特征图 $C_3$,$C_4$ 和 $C_5$ 和具有横向连接的1×1卷积层产生,如下图所示. $P_6$ 和 $P_7$ 通过分别在 $P_5$ 和 $P_6$ 上使用一个步长为 2 的卷积层产生. 最终,特征层级 $P_3$,$P_4$,$P_5$,$P_6$ 和 $P_7$ 具有的步幅分别为 8,16,32,64和128。
与 anchor based detectors 将不同大小的 anchor 分配给不同的特征级别不一样的是,我们直接限制边界框回归的范围。 更具体地说,我们首先计算所有特征级别上每个位置的回归目标$l^\star$,$t^\star$,$r^\star$和$b^\star$。如果位置满足 $max(l^\star,t^\star,r^\star,b^\star)> m_i$或$max(l^\star,t^\star,r^\star,b^\star)< m_{i-1}$,我们就将其设置为负样本并且再也不会对该位置进行回归操作。这里的 $m_i$ 是特征层级 $i$ 需要回归的最大距离。在本文中,$m_2$,$m_3$,$m_4$,$m_5$,$m_6$和$m_7$分别设置为0,64,128,256,512和$\infty$。 由于 具有不同大小的对象被分配给不同的特征级别(这里是与 FoveaBox 的一处重要区别) 并且 大多数重叠发生在具有显著不同大小的对象之间,因此多级预测可以在很大程度上减轻上述模糊性并且将基于 FCN 的检测器提升到与基于 anchor 的检测器相同的检测性能,如我们后面的实验所示。
最后,跟随 R-CNN 和 Fast R-CNN 的设定,我们 共享不同特征级别之间的头部(这是与其他 Detector 的不同之处, 其他的都是每个特征层级独立的执行分类和回归),这样不仅使检测器参数高效,而且能够提高检测性能。 然而,我们观察到不同的特征水平需要回归不同的尺寸范围(例如,$P_3$ 的尺寸范围是 [0,64] 而 $P_4$ 的尺寸范围是 [64,128]),因此 在不同的特征层使用相同的回归 heads 是不合理的。 故此, 我们不使用标准的 $exp(x)$,而是使用带有可训练标量 $s_i% 的 $exp(s_i x)$ 来自动调整特征级 $P_i$ 的指数函数的基数,从而凭经验提高检测性能。
Center-ness for FCOS
在 FCOS 中使用多级预测后,FCOS 和 anchor based 的检测器之间仍存在性能差距。 我们观察到这是由于远离物体中心的位置产生的许多低质量预测边界框造成的。
我们提出了一种简单而有效的策略来抑制这些低质量的检测边界框而不引入任何超参数。 具体来说,我们添加一个单层分支,与分类分支并行,以预测一个位置的“中心概率(center-ness)”(即,从该位置到该位置所负责的对象的中心的距离)如图2所示, 给定位置的回归目标$l^\star$,$t^\star$,$r^\star$和$b^\star$,center-ness target 定义为
我们在这里使用 sqrt 来减缓中心的衰减。center-ness 从0到1,因此用 二元交叉熵(BCE)损失训练。 损失被添加到上述损失函数公式中。 在测试时,通过将预测的 center-ness 与相应的分类得分相乘来计算最终得分(用于对检测到的边界框进行排名)。因此,center-ness 可以使远离物体中心的边界框的 scores 减小。结果,这些低质量的边界框很可能被最终的非最大抑制(NMS)过程滤除,从而显著提高了检测性能。
基于 anchor 的检测器使用两个 IOU 阈值 $T_{low}$ 和 $T_{high}$ 将 anchor boxes 标记为负、忽略和正样本,center-ness 可以看作是一个 软阈值。它是在网络训练中学习的,不需要调整。此外,利用该策略,我们的检测器仍然可以将任何落在 GT Box 中的位置视为正样本,除了上述多层预测中设置为负样本的位置外,这样就可以为回归器使用尽可能多的训练样本。
Experiments
不再叙述
Ablation Study
Multi-level Prediction with FPN
With or Without Center-ness
FCOS vs. Anchor-based Detectors
Comparison with State-of-the-art Detectors
Extensions on Region Proposal Networks
Conclusion
我们提出了一种 anchor freee, proposal free 的单级探测器FCOS。 如实验所示,FCOS与流行的 anchor based 的一级探测器相比更具有优势,包括RetinaNet,YOLO和SSD,但设计复杂性要低得多。 FCOS完全避免了与 anchor 相关的所有计算和超参数,并以每像素预测方式解决了对象检测,类似于其他密集预测任务,例如语义分割。 FCOS还在一级探测器中实现了最先进的性能。 我们还表明,FCOS可用作两级探测器中的RPN,速度更快的R-CNN,并且大幅优于其RPN。 鉴于其有效性和效率,我们希望FCOS可以作为当前主流锚点探测器的强大而简单的替代方案。 我们还相信FCOS可以扩展到解决许多其他实例级识别任务。