我们提出了一种全卷积单阶段目标检测器(FCOS),以per-pixel 预测的方式解决目标检测问题,类似于语义分割。几乎所有最先进的目标检测器,如RetinaNet、SSD、YOLOv3和Faster R-CNN,都依赖于预定义的锚框(anchor boxes)。相比之下,我们提出的FCOS检测器是无锚框的,也无需提出建议区域(proposals)。通过消除预定义的锚框集,FCOS完全避免了与锚框相关的复杂计算,比如训练过程中的overlapping计算。更重要的是,我们还避免了所有与锚框相关的超参数,这些超参数通常对最终的检测性能非常敏感。只需要后处理的非极大值抑制(NMS),在使用ResNeXt-64x4d-101进行 single-model 和 single-scale 测试时,FCOS取得了44.7%的平均精度(AP),超越了之前的单阶段检测器,并具有更简单的优势。我们希望所提出的FCOS框架可以作为许多其他实例级任务的简单而强大的替代方案。
目标检测是计算机视觉中一项基础且具有挑战性的任务,它要求算法为图像中 instance of interest 预测一个带有类别标签的边界框。所有当前主流的检测器,如Faster R-CNN、SSD和YOLOv2、v3 ,都依赖于一组预定义的锚框,长期以来人们一直认为锚框的使用是检测器成功的关键。尽管它们取得了巨大的成功,但值得注意的是,基于锚框的检测器存在一些缺点:1)检测性能对于锚框的大小、长宽比和数量非常敏感。例如,在RetinaNet 中,改变这些超参数会在COCO基准测试集上将性能影响多达4%的平均精度(AP)。因此,这些超参数需要在基于锚框的检测器中进行精心调整。2)即使经过精心设计,由于锚框的尺度和长宽比被固定,检测器在处理具有大尺寸变化的物体候选时也会遇到困难,尤其是对于小物体而言。预定义的锚框还削弱了检测器的泛化能力,因为在需要在具有不同物体尺寸或长宽比的新检测任务上重新设计这些锚框。3)为了实现高召回率,基于锚框的检测器需要在输入图像上密集地放置锚框(例如,在图像的较短一侧为800的情况下,特征金字塔网络(FPN)中需要超过180,000个锚框)。在训练过程中,这些锚框中的大部分都被标记为负样本。过多的负样本数量加剧了训练中正负样本之间的不平衡。4)锚框还涉及复杂的计算,例如计算与ground-truth 边界框之间的交并比(IoU)分数。
最近,全卷积网络(FCN)在dense prediction 任务中取得了巨大的成功,如语义分割、深度估计、关键点检测和计数。作为高级视觉任务之一,目标检测可能是唯一一个不太适用于全卷积像素级预测框架的任务,主要是由于使用了锚框。一个自然的问题是:我们能否以像素级预测方式解决目标检测问题,类似于用于语义分割的FCN呢?这样,这些基本的视觉任务就可以在(几乎)一个单一的框架中统一起来。我们展示了答案是肯定的。此外,我们首次证明,更简单的基于FCN的检测器甚至比基于锚框的同类检测器表现更好。
在文献中,一些工作尝试利用基于FCN的框架进行目标检测,例如DenseBox 。具体而言,这些基于FCN的框架在特征图的每个空间位置上直接预测一个4D向量和一个类别标签。如图1(左)所示,4D向量描述了边界框四个边与该位置之间的相对偏移。这些框架类似于用于语义分割的FCN,不同之处在于每个位置需要回归一个4D连续向量。然而,为了处理具有不同大小的边界框,DenseBox会将训练图像裁剪并调整为固定比例。因此,DenseBox必须在图像金字塔上执行检测,这与FCN只执行一次所有卷积的理念相悖。此外,更重要的是,这些方法主要用于特殊领域的目标检测,如场景文本检测或人脸检测,因为人们认为这些方法在应用于具有高度重叠边界框的通用目标检测时效果不佳。如图1(右)所示,高度重叠的边界框导致了难以解决的歧义问题:在重叠区域的像素上,不清楚应该回归到哪个边界框。
在接下来的内容中,我们将更详细地探讨这个问题,并展示通过使用特征金字塔网络(FPN),这种ambiguity 可以在很大程度上被消除。因此,我们的方法已经可以获得与传统基于锚框的检测器相当的检测准确性。此外,我们观察到我们的方法可能会在远离目标对象中心的位置产生许多低质量的预测边界框。为了抑制这些低质量的检测结果,我们引入了一个新的“center-ness”分支(仅有一层)来预测像素到其对应边界框中心的偏移,如公式(3)中所定义。然后,该分数用于降低低质量的检测边界框权重,并在非极大值抑制(NMS)中合并检测结果。这个简单但有效的center-ness 分支使得基于FCN的检测器在完全相同的训练和测试设置下优于基于锚框的同类检测器。
这种新的检测框架具有以下优势:
现在,Detection 与许多其他FCN可解决的任务(如语义分割)统一在一起,使得可以更轻松地从这些任务中重新利用思想。
Detection 变得无需提出建议区域和锚框,从而大大减少了设计参数的数量。design parameters 通常需要启发式调整,并且需要许多技巧才能实现良好的性能。因此,我们的新检测框架使得检测器,尤其是其训练过程,变得更加简单。
通过消除锚框,我们的新检测器完全避免了与锚框相关的复杂计算,如训练过程中的IOU计算和锚框与ground-truth 边界框之间的匹配,从而导致训练和测试速度更快,训练内存占用也比基于锚框的检测器更少。
在不添加复杂的元素的情况下,我们在单阶段检测器中实现了最先进的结果。我们还展示了所提出的FCOS可以用作两阶段检测器中的Region Proposal Networks(RPNs),并且可以显著优于基于锚框的RPN同类检测器。
所提出的检测器可以立即进行 minimal modification 以解决其他视觉任务,包括实例分割和关键点检测。我们相信,这种新方法可以成为许多实例级预测问题的新基准。
略过
在本节中,我们首先以per-pixel 预测的方式重新阐述目标检测。接下来,我们展示了如何利用multi-level prediction 来提高召回率,并解决由于重叠边界框而产生的ambiguity 问题。最后,我们介绍了我们提出的“centerness”分支,该分支有助于抑制低质量的检测边界框,并显著提高整体性能。
对于一个主干CNN的第i层,其特征图为Fi ∈ RH×W×C,s表示从初始层到第i层的总步长。输入图像的ground-truth 边界框定义为{Bi},其中Bi = (x(i)0, y(i)0, x(i)1,y(i)1, c(i)) ∈R4 × {1, 2 … C}。这里的(x(i)0, y(i)0) 和 ( x(i)1,y(i)1) 分别表示边界框左上角和右下角的坐标,c(i) 是边界框内物体所属的类别。C是类别数量,对于MS-COCO数据集,C为80。
对于特征图Fi上的每个位置(x, y),我们可以将其映射回输入图像,即
它位于位置(x, y)的感受野中心附近。与基于锚框的检测器不同,后者将输入图像上的location视为(多个)锚框的中心,并借助这些锚框作为参考来回归目标边界框,我们直接在该位置回归目标边界框。换句话说,我们的检测器将位置直接视为训练样本,而不是锚框,这与用于语义分割的FCN相同。
具体而言,如果位置(x, y)位于任何ground-truth边界框内,我们将其视为正样本,并且该位置的类别标签c∗为ground-truth 边界框的类别标签。否则,它是负样本,且c∗ = 0(表示背景类)。除了分类标签外,我们还有一个4D实值向量 t∗ = (l∗, t∗, r∗, b∗),作为该位置的 regression targets 。这里的 l∗, t∗, r∗, b∗ 分别表示位置到边界框四个边的距离,如图1(左)所示。如果一个location 位于多个边界框内,我们将其视为ambiguous sample。我们简单地选择面积最小的边界框作为其回归目标。在接下来的部分中,我们将展示通过多级预测,ambiguous sample的数量可以显著减少,从而几乎不会影响检测性能。正式地说,如果位置(x, y)与边界框Bi相关联,该位置的训练回归目标可以表示为:
值得注意的是,FCOS可以利用尽可能多的前景样本来训练回归器。这与基于锚框的检测器不同,后者只考虑与 ground-truth 边界框具有足够高IOU的锚框作为正样本。我们认为这可能是FCOS优于基于锚框的同类检测器的原因之一。
Network Outputs 对应于训练目标,我们网络的最终层预测一个80维的分类标签向量p和一个4维的边界框坐标向量t = (l, t, r, b)。我们不是训练一个multi-class 分类器,而是训练了C个二元分类器。在主干网络的特征图之后,我们分别为分类和回归分支添加了四个卷积层。此外,由于回归目标始终是正数,我们在回归分支顶部使用exp(x)将任意实数映射到(0,∞)区间内。值得注意的是,FCOS的网络输出变量比流行的基于锚点的检测器少了9倍。
Loss Function 我们定义训练损失函数如下:
其中,Lcls是的(Focal Loss),而Lreg是类似于UnitBox 中的IOU损失(Intersection over Union)。Npos表示正样本的数量,而本文中λ的值为1,是用于平衡Lreg的权重。求和是在所有特征图Fi的位置上计算的。1{c∗i > 0}是一个指示函数,如果c∗i > 0,则为1,否则为0。
Inference FCOS的推断过程很简单。给定输入图像,我们通过网络进行前向传播,对于特征图Fi上的每个位置,得到分类分数 px,y和回归预测 tx,y。我们选择具有px,y > 0.05的位置作为正样本,并通过方程(1)来获取预测的边界框。
这里我们展示了如何通过使用多级FPN 的多级预测来解决所提出的FCOS的两个可能问题。1) 在卷积神经网络中,最终特征图的大stride(例如,16倍)可能会导致相对较低的最佳可能召回率(BPR)。对于基于锚点的检测器,由于大步长而导致的低召回率可以在一定程度上通过降低正锚点框所需的IOU分数来补偿。对于FCOS,乍一看可能会认为BPR可能远低于基于锚点的检测器,因为由于大步长,最终特征图上的某些位置根本无法编码对象,从而无法召回对象。在这里,我们经验证明,即使具有大步长,基于FCN的FCOS仍然能够产生很好的BPR,甚至可以比锚点基准检测器RetinaNet 在官方实现Detectron中表现得更好(参见表格1)。因此,BPR实际上不是FCOS的问题。此外,通过多级FPN预测,BPR可以进一步提高,以达到基于锚点的RetinaNet可以实现的最佳BPR。2) ground-truth 框之间的重叠可能导致难以处理的歧义,即重叠位置应该回归到哪个边界框?这种歧义会导致基于FCN的检测器性能下降。在这项工作中,我们展示了通过多级预测可以很大程度上解决这种歧义,基于FCN的检测器可以获得与基于锚点的检测器相当甚至更好的性能。
我们在不同级别的特征图上检测不同尺寸的物体。具体来说,我们使用了五个级别的特征图,分别定义为{P3,P4,P5,P6,P7}。P3、P4和P5是由主干CNN的特征图C3、C4和C5产生的,后面跟着一个带有自顶向下连接的1×1卷积层,如图2所示。P6和P7分别通过在P5和P6上应用步长为2的卷积层来生成。因此,特征级别P3、P4、P5、P6和P7的步长分别为8、16、32、64和128。
与基于锚点的检测器不同,其将不同尺寸的锚框分配给不同的特征级别,我们直接限制了每个级别的边界框回归范围。具体来说,我们首先为所有特征级别上的每个位置计算回归目标l∗、t∗、r∗和b∗。然后,如果一个位置满足max(l∗, t∗, r∗, b∗) > mi 或max(l∗, t∗, r∗, b∗) < mi−1,它将被设置为负样本,因此不需要再回归边界框。这里mi是特征级别i需要回归的最大距离。在这项工作中,m2、m3、m4、m5、m6和 m7分别设置为0、64、128、256、512和∞。
由于不同尺寸的物体被分配到不同的特征级别,大多数重叠发生在具有相当不同尺寸的物体之间。如果一个位置,即使使用了多级预测,仍然分配给多个ground-truth框,我们只需选择面积最小的ground-truth框作为其目标。正如我们的实验证明的那样,多级预测可以在很大程度上减轻上述的歧义问题,并将基于FCN的检测器提升到与基于锚点的检测器相同的水平。
最后,我们在不同的特征级别之间共享检测头部,这不仅使得检测器参数更高效,还提高了检测性能。然而,我们观察到不同的特征级别需要回归不同尺寸范围的目标(例如,P3的尺寸范围为,而P4的尺寸范围为),因此在不同的特征级别上使用相同的检测头部是不合理的。因此,我们不再使用标准的exp(x),而是使用带有可训练标量si的exp(six),以自动调整指数函数的基数,适用于特征级别Pi,这略微改善了检测性能。
在使用多级预测之后,FCOS与基于锚点的检测器之间仍然存在性能差距。我们观察到,这是由于许多预测的边界框质量较低,这些边界框是由远离物体中心的位置产生的。
为了在不引入任何超参数的情况下抑制这些低质量的检测边界框,我们提出了一个简单而有效的策略。具体来说,我们在与分类分支并行的情况下添加了一个单层分支(如图2所示),用于预测位置的“center-ness”。中心性描述了location 到该位置负责的物体中心的标准化距离,如图3所示。给定位置的回归目标l∗、t∗、r∗和b∗,中心性目标定义如下:
我们在这里使用 sqrt 来减缓centerness的衰减。中心性的取值范围从0到1,因此使用二元交叉熵(BCE)损失进行训练。损失添加到损失函数Eq.(2)中。在测试时,最终的得分(用于对检测到的边界框进行排名)是通过将预测的中心性与相应的分类分数相乘来计算的。因此,中心性可以降低远离物体中心的边界框的分数权重。结果是,通过最终的非最大抑制(NMS)过程,很有可能这些低质量的边界框会被滤除,从而显著提高检测性能。
中心性的另一种替代方法是仅使用 ground-truth 边界框的中心部分作为正样本,但代价是引入一个额外的超参数。在我们提交后,已经证明了这两种方法的组合可以实现更好的性能。实验结果可以在表格3中找到。
我们的实验是在大规模检测基准数据集COCO上进行的。我们使用COCO的trainval35k划分(115K张图像)进行训练,使用minival划分(5K张图像)作为验证集进行我们的消融研究。我们将主要结果报告在测试开发集(20K张图像)上,通过将我们的检测结果上传到评估服务器进行评估。
Training Details:除非特别说明,我们使用ResNet-50 作为我们的主干网络,并使用与RetinaNet 相同的超参数。具体而言,我们的网络使用随机梯度下降(SGD)进行训练,进行90K次迭代,初始学习率为0.01,每批处理16张图像。学习率在第60K和80K次迭代时分别降低10倍。权重衰减和动量分别设置为0.0001和0.9。我们的主干网络使用在ImageNet 上预训练的权重进行初始化。除非特别说明,输入图像被调整大小,使其较短的一边为800,较长的一边小于或等于1333。
Inference Details:我们首先将输入图像传递给网络,获取预测的带有预测类别的边界框。除非特别说明,以下后处理与RetinaNet 完全相同,我们直接使用RetinaNet的后处理超参数。我们使用与训练中相同尺寸的输入图像。我们假设如果仔细调整超参数,我们的检测器的性能可能会进一步提高。
略过
到目前为止,我们已经展示了在单级检测器中,我们的FCOS甚至可以比基于锚点的对应方法获得更好的性能。直观地说,FCOS应该也能够在两级检测器Faster R-CNN中用FPN 替代区域建议网络(RPNs)中的锚点框。在这里,我们通过实验来证实这一点。
与使用FPN 的RPN相比,我们使用FCOS中的方法替换了锚点框。此外,我们将GN添加到FPN头部的层中,这可以使训练更加稳定。除此之外,其他设置与官方代码中使用FPN的RPN完全相同。如表6所示,即使不使用提出的中心性分支,我们的FCOS已经显著提高了AR100和AR1k。在使用了提出的中心性分支后,FCOS将AR100和AR1k进一步分别提升至52.8%和60.3%,相对于使用FPN的RPN,AR100的相对改进为18%,AR1k的绝对改进为3.4%。
We have proposed an anchor-free and proposal-free onestage detector FCOS. As shown in experiments, FCOS
compares favourably against the popular anchor-based onestage detectors, including RetinaNet, YOLO and SSD,
but with much less design complexity. FCOS completely avoids all computation and hyper-parameters related to anchor boxes and solves the object detection in a per-pixel prediction fashion, similar to other dense prediction tasks such as semantic segmentation. FCOS also achieves state-of-theart performance among one-stage detectors. We also show that FCOS can be used as RPNs in the two-stage detector Faster R-CNN and outperforms the its RPNs by a large margin. Given its effectiveness and efficiency, we hope that FCOS can serve as a strong and simple alternative of current mainstream anchor-based detectors. We also believe that FCOS can be extended to solve many other instancelevel recognition tasks.