【AI面试】Anchor based 、 Anchor free 和 no anchor 的辨析

news2025/1/25 9:22:43

深度学习的目标检测算法,通常会在输入图像中采样大量的区域,然后判断这些区域中是否包含我们感兴趣的目标,并调整(回归)区域边界,从而更准确地预测目标的真实边界框(ground-truth bounding box)。

目标检测算法会需要做两个事情:

  1. 推荐区域框是否有目标(positive or negative),是分类任务;
  2. 调整这些区域框,不断逼近到目标真实框,是回归任务。

就针对目标检测算法的传统区域框推荐和深度学习的方法,问了chatGPT,他给出了下面的回答。给与我们借鉴,帮助我们理解。

selective search
传统的目标框推选方法,我们暂时就先不考虑。针对基于anchor的方法,我们通过最常用的anchor based(anchor box)和anchor free,和no anchor来展开。

一、什么是Anchor

anchor也叫做锚,预先设置目标可能存在的大概位置,然后再在这些预设边框的基础上进行精细化的调整。而它的本质就是为了解决标签分配的问题。

anchor是如何生成的?锚作为一系列先验框信息,其生成涉及以下几个部分:

  • 用网络提取特征图的点来定位边框的位置;
  • 用锚的尺寸来设定边框的大小;
  • 用锚的长宽比来设定边框的形状。

引入anchor的目的:

通过设置不同尺度,不同大小的先验框,就有更高的概率出现对于目标物体有良好匹配度的先验框约束,在锚框的约束下使模型的精准度和召回率都有了质的提升。

一、anchor based(anchor box)

anchor box中,anchor位于所讨论的滑动窗口的中心,用与之关联的scaleaspect ratio,默认是3 scales和3 aspect ratio,于是对于每个sliding windowk=9个anchors。于是对于一个w x h的卷积特征图,共有w x h x 9个anchor,(faster rcnn大约2400个)

Faster R-CNN 中,为了回归出检测框的位置,首先通过 RPN 网络产生一组候选框,其中每个候选框是由一个先验框(anchor box)和一个偏移量(offset)相加得到的。而这个偏移量就是通过回归网络对先验框进行预测得到的。最终的检测框则是由先验框加上这个偏移量得到的。

在训练阶段,我们需要通过优化网络参数来让偏移量的预测结果更接近于真实的目标框。因此,我们需要一个损失函数来度量预测框与真实框之间的差距。而这个损失函数通常会包含两个部分,即分类损失回归损失

对于回归损失部分,可以使用 L1 损失函数、 L2 损失函数,或smooth L1 loss。而为了使回归损失更准确,通常会将偏移量的计算方式转换为相对于先验框的坐标差异。具体来说:

在这里插入图片描述

  1. 通过对预测框pd的坐标与先验框anchor的坐标进行差分,得到一个预测框相对于先验框的偏移量
  2. 通过对标注框gt的坐标与先验框anchor的坐标进行差分,即真实框相对于先验框的坐标差异(偏移量)。
  3. 最终,回归网络会学习将先验框anchor的位置和尺度,调整到更接近真实框anchor的位置和尺度。

因此,对于每个候选框,我们需要计算其预测框与真实框之间的偏移量,而这个偏移量是相对于先验框的坐标差异。因此,我们需要先对预测框和真实框的坐标分别与对应的先验框坐标进行差分,然后再将它们之间的差异作为回归的目标

为什么要学习偏移量而不是实际值?(Why are offsets learned instead of actual values?)

这个做法可以让回归目标更加准确,并且可以使训练更稳定。如果直接对预测框和真实框之间的(x,y,w,h)坐标做回归,则容易受到不同大小、不同长宽比的目标框的影响,导致回归不稳定。

anchor box的缺点(CornerNet论文指出):

  1. 需要许多的anchor boxes:这是因为检测器被训练来分类每个锚盒是否与一个地面真值盒充分重叠,并且需要大量的锚盒来确保与大多数地面真值盒充分重叠。
    2.anchor boxes的使用引入了许多超参数和设计选择。include how many boxes, what sizes, and what aspect ratios.这样的选择在很大程度上是通过特别的启发式做出的,当与多尺度体系结构结合使用时,可能会变得更加复杂

