Anchor-Free系列之FCOS:A Simple and Strong Anchor-free Object Detector

article/2025/9/15 9:16:32

Anchor-Free系列之CornerNet: Detecting Objects as Paired Keypoints_程大海的博客-CSDN博客

Anchor-Free系列之CenterNet:Objects as Points_程大海的博客-CSDN博客

Anchor-Free系列之FCOS:A Simple and Strong Anchor-free Object Detector_程大海的博客-CSDN博客

Anchor-Free系列之YOLOX:Exceeding YOLO Series in 2021_程大海的博客-CSDN博客 


开源代码:https://github.com/tianzhi0549/FCOS

备注:由于不熟悉latex公式编辑,以前都是直接从word编辑公式粘贴过来,操蛋的CSDN会把每个公式当做图片打上水印,完全没法看,所以本文的文字基本上都是截图,需要的凑合看。

Anchor-based目标检测算法的缺点:

  1. anchor的大小、宽高比以及anchor的数量这些超参数对算法性能影响较大,在使用anchor box的时候,涉及的超参数如下:
    1. anchor的大小
    2. anchor的宽高比
    3. anchor的数量
    4. anchor box与ground truth的IoU阈值,用来确定anchor是否为positive
    5. anchor box与ground truth的IoU阈值,用来确定anchor是否为ignore
    6. anchor box与ground truth的IoU预祝,用来确定anchor是否为negative
  2. 在anchor确定以后,当需要检测的目标大小尺度、宽高比发生变化时,由于采用了固定的anchor,无法很好的检测出这些尺度发生变化的目标
  3. 由于feature map特征图上每个位置都产生多个anchor,导致产生了大量的anchor,并且这些anchor绝大部分都是negative,导致了正负样本的极度不均衡(可以采用Focal Loss损失函数进行缓解)
  4. Anchor box在使用时需要额外的计算量,如需要计算anchor box与grundth truth的IoU来确定anchor是positive还是negative,以及对最终的预测输出结果进行NMS过滤
  5. Anchor-based的方法可以看做是Fast RCNN之前那些基于sliding window方法的升级版,anchor是基于先验知识生成的,而不是像sliding window那样暴力搜索的

        YoloV1可以认为是使用Anchor-free方法较早的目标检测算法,但是YoloV1的召回率不高,所以在v2、v3、v4、v5等版本中一直使用了基于1 – IoU距离度量的kmeans方法寻找anchor。

FCOS算法整体流程:

FCOS的网络输出:

 FCOS的损失函数:

  1. 分类:借鉴RetinaNet算法,分类分支采用Focal Loss
  2. 回归:借鉴RetinaNet算法,回归分支采用GIoU Loss(IoU Loss、CIoU Loss、DIoU Loss、GIoU Loss)

FCOS的FPN骨干网络: 

        基于anchor的目标检测算法,在不同尺度的特征图上,使用不用尺寸的anchor,将anchor box与FPN的特征图进行绑定,让大尺寸的特征图用来预测小目标,小尺寸的特征图用来预测大目标。而在FCOS算法中,直接设置每个特征图负责预测的目标尺寸范围,超过范围的则不在预测的职责范围内。在P3到P5上,设置的特征图负责预测目标的坐标偏移大小为64、128、256、512和无穷大,那么在P3到P5上,负责预测的目标尺寸大小为128x128、256x256、512x512、1024x1024及以上。

        在FOCS中,在FPN的特征之上,对于每个层级的特征共享同一个预测头,由于不同的特征图负责预测不同尺寸的目标,共享同一个预测头可能会由于预测数值分布的差异导致性能下降,FCOS对预测头的输出结果使用stride步长进行了缩放,比如原本在P3上预测输出64,在P4上预测输出128,P5上预测输出256,由于P3、P4、P5的下采样倍数分别是8,16,32,那么64,128,256在经过各自的下采样倍数缩放以后输出结果都是8,这就消除了数值差异带来的问题。

FCOS的center-ness目标中心化度量:

 

         在模型测试阶段,使用预测输出的中心点概率和目标本身的类别概率共同确定目标的预测置信度:

         这样的话,当两个预测结果有相同的预测概率,但是由于两个目标距离目标中心的概率不同,基于此可以实现预测结果的进一步过滤选择。


http://chatgpt.dhexx.cn/article/rZ6Tjqrc.shtml

相关文章

Anchor Based和Anchor Free

Anchor Based和Anchor Free之间区别主要有以下两点:1.分类差异(关键正负样本定义)2.回归差异 1.分类差异: 现阶段的算法多尺度预测,即GT是由哪一个特征层和位置Anchor预测。 Anchor Based是由IoU来确定哪层和哪个位置…

解读《Bridging the Gap Between Anchor-based and Anchor-free Detection》

张士峰大佬近期发了一篇论文解读Anchor-base和Anchor-free方法间的差别,其本质在于正负样本的选取方式不同。 论文:《Bridging the Gap Between Anchor-based and Anchor-free Detection via Adaptive Training Sample Selection》 链接:ht…

anchor-free方法总结

cornernet,centernet,onenet,fcos 这几篇论文的引用关系(提出先后顺序): 将按照上面的顺序,从背景、标签分配等方面说明区别于联系。 一、背景: Cornernet:认为使用a…

