浅谈Anchor-Free发展历程

article/2025/9/15 8:58:36

1.早期探索:
DenseBox: https://arxiv.org/abs/1509.04874
YOLO: https://arxiv.org/abs/1506.02640
2.基于关键点:
CornerNet: https://arxiv.org/abs/1808.01244
ExtremeNet: https://arxiv.org/abs/1901.08043
3.密集预测:
FSAF: https://arxiv.org/abs/1903.00621
FCOS: https://arxiv.org/abs/1904.01355
FoveaBox: https://arxiv.org/abs/1904.03797v1

DenseBox:
在这里插入图片描述

如图所示,单个FCN同时产生多个预测bbox和置信分数的输出。测试时,整个系统将图片作为输入,输出5个通道的feature map。每个pixel的输出feature map得到5维的向量,包括一个置信分数和bbox边界到该pixel距离的4个值。最后输出feature map的每个pixel转化为带分数的bbox,然后经过NMS后处理。
除了nms之外,检测系统的所有组成部分都构建在FCN之中。

训练过程:
在这里插入图片描述
上图是本文的网络结构图。红色部分表示存在学习参数。前12个conv层的网络参数由VGG19模型参数直接初始化,conv4_4的输出作为后续四个1*1卷积层的输入,前两个输出的是通道1的特征图,用于分类预测,后两个利用通道4的特征图来预测bounding box的相对位置。这种有两个输出分支的结构和Fast R-CNN很相似,在第一个输出端口定义分类损失函数,在第二个定义bounding-box回归损失函数,这样就可定义完整的损失函数。

Refine with Landmark Localization:
在这里插入图片描述
在这里插入图片描述
在FCN结构中添加少量层能够实现landmark localization,然后通过融合landmark heatmaps和score map可以进一步提升检测结果。

贡献:
1.证明单个FCN可以检测出遮挡严重、不同尺度的目标。
2.通过多任务引入landmark localization,能进一步提升性能。

YOLOv1:

YOLO将目标检测作为一个空间分离的边界框和相关的类概率的回归问题。可以直接从整张图片预测出边界框和分类分数。

在这里插入图片描述
在这里插入图片描述
YOLO将输入图片分成SXS个网格,如果某个目标的中心点落到其中一个格点,那么该格点就负责该目标的检测。每个格点预测出B个bbox和每个bbox的置信分数。
置信分数计算公式:
在这里插入图片描述
其中如果有 object 落在一个 grid cell 里,第一项取 1,否则取 0。 第二项是预测的 bounding box 和实际的 groundtruth 之间的 IoU 值。
每个 bounding box 要预测 (x, y, w, h) 和 confidence 共5个值,每个网格还要预测一个类别信息,记为 C 类。则 SxS个 网格,每个网格要预测 B 个 bounding box 还要预测 C 个 categories。输出就是 S x S x (5*B+C) 的一个 tensor。

DenseBox和YOLO的区别:

1.DenseBox最初应用于人脸检测,相当于只有两类,而YOLO是通用检测,通常大于两类。
2.DenseBox是密集预测,对每个pixel进行预测,而YOLO先将图片进行网格化,对每个grid cell进行预测,所以前者更适合于小目标,后者更适合于大目标。
3.DenseBox的gt通过bbox中心圆形区域确定的,而YOLO的gt由bbox中心点落入的grid cell确定的。

CornerNet:

在这里插入图片描述
1、输入一张图像,经过backbone网络(Hourglass network)后,得到feature map。
2、将feature map同时输入到两个branch,分别用于预测Top-Left Corners和Bottom-right Corners。
3、两个branch都会先经过一个叫Corner Pooling的网络,最后输出三个结果,分别是Heatmaps、Embeddings、Offsets。
4、根据Heatmaps能够得到物体的左上角点和右下角点,根据Offsets对左上角和右下角点位置进行更加精细的微调,根据Embeddings可以将同一个物体的左上角和右下角点进行匹配。得到到最终的目标框。

1:怎么检测这个两个点?生成keypoint的heatmap,heatmap中响应值最大的位置就是点的位置。
2:怎么知道这两个点所组成的框包含物体的类别?每个heatmaps集合的形式都是CxHxW,其中C代表的是检测目标的类别数,H和W则代表的heatmap的分辨率,Corner响应值最大所在的channel即对应了物体的类别。
3:当图像中有多个物体时,怎么知道哪些点可以组成框?(哪些左上角的点和哪些右下角的点能够组成有效的框)生成embedding向量,用向量的距离衡量两个Corner是否可以组成对。
4:Loss是什么形式?loss总共分了三个部分,一部分是用于定位keypoint点的detecting loss,一个是用于精确定位的offset loss,一个是用于对Corner点进行配对的grouping loss。
5:网络结构是怎么样的?使用Hourglass作为backbone,使用Corner Pooling构造了prediction module,用来得到最终的结果。
6:有没有什么比较新奇的东西?提出的Corner Pooling,第一次使用检测点的方法检测物体。

贡献:
1.通过检测bbox的一对角点来检测出目标。
2.提出corner pooling,来更好的定位bbox的角点。
在这里插入图片描述
上图是top-left corner的 Corner Pooling过程。在水平方向,从最右端开始往最左端遍历,每个位置的值都变成从最右到当前位置为止,出现的最大的值。同理,bottom-right corner的Corner Pooling则是最左端开始往最右端遍历。同样的,在垂直方向上,也是这样同样的Pooling的方式。
以左上角点为例,当我们决定此点是否个corner点的时候,往往会沿着水平的方向向右看,看看是否与物体有相切,还会沿着垂直方向向下看,看看是否与物体相切。简而言之,其实corner点是物体上边缘点和坐边缘点的集合,因此在pooling的时候通过Corner Pooling的方式能够一定程度上体现出当前点出发的射线是否与物体相交。

