1.本文资源

论文链接:https://arxiv.org/pdf/1904.01355.pdf
开源代码链接:https://github.com/tianzhi0549/FCOS
建议参考论文阅读本博客,论文主要内容在第5部分体现

2.动机

anchor-base缺点

  1. 用anchor的框架对于anchor的尺寸非常敏感,anchor的尺寸会影响检测的performance。
  2. anchor尺寸的固定导致了对网络对特殊形状的物体鲁棒性较差,如果物体的尺寸变化很大,就会导致模型的泛化能力差。
  3. 为了获得高的recall,要非常密集的堆放anchors,通常大多数的anchor都是负样本,导致了正负样本不均衡等问题。
  4. 大量的anchor增加了计算和显存消耗(尤其是每个anchor都要计算IOU)。

于是作者就有了想法能不能不使用anchor-base方法,而采取一种全新的anchor-free方式来进行目标检测呢?

3.主要贡献

  1. 将检测与其他全卷积网络可解决的任务统一起来(例如语义分割),可轻松重复的使用这些任务中的方法。
  2. 将检测变成一个anchor-free的任务,这将极大地设计参数的数量,减少了这部分各种未知的trick,并且避免了复杂的IOU计算与训练期间的anchor boxes 和 ground-truth boxes匹配,显存也减少了2倍左右
  3. 取得了的state-of-the-art的结果并且FCOS可以被用作RPN,建议社区重新考虑下在目标检测方面anchor-based的必要性。
  4. 该方法在简单的改变后也可被用到其他的视觉任务中,如实例分割和关键点检测。

4.网络架构

在这里插入图片描述