anchor free和anchor base

仅供个人学习使用 1、anchor base anchor base的方法需要先在图片上生成候选框,无论是RPN生成还是通过k-means生成的先验框,都需要在分类回归之前有存在的框可使用。在框的基础上进行之后的操作。 超参数较为难调,正负样本不平衡&#xff…

Anchor free的心得

问题: 没有了Anchor框的监督信息,我们怎么针对检测任务做到正确回归? 本质:样本与ground truth的对应,如何选择合适样本与真实场景对应 Anchor: 其加入降低了回归问题难度,为分类问题提供选择…

Anchor-based 与 Anchor-free

参考 Anchor-based 与 Anchor-free - 云社区 - 腾讯云 1. Feature Selective Anchor-Free Module for Single-Shot Object Detection 参考:CVPR2019 | CMU提出Single-Shot目标检测最强算法:FSAF 2. FCOS: Fully Convolutional One-Stage Object Det…

Anchor-free

找到了一个说在工业领域很好的 目标检测 下面几篇paper有异曲同工之妙,开启了anchor-based和anchor-free的轮回。 1. Feature Selective Anchor-Free Module for Single-Shot Object Detection 2. FCOS: Fully Convolutional One-Stage Object Detection 3. Fo…

AnchorFree系列算法详解

目录 前言一、Anchor-Based方法回顾二、Anchor Free系列方法简介1. Anchor Free系列算法历史2. Anchor free经典算法详解2.1. 基于关键点的Anchor Free检测算法1. CornerNet 2. 2 基于中心的Anchor Free检测算法1. FCOS2. CenterNet3. TTFNet -- CenterNet的改进版 3. AnchorFr…

目标检测算法——anchor free

一、anchor free 概述 1 、 先要知道anchor 是什么(这需要先了解二阶段如faster rcnn,一阶检测器如YOLO V2以后或SSD等)。 在过去,目标检测通常被建模为对候选框的分类和回归,不过,按照候选区域的产生方式不…

Scala解释器

Scala解释器 后续我们会使用scala解释器来学习scala基本语法,scala解释器像Linux命令一样,执行一条代码,马上就可以让我们看到执行结果,用来测试比较方便。 启动scala解释器 要启动scala解释器,只需要以下几步&…

Pycharm修改python解释器

Pycharm修改python解释器 在python学习过程中,遇到了这样的一个问题,早先通过pip安装的库在pycharm中无法使用,例如之前学习的numpy库在pycharm中无法调用: 下面给出两个解决办法 1.通过pycharm自带的方式再次进行安装 具体操作…

【jvm系列-07】深入理解执行引擎,解释器、JIT即时编译器

JVM系列整体栏目 内容链接地址【一】初识虚拟机与java虚拟机https://blog.csdn.net/zhenghuishengq/article/details/129544460【二】jvm的类加载子系统以及jclasslib的基本使用https://blog.csdn.net/zhenghuishengq/article/details/129610963【三】运行时私有区域之虚拟机栈…

java的解释器是什么_java编译器和java解释器、JVM

作用: JVM:JVM有自己完善的硬件架构,如处理器、堆栈(Stack)、寄存器等,还具有相应的指令系统(字节码就是一种指令格式)。JVM屏蔽了与具体操作系统平台相关的信息,使得Java程序只需要生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。JVM是Ja…

【详解】JVM中,编译器和解释器的作用和区别

一、前言 随着互联网的发展,现在虚拟机地表最稳定,最强的默认是Hotspot虚拟机。先查看下: 查看方式:cmd进行黑框框,然后输入:java -version 会出现以下参数: java version:当前jav…

pycharm查看解释器

1.查看pycharm的解释器: 2.查看自己现在这个项目的解释器

python的编译器与解释器

作者介绍: 🐥作者:小刘在C站 👆每天分享课堂笔记,一起努力,共赴美好人生 🍁夕阳下,是最美的绽放 目录 一.为什么会有编译器和解释器 二.编译器和解释器的区别 三.python解释器种类…

修改Python解释器和包路径

环境检查 1. 查看当前解释器的位置 在Python文件中执行或者在终端中先进入Python import sys print(sys.executable) 以我的电脑为例子,输出 /Library/Frameworks/Python.framework/Versions/3.8/bin/python3 2. 查看当前指向的包存放路径 在Python文件中执行…

python解释器怎么添加_Python解释器安装与环境变量添加

python解释器安装与环境变量添加 python解释器安装(3.6和2.7): 这个是python解释器的官网,一定要牢记。 鉴于市场上有两种python版本(2和3),今天两种版本都装一下,互相学习,如有错误还请各位评论指正。 windows系统(如果是苹果的系统就下mac os x) 进来后 python3版本 选择…

如何删除PyCharm解释器

1.点击右下角解释器名称,选择解释器设置; 2.在弹出的窗口中点击解释器路径; 3.在弹出的窗口后选定想要删除的解释器,点击左边的减号即可删除。

pycharm如何找到python解释器,pycharm找不到解释器怎么办

解决方法:1、打开磁盘,直接搜索python.exe文件,获取该文件的路径;2、打开pycharm软件,依次点击“File”–“Setting”–“Project”,点击右上角的设置图标;3、按照获取的路径找到python.exe即可…