FCOS: Fully Convolutional One-Stage Object Detection论文译解+代码调试记录

论文

摘要

我们提出了一种完全卷积的单级目标检测器 (FCOS),类似于语义分割的方式,以逐像素预测的方式解决目标检测问题。 几乎所有最先进的物体检测器,如 RetinaNet、SSD、YOLOv3 和 Faster R-CNN 都依赖于预定义的锚框。 相比之下,我们提出的检测器 FCOS 是无锚框的,也是无提议框的。 通过消除预定义的anchor boxes集合,FCOS完全避免了与anchor boxes相关的复杂计算,例如在训练过程中计算重叠。 更重要的是,我们还避免了所有与锚框相关的超参数,这些超参数通常对最终的检测性能非常敏感。 凭借唯一的后处理非最大抑制(NMS),带有 ResNeXt-64x4d-101 的 FCOS 在单模型和单尺度测试中的 AP 达到 44.7%,超越了以前的单级检测器,具有更简单的优势。 我们首次展示了一种更简单、更灵活的检测框架,可提高检测精度。 我们希望所提出的 FCOS 框架可以作为许多其他实例级任务的简单而强大的替代方案。 代码位于:tinyurl.com/FCOSv1

1 引言

目标检测是计算机视觉中一项基础但具有挑战性的任务,它需要算法为图像中每个感兴趣的实例预测一个带有类别标签的边界框。 目前所有主流检测器,如 Faster R-CNN [24]、SSD [18] 和 YOLOv2、v3 [23] 都依赖于一组预定义的 anchor boxes,长期以来人们一直认为 anchor boxes 的使用是探测器成功的关键。 尽管他们取得了巨大的成功,但重要的是要注意基于锚点的检测器存在一些缺点:1)如 [15、24] 所示,检测性能对锚框的大小、纵横比和数量敏感。 例如,在 RetinaNet [15] 中,改变这些超参数会影响 COCO benchmark 上 AP 的性能高达 4%。因此,需要在基于锚点的检测器中仔细调整这些超参数。 2)即使经过精心设计,由于锚框的比例和纵横比保持固定,检测器在处理形状变化较大的候选对象时遇到困难,特别是对于小对象。 预定义的锚框也阻碍了检测器的泛化能力,因为它们需要针对具有不同对象大小或纵横比的新检测任务重新设计。 ** 3)为了实现高召回率,需要基于锚点的检测器在输入图像上密集放置锚点框**(例如,特征金字塔网络(FPN)[14]为短边为 800的图像放置超过 180K 个锚点框 )。 大多数这些锚框在训练期间被标记为负样本。 过多的负样本加剧了训练中正负样本的不平衡。 4)Anchor boxes还涉及复杂的计算,例如计算与ground-truth bounding boxes的交并比(IoU)分数。

最近,完全卷积网络 (FCN) [20] 在语义分割 [20, 28, 9, 19], 关键点检测 [3]等密集预测任务中取得了巨大成功,作为高级视觉任务之一,目标检测可能是唯一一个偏离简洁的全卷积逐像素预测框架的任务,这主要是由于锚框的使用。 很自然地会问一个问题:我们能否以整洁的每像素预测方式解决对象检测问题,例如,类似于用于语义分割的 FCN? 因此,这些基本的视觉任务可以(几乎)统一在一个框架中。 我们表明答案是肯定的。 此外,我们首次证明,更简单的基于 FCN 的检测器比基于锚点的检测器实现了更好的性能。

在文献中,一些作品试图利用基于 FCN 的框架进行目标检测,例如 DenseBox [12]。 具体来说,这些基于 FCN 的框架直接预测 4D 向量加上特征图级别上每个空间位置的类类别。 如图 1(左)所示,4D 矢量描述了从边界框的四个边到该位置的相对偏移量。 这些框架类似于用于语义分割的 FCN,除了每个位置都需要回归 4D 连续向量。 然而,为了处理不同尺寸的边界框,DenseBox [12] 裁剪训练图像并将其调整为固定比例。 因此 DenseBox 必须对图像金字塔进行检测,这违背了 FCN 一次计算所有卷积的哲学。 此外,更重要的是,这些方法主要用于特殊领域的对象检测,如场景文本检测[33、10]或人脸检测[32、12],因为人们认为这些方法在应用于一般对象且使用高度重叠的边界框进行检测时效果不佳。 如图 1(右)所示,高度重叠的边界框导致难以处理的歧义:它不清楚对于重叠区域中的像素,哪个边界框需要进行回归。

