FCOS: Fully Convolutional One-Stage Object Detection

Github:FCOS

摘要

提出了一种全卷积的one-stage目标检测方法,以逐像素点的方式解决目标检测问题,类似于语义分割。FCOS是anchor free的方法,FCOS with ResNeXt-64x4d-101 在单模型单尺度的测试下,AP达到44.7%,超越了之前的one-stage方法。


image.png

一、介绍

作者了分析anchor based方法的缺点,主要有以下四点:

  • 1、检测性能对于anchor的尺寸、数量、高宽比非常敏感,通过改变这些超参数Retinanet在COCO benchmark上面提升了4%的AP。

  • 2、泛化能力较差,即使是精心设计的anchor,在处理形状变化比较大的场景时表现仍然不佳,特别是对于小对象来说。需要在新检测任务上重新设计anchor。

  • 3、为了提高召回率,需要生成大量的anchor,在训练过程中,大部分的anchor都被标记为负样本,从而导致了样本不平衡的问题。

  • 4、在训练过程中涉及到大量复杂的运算,如IOU,消耗额外的计算资源和内存。

作者认为可以用语义分割(FCN)的框架来进行目标检测,在之前的一些工作中基于FCN框架直接预测一个4D向量及类别,4D向量描述了到四条边的偏移量。但是对于高度重叠边界框会导致一个难以处理的歧义问题,重叠部分到底属于哪一类。作者在后面的论文中通过FPN大大消除了这种模糊性。此外,作者发现该方法在离目标较远的位置产生大量的的低质量预测框。因此提出了一个center-ness分支去解决该问题。

作者总结了FCOS的优点,主要有以下四点:

  • 1、检测任务可以和其他FCN-sovable的任务统一,类似于语义分割,使其中的一些idea可以通用。

  • 2、检测不需要anchor,大大减少了设计参数的数量。使得训练变得更加简单。

  • 3、不需要在训练过程中有复杂的IOU计算,比anchor-based的方法节省了更多的内存。

  • 4、没有什么花里胡哨的,是目前state-of-the-art方法。也可以替换两阶段方法的RPN网络。

  • 5、只需要少量的修改,可以轻易的拓展到其他视觉任务,例如实例分割和关键点检测。

image.png

二、相关工作

1、anchor-based

作者在这部分主要探讨了anchor based方法的发展及其超参数是非常复杂的,其中提到了:

  • 通过IOU阈值进行正负样本的划分。

  • 之前提到的anchor的设计,包括尺寸,宽高比等。

  • 检测任务偏离了语义分割任务的简单的全卷积架构。

2、anchor-free

作者介绍了yolov1和densebox方法。

三、FOCS

  • 1、通过FPN进行多级预测提高召回率并解决重叠的边界框引起的歧义问题。

  • 2、通过center-ness分支,抑制低质量的预测框,大大提高了性能。

1、全卷积one-stage检测器

image.png
  1. FCOS直接对feature map中每个位置对应原图的边框都进行回归,换句话说FCOS直接把每个位置都作为训练样本,这一点和FCN用于语义分割相同。由feature map映射回input image的公式为:

  2. FOCS中,如果一个位置(x,y)落入任何ground truth中,就认为它是一个正样本,并将它标记为对应类别。并且还需要标记一个4D向量,即(l, t, r, b),该点到边界框的偏移量。如果一个(x,y)落入多个ground truth中,则将它视作一个模糊样本,选择面积较小的ground truth将其标记。在下一节中,将利用多级预测去减少模糊样本的数量,从而不影响检测性能。

  3. FOCS尽量使用多的前景(正样本)参与训练回归器,而不是像anchor based的方法,只考虑IOU足够大的anchor作为正样本。作者认为这是FCOS表现优于anchor based方法的原因之一。

  4. 损失函数:​是focal loss类别损失,​是交并 比损失。

L(\{p_{x,y},t_{x,y}\})= \frac{1}{N_{pos}}\sum L_{cls}(p_{x,y},c^{*}_{x,y}) + \frac{\lambda}{N_{pos}}\sum 1_{\{c^{*}_{x,y}>0\}}L_{reg}(t_{x,y},t^{*}_{x,y})

