FCOS算法理解


FCOS是Anchor Free的目标检测算法,对每个像素进行直接预测,预测的目标是到bounding box的上、下、左、右边的距离,非常的直观,同时引入FPN结构,利用不同的层来处理不同的目标框。另外,创新性引入了Center-ness layer,过滤掉大部分的误检框。

论文名称:FCOS:Fully Convolutional One-Stage Object Detection
论文链接:https://arxiv.org/abs/1904.01355
代码链接:https://github.com/tianzhi0549/FCOS/

一、Anchor-based的缺点

  • Anchor的设计非常重要,需要小心的调整超参数,以SSD、YOLOV2、V3等为例,超参数的选择对最终结果影响盛大
  • 即使仔细的设计了超参数,也难以所有形状的目标
  • 为了取得较好的召回率,一般需要选取大量的anchor,再结合FPN结构,正负样本就多了,现存消耗也就比较大

基于以上问题,作者在CornerNet、DenseBox等Anchor-Free后,提出了FCOS。

二、FCOS算法框架

在这里插入图片描述基础backbone是一个3层的卷积网络(对应图中C3,C4,C5),Pyramid特征金字塔构建完成P3-P7(可自行选择)每个金字塔层对应一个预测头(Head)。

其中Head层分为3个预测分支,1个分类得分(HWC) + 1个位置回归(HW4)+ 1个Center-ness(过滤误检框HW1), C指类别数,H和W为特征图谱的大小。

  • Classification采用的是多次二类分类器(C binary classifier),通俗的将,就是每个特征图后,接一个sigmoid,然后再用focal
    loss损失。(Yolov3的分类器也是从softMax转到多次sigmoid)
  • Regression输出4维向量,分别对应点到上下左右边的距离,训练的时候,loss采用IOU loss

在这里插入图片描述
具体损失函数公式如下:
在这里插入图片描述

  • Center-ness层的引入可以进一步降低目标的误检测 主要目标就是找到目标的中心点,即离目标中心越近,输出值越大,反之越小。 中心点目标定义如下,可见最中心的点的centerness为1,距离越远的点,centerness的值越小。

在这里插入图片描述
损失函数采用 BCE loss,并且增加在回归损失和分类损失后。

三、FCOS的后处理

上面可知,FCOS的网络的每层FPN有三个输出,分别是
ClassificationRegressionCenter-ness
在推断的时候,需要进一步对网络的输出进行处理,毕竟我们需要的是目标框和类别。
论文里提到,在特征图上可以获取到 分类得分和回归位置,然后取分类得分大于0.05的作为正样本,并且根据以下公式反推计算得出框

在这里插入图片描述
那这个分类得分是怎么得到的呢?
这时候center-ness的作用就来了。

  • 网络的输出 Classification 乘 center-ness计算出中心点得分。
  • center-ness的值离检测框中心点越远,值就越低,所以这一步可以过滤一部分误检框,作者选择分类得分大于0.05的作为正样本。也就是乘center-ness值后,越远离中心点的框,得分就越来越低,再接上NMS,可以获取和Anchor-Based不分高下。

另外一个值得注意的是,如果使用的是作者提供的源码, Classification 和center-ness相乘时,别忘记各自接一个sigmoid函数(可以保证值不会出现负数)。
且作者源码里对 Classification-Score进一步做了开根号处理,这点在论文里没有见到,大约是相乘后,得分比较低,开个根号可以提高一下得分值(可以看成概率,再通过概率再过滤一遍,得分太低,不好看~)

笔者在后端部署时,就遇到得分不一致的问题,查看FCOS源码后,才发现没有开根号。
在这里插入图片描述!

四、参考文献

Anchor Free检测算法之FCOS

FCOS算法详解

针对目标检测中的重叠边界框处理问题,不同的算法有着各自的NMS策略。YOLOv5作为YOLO系列的最新发展,在优化NMS过程上做了显著的改进,以提升检测效率。 参考资源链接:[深入理解目标检测网络原理:SSD、YOLO与RetinaNet等代码实践](https://wenku.csdn.net/doc/1a24bpe6ct?spm=1055.2569.3001.10343) YOLOv5对NMS的优化主要体现在以下几个方面: 1. 改进的条件筛选:YOLOv5使用了更为严格的条件筛选标准,只有当预测框与真实框的IoU超过一定的阈值时,才会被认为是重叠并可能被消除。这个阈值通常设定得比传统的0.5更高,例如0.6甚至更高,从而减少误杀,保留更准确的检测结果。 2. 更快的IoU计算:YOLOv5采用了一种快速近似的IoU计算方法,加速了边界框之间的重叠度计算,从而提高了整体检测速度。 3. 结合置信度的NMS:YOLOv5在NMS过程中不仅考虑了IoU,还考虑了置信度分数,优先保留置信度高的预测框,使得在高重叠情况下依旧能够选出最佳的边界框。 4. 软NMS:YOLOv5还支持使用软NMS技术,该技术通过降低而非完全移除重叠框的置信度来处理重叠问题,避免了传统NMS中的一些极端情况,同时提高了模型的容忍度。 与YOLOv5相比,SSD和RetinaNet等算法通常采用标准的NMS方法,虽然在某些特定的参数设置下可以获得不错的性能,但在速度和精度的平衡上往往不如YOLOv5优化得那么深入。FCOS算法则采用了一种不同的策略,它不直接依赖于NMS来处理重叠框问题,而是通过分类每个像素点属于目标中心的置信度,并结合边界框回归,来实现更精细的目标检测。 总之,YOLOv5在NMS上的优化,结合其轻量级网络设计,使得其在保持高速度的同时,也能实现高精度的目标检测,非常适合需要实时处理的应用场景。 参考资源链接:[深入理解目标检测网络原理:SSD、YOLO与RetinaNet等代码实践](https://wenku.csdn.net/doc/1a24bpe6ct?spm=1055.2569.3001.10343)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值