【目标检测】Anchor Free —— FCOS


开始之前学习一个单词热热身:

affirmative 英[əˈfɜːmətɪv]
adj. 肯定的; 同意的; n. 肯定; 同意;
[例句]She answered in the affirmative.


0 写在前面

      FCOS: Fully Convolutional One-Stage Object Detection.

      早就要补🙅‍anchor free的坑,继CornerNet、CenterNet之后,再再从FCOS开始吧!FCOS是在CornerNet和CenterNet之后提出的。它们的发表顺序为CornerNet->CenterNet->FCOS。


1 Introduction

     FCOS也是一篇anchor free的目标检测算法,但是其思想跟CornerNet、CenterNet系列有点不太一样,

     FCOS论文中提到 " CornerNet requires much more complicated postprocessing to group the pairs of corners belonging to the same instance. An extra distance metric is learned for the purpose of grouping. " 说对方的缺点真是狠心!

     而对于FCOS,"Can we solve object detection in the neat per-pixel prediction fashion, analogue to FCN for semantic segmentation, for example? "
     它借鉴了FCN的思想,逐像素进行预测,预测的目标是到每个像素到bounding box的上、下、左、右边的距离,非常的直观;另外为了处理真实边界框重合的的情况,无法准确判断像素所属类别,作者引入了FPN结构,利用不同尺度的层来预测不同大小的目标框;最后为了减少误检框(object score很高但IOU很低的框),作者又引入了 Center-ness layer ,过滤掉大部分的误检框。FCOS的主干结构采用的是RetinaNet。FCOS在检测阶段需要非极大值抑制的后处理,而CenterNet是不需要NMS的。

     作者也把FCOS用到了Two-stage detector中的RPN,并且其结果比anchor-based RPN的结果好。

     总结一下就是,FCOS是一种anchor free目标检测方法,并且引入了逐像素回归预测、多尺度预测以及center-ness三种策略。

在这里插入图片描述


2 逐像素回归预测

     FCOS直接对主干网络的特征图进行逐像素预测。设Fi为第i层特征图,下采样系数为S,目标真实框在当前特征图尺度上的表示为(x0(i), y0(i), x1(i), y1(i), c(i)),分别表示边界框左上角和右下角点以及物体类别。逐像素预测便是对特征图的每一个像素预测这5个值。
在Fi特征图的(x, y)处,可通过式
在这里插入图片描述
     映射到原图尺寸的位置上,映射后的位置是Fi特征图的(x, y)对应的感受野的中心。

     "we directly regress the target bounding box at the location. "

     "Specifically, location (x, y) is considered as a positive sample if it falls into any ground-truth box and the class label c∗ of the location is the class label of the ground-truth box. Otherwise it is a negative sample and c∗ = 0 (background class). "

     很好理解,在Fi特征图的(x, y)处,若该像素点落入任何一个真实框内,这个点则被标记为正样本,否则为负样本。对于每一个正样本的监督值为:
在这里插入图片描述
     同样每个正样本预测的值也为该点到真实边界框的上下左右距离(基于特征图上的尺度距离)。
在这里插入图片描述
     此外,网络中可以使用的正样本数量会变得很多,相比于基于anchor的方法,这或许也是该方法取得较好的效果的原因。(anchor-based方法选择与真实框IOU大于一定阈值的anchors为正样本)
在这里插入图片描述

     网络预测头分别输出对应特征图每个点的预测类别、回归每个点距离边界框的上下左右距离(4D)[仅针对于正样本],以及Center-ness(1D,之后提到,用于筛除一些低质量框)。

     由于每个正样本处的回归值总是正值,在回归分支使用exp(x)来预测结果。

3 损失函数

     网络采用的损失函数为:
在这里插入图片描述
     其中Lcls采用Focal Loss,Lreg采用IOU Loss(-ln(IOU)),计算回归部分Loss时仅针对正样本。

4 multi-level FPN prediction

BPR:Upper bound of the recall rate that a detector can achieve.

     作者在论文中提到,使用FPN进行多尺度预测,有两个方面的原因:
