FCOS算法详解

FCOS: Fully Convolutional One-Stage Object Detection
论文链接:论文链接
论文代码:代码链接

目录

    • 一、FCOS是什么?为什么会这么火?
    • 二、为什么要提出FCOS以及FCOS的优势在哪?
    • 三、FCOS算法整体框架
    • 四、FCOS算法实现细节详解
    • 1、FCOS算法和基于anchors的检测算法的不同之处在哪里?
    • 2、Loss函数详解
    • 3、FPN带来了哪些具体的优势呢?
    • 4、FCOS中的Center-ness是什么,有什么作用?
    • 5、算法实现细节
    • 五、论文结果展示
    • 1、客观评价指标展示
    • 2、主观效果展示
    • 六、个人总结
    • 注意事项

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

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

简而言之,FCOS是一个基于anchor-free的单阶段目标检测算法。
大家可能都会有这样的一个观点-单阶段检测算法的最大优势就是速度快,而双阶段检测算法的最大优势就是精度高。但是这几年我们慢慢的改变了我们的观点,相比于双阶段的目标检测算法而言,其实单目标检测算法得到了更大的落地,主要的原始是因为我们需要将目标检测这个任务应用到很多终端设备上,比如无人机、机器人、摄像头等等,而这些设备的计算能力有限,大家一般都会优先去选择速度较快的yolo或者ssd。除此之外,随着目标检测算法的发展,单阶段目标检测算法的精度也得到了大幅度的提升,基本上可以和双阶段检测算法不相上下,代表性的算法包括CornerNet和FCOS。总结一下个人认为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的检测算法的不同之处在哪里?

对于基于anchors的目标检测算法而言,我们将输入的图片送入backbone网络之后,会获得最终的feature_map,比如说是17x17x256;然后我们会在该feature_map上的每一位置上使用预先定义好的anchors。而FCOS的改动点就在这里,它是直接在feature_map上的每一点进行回归操作。具体的实施思路如下所示:
首先,我们可以将feature_map中的每一个点(x,y)映射回原始的输入图片中;
然后,如果这个映射回原始输入的点在相应的GT的BB范围之内,而且类别标签对应,我们将其作为训练的正样本块,否则将其作为正样本块;
接着,我们回归的目标是(l,t,r,b),即中心点做BB的left、top、right和bottom之间的距离,具体如下图所示:
在这里插入图片描述
接着,如果一个位置在多个BB的内部的话,我们将其看左边一个模糊样本,针对这样样本文中采样的方法是直接选择择面积最小的边界框作为其回归目标。由于网络中FPN的存在,导致这样的模糊样本的数量大大减少。
接着,如果这个位置(x,y)和一个BB关联的话,该位置处的训练回归目标可制定为:其中(x1,y1)和(x2,y2)分别表示BB的左上角和右下角坐标值。
在这里插入图片描述
接着,由于FCOS可以通过这样方式获得很多正样本块,然后使用这样正样本块进行回归操作,因此获得了比较好的性能提升,而原始的基于anchor的算法需要通过计算预设的anchor和对应的GT之间的IOU值,当该IOU值大于设定的阈值 时才将其看做正样本块。

2、Loss函数详解

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

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

