一文读懂anchor-base和anchor-free

article/2025/9/15 8:50:11

1. 从Faster-RCNN看Anchor

Faster-RCNN相对于Fast-RCNN的一个改进是引入了RPN网络,RPN用于区域推荐,替换了此前的SS算法使得网络在整体上更加的CNN化。那么RPN是怎么进行区域推荐的?
简单来说RPN先列举出数万个矩形框,然后用卷积+softmax将这些矩形框分为前景和背景两类,同时对矩形框的边界进行回归修正,而这些矩形框就是anchor。接下来看看具体怎么做。

  1. 图片输入到Faster-RCNN中之后首先经过一个vgg网络得到特征图,特征图会被共享给RPN和后面的stage-two,这里我们探讨anchor就不需要关心stage-two。顺便说一下特征图的深度是512d。
  2. 到达RPN先做一个卷积(不改变尺寸),然后有两条支路,一边深度是2×k(anchor数量,一般是9),也就是说每个anchor有两个分类;另一条是4×k,对anchor的位置做调整:
    在这里插入图片描述

Anchor到底与网络输出如何对应

特征图中每个点的k个分类特征与k个回归特征,与k个anchor逐个对应即可,这实际是一种“人为设置的逻辑映射”。当然,也可以不这样设置,但是无论如何都需要保证在训练和测试过程中映射方式必须一致。注意,特征图和后面分类回归的输出矩阵是一样的尺寸,只是channel数量不一样。
在这里插入图片描述
此处参考:一文读懂Faster RCNN

从另一个角度理解Anchor

Faster-RCNN把anchor解释为预选框,后面的分类和定位都是基于anchor来做的,其中定位就是对anchor box做一个线性变换
也可以将anchor box 理解为连接预测框和GT的桥梁。对于每个anchor,有四个代表位置信息的预测值,在yolo v3中这四个值分别是对anchor中心点的偏移量和宽高缩放量。根据anchor坐标和这四个值就可以计算出预测框的位置,然后用预测框和GT做损失计算,这种理解更符合“学习”的思维方式:正向传播、计算损失、反向传播、梯度下降、正向传播。。。

Anchor-free
在这里插入图片描述

以yolo-v1为例,最后输出一个7×7的网络,然后每个网格预测2个结果,注意不管这里预测多少个结果,其分类只有一个。换句话说每个网格只会负责一个分类,至于边界框可以有多个。
所以,对于anchor-free而言,在特征图中,每个网格负责预测出一个分类,而anchor-base的网络,在特征图中每个节点存储的是以该节点为中心的数个子图的特征,这些特征分别进行分类。本质上来讲:anchor-free根据网格代表的那块图像的特征计算出了分类,而anchor-base则根据周围预设的子图的特征计算分类,而达到这点的手段就是groundtruth的设置规则。
在anchor-free中,物体落到哪个网格,哪个网格就是正样本,其余都是负样本。anchor-base则计算每个anchor和gt的IoU,超过多少阈值就算正。

历史渊源

anchor-free并不是一个多么新颖的设计,事实上在2015年yolo-v1和dense-net都是anchor-free的。其中dense-net考虑更充分,效果也更好。anchor-free每个点预测的结果有限,一个或两个,所以很容易漏检,对小目标也不友好,因为最后一层的特征图感受野是很大的。反观anchor-base有9个大小形状各异的预选框能够避免这种问题。所以dense加入了上采样的操作,融合各阶段的特征,而不像yolo只有最后一层。这个设计很超前,就是FPN的前身,现在几乎所有网络都会用到FPN。


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

相关文章

目标检测3--AnchorFree的FCOS

文章目录 1.介绍2.FCOS中使用的方法2.1 网络结构2.2FCOS中使用FPN的多级预测2.3FCOS中的中心度 3.mmdetection中FCOS源码参考资料 欢迎访问个人网络日志🌹🌹知行空间🌹🌹 1.介绍 论文:《FCOS: Fully Convolutional One-Stage Obj…

浅谈Anchor-Free发展历程

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/a…

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文件中执行…