FCOS算法详解

FCOS算法详解FCOS FullyConvolu StageObjectD 论文链接 论文链接论文代码 代码链接近期在 Arxiv 上出现的一篇比较火的单阶段目标检测算法 FCOS 今天我们就一起来分析分析这个算法 大家可能都知道目标检测算法以前主要分为两个大的方向 单阶段检测器 双阶段检测器 其对应的代表性算法分别是 Faster rcnn 和 Yolo 而随着目标检测性

近期在Arxiv上出现的一篇比较火的单阶段目标检测算法-FCOS,今天我们就一起来分析分析这个算法。大家可能都知道目标检测算法以前主要分为两个大的方向:单阶段检测器/双阶段检测器,其对应的代表性算法分别是Faster-rcnn和Yolo。而随着目标检测性能的大幅度提升,这个领域的门槛变得很高,仅有很少的大佬们仍然在探索着新的检测算法。其实对于目标检测而言,我们还可以按照其它的类别进行划分,即所谓的基于anchor和anchor-free的算法,而本文其实就属于单阶段的anchor-free目标检测算法。下面我们开始今天的正题!

一、FCOS是什么?为什么会这么火?

  • 尽管是一个单阶段的目标检测算法,但是检测的精度却得到的极大的提升,远远超过了Faster-rcnn
  • 该算法是基于anchor-free的,即敢于去挑战权威,在目标检测领域中,很多人可能都形成了一个定势思路,为了处理尺度和不同比率问题,anchors是必须使用的模块,而本文的作者敢于脱离这个思路提出一个较新的视角,使得人们眼前一亮;
  • 其实在检测领域中自从Faster-rcnn出现之后,已经很久没有什么特别的检测算法啦,大家基本都是小改小动;除此之外,FCOS算法的宣传力度比较大,开源工作也做的比较好,这些都是一些关键的因素。
    在这里插入图片描述

二、为什么要提出FCOS以及FCOS的优势在哪?

作者为什么要提出anchor-free算法FCOS呢,主要的原因如下所示:

  • anchor会引入很多需要优化的超参数, 比如anchor number、anchor size、anchor ratio等;
  • 为了保证算法效果,需要很多的anchors,存在正负样本类别不均衡问题;
  • 在训练的时候,需要计算所有anchor box同ground truth boxes的IoU,计算量较大;

FCOS属于anchor-free类别的算法,且效果在anchor-free派系中算SOTA了。它的主要优点如下:

  • 因为输出是pixel-based预测,所以可以复用semantic segmentation方向的相关tricks;
  • 可以修改FCOS的输出分支,用于解决instance segmentation和keypoint detection任务;

三、FCOS算法整体框架

在这里插入图片描述
FCOS算法的整体框图如上所示:映入我们眼帘的是什么?对没错是FPN特征金字塔和三分支的头检测网络
FPN特征金字塔在提出之后,已经得到了广泛的使用,在多个领域中都可以看到它的身影,如语义分割、细粒度分类等等,它的主要思路是结合了网络的浅层特征和深层特征,然后在多个分支同时输出不同大下的目标。充分的使用了网络的浅层特征和深层特征,浅层特征更关注一些细节信息,适合用来定位;而深层特征更关注于语义信息,适合用来分类等。具体的细节可以看我的这篇博客FPN链接。
整个算法的实现步骤如下所示:
步骤1-对输入的图片进行预处理操作;
步骤2-搭建如图所示的网络架构,将输入数据送入backbone网络中获取输入数据的feature_map,在feature_map的每一点上面进行回归操作,进行网络训练获取网络模型;
步骤3-将预训练的网络模型应用到测试图片中,从特征金字塔的多个Head中获得预测的结果;
步骤4-使用NMS等后处理操作获得最终的结果。






四、FCOS算法实现细节详解

1、FCOS算法和基于anchors的检测算法的不同之处在哪里?

2、Loss函数详解

在这里插入图片描述
该loss函数如上图所示,同样包含两部分,Lcls表示分类loss,本文使用的是Focal_loss;Lreg表示回归loss,本文使用的是IOU loss。其实这两个loss应当是当前最好的配置啦。

3、FPN带来了哪些具体的优势呢?

4、FCOS中的Center-ness是什么,有什么作用?

在这里插入图片描述
作者观察到FCOS会引入一些低质量的BB,即远离目标中心的BB,而Center-ness的作用就是用来很好的抑制这些低质量的BB的产生,它的优点是比较简单。不需要引入其它的超参数。它的位置是在Head网络的分类网络分支下面。对于给定的一个位置的回归目标的l、t、r、b而言,center-ness目标的定义如下所示:
在这里插入图片描述
其范围在[0, 1]之间,使用BCE损失函数来训练,它可以用来降低距离对象中心很远的边界框分数的权重,它可以被看做是一个软阈值,可以在网络训练的过程中学习得到,不需要进行调节。除此之外,由于NMS的存在可以在一定程度上过滤点这些低质量的BB。


5、算法实现细节

在训练阶段,文中使用ResNet-50作为backbone网络,使用SGD优化器,初始学习率为0.01,batch_size=16,在迭代60K和80K时的weight_decay分别为0.0001和0.9,使用ImagNet预训练权重进行初始化,将输入图片裁剪为短边不小于800,长边不小于1333大小。整个网络是在COCO数据集上面训练得到的。

五、论文结果展示

1、客观评价指标展示