在这里插入图片描述
在后续工作中中,我们仔细研究了这个问题,并表明使用 FPN 可以在很大程度上消除这种歧义(重复边界框)。 因此,我们的方法已经可以获得与那些传统的基于锚点的检测器相当的检测精度。 此外,我们观察到我们的方法可能会在远离目标对象中心的位置产生许多低质量的预测边界框。 为了抑制这些低质量检测,我们引入了一个新的“center-ness”分支(只有一层)来预测像素与其相应边界框中心的偏差,如等式 3 中所定义。 然后使用该分数来降低检测到的低质量边界框的权重,并将检测结果合并到 NMS 中。 简单而有效的 center-ness 分支允许基于 FCN 的检测器在完全相同的训练和测试设置下优于基于 anchor 的检测器。

这种新的检测框架具有以下优点。

  • 将检测与许多其他 FCN 可解决的任务(如语义分割)统一,使得重用这些任务的想法变得更加容易。
  • Detection 变成了 proposal free 和 anchor free,这大大减少了设计参数的数量。 设计参数通常需要启发式调整,并且涉及许多技巧才能获得良好的性能。 因此,我们的新检测框架使检测器(尤其是其训练)变得相当简单。
  • 通过消除anchor boxes,我们的新检测器完全避免了与anchor boxes相关的复杂计算,例如IOU计算以及训练过程中anchor boxes和ground-truth boxes之间的匹配,从而实现比基于锚点更快的训练和测试以及更少的训练内存占用。
  • 没有花里胡哨的东西,我们在一级检测器中取得了最先进的结果。 我们还表明,所提出的 FCOS 可以用作两级检测器中的区域提议网络 (RPN),并且可以实现比基于锚点的 RPN更好的性能。 鉴于更简单的 anchor-free 检测器的性能更好,我们鼓励社区重新考虑锚框在对象检测中的必要性,目前被认为是事实上的检测标准。
  • 所提出的检测器可以立即扩展以解决其他视觉任务,只需最少的修改,包括实例分割和关键点检测。 我们相信这种新方法可以成为许多实例预测问题的新baseline。

2 相关工作

基于锚点的检测器: 基于锚点的检测器继承了传统的滑动窗口和基于提议的检测器(例如 Fast R-CNN [6])的思想。 在基于 anchor 的检测器中,anchor boxes 可以被视为预定义的滑动窗口或 proposals,它们被分类为正或负图像块,具有额外的偏移回归来改进边界框位置的预测。 因此,这些检测器中的锚框可以被视为训练样本。 与之前的检测器(如 Fast RCNN)不同,它会为每个滑动窗口/提案重复计算图像特征,锚框利用 CNN 的特征图并避免重复特征计算,从而显着加快检测过程。 anchor boxes 的设计被 Faster R-CNN 在其 RPNs [24]、SSD [18] 和 YOLOv2 [22] 中推广,并已成为现代检测器的惯例。然而,如上所述,anchor boxes 会导致过多的超参数,为了实现良好的性能需要仔细微调。除了上述描述锚形状的超参数外,基于锚的检测器还需要其他超参数来将每个锚框标记为正样本、忽略样本或负样本。 在以前的工作中,他们经常在锚框和真实框之间使用交集并集(IOU)来确定锚框的标签(例如,如果其 IOU 在 [0.5, 1] 中,则为正锚)。 这些超参数对最终的准确率影响很大,需要启发式调优。 同时,这些超参数特定于检测任务,使得检测任务偏离了用于其他密集预测任务(如语义分割)的整洁的全卷积网络架构。