问题1是-对CNN中的feature_map而言,大的stride通常会导致第的BPR,而BPR对于检测任务而言却至关重要。而本文的实验发现,添加了FPN的FCOS算法即使是使用较大额stride,仍然能够获得较高的BPR值,甚至超过RetinaNet。主要的原因可能是FPN在不同的特征映射上面检测不同大小的目标,本文使用的网络最终能够在不同的特征映射上面获得大小分别为16、32、64和128的stride,即比较丰富,针对不同的情况它都能很好的处理。
问题2是-GT中的BB重叠可能导致训练期间难以解决的模糊性。即特征映射中的某一个位置(x,y)同时在多个BB中时应该采用那个进行回归的问题。而实验结果表明FPN能够很好的解决该问题。
除此之外,作者观察到FPN中不同的feature_map level需要回归不同大小范围的BB,针对特征级Pi,使用带有可训练的标量si的exp(six)来代替标准的exp(x),其中si是一个可训练的参数,用来自适用的调整不同level。

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] 如果您对AI、自动驾驶、AR、ChatGPT等技术感兴趣,欢迎关注我的微信公众号“AI产品汇”,有问题可以在公众号中私聊我!
[2] 该博客是本人原创博客,如果您对该博客感兴趣,想要转载该博客,请与我联系(qq邮箱:1575262785@qq.com),我会在第一时间回复大家,谢谢大家的关注。
[3] 由于个人能力有限,该博客可能存在很多的问题,希望大家能够提出改进意见。
[4] 如果您在阅读本博客时遇到不理解的地方,希望您可以联系我,我会及时的回复您,和您交流想法和意见,谢谢。
[5] 本文内容中的大部分内容都摘自该博客,本来打算按照自己的思路去写,不过想来想去还是绝对这篇博客说的更好一点,为了让读者们能够更好地了解该论文,还是引用了该博客的内容。**
[6] 本人业余时间承接各种本科毕设设计和各种小项目,包括图像处理(数据挖掘、机器学习、深度学习等)、matlab仿真、python算法及仿真等,有需要的请加QQ:1575262785详聊!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/13404.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ChatGLM是什么?ChatGLM和ChatGPT有什么区别?

ChatGLM是什么? ChatGLM是清华技术成果转化的公司智谱AI研发的支持中英双语的对话机器人。ChatGLM基于GLM130B千亿基础模型训练,它具备多领域知识、代码能力、常识推理及运用能力;支持与用户通过自然语言对话进行交互,处理多种自…

chatgpt赋能python:Python制作人机交互界面:完美融合技术和用户体验

Python 制作人机交互界面:完美融合技术和用户体验 随着人工智能和互联网技术的发展,人机交互一直是非常热门的话题。Python 作为一门功能强大,应用广泛的高级编程语言,同样在这个领域发挥了重要作用。Python 制作人机交互界面&am…

chatgpt赋能python:Python对话框:简单易用的用户交互界面

Python对话框:简单易用的用户交互界面 Python是一种高级编程语言,具有易于学习、高效和灵活的特点。它广泛地应用于应用程序开发、Web开发、科学计算、数据分析等领域。Python还提供了许多库和框架,以帮助开发人员更快、更有效地开发应用程序…

ChatGPT技术在人机交互中的应用

ChatGPT技术是一种基于人工智能的自然语言处理技术,可以在人机交互中发挥重要作用。 随着人工智能技术的发展,ChatGPT技术正在被越来越多的企业和机构用于开发智能对话系统、聊天机器人、语音助手等应用。 在人机交互中,ChatGPT技术可以实现…

生成式AI:大语言模型ChatGPT交互的机制

推荐:将NSDT场景编辑器加入你的3D工具链 3D工具集:NSDT简石数字孪生 与 ChatGPT 有效交互的快速工程 随着生成式人工智能的普及,特别是 ChatGPT,提示已成为人工智能世界中越来越重要的技能。制作提示,与大型语言模型&…

使用chatgpt生成交互式地图

使用chatgpt生成交互式地图 1.教程来源 ChatGPT Made me a Map! 2.数据来源 States & UTs of India(Updated Data w/ Coordinates) 3. 使用chatgpt生成交互式地图 描述文字:”我有一份数据,里面有三列,分别是State/UT,Latitude,Long…

GPT-4读图、考试、搞笑样样精通,比ChatGPT还强大?

惊叹于ChatGPT的强大功能的小伙伴们没想到吧,离发布仅仅四个多月,在ChatGPT展现了惊人的实力之后,OpenAI又扔下了一颗核弹:GPT-4发布了。 OpenAI写到: 我们创建了GPT-4,这是 OpenAI 努力扩展深度学习的最新…

生产力工具又来了:ChatGPT + PDF = ChatPDF,复制粘贴都省了!

这次ChatGPT生产力,又上了一个台阶! 现在,甩一个PDF过去,它能自己读,你只负责提问就行。 一篇满是专业词汇的论文,它三言两语就能解释清楚,还都是中文大白话。 而且准确性很赞! 论文…

国际中文教育大模型“桃李” 1.0发布