在这里插入图片描述
这个表格证明了FPN确实能够提升BPR!
在这里插入图片描述
这个表格证明了FCOS无论是在精度上还是在速度上都优于RetinaNet。尽管两个算法的速度都不是很快!
在这里插入图片描述
在这里插入图片描述
这个表格和这张图同时证明了center-ness有用,同时也说明了center-ness的使用方式是和Head分支预测的分类得分进行相乘。
在这里插入图片描述
这个表格说明了FCOS算法的精度确实不低,超过了CornerNet和Faster-rcnn,但是并没有涉及算法的速度!!!







2、主观效果展示

在这里插入图片描述
看起来还不错,BB的准确率挺高的,不过结果展示的有些少呀,我没有进行实测!

六、个人总结

总体来讲,FCOS算法确实不错,精度提高了不少,敢于突破传统思维,但是却让单阶段检测算法的速度变慢了,竟然和RetinaNet做比较,毕竟精度和速度必须这一个折中,不过基于anchor-free的检测算法应该是目标检测算法的一个趋势吧,单阶段目标检测算法的优势也会慢慢得到提高的,毕竟FCOS是基于anchor-free框架的起步的一些工作,期待着更惊艳的单阶段目标检测算法的出现。

注意事项

[1] 该博客是本人原创博客,如果您对该博客感兴趣,想要转载该博客,请与我联系(邮箱:@.com),我会在第一时间回复大家,谢谢大家的关注。
[2] 由于个人能力有限,该博客可能存在很多的问题,希望大家能够提出改进意见。
[3] 如果您在阅读本博客时遇到不理解的地方,希望您可以联系我,我会及时的回复您,和您交流想法和意见,谢谢。
[4] 本文内容中的大部分内容都摘自该博客,本来打算按照自己的思路去写,不过想来想去还是绝对这篇博客说的更好一点,为了让读者们能够更好地了解该论文,还是引用了该博客的内容。



[5] 本人业余时间承接各种本科毕设设计和各种小项目,包括图像处理(数据挖掘、机器学习、深度学习等)、matlab仿真、python算法及仿真等,有需要的请加:详聊!!!


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/202896.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 下午11:03
下一篇 2026年3月19日 下午11:04


相关推荐

  • 开始学习Linux嵌入式开发

    开始学习Linux嵌入式开发从工作到现在已经有六年了 头两年是做 VC nbsp 开发 方向是全文检索系统 后来由于自己和朋友合伙创业 就转向了企业应用开发 多数使用 VB 和 C 至今可以算是创业失败 又到了重新选择的时候 说实话 我对企业应用开发并不感兴趣 倒不是看不起应用开发 而是觉得做起来很无趣 没有技术上的成就感 而且经常要直接和客户打交道 对于我这种性格偏内向的人来说是很不喜欢的 结合创业期间接触的市场信息以及新闻报导

    2025年11月19日
    5
  • 服务器性能监控工具软件Nmon和ServerAgent对比

    服务器性能监控工具软件Nmon和ServerAgent对比服务器性能监控工具软件 Nmon 和 ServerAgent 对比软件 Nmon nmon analyserServ Jemeter 范围 AIX 与各种 Linux 操作系统 Windows 和 Linux 操作系统安装 1 nbsp 下载 Nmon nmon analyserhttp download csdn net download zwliu6 nbsp 将 Nmon 部署到服务器上 拷贝过去

    2026年3月26日
    2
  • LeetCode重建二叉树详解[通俗易懂]

    LeetCode重建二叉树详解[通俗易懂]LeetCode重建二叉树详解题目描述原理分析(1)大致思路(2)细节阐述代码实现(1)主函数(2)递归函数参数区间的决定递归结束的条件总结题目描述原理分析(1)大致思路下面讲解一下,前序遍历+中序遍历如何确定一个唯一的二叉树。关于二叉树的基本知识,请看二叉树的基本操作及联系。对此就不再过多重复。对于前序遍历顺序:根、左子树、右子树;对于中序的遍历顺序:左子树、根、右子树。所以通过前序遍历,我们获取前序第一个结点就是这个树的根,再在中序遍历中找到该结点的位置。在中序中,根的左边全部的是属于根左子

    2022年6月12日
    38
  • ctf-web:关于文件上传漏洞的深入研究[通俗易懂]

    ctf-web:关于文件上传漏洞的深入研究[通俗易懂]上次我们研究了关于文件上传的漏洞,这次我们研究的内容属于上节课的补充内容,关于文件上传的绕过与防御.怎么说呢,算是一种锻炼吧.因为下个月有个awd的比赛,因此最近会经常发一些关于web的内容.其实我还是挺慌的,因为以前参加的都是ctf线上赛,而且我做的都是逆向这个方面的,然而这次突然来了个web,搞得我有点懵.web也是最近才开始研究的,所以写的可能不尽人意,希望各位大佬看看就好,不喜勿喷.一.实验环境我们这次的实验依然用的是上次的网站和phpstudy.我发在了下面.1.upload-f.

    2022年7月15日
    15
  • 提案过稿率翻倍!3步用AIGC搞定插画包装,效果图美到哭!

    提案过稿率翻倍!3步用AIGC搞定插画包装,效果图美到哭!

    2026年3月15日
    2
  • 积分中值定理_三个中值定理的公式

    积分中值定理_三个中值定理的公式设$f:[a,b]\to\mathbf{R}$是区间$[a,b]$上的连续函数,其中$a,b\in\mathbf{R}$且$a<b$.则存在$a<\varepsilon<b$,使得

    2022年8月4日
    10

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号