无锚检测器: 最流行的无锚检测器可能是 YOLOv1 [21]。 YOLOv1 不使用锚框,而是预测物体中心附近点的边界框。其仅使用中心附近的点,因为它们被认为能够产生更高质量的检测。 然而,由于仅使用中心附近的点来预测边界框,因此 YOLOv1 的召回率较低,如 YOLOv2 [22] 中所述。 因此,YOLOv2 [22] 也使用锚框。 与 YOLOv1 相比,FCOS 利用ground truth bounding box中的所有点来预测边界框,并且所提出的“center-ness”分支抑制了检测到的低质量边界框。 因此,如我们的实验所示,FCOS 能够提供与基于锚点的检测器相当的召回率。CornerNet [13] 是最近提出的一阶段无锚检测器,它检测边界框的一对角并将它们分组以形成最终检测到的边界框。 CornerNet 需要更复杂的后处理来对属于同一实例的角对进行分组。 为了分组的目的,学习了额外的距离度量。另一个无锚检测器家族,例如 [32] 基于 DenseBox [12]。 由于难以处理重叠的边界框且召回率相对较低,因此该检测器系列被认为不适合通用对象检测。 在这项工作中,我们表明这两个问题都可以通过多级 FPN 预测在很大程度上得到缓解。 此外,我们还展示了我们提出的 center-ness 分支,更简单的检测器可以实现比基于锚点的检测器更好的检测性能。

3 本文方法

在本节中,我们首先以逐像素预测方式重新制定目标检测。 接下来,我们将展示我们如何利用多级预测来提高召回率并解决由重叠边界框引起的歧义。 最后,我们提出了我们提出的“centerness”分支,它有助于抑制检测到的低质量边界框并大幅提高整体性能。

3.1. Fully Convolutional One-Stage Object Detector

F i ∈ R H × W × C F_{i} \in \mathbb{R}^{H \times W \times C} FiRH×W×C 为主干 CNN 第 i 层的特征图,s 为到该层的总步长。输入图像的ground-truth边界框被定义为 B i = ( x 0 ( i ) , y 0 ( i ) , x 1 ( i ) y 1 ( i ) , c ( i ) ) ∈ R 4 × { 1 , 2 … C } B_{i}=\left(x_{0}^{(i)}, y_{0}^{(i)}, x_{1}^{(i)} y_{1}^{(i)}, c^{(i)}\right) \in\mathbb{R}^{4} \times\{1,2 \ldots C\} Bi=(x0(i),y0(i),x1(i)y1(i),c(i))R4×{1,2C},其中 ( x 0 ( i ) , y 0 ( i ) ) (x_{0}^{(i)}, y_{0}^{(i)}) (x0(i),y0(i)) ( x 1 ( i ) , y 1 ( i ) ) (x_{1}^{(i)}, y_{1}^{(i)}) (x1(i),y1(i))分别表示边界框左上角和右下角的坐标。 c ( i ) c^{(i)} c(i)是边界框中的对象所属的类。 C 是类数,对于 MS-COCO 数据集是 80。

对于特征图 F i F_{i} Fi 上的每个位置 ( x , y ) (x, y) (x,y),我们可以将其映射回输入图像作为 ( ⌊ s 2 ⌋ + x s , ⌊ s 2 ⌋ + y s ) (\left \lfloor \frac{s}{2} \right \rfloor+xs, \left \lfloor \frac{s}{2} \right \rfloor+ys) (2s+xs,2s+ys),它靠近特征图感受野的中心 位置 ( x , y ) (x, y) (x,y)。 与基于锚点的检测器将输入图像上的位置视为(多个)锚框的中心并以这些锚框为参考回归目标边界框不同,我们直接在该位置回归目标边界框。 换句话说,我们的检测器直接将位置视为训练样本,而不是基于锚点的检测器中的锚框,这与用于语义分割的 FCNs 相同 [20]。

具体来说,如果位置 ( x , y ) (x, y) (x,y)落入任何ground-truth框,并且该位置的类别标签 c ∗ c^{*} c是ground-truth的类别标签,则该位置 ( x , y ) (x, y) (x,y) 被视为正样本。 否则它是负样本且 c ∗ = 0 c^{*} =0 c=0(背景类)。 除了用于分类的标签外,我们还有一个 4D 实向量 t ∗ = ( l ∗ , t ∗ , r ∗ , b ∗ ) \mathbf{t}^{*} = (l^{*},t^{*},r^{*},b^{*}) t=(l,t,r,b)作为位置的回归目标。 这里l*、t*、r和b是该位置到边界框四边的距离,如图1(左)所示。 如果一个位置落入多个边界框,它被认为是一个模糊的样本。 我们简单地选择具有最小面积的边界框作为其回归目标。 在下一节中,我们将展示通过多级预测,模糊样本的数量可以显着减少,因此它们几乎不会影响检测性能。 形式上,如果位置 (x, y) 与边界框 Bi 相关联,则该位置的训练回归目标可以表示为,

未完待续

总结

  • FPN被用于解决多目标重叠问题。

代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值