摘要
本文提出一种全卷积单阶段目标检测算法,能像语义分割一样解决每个像素的目标检测。目前几乎所有的目标检测器,如RetinaNet,SSD,YOLOv3和Faster R-CNN都依赖于预定义的锚框,相反,我们提出的方法是无锚框的,这种无锚框方法,消除了复杂的锚框计算,如训练过程中重叠部分,更重要的是,我们避免了与锚框计算的所有超参数,这些通常与最终的检测效果影响很大,通过唯一的非极大值抑制(NMS),通过带ResNeXt-64x4d-101的FCOS实现单模型和单尺度测试的AP中达到44.7%,,超越了之前的单阶段检测器的性能。我们第一次展示了更简单的,更灵活的检测框架,并且提高了检测精度。我们希望FCOS框架可以充当简单而强大的替代方案,在许多其他目标检测任务中是有用的。
一、原文及代码
原文链接:https://arxiv.org/abs/1904.01355
代码链接:http://github: tinyurl.com/FCOSv1
二、引言
基于锚框的检测器存在以下缺点:
- 检测性能对anchor的数量及尺寸影响较大。因此,需要仔细的调整anchor-based的参数。
- 即使anchor的尺寸预先经过定义,但是当处理变化较大的物体,尤其是小目标时会面临困难,比如要根据新的检测任务重新设计anchor的尺寸。
- 为了得到一个较高的召回率,基于anchor的检测器需要在输入图像上密集的设置anchors,其中大部分anchor被标记为negative,加剧了训练时正负样本之间的不平衡。
- 计算IoU时,大量的anchor box也会占用大量的计算及内存资源。
基于锚框的检测方法偏离全卷积预测的框架,而本文尝试类似于语义分割的像素级预测应用至目标检测任务中。因此,目标检测,语义分割,关键点检测等几种任务可以糅合到一个模型中。一些工作如Dense-Box,UnitBox曾利用基于FCN-based的框架进行目标检测。但这些方法在某一层的feature map上直接预测4D坐标及类别,如下图左侧所示,4D向量表示了边框的边距离该像素点的偏移。这些方法与语义分割的全卷积相类似,但每个位置需要回归一个连续的4D向量。为了处理不同大小的边框,DenseBox将训练图片调整为固定尺寸。DenseBox必须要在图像金字塔上进行检测,违反了全卷积对所有卷积只计算一次的思想。而且,这些方法大多应用在目标检测的特殊场景中,比如文本检测或者人脸检测。如下图右侧所示,较多的重叠框造成了模糊,无法确定重叠区域应该对哪个框进行回归。本文证明通过FPN结构可以消除这种模糊。本文发现在距离目标中心较远的位置会预测一定数量低质量的边界框。为了打压这些边框,本文设计了一个新的分支"center-ness",用于预测一个像素与对应边框中心的偏差。所得的分数用于减少低质量的检测框,最后通过NMS将检测结果进行融合。
FCOS的优点如下:
- 可以将目标检测与语义分割,等基于全卷积的任务进行结合,更加简单。
- 目标检测与anchor/proposal无关,大量减少了参数量,计算量及内存。
- FCOS也可以与RPN结合取得更好的结果。
- 通过对模型进行小幅度改造就可以应用到其他视觉任务,比如关键点检测。
三、网络结构
1.特征提取网络
为backbone提取的第i层特征图,对于特征图上的每个位置(x,y)将其映射回输入图片上,大致为与(x,y)感受野中心的附近。基于anchor的方法是将输入图片的位置作为anchor的中心,并将边框进行回归,而FCOS直接对图片的每个位置进行目标边框的回归,换言之,本文将每个像素看作训练样本,而不是只将anchor boxes看作样本,这点与语义分割的全卷积相似。特征图(x,y)与输入图(x',y')的映射关系为:
当某点(x,y)落入任意ground-truth 边框中,则可以将其看作是postitive 样本,其类别为ground truth边框的类别。否斥,该样本为negative 样本其类别设置为c*=0,本文用一个4D的向量t*=(l*.t*,r*,b*)作为回归目标。l*.t*,r*,b*分别代表距离边框四条边的边界。如果一个位置落入多个边框中,则该位置就为模糊样本,目前,本文选择区域最小的边框作为回归目标。本文会通过多层次预测大幅度减少模糊样本的数量。(x,y)位置与边框Bi相关,则该位置的回归目标可以按如下方式及计算。FCOS在训练的回归时尽可能利用fore-ground样本,这也是性能优于基于anchor-based方法的可能原因。
网络输出:网络输出一个C(类别数)D及4D的向量t=(l,t,r,b),本文的类别训练并不是基于多任务训练,而是训练C个二分类器。本文在backbone的特征图后分别增加了4层卷积层在分类分支及回归分支前。此外,通常,回归目标是正的,本文应用exp(x)在回归分支的顶部将任意实数映射到0到正无穷。FCOS相比基于锚框的方法减少了9倍的网络输出。
损失函数:本文使用focal_loss来作为损失函数
2.特征金字塔模块
FCOS上的存在的两个问题及解决:
- CNN中经过加大的stride得到的feature map可能会产生较低的最可能召回率(BPR)。对于基于anchor的方法,可以通过调整IoU的阈值来补偿较大stride导致的较低召回率,对于FCOS来说,由于较大stride后的feature map上没有位置编码信息,因此,FCOS得到的BPR可能会更低,然而,通过FCN仍可以得到较满意的BPR。因此,BPR对于FCOS来说并不是一个问题。此外,通过much-level FPN预测,BPR可以得到进一步的提高可以达到RetinaNet最好的高度。
- 训练时,与ground truth boxes的重叠可能会产生难以理解的模糊情况,会拉低基于FCN检测器的检测能。本文通过多层次预测解决上述问题。
与FPN相似,本文在不同层次的feature map上进行不同尺寸的目标检测。利用feature map的五个层次(p3,p4,p5,p6,p7),P3,P4,P5由backbone 的C3,C4,C5后接1x1的卷积得到。 如下图所示,P6,P7在分别在P5,P6上设置stride 为2并增加卷积层得到。最终,P3,P4,P5,P6,P7的stride分别为8,16,32,64,128。
不同于基于anchor的检测器,在不同层的feature map上应用不同尺寸的anchor,本文直接限制边界框回归的范围。首先计算出所有层上每个位置对应的回归目标,l*,t*,r*,b*,若一个位置满足下列两个条件则将其认定为负样本,也没有进行回归的意义了。max(l*,t*,r*,b*)>mi或者max(l*,t*,r*,b*)<mi-1。mi代表feature level i需要回归的最大距离。本文,m2,m3,m4,m5,m6,m7分别设置为0,64,128,256,512及OO.由于不同的目标放置在不同的feature level中,而且,大部分重叠发生在相似大小的目标之间,因此通过多层次预测可以有效移除模糊样本,进而提高基于FCN检测器的心梗你。本文将不同层的feature levels进行共享,不仅使参数有效,而且提高了检测心梗。然而,不同层的feature level需要回归指定大小的回归框。如P3的范围为[0,63],P4的为[64,128].因此,对于不同的feature level使用相同的head这是不合理的。因此,本文并不使用标准的exp(x),而是增加了一个训练参数si,基于exp(si x)根据Pi进行自动调整。
3.centerness模块
在进行多层次预测后,FCOS仍与基于anchor的检测器的性能存在一定差距。这是由于距离目标中心较远的位置预测出大量低质量的边框造成的。本文在不引进参数的情况下来抑制低质量的边框。平行于分类分支增加了一个分支, 用于预测位位置的"center-ness"如该位置到目标物中心位置的距离。如上图所示,给定一个回归目标,t*,l*,r*,b*,center-ness的回归定义如下所示
这里用开放的作用是降低center-ness的衰减速度。center-ness的取值范围为0至1,因此使用binary 交叉熵损失进行训练。当进行测试时,通过结合对应的分类分数及多个预测得到的center-ness计算得到分数用于对检测的边框进行排序。因此,center-ness可以降低距离目标中心较远预测框的权重。虽然其更高的概率值,但仍可能会被NMS干掉。对比基于anchor的检测器设置两个IoU的阈值用于对anchor进行标记,center-ness可以看作是soft threshold。在网络训练时进行学习,并不需要花费时间及经历进行微调。,同时本文方法可以将任意落入ground box的位置看作为正样本,因此,可以尽可能的利用正样本用于回归。
四、结果
五、总结
我们提出了一种无锚框的目标探测器FCOS算法。 如实验所示,FCOS与经典的基于锚框的单阶段目标检测算法相比,包括RetinaNet,YOLO和SSD,网络设计复杂度要低得多。FCOS避免了与锚框有关的所有计算和超参数,目标框像其他语义分割任务一样,解决了每个像素的目标检测表示方式。 FCOS还实现了最新状态单阶段目标探测器的最优表现。 我们还展示FCOS的RPN可用作双阶段检测器,并以较大的性能超越其RPN。 鉴于其有效性和效率,我们希望FCOS可以作为一种强大而简单的方案替代主流的基于锚框探测器。 我们也相信FCOS可以扩展以解决许多其他识别任务。