1.FCOS的网络架构,其中C3、C4、C5表示backbone的feature map。
2.P3到P7为head部分最终预测所用的特征层。
3.hw是特征图的高度和宽度。
4./s (s = 8;16;:::;(128)为特征映射层与输入图像的下采样比。
例如,所有数字都是使用800 *1024输入计算的。 /16 则代表16倍下采样,特征图尺寸会除以16.
5.对于输出部分H × W的特征图,每一个像素点需要输出类别打分、中心打分、回归坐标,他们的维度分别为C、1、4.

大家应该也都注意到了,feature pyramid结构部分并不是标准的FPN结构,P6和P7层似乎有些多余,所以实验部分和Retinanet做对比,证明FCOS输出部分网络设计的优势,只有一点点提升。
在这里插入图片描述

5.文章核心工作与思想

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

5.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,为backbone的feature map, i代表了下采样的倍数。

B i = ( x 0 ( i ) , y 0 ( i ) , x 1 ( i ) y 1 ( i ) , c ( i ) ) B_{i}=\left(x_{0}^{(i)}, y_{0}^{(i)}, x_{1}^{(i)} y_{1}^{(i)}, c^{(i)}\right) Bi=(x0(i),y0(i),x1(i)y1(i),c(i)),为真实标注。

( x 0 ( i ) , y 0 ( i ) ) \left(x_{0}^{(i)}, y_{0}^{(i)}\right) (x0(i),y0(i)),为左上的点。 ( x 1 ( i ) y 1 ( i ) ) \left(x_{1}^{(i)} y_{1}^{(i)}\right) (x1(i)y1(i)),为右下的点。c代表类别。

Fi上的每一个点(x,y)都可以通过如下公式映射到输入的图像上:
( ⌊ s 2 ⌋ + x s , ⌊ s 2 ⌋ + y s ) \left(\left\lfloor\frac{s}{2}\right\rfloor+x s,\left\lfloor\frac{s}{2}\right\rfloor+y s\right) (2s+xs,2s+ys)
映射后的位置,我们也认为接近感受野 的(x,y)

与基于锚点的检测器不同,基于锚点的检测器将输入图像上的位置作为锚点盒的中心,并对这些锚点盒的目标边界盒进行归一化处理,我们直接对每个位置的目标边界盒进行归一化处理。也就是说,我们的检测器直接将位置看作训练样本,而不是在基于anchor 的检测器中将anchor boxes看作训练样本,这与FCNs(全卷积网络)中的语义分割方法是一样的。
anchor-based 检测器是将anchor回归到ground truth,不同于这种方法,本文的方法是直接将location回归到ground truth。

在这里插入图片描述

如果位置(x,y)落入任何ground-truth边界框中,则被认为是正样本,该位置的类别标签c就是Bi的类别标签,否则就是负样本,类别标签c=0(背景类别),同时会得到一个四维向量。
t ∗ = ( l ∗ , t ∗ , r ∗ , b ∗ ) \boldsymbol{t}^{*}=\left(l^{*}, t^{*}, r^{*}, b^{*}\right) t=(l,t,r,b)
是由下计算而来
l ∗ = x − x 0 ( i ) , t ∗ = y − y 0 ( i ) r ∗ = x 1 ( i ) − x , b ∗ = y 1 ( i ) − y \begin{aligned}l^{*} &=x-x_{0}^{(i)}, \quad t^{*}=y-y_{0}^{(i)} \\r^{*} &=x_{1}^{(i)}-x, \quad b^{*}=y_{1}^{(i)}-y\end{aligned} lr=xx0(i),t=yy0(i)=x1(i)x,b=y1(i)y

1.四个值分别表示从位置到边界框四边的距离。如果一个位置落在多个b边界框中,它被认为是一个模糊的样本。现在,我们简单地选择面积最小的边界框作为其回归目标,面积大的那些我们就舍弃掉了。在下一节中,我们将展示使用多级预测,可以显著减少模糊样本的数量。
2.值得注意的是,FCOS可以利用尽可能多的前景样本来训练回归器。与基于锚点的检测器不同,基于anchor的检测器只考虑与地面真实值的anchor boxes具有足够高的IOU的anchor boxes作为正样本。我们认为这可能是FCOS优于基于anchor的同类产品的原因之一。

5.1.1 Network Outputs

对应于训练目标,我们的网络的最后一层预测分类标签的80D向量p和4D向量t=(l,t,r,b)边界框坐标,之后,我们不再训练多类分类器,而是训练C个二分类器。我们在主干网络的特征图之后分别添加了4个卷积层,用于分类和回归分支。此外,由于回归目标总是正的,本文应用exp(x)在回归分支的顶部将任意实数映射到(0,OO),值得注意的是,FCOS相比基于anchor-based的方法减少了9倍的网络输出。

5.1.2 Loss Function

定义如下
L ( { p x , y } , { t x , y } ) = 1 N p o s ∑ x , y L c l s ( p x , y , c x , y ∗ ) + λ N p o s ∑ x , y 1 { c x , y ∗ > 0 } L r e g ( t x , y , t x , y ∗ ) \begin{aligned}L\left(\left\{\boldsymbol{p}_{x, y}\right\},\left\{\boldsymbol{t}_{x, y}\right\}\right) &=\frac{1}{N_{\mathrm{pos}}} \sum_{x, y} L_{\mathrm{cls}}\left(\boldsymbol{p}_{x, y}, c_{x, y}^{*}\right) \\&+\frac{\lambda}{N_{\mathrm{pos}}} \sum_{x, y} \mathbb{1}_{\left\{c_{x, y}^{*}>0\right\}} L_{\mathrm{reg}}\left(\boldsymbol{t}_{x, y}, \boldsymbol{t}_{x, y}^{*}\right)\end{aligned} L({px,y},{tx,y})=Npos1x,yLcls(px,y,cx,y)+Nposλx,y1{cx,y>0}Lreg(tx,y,tx,y)

Lcls = focal loss,Lreg = iou loss,Npos为正样本数,拉姆达=1在本文中,是Lreg的平衡权重,对特征图上的所有位置进行求和是指标函数。
其中 1 { c x , y ∗ > 0 } \mathbb{1}_{\left\{c_{x, y}^{*}>0\right\}} 1{cx,y>0}当ci大于0时为1,否则为0。
p(x,y)表示在位置(x,y)处的分类概率,t(x,y)表示在(x,y)处的回归坐标。

5.1.3 Inference

FCOS的推断很简单,给出一个输入图像,通过网络前向传播得到特征图Fi上每一个位置(x,y)的 分类概率P(x,y) ,回归预测坐标 t (x,y) 。之后,选取P(x,y) > 0.05作为正样本,用前述l、t、r、b公式得到预测的边界框。

5.2. Multilevel Prediction with FPN for FCOS

目的:

  • 提升best possible recall (BPR),提升召回率。
  • ground-truth框中的重叠会在训练过程中造成难以处理的歧义,在重叠区域内的哪个边界框应该回归?这种模糊性导致基于fcn的检测器性能下降。结果表明,采用多层次预测方法可以有效地解决模糊问题。

在这里插入图片描述

与FPN相似,本文在不同层次的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,本文直接限制边界框回归的范围
1.首先计算出所有层上每个位置对应的回归目标,l*,t*,r*,b*
2.若一个位置满足下列两个条件max(l*,t*,r*,b*)>mi或者max(l*,t*,r*,b*)<mi-1则将其认定为负样本,因此不再需要返回一个边界框.
3.mi代表feature level i需要回归的最大距离。本文,m2,m3,m4,m5,m6,m7分别设置为0,64,128,256,512及无穷。
4.因为不同大小的对象被分配到不同的feature level ,并且大部分重叠发生在大小相当不同的对象之间,多层预测在很大程度上缓解了上述的模糊性,将基于fcn的检测器提高到与基于anchor的检测器相同的水平。

最后,在不同的特征层之间共享头部,不仅使检测器的参数效率更高,而且提高了检测性能。
然而,我们观察到不同的特征级别需要回归不同的大小范围(P3 [0; 64] P4 [64; 128] )
因此,对不同的特征层使用相同的头部是不合理的。
因此,不使用标准exp(x),我们使用exp(Si x)用可训练的标量Si对于特征层Pi自动调整指数函数的基数,实验表明提高了检测性能。
不满足每层目标回归尺寸的目标不会被回归,因此可以有效地减轻重叠目标带来的二义性(作者假设重叠目标大小差异较大)

5.3. Centerness for FCOS

在这里插入图片描述
如上热力图,红色、蓝色和其他颜色分别表示1,0和它们之间的值。Center-ness由公式计算。当位置偏离物体中心时,从1衰减到0。测试时,将网络预测的center-ness与分类分数相乘,这样就可以降低远离物体中心位置预测的低质量边界框的权重。

 centerness*  = min ⁡ ( l ∗ , r ∗ ) max ⁡ ( l ∗ , r ∗ ) × min ⁡ ( t ∗ , b ∗ ) max ⁡ ( t ∗ , b ∗ ) \text { centerness* }=\sqrt{\frac{\min \left(l^{*}, r^{*}\right)}{\max \left(l^{*}, r^{*}\right)} \times \frac{\min \left(t^{*}, b^{*}\right)}{\max \left(t^{*}, b^{*}\right)}}  centerness* =max(l,r)min(l,r)×max(t,b)min(t,b)

1.测试时,将预测的 center-ness 和对应的分类得分相乘,得到最终的得分,再用这个得分对检测边框进行排名。这样,这个 center-ness 就可以降低那些远离物体中心边框的得分。在最后的 NMS 过程中,这些低质量的边框就会很大概率上被剔除,提升检测效果。
2.基于锚点的检测器使用两个IOU阈值Tlow和Thigh将锚点盒标记为负、忽略和正样本,从anchor的角度可以将centerness看作一个软阈值。它是在模型训练中学习的,不需要手动调整.

6.实验结果

6.1 centen-ness结果影响

在这里插入图片描述

6.2和已有方法对比

在这里插入图片描述

7.FCOS算法和基于anchors的检测算法不同

对于基于anchors的目标检测算法而言,我们将输入的图片送入backbone网络之后,会获得最终的feature_map,比如说是17x17x256;然后我们会在该feature_map上的每一位置上使用预先定义好的anchors。而FCOS的改动点就在这里,它是直接在feature_map上的每一点进行回归操作。具体的实施思路如下所示:

  • 将feature_map中的每一个点(x,y)映射回原始的输入图片中;
  • 如果映射原图的点在ground-truth边界框范围之内,正样本, c就是Bi的类别标签,否则负样本,类别标签c=0(背景)
  • 回归的目标是(l,t,r,b),即中心点做BBox的left、top、right和bottom之间的距离
  • 由于FCOS可以通过这样方式获得很多正样本块,然后使用这样正样本块进行回归操作,因此获得了比较好的性能提升,而原始的基于anchor的算法需要通过计算预设的anchor和对应的GT之间的IOU值,当该IOU值大于设定的阈值时才将其看做正样本。

8.补充

具体的实验部分请阅读论文第4部分。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