anchor-free方法总结

article/2025/9/15 9:27:12

cornernet,centernet,onenet,fcos
这几篇论文的引用关系(提出先后顺序):
在这里插入图片描述

将按照上面的顺序,从背景、标签分配等方面说明区别于联系。

一、背景:

Cornernet:认为使用anchor需要很多的超参数和手动设计选择,网络复杂。而且需要大数量的anchor来确保覆盖gtbox,导致正负样本不平衡,降低训练速度,于是提出不用anchor,将检测目标当做一对关键点(box的左上,右下)来检测。

Centernet:关于anchor的背景和cornernet类似,也是将对anchor的检测转化为对关键点的检测centernet认为cornernet在关键点检测之后还需要对预测左上和右下的检测点进行配对组合,降低了速度。提出将检测目标转为对box中心点的检测。

Onenet:onenet将前人分配标签(正负样本)的方法归纳为:box分配方法,point分配方法。Onenet认为这些方法都是分配样本时只关注了样本与标签的位置损失关系,对一个标签分配多个正样本,才会导致出现冗余的高置信度的框,需要nms进行后处理。提出将分类损失也加入到分配标签过程。

Fcos:关于anchor的背景和前面类似,也提出cornernet需要后处理来组合检测出的左上和右下角点,降低了速度的观点。

这四篇论文都是全卷积神经网络。输出HxWx(C+…)

二、输出:

Cornernet输出:HxWx(2x(C+1+2)),包括heatmap(类别数C),embedding(1),角点的Offset(2):
在这里插入图片描述

Centernet输出:HxWx(C+2+2),包括heatmap(类别数C),目标宽高(2),中心点的offset(2):

Onenet输出:HxWx(C+4),包括类别数(C),grid point到四个边的距离(4)

Fcos输出:HxWx(C+1+4),包括类别数(C),比例系数(1)远离gtbox中心的系数低,该位置到bbox的边界的距离预测(4)。类别分数乘比例系数作为最终的分数。
在这里插入图片描述

三、训练:

3.1标签分配&&关于类别的损失函数:

Cornernet:对于类别数为C的目标检测,一个gtbox输入,通过高斯核对gtbox左上和右下角点分别一个HxWxC的heatmap作为标签,heatmap特点如下:
在这里插入图片描述

对应类别角点位置为1,远离逐渐减小。

关于类别的损失函数使回归目标为:角点处趋近于1,其余趋近于0。

Centernet:和cornernet类似,对于类别数为C的目标检测,一个gtbox输入,通过高斯核生成对gtbox中心生成一个HxWxC的heatmap作为标签,heatmap特点如下:
在这里插入图片描述

对应类别中心点位置为1,远离逐渐减小。

关于类别的损失函数使预测出的HxWxC:gtbox中心点位置处趋近于1,其余趋近于0。

Onenet:取出网络输出HxWx(C+4),C为类别数,4为预测的关键点位置及宽高。如进一个类别为车的gtbox,对对应类(车)的HxW上每一个坐标计算类别损失计算(多分类交叉熵损失)。对gtbox位置(1x1x4),与预测出的HxWx4做位置损失计算。HxW上的类别损失和位置损失之和,找到损失最小的位置作为这个车标签的正样本位置。其余位置均为负样本。

FCOS:对于特征图上的点,映射回原图落在gtbox范围内,则该位置为正样本,其余位置为负样本。

3.2 offset:

Cornernet和centernet都用到了offset回归,因为特征图重新映射回原图会带来精度误差,而cornernet和centernet都是基与grid cell预测角点直接建立或者通过中心加宽高建立bbox,所以必须进行offset预测。

而onenet和Fcos,不用offset回归,通过grid cell预测到bbox四个边的距离,就算grid cell映射回原图有精度损失,可以通过预测距离补偿。

3.3训练过程其他损失函数:

Cornernet在预测角点位置的基础上,通过为左上和右下各预测一个HxWx1的embedding来组合两个角点。回归的目标为:缩小属于同一个目标(第k个目标)的两个角点的embedding vector距离,embedding的实际值不重要。

Centernet在预测中心位置的基础上,预测bbox的宽高,并与真实的宽高进行L1loss计算并反传。

Onenet在预测关键点的基础上,预测关键点到四个边界的距离,损失函数为坐标的L1loss和giou loss。

Fcos在预测关键点后,还预测关键点到四个边界的距离,与真实距离做回归计算。此外还预测center-ness(HxWx1),真值为:中心点为1,原理中心点减小,筛除远离中心点的低质量框。

四、推理:

都是选取分数最高的top k的grid cell作为关键点,Fcos的选取分数需要乘上center-ness。cornernet,centernet,Fcos用到了nms来筛选冗余的高置信度的框,centernet和cornernet将nms换了一种形式(3x3的maxpooling)。Onenet不用nms,直接选最后的top k作为输出。

五、其他细节:

Fcos考虑到大的步距会导致recall低,密集的gtbox重叠会导致一些模棱两可(被两个gtbox覆盖的关键点预测哪个gtbox),通过fpn不同的层负责预测不同size的gtbox解决。


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

相关文章

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即可…

java解释器是什么_Java解释器的运行过程介绍

首先介绍一下Java解释器的概念,Java解释器:解释器是Java虚拟机非常重要的一部分,它的工作就是把字节码转化为机器码并在特定的平台进行运行。简单一点,java的解释器只是一个基于虚拟机JVM平台的程序 ,即jdk或jre目录下bin目录中的…

PyCharm配置远程解释器

概述 因为之前公司服务器的硬盘出现损坏,导致服务器不能使用,也把我的Jupyter Notebook里的东西全部销毁了。之前那些代码和数据都找不回来了,郁闷了几天。因为自己平时都会做一些技术研究,写写一些demo,为了方便&…

HTML 解释器

解释过程 HTML 解释器的工作就是将网络或者本地磁盘获取的 HTML 网页和资源从字节流解释成 DOM 树结构。这一过程大致可以理解成下图 WebKit 中这一过程如下:首先是字节流,经过解码之后是字符流,然后通过词法分析器把字符流解释成词语&…