ExtremeNet:
在这里插入图片描述
作者使用了最佳的关键点估计框架,通过对每个目标类预测4个多峰值的heatmaps来寻找极值点。另外,作者使用每个类center heatmap来预测目标中心。仅通过基于几何的方法来对极值点分组,如果4个极值点的几何中点在center map上对应的分数高于阈值,则这4个极值点分为一组。
​offset的预测是类别无关的,而极值点的预测是类别相关的。对每种极值点heatmap,不包含center map,预测2张offset map(分别对应XY轴方向)。网络的输出是5xC heatmaps和4x2offset maps,C是类别数。
分组算法的输入是每个类的5个heatmaps,一个center heatmap和4个extreme heatmaps,通过检测所有的峰值来提取出5个heatmaps的关键点。给出4个极值点,计算几何中心,如果几何中心在center map上对应高响应,那么这4个极值点为有效检测。作者使用暴力枚举的方式来得到所有有效的4个关键点。
贡献:
1.将关键点定义为极值点。
2.根据几何结构对关键点进行分组。

CornerNet和ExtremeNet的区别:

1.CornerNet通过预测角点来检测目标的,而ExtremeNet通过预测极值点和中心点来检测目标的。

2.CornerNet通过角点embedding之间的距离来判断是否为同一组关键点,而ExtremeNet通过暴力枚举极值点、经过中心点判断4个极值点是否为一组。

FSAF:

让每个实例选择最好的特征层来优化网络,因此不需要anchor来限制特征的选择。

在这里插入图片描述
一个anchor-free的分支在每个特征金字塔层构建,独立于anchor-based的分支。和anchor-based分支相似,anchor-free分支由分类子网络和回归子网络。一个实例能够被安排到任意层的anchor-free分支。训练期间,基于实例的信息而不是实例box的尺寸来动态地为每个实例选择最合适的特征层。选择的特征层学会检测安排的实例。推理阶段,FSAF模块和anchor-based分支独立或者联合运行。

在这里插入图片描述
在RetinaNet的基础上,FSAF模块引入了2个额外的卷积层,这两个卷积层各自负责anchor-free分支的分类和回归预测。具体的,在分类子网络中,feature map后面跟着K个3x3的卷积层和sigmoid,在回归子网络中,feature map后面跟着4个3x3的卷积层和ReLU。

gt:
在这里插入图片描述
Online Feature Selection:
在这里插入图片描述
实例输入到特征金字塔的所有层,然后求得所有anchor-free分支focal loss和IoU loss的和,选择loss和最小的特征层来学习实例。训练时,特征根据安排的实例进行更新。推理时,不需要进行特征更新,因为最合适的特征金字塔层自然地输出高置信分数。

FCOS:
在这里插入图片描述
和语义分割相同,检测器直接将位置作为训练样本而不是anchor。具体的,如果某个位置落入了任何gt中,那么该位置就被认为是正样本,并且类别为该gt的类别。基于anchor的检测器,根据不同尺寸安排anchor到不同的特征层,而FCOS直接限制边界框回归的范围(即每个feature map负责一定尺度的回归框)。

Center-ness:
在这里插入图片描述
为了剔除远离目标中心的低质量预测bbox,作者提出了添加center-ness分支,和分类分支并行。
在这里插入图片描述
优点:
1.将检测和其他使用FCN的任务统一起来,容易重用这些任务的思想。
2.proposal free和anchor free,减少了超参的设计。
3.不使用trick,达到了单阶段检测的最佳性能。
4.经过小的修改,可以立即拓展到其他视觉任务上。

FoveaBox:

人类眼睛的中央凹:视野(物体)的中心具有最高的视觉敏锐度。FoveaBox联合预测对象中心区域可能存在的位置以及每个有效位置的边界框。由于特征金字塔的特征表示,不同尺度的目标可以从多个特征层中检测到。

在这里插入图片描述

FoveaBox添加了2个子网络,一个子网络预测分类,另一个子网络预测bbox。

Object Fovea:
在这里插入图片描述
目标的中央凹如上图所示。目标中央凹只编码目标对象存在的概率。为了确定位置,模型要预测每个潜在实例的边界框。

FSAF、FCOS、FoveaBox的异同点:

1.都利用FPN来进行多尺度目标检测。
2.都将分类和回归解耦成2个子网络来处理。
3.都是通过密集预测进行分类和回归的。
4.FSAF和FCOS的回归预测的是到4个边界的距离,而FoveaBox的回归预测的是一个坐标转换。
5.FSAF通过在线特征选择的方式,选择更加合适的特征来提升性能,FCOS通过center-ness分支剔除掉低质量bbox来提升性能,FoveaBox通过只预测目标中心区域来提升性能。

总结:
1.各种方法的关键在于gt如何定义
2.主要是基于关键点检测的方法和密集预测的方法来做Anchor-Free
3.本质上是将基于anchor转换成了基于point/region


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

相关文章

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

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_程大海的…

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.在弹出的窗口后选定想要删除的解释器,点击左边的减号即可删除。