(1)主干网络最终输出的特征图,如果通过很大的下采样系数之后,可能会导致较低的BPR;对于anchor based方法,可以通过降低IOU阈值来对这一情况进行弥补正样本的数量;而对于FCOS:

     "At the first glance one may think that the BPR can be much lower than anchor-based detectors because it is impossible to recall an object which no location on the final feature maps encodes due to a large stride. "

     但是作者说这不是采用FPN的原因,without FPN的FCOS同样可以有很高的BPR,只不过采用FPN后可以达到RetinaNet(anchor based)实现的BPR。

(2)第二个情况才是重点解决的问题:

     "Overlaps in ground-truth boxes can cause intractable ambiguity , i.e., which bounding box should a location in the overlap regress?

在这里插入图片描述
     对于上图的该像素点落入了两个边界框中,那么网络应该回归哪一个边界框的距离呢?
作者使该点回归面积更小的那个边界框,而通过multi-level FPN prediction,可以将不同的目标框分散到不同的层中进行预测,这样就很大程度上减少了重叠的发生。

     FCOS使用了{P3, P4, P5, P6, P7}这五个尺度的特征图进行预测。其中P3、P4、P5由主干网络的特征层 C3、C4、C5经过一个1×1的卷积得到,而P6、P7则是对P5进行了降采样得到,最终对这五个尺度的特征图都做逐像素回归。

     当然,为了能够更好的利用这种多尺度特征,在每一个尺度的特征层上都限定了边界框回归的范围,不让其野蛮生长。(基于anchor的检测网络也有类似策略,比如YOLOv3中将不同大小的anchor分配到不同特征层级中作回归)更具体地说,首先计算所有不同尺度的特征图上每个位置的回归目标:

  • 计算当前层级中的回归目标:l*、t*、r*、b*。
  • 判断max(l, t, r, b) > mi 或者 max(l, t, r, b) < mi -1是否满足。
  • 若满足,则不对此边界框进行回归预测。
  • mi是作为当前尺度特征层的最大回归距离。

     这样呢,就通过在不同尺度特征图上预测不同大小的物体;由于不同尺寸的物体被分配到不同的特征层进行回归,又由于大部分重叠发生在尺寸相差较大的物体之间,因此多尺度预测可以在很大程度上缓解目标框重叠情况下的预测性能。如果在此策略后仍有某一正样本在两个边界框的overlap处,则取面积更小的那个边界框作为回归值。

      额外得,由于不同尺度的特征层需要回归不同的尺寸范围(例如,P3的尺寸范围为[0,64],P4的尺寸范围为[64,128],而网络的每一个预测输出头结构是完全相同的, 因此在不同尺度的特征层使用相同的输出激活是不合理的。
     因此,对于回归分支,作者使用exp(six)来回归距离,其中si是一个可训练的值,能能够通过si来自动调整不同层级特征的指数函数的基数,从而提高了网络表现。

5 Center-ness

     Center-ness分支的主要目标是预测目标的中心点,即特征图中某点离目标中心越近,Center-ness层的输出值越大,反之越小。通过在每一个预测层中添加了一个分支,其对应真值的计算公式如下。可见边界框最中心的点计算出的Center-ness为1,距离越远的点的Center-ness的值越小。

在这里插入图片描述
     在训练时,使用Binary CrossEntropy Loss(Loss= -(y*log(y)+(1-y*)log(1-y)))

     在Inference阶段,将该Center-ness的值与classification的输出值相乘,这样可以有效的过滤掉一批误检框,提高准确率。

     下图为加入Center-ness分支的效果图,其中蓝色点表示一个预测的边界框。对于预测得分较高但IOU较低的框,肯定是low-quality的预测框,Center-ness的值与classification-score的值相乘之后,可以筛掉很多的low-quality的预测框。

在这里插入图片描述


6 最后的最后

      放一张别人总结好的思维导图吧。。
在这里插入图片描述


参考博客+部分图片来源

欢迎关注【OAOA

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值