anchor box的缺点(Feature Selective Anchor-Free Module for Single-Shot Object Detection):

  1. heuristic-guided feature selection:即 Anchor Box 依赖先验的设定,需要手动选择 Anchor Box 的大小和长宽比,并且这些选择通常是根据经验和启发式规则来进行的,因此可能会导致不同目标的 Anchor Box 不够准确或者不够匹配。
  2. overlap-based anchor sampling:anchor box通常需要对预测框与真实框之间的重叠程度进行计算,并根据重叠程度的大小来选择和训练正负样本。具体来说,如果预测框与某个真实框的重叠程度大于某个阈值,那么就认为这个预测框是一个正样本,否则是负样本。而在选择正负样本时,通常会选择与真实框重叠程度最大的 Anchor Box 作为正样本,并且对其它与真实框重叠程度较大的 Anchor Box 进行负样本训练。

然而,这种重叠程度的计算和样本的选择可能会导致一些问题。例如在目标比较密集的场景中,多个 Anchor Box 可能会同时对同一个目标进行检测,并且重叠部分可能会被不同的 Anchor Box 所计算。此时,就可能会出现样本之间的重复和冲突,导致训练过程不稳定或者产生错误的样本选择。

二、anchor free

2

在论文:Feature Selective Anchor-Free Module for Single-Shot Object Detection 中,引入了anchor free的思想。他的提出主要是为了解决anchor based的两个不足的。

  1. anchor based需要预设anchor的大小,尽管kmean采用聚类的方式提高了anchor大小的科学性,但是他依旧对于每个实例来说,不是最优的。anchor free直接没有了预设宽高信息,采用学习的方式,预测宽高。
  2. anchor free和FPN特征金字塔结合,动态地将每个目标实例分配到最合适的特性级别。大型锚框通常与上部特征图相关联,而小型锚框则与下部特征图相关联,这是基于这样的假设:更高维的特征图具有更适合检测大目标的语义信息,而更低维的特征图具有更适合检测小目标的细粒度细节。

inference阶段,对于一个中心点pixel的坐标(i,j)预测的bounding box,需要预测相较于中心点的偏移量 top, left, bottom, and right boundaries of predict bounding box ,最后和坐标(i,j)计算得到最终bounding box的坐标。

train阶段,采用IOU loss,计算方式为先根据网络输出的预测偏移量和中心点,计算得到预测的bounding box的坐标,然后与ground truthbounding box的坐标进行IOU计算,用1减去IOU的值作为损失函数进行模型的优化。

优点:

  1. 泛化能力强:无需人工预设宽高,全靠预测,因此可以更好地适应各种目标尺寸和形状,从而具有更好的通用性。
  2. 去除anchor尺寸选择:由于anchor-free方法在目标定位过程中直接预测目标中心点和边界框的偏移量,因此可以减少由于anchor box选择不当而导致的误差。
  3. anchor-free方法在生成检测结果时需要对特征图上的每个像素点进行处理,因此可以更好地捕获目标的细节信息,从而具有更好的检测精度和定位精度。

缺点:

  1. 不适合于通用目标检测,容易受到目标形状、姿态等因素的影响。但是FPN的结合,能够弥补这个问题。

三、no anchor

no anchor就是不再采用anchor的方式进行Bbox提议,具有代表形状的就是DETR

DETR中,将anchor提议proposal的任务,交给了可学习的object queries(100个)。通过可视化object queries可以发现,不同的query询问的关键位置是不同的,类似于anchor box的目标大小和尺寸有些像。

经过这个过程后,transformer提议的100个256,就可以经过ffn(feed forward network),预测出100个类别和box。它相比于anchor based更加的灵活,更少的人工参与,都交由模型自己学习。

这块内容,也常常被称作NMS Free,因为DETR直接对候选框进行预测,得到的都是需要的目标,无需NMS操作。

四、总结

anchor boxanchor free区别:

  1. anchor box的宽高信息是设定已知的,通过kmean等方式聚类得到;anchor free的宽高信息是预测出来的,不需要提前预设;
  2. anchor boxanchor free在bounding box预测阶段,都是将预测坐标问题转化为预测与gt的offset,再进一步得到预测的坐标;但是一个是相较于anchor的,一个是相较于中心点pixel的。
  3. anchor boxanchor free在网络结构设计上也有一些差异。Anchor box需要预定义anchor的大小和比例,然后在每个anchor上预测物体类别和位置偏移量,因此需要使用多个不同尺度和比例的特征图来检测不同大小和形状的物体;而Anchor free则直接在每个像素点上进行物体类别和位置偏移量的预测,因此只需要使用单一尺度的特征图即可。这使得Anchor free具有更简单的网络结构和更少的计算量。
  4. anchor free 相较于anchor box更灵活。Anchor box的anchor是固定的,如果目标形状和大小与anchor不匹配,可能会导致预测不准确,泛化性低,需要使用更多的anchor来覆盖所有情况。而Anchor free则可以根据目标的实际形状和大小进行预测,更加灵活和精准。