随着ChatGPT引起全社会的关注,及各类大语言模型(Large Language Model)争相亮相,通用域自然语言处理任务已获得巨大成功,引起了国际中文教育领域的普遍关注。国际中文教育人士纷纷展开了对大模型的探讨:大模…

大模型评测,也太难了吧

来自:包包算法笔记 进NLP群—>加入大模型与NLP交流群 大模型的评测应该怎么弄? 之前在Baichuan 7B的时候,有个哥们在github发布了一个issue,说这个模型有C-eval测试集泄漏的问题,具体证据为: 当然&#…

“南瓜书”:经典“西瓜书”学习伴侣,第2版来了!

公众号【机器学习与AI生成创作】后台回复:168。可参与免费寄送图书活动,活动截止日期为 2023-06-24 晚上10点 。 公众号后台回复:168(建议选中复制) 也可自行购买,戳如下,享受专属5折&#xff0…

经典“西瓜书”的学习伴侣“南瓜书”第2版重装上市!

2020年,Datawhale开源项目“南瓜书”发布,受到全网转发。3年后,“南瓜书”完整版第2版完结撒花,重磅出版。 南瓜书是经典“西瓜书”《机器学习》公式完全解析指南,第1版受到了读者的一致好评,并得到了俞勇、…

数据标注工:训练AI,被AI替代

图片来源:由无界AI生成 作者|马慧 前景和覆灭同时存在,数据标注从业者代延从未如此矛盾。 30岁的内蒙古人代延在今年初创业,组建了一个近30人的线上标注团队。此前代延曾在数据标注的众包平台做了两年。可以称为是“熟工”的他&am…

开源中文大语言模型集合【2023-06-19】

整理开源的中文大语言模型,以规模较小、可私有化部署、训练成本较低的模型为主,包括底座模型,垂直领域微调及应用,数据集与教程等。 自ChatGPT为代表的大语言模型(Large Language Model, LLM)出现以后,由于其惊人的类通用人工智能(AGI)的能力,掀起了新一轮自然语言处…

文末送书 | 经典“西瓜书”的学习伴侣“南瓜书”第2版重装上市!

2020年,Datawhale开源项目“南瓜书”发布,受到全网转发。3年后,“南瓜书”完整版第2版完结撒花,重磅出版。 南瓜书是经典“西瓜书”《机器学习》公式完全解析指南,第1版受到了读者的一致好评,并得到了俞勇、…

【AI人工智能】LLM 开源中文大语言模型集合

整理开源的中文大语言模型,以规模较小、可私有化部署、训练成本较低的模型为主,包括底座模型,垂直领域微调及应用,数据集与教程等。 目录 1. Model 2. Application 3. Dataset 4. Evaluation 5. Tutorial 6. Related Repository 自ChatGPT为代表的大语言模型(Large

程序员改变世界,从未如此直观

万万没想到,包博士的代码让一个六岁的小学生哇哇大哭。 这个让小学生流眼泪的“科学家代表”有非常漂亮的履历:清华大学毕业、博士曾在斯坦福就读,他现在是VIPKID的首席AI科学家,带领四十多人的产品研发团队负责公司的AI技术。 …

chatgpt赋能python:用Python下载MP3的方法

用Python下载MP3的方法 如果你想从互联网上下载MP3,那么你可以使用Python来实现这个任务。在本文中,我们将介绍如何用Python编写程序来下载MP3,同时还将分享一些有用的工具和资源。 Python中使用的库 要下载MP3,你需要使用Pyth…

火爆的ChatGPT快速学成,要看哪些书?

以前我们经常打趣说:***,你out了!当然了,玩笑成分居多。 但是如果作为一名技术人员,现在还没有听说过ChatGPT,那么你可能真的“out”了。 比尔盖茨说,ChatGPT的重要性堪比互联网的发明&#xff…

关于Chatgpt的所思所悟

关于最近看到的各种有关chatgpt的热火朝天的讨论、以及自己的所思所悟。我也有一些关于chatgpt的看法,随便写写。 1、chatgpt 是类似于一种模电转数电的进步。 模电转数电是指我们自然届的一些连续信号被采样后可以作为计算机等机器可以处理的离散值。说起来有点玄乎…