FCOS论文研读
-
简介:FCOS(Fully Convolutional One-Stage Object Detection)是一个基于FCN(全卷积网络 Fully Convolutional Networks)的per-pixel、anchor free的one-stage目标检测算法。FCOS提供了可与anchor-based方法媲美的检测效果。避免了所以和anchor box相关的计算、超参的优化。
-
网络架构:
a) Backbone:骨干网络,进行特征提取,得到三张特征图,规格见上图。
b) Feature pyramid :特征金字塔,其中P3,P4,P5是由CNN backbone的特征图C3,C4,C5跟一个11的卷积网络生成的,从上至下连接。P6,P7是分别由P5和P6经过一个卷积层(stride=2)生成的,p3-p7对应的HW及步长(s)见上图。
c) Classification + Center-ness + Regression:进行分类,中心和回归。 -
每个阶段主要工作或作用:
a) 设定Fi是CNN backbone的第i层特征图,s是到这一层的总步长(stride)。输入图像的ground-truth的bounding box(以下简称bbox)可被定义为{Bi},其中Bi=(x0(i), y0(i), x1(i), y1(i), c(i))。其中(x0(i), y0(i)),(x1(i), y1(i))是bbox左上和右下的坐标,c(i)是目标类别。对于Fi上每个像素(x,y),我们可以把它映射到原输入图像:
我们直接在该位置回归目标的边界框。换句话说,我们的检测器直接将位置视为训练样本。
具体回归方式:如果位置(x, y)落入任何ground-truth box,且位置的类标签c∗是ground-truth box的类标签,则认为位置(x, y)是阳性样本。否则它是一个负样本和c∗= 0(背景类)。除了分类的标签,我们还有一个四维实向量t∗= (l∗,t∗,r∗,b∗)作为该位置的回归目标。这里l*,t*,r和b是从位置到包围框四边的距离,如图1(左)所示。如果一个位置属于多个边界框,则认为它是一个二义性样本。我们简单地选择面积最小的边界框作为回归目标。如果位置(x, y)与边界框Bi相关联,那么该位置的训练回归目标可以表述为:
回归损失函数:
Lcls是分类的损失,用的focal loss。Lreg是回归框的损失,用的IOU。Npos是正样本的数量,λ文中用的是1,调整权重用。求和操作的话,是会对Fi上每个点都做的。 表示对正样本做。推理时,FCOS会选择px,y > 0.05(px,y为特征图Fi上每个位置的分类得分)的当作正样本,来获取预测的框。
b) 基于FNP的多层预测:
- 要解决的问题:
在一个CNN中,最终特征图的大步幅(例如,16×)可以导致一个相对较低的最佳可能召回(BPR)。
ground-truth box中的重叠会导致难以处理的模糊性,即重叠中的位置应该回归哪个边界框。 - 解决方式:
通过将不同大小的锚点盒分配给不同的特征级别,直接限制每个级别的边界盒回归范围。更具体地说,首先计算所有特征层上每个位置的回归目标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 box,我们只需选择面积最小的ground-truth box作为目标。实验表明,多层次预测可以在很大程度上缓解上述歧义,并将基于fcn的检测器提高到与基于锚点的检测器相同的水平。
c) Head设计:在不同的特征层之间共享头部,不仅使检测器参数高效,而且提高了检测性能。但是,不同的feature level需要回归不同的size range(例如,p3的size range是[0,64],P4的size range是[64,128]),因此不同feature level使用相同的heads是不合理的。因此,作者没有使用标准的exp(x),而是使用带有可训练标量的exp(six)来自动调整特征级Pi的指数函数的基,这略微提高了检测性能。
d) Center-ness:
- 存在问题:由于许多低质量的预测边界框产生的位置远离一个对象的中心,在FCOS中使用多级预测后,FCOS与锚定检测器的性能仍存在差距。
- 解决方式:在分类分支的同时添加一个单层分支来预测一个位置的“中心度”。中心度描述了从位置到该位置所负责的对象中心的归一化距离。给定一个位置的回归目标l*,t*,r和b,中心目标定义为:
我们用根号来减缓中心的衰减。中心度的范围是0到1,因此用二进制交叉熵(BCE)损失进行训练。将损失添加到损失函数。在测试时,最终的得分(用于对检测到的边界框进行排序)是通过将预测的中心度与相应的分类得分相乘来计算的。因此,中心性可以降低远离对象中心的边界框的分数。因此,这些低质量的边界框很有可能被最终的非最大抑制(NMS)过程过滤掉,显著提高了检测性能。
译文:红色、蓝色和其他颜色分别表示1、0和它们之间的值。中心度通过式子计算,当位置偏离目标中心时,中心度从1衰减到0。在测试时,将网络预测的中心度与分类得分相乘,从而可以降低由远离目标中心位置预测的低质量边界框的权重。