针对上面的内容,希望带着怀疑的目光来看,很多也是自己的理解。如果发现什么疑问,或错误的地方,欢迎评论区指出。一起进步

更多内容,建议参考这里:

  1. 《目标检测》系列之三:目标检测Anchor的What/Where/When/Why/How
  2. Anchor Boxes in Object Detection: When, Where and How to Propose Them for Deep Learning Apps

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【高数+复变函数】傅里叶积分

文章目录 【高数复变函数】傅里叶积分2. 傅里叶积分2.1 复数形式积分公式2.2 三角形式 上一节: 【高数复变函数】傅里叶级数 【高数复变函数】傅里叶积分 2. 傅里叶积分 在上一节中,我们知道了傅里叶级数的基本知识,其中,周期为…

【MATLAB第31期】基于MATLAB的降维/全局敏感性分析/特征排序/数据处理回归问题MATLAB代码实现(持续更新)

【MATLAB第31期】基于MATLAB的降维/全局敏感性分析/特征排序/数据处理回归问题MATLAB代码实现(持续更新) 本文敏感性分析主要分析回归问题,下期分析分类问题(fisher、rf、arf、nca等)。 一、降维方法(回归) 常见的降…

【动态规划】0-1背包问题

概述 0-1背包问题是一种经典的动态规划问题,它的基本形式是:有一个背包,容量为 C C C,有 n n n 个物品 i i i,每个物品 i i i 的重量为 w i w_i wi​,价值为 v i v_i vi​。现在要从这 n n n 个物品…

id选择器和class选择器

id选择器 id选择器用来选取带有给定id属性的元素。语法:#id例如: html <div id"container">...</div>css #container {color: blue; }id选择器的一些特征: 1. id选择器以#号开头,后跟元素的id属性值。 2. id选择器只能选取带有给定id属性的元素。 3.…

在 Windows 上安装 kubectl

一、前言 个人主页: ζ小菜鸡大家好我是ζ小菜鸡&#xff0c;让我们一起学习在 Windows 上安装 kubectl。如果文章对你有帮助、欢迎关注、点赞、收藏(一键三连) 二、 kubectl是什么 kubectl是Kubernetes集群的命令行工具&#xff0c;通过kubectl能够对集群本身进行管理&#xf…

一篇文章学会高级IO

文章目录 理解IO的本质认识五种IO模型阻塞式IO非阻塞式IO信号驱动式IO多路转接式IO异步式IO 高级IO的理解以及意义多路转接式IO的深入学习select模型select函数详解封装网络套接字&#xff1a;Sock.hppselectServer.cc(服务器文件)运行结果小结 poll模型poll函数详解Sock.hpppo…

Reed-Muller序列

Reed-Muller函数的由来 我们知道对于连续信号&#xff0c;时间和频率是对偶域(duality)&#xff0c;其中正弦函数是时移的特征函数&#xff08;where sinusoids are eigenfunctions of time shifts&#xff09;。而在汉明空间(Hamming space)中&#xff0c;there are discrete…

牛客网面试必刷:BM19 寻找峰值

牛客网面试必刷&#xff1a;BM19 寻找峰值 前言一、解法1&#xff1a;暴力依次搜索二、解法2&#xff1a;二分搜索 前言 给定一个长度为n的数组nums&#xff0c;请你找到峰值并返回其索引。数组可能包含多个峰值&#xff0c;在这种情况下&#xff0c;返回任何一个所在位置即可…

数据库基础篇 -- 1

目录 数据库基础 1.1&#xff1a;什么是数据库 1.2&#xff1a;常见数据库 1.3&#xff1a;数据库的基本使用 1.4&#xff1a;mysql的架构 1.5&#xff1a;sql分类 1.6&#xff1a;存储引擎 数据库基础 1.1&#xff1a;什么是数据库 数据库是指存储和管理结构化数据的…

解决频繁操作svn导致提交文件失败svn: E155015,亲测成功

我是因为频繁在本地删除创建重复的包和.java文件&#xff0c;以至于在提交至svn的时候会出现我之前删除的包和.java文件&#xff0c;所以我致力于将其删除干净&#xff0c;频繁的在本地删除、去svn删除…以至于再后来本地项目中和svn中都没有但是还是svn: E155015&#xff0c;查…