2、使用FPN进行多级预测

作者使用FPN解决了两个问题。

  1. 基于锚框的检测器由于大的步伐导致低召回率,需要通过降低正的锚框所需的交并比分数来进行补偿:在FCOS算法中表明,及时是大的步伐(stride),也可以获取较好的召回率,甚至效果可以优于基于锚框的检测器。


    image.png
  2. 真实边框中的重叠可能会在训练过程中造成难以处理的歧义,这种模糊性导致基于fcn的检测器性能下降:在FCOS中,采用多级预测方法可以有效地解决模糊问题,与基于锚框的模糊检测器相比,基于FCN的模糊检测器具有更好的性能。基于锚框的检测器将不同尺寸的锚框分配到不同级别的特征层,所以作者为了减少尺度差异大的物体重叠,引入参数 m_{i}为特征层 i 的最大距离,如果一个location(x, y)满足 max(l^{*}, t^{*},r^{*},b^{*}) > m_{i} 或者 max(l^{*}, t^{*},r^{*},b^{*}) < m_{i-1},那么我们在这个特征层就将其视为负样本,不在进行回归。其中 m_{i} 分别设置为0,64,128,256,512和正无穷,正好可以形成5个区间,在5个层上进行限制尺寸以减少重叠区域。如果在一个层中出现重叠区域呢仍存在重叠区域,就直接简单的使用最小区域作为回归目标。作者还提到加入P3是[0,64],P4是[64,128]存在重叠部分是不合理的,因此没有使用固定的exp(x),而是加入了一个可训练的参数 s_{i}exp(s_{i}x)自动调整不同特征图的的范围,略微提升了一点检测性能。

    image.png

3、Center-ness

在FCOS中使用了多级预测后,还是和anchor based的方法存在性能差距,这是由于远离对象中心的位置产生了大量的低质量预测框。所以添加了一个简单的center-ness分支,与分类分支并行,来预测center-ness的位置。center-ness(可以理解为一种具有度量作用的概念,在这里称之为"中心度"),中心度取值为0,1之间,使用交叉熵损失进行训练。并把损失加入前面提到的损失函数中。测试时,将预测的中心度与相应的分类分数相乘,计算最终得分(用于对检测到的边界框进行排序)。因此,中心度可以降低远离对象中心的边界框的权重。因此,这些低质量边界框很可能被最终的非最大抑制(NMS)过程滤除,从而显着提高了检测性能。
centerness^{*}=\sqrt{\frac{min(l^{*},r^{*})}{max(l^{*},r^{*})} \times \frac{min(t^{*},b^{*})}{max(t^{*},b^{*})}}

image.png

image.png

四、实验

使用COCO数据集,使用trainval135K(115K张图片)进行训练,使用minival(5K张图片)进行消融实验,最后在test_dev(20K张图片)上报告我们的结果。

  • 训练细节:
    • 1、使用RetinaNet相同的超参数,采用resnet-50作为backbone,使用ImageNet上的预训练权重进行初始化。
    • 2、使用SGD作为优化器,初始学习率为0.01,Moment为0.9,batch size 16。
    • 3、训练90K次,学习率在60K和80K时衰减10倍。
    • 4、weight decay为0.0001。
    • 5、短边为800,长边不超过1333。
  • 推理细节:
    • 使用RetinaNet相同的后处理超参数。
    • 使用和训练时一样大小的图像进行推理。

1、消融实验

image.png
  • 使用FPN进行多级预测:主要解决了召回率低以及模糊样本的问题。主要参考本文前面列的两张实验图,这里不再重复论述了。

  • 使用Center-ness:


    image.png
  • 和anchor based的方法对比:


    image.png

2、和最新的一些方法对比

简而言之,FCOS最好。

五、替换RPN

image.png

后面还有一些别的讨论有兴趣的可以自己看看论文。

推荐阅读更多精彩内容