Cesium入门之五:认识Cesium中的Viewer

Viewer是Cesium中用于显示3D场景的组件。它提供了创建和控制3D场景所需的所有基本功能&#xff0c;包括加载3D模型、添加图像覆盖物、设置相机位置和方向、处理用户输入等。 在创建Viewer时&#xff0c;可以指定要使用的HTML元素&#xff08;例如canvas&#xff09;&#xff0…

06-redis集群模式(中) 项目测试的云服务ip变内网等(解决大多数问题)

目录 0-0 前言 : 1. 搭建redis集群成功后 项目测试 ip变成内网 2. 设置 redis.conf的配置 3. 这时候如果运行后面操作, 会出以下问题 问题一: 不开放节点端口号 ​编辑问题二: 不开放通讯端口号 4. 最最核心的正确操作: 5. 删除全部容器 删除全部目录挂载 6. 重新运…

SSM(Vue3+ElementPlus+Axios+SSM前后端分离)-架子搭建

目录 SSM(Vue3ElementPlusAxiosSSM前后端分离)--架子搭建 技术栈 项目搭建 配置pom.xml 项目全局配置web.xml SpringMVC 配置 创建springDispatcherServlet-servlet.xml 创建项目相关的包 完成测试TestController.java 整合hi.html 启动Tomcat , 浏览器输入http://local…

mybatis是如何集成到spring的

前言 集成前的使用方式 mybatis单独使用时&#xff0c;一般的写法如下所示&#xff1a; // mybatis初始化 String resource "mybatis-config.xml"; InputStream inputStream Resources.getResourceAsStream(resource); // 读取配置文件&#xff0c;创建SqlS…

这五个问题一下就看出阿里通义千问和ChatGPT的差距了

前言 阿里通义千问申请过了&#xff0c;为了看看达到了什么水平&#xff0c;于是我问题了5个ChatGPT回答过的问题1&#xff0c;这五个问题网上都是没有的&#xff0c;是我自己想出来的。 问题一:小明说今天他吃了一只公鸡蛋&#xff0c;请问小明诚实吗&#xff1f; ChatGPT 这…

黑马Redis笔记高级篇 | 多级缓存

黑马Redis笔记高级篇 | 多级缓存&#xff08;黑马教程云服务器踩坑记录&#xff09; 1、JVM进程缓存&#xff08;tomcat服务内部&#xff09;1.1 导入商品案例1.2 初识Caffeine1.3 实现进程缓存 2、Lua语法入门2.1 初识Lua2.2 变量和循环2.3 条件控制、函数 3、多级缓存3.1 安装…

快速了解LVQ神经网络是什么

本站原创文章&#xff0c;转载请说明来自《老饼讲解-BP神经网络》bp.bbbdata.com 目录 一. 快速了解LVQ神经网络 1.1 LVQ神经网络是什么 1.2 LVQ神经网络的表示 二. 关于LVQ神经网络的判别计算过程 2.1 LVQ神经网络模型与它的判别方法 2.2 LVQ模型的…

【论文阅读】MINOTAUR: Multi-task Video Grounding From Multimodal Queries

背景动机 细粒度的视频理解已经成为增强现实(AR)和机器人应用开发的关键能力。为了达到这种级别的视频理解&#xff0c;智能体(例如虚拟助手)必须具备识别和推理视频中捕获的事件和对象的能力&#xff0c;处理一系列视觉任务&#xff0c;如活动检测、对象检索和(空间)时间基础…

教你设置dsn,brd文件关联到cadence

用过cadence的人应该都知道&#xff0c;很多人存在dsn,brd文件无法关联到cadence&#xff0c;从而导致无法直接双击对应的文件打开软件编辑&#xff0c;不得不先打开软件&#xff0c;再通过文件夹浏览来打开对应的文件&#xff0c;这其实是浪费了一些时间的。 下面通过简单的介…

Linux应用开发:socket

目录 1、TCP 1.1 TCP建立连接的流程图 1.2 TCP函数 1.2.1 socket 1.2.2 bind 1.2.3 listen 1.2.4 accept 1.2.5 recv 1.2.6 send 1.2.7 connnect 1.2.8 setsockopt、getsockopt 1.3 应用程序&#xff1a;服务器 1.4 应用程序&#xff1a;客户端 2、UDP 2.1 UDP建…