目标检测中的anchor机制

目录

一、目标检测中的anchor机制

1.什么是anchor boxes?

二、什么是Anchor?

​编辑三、为什么需要anchor boxes?

四、anchor boxes是怎么生成的?

五、高宽比(aspect ratio)的确定

六、尺度(scale)的确定

七、anchor boxes数量的确定

八、Anchor boxes的用途 

 九、anchor boxes对真值bounding box编码的步骤

十、所有的锚框是训练时的样本

十一、为什么要回归偏移量而不是绝对坐标

十二、Anchor的机制

 十三、Anchor的优缺点

13.1 Anchor的优点:

13.2 Anchor的缺点:


一、目标检测中的anchor机制

1.什么是anchor boxes?

        在介绍Anchor之前,我们先介绍一下传统的人脸识别算法,是怎么检测出 图片中的人脸的。以下图为例,如果我们要检测图中小女孩的人脸位置,一个 比较简单暴力的方法就是滑窗,我们使用不同大小、不同长宽比的候选框在整 幅图像上进行穷尽式的滑窗,然后提取窗口内的特征(例如Haar、LBP、Hog 等特征),再送入分类器(SVM、Adaboost等)判断该窗口内包含的是否为人 脸。这种方法简单易理解,但是这类方法受限于手动设计的特征,召回率和准 确率通常不是很高。

        anchor boxes是一组提前预定义的边框,这些框的宽高和数据集中目标物 体的宽高大体是一致的,换句话说,数据集中的绝绝大多数物体都能找到与其 大小一致的anchor box。举例来说,如果数据集中包含苹果、猫,那么这组 anchor boxes中就需要有和苹果、猫大小相仿的边框。为了尽可能多的覆盖数 据集中可能出现的目标推的宽高,这些边框具有不同的宽高比(aspect ratio)和尺度(scale)。

        边框可以反应一个物体的大致信息,边框的位置反应物体的大致位置,宽 高比反应物体的身材比例,尺度反应物体的大小[2]。

二、什么是Anchor?

        那么,anchor到底是什么呢?如果我们用一句话概括——就是在图像上预 设好的不同大小,不同长宽比的参照框。(其实非常类似于上面的滑窗法所设 置的窗口大小)

        下图来自《动手学深度学习》中的例子,假设一个256x256大小的图片, 经过64、128和256倍下采样,会产生4x4、2x2、1x1大小的特征图,我们在这 三个特征图上每个点上都设置三个不同大小的anchor。当然,这只是一个例 子,实际的SSD模型,在300x300的输入下,anchor数量也特别多,其在 38x38、19x19、10x10、5x5、3x3、1x1的六个特征图上,每个点分别设置 4、6、6、6、6、4个不同大小和长宽比的anchor,所以一共有38x38x4+ 19x19x6+ 10x10x6+ 5x5x6+ 3x3x4+ 1x1x4= 8732个anchor。

        神经网络强大的拟合能力,我们不再需要计算Haar、Hog等特征,直接让 神经网络输出,每个anchor是否包含(或者说与物体有较大重叠,也就是IoU 较大)物体,以及被检测物体相对本anchor的中心点偏移以及长宽比例。以下 图为例:

三、为什么需要anchor boxes?

        其实,物体检测方法是非常直观的,就是在图片上,截一小块,检测这一 小块包不包含物体,如果包含物体,该物体的位置就是刚刚截取的这个小块的 位置,同时再预测一下它的类别是什么。那这种检测方法和anchor box又有什 么关系呢? 其实,刚刚截取的这个小块就是一个anchor box。

        往往,图片上的每一处位置都有可能出现目标物体,并且目标的大小是不 确定的。那有什么办法能检出所有的物体呢?最容易想到的办法就是,以一个 像素为中心截取小块时,截取很多个不同宽高比和大小的小块,每个小块都检 测一下,这样就可以做到不漏掉这个像素上的任何宽高比和大小的物体了;为 了检出图像中不同位置的物体,从左到右,从上到下,把图像扫描一遍,每个 像素上都取很多小块进行检测,这样就可以保证不同位置、不同大小的物体都 不漏掉了。Fig. 1是一个扫描检查的示例。

        这种方法容易理解并且确实有效,但是缺点也是突出的----计算量太大了。 假如一张图片大小为640*640,在图像中每一个像素上取10个不同宽高比不同 大小的框做检测,则需要检测的框就会有640 x 640 x 10 = 4096000,太多了。 或者,可以看一下retinanet (传送门)中用的锚框数量,如图Fig. 2所示,图中只 显示了所有框的1%,再多就看不清楚了。那怎么改进呢?  

        其实,这种方法有两个明显可以改善的点,一是4096000个扫描框重叠 (overlap)太多了,一是这些框里有很多框是背景,不包含物体,没有检测的必 要。所以,设法在保证覆盖(cover)整张图的基础上,略去重叠太严重的框, 避开背景框,找高质量的、可能包含目标物体的候选框进行检测就显得尤为重 要,可以以此来降低运算量,提高检测速度。  

        anchor boxes就是我们在检测之前确定的一系列候选框。我们默认,图片 上会出现的所有物体,都会被我们设定的anchor boxes所覆盖。anchor box选 择的好坏直接关系到两个方面:一是能不能很好的覆盖整张图,一是能不能框 住图片中可能出现的每个物体。所以anchor box的设定非常重要,既关系到精 度的好坏,又关系到速度的快慢(速度仅就以上所说的扫描法而言)。

四、anchor boxes是怎么生成的?

        举例来说明:假如要在一个数据集上做物体检测, 该数据集的图片分辨率 均为256 pixel * 256 pixel, 数据集里绝大多数数目标物体的尺寸为 40 pixel * 40 pixel或80 pixel * 40 pixel。

五、高宽比(aspect ratio)的确定

        这说明数据集中绝大多数物体的真值边框的高宽比为1:1和2:1. 根据这个信 息就可以确定锚框的高宽比信息:为这个数据集设计anchor boxes时其高宽比 至少需要包括1:1和2:1. 这里举例为方便就只取1:1和2:1.

六、尺度(scale)的确定

        尺度是指物体的高或宽与图片的高或宽之间的比值。以像素为单位表示目 标物体和图片的尺寸,如果图片的宽为256 pixel,物体的宽为40 pixel,则该物 体的尺度为40/256=0.15625,也就是说该物体占了图片15.62%的宽度。

        为了选一组能更好的代表数据集里目标的尺度的尺度,我们应该以数据集 中目标物体的尺度最大值和最小值为上下限。如,数据集中物体的尺度的最小 值和最大值分别为0.15625和0.3125,我们准备在这个范围内设置3种scale,则 可以选择 {0.15625, 0.234375, 0.3125}。

七、anchor boxes数量的确定

        我们的scales(缩放)为 {0.15625, 0.234375, 0.3125},aspect ratios为{1:1, 2:1}, 则每一个锚点上的一组锚框的数量为3 * 2 = 6个,如Fig.3所示,即有3种 大小的,每一种大小都有两种高宽比。按照以上方法所说,锚点是指256*256 图像中的每一个像素,按基于anchor的神经网络目标检测来讲,锚点为网络最 终输出特征图上的每一个点。

 

八、Anchor boxes的用途 

        在网络中anchor boxes被用来编码目标物体的位置。目标检测一般是不会 直接检测物体边框的绝对坐标的,取而代之的是检测其相对某一个锚框的偏移 量,如Fig.4中绿色真值框对蓝色边框的偏移。数据集中所有的目标均会被编码成 对anchor boxes的偏移。如图Fig.2, 锚框有非常多个,对一张图片来说,可能 包含多个物体,有非常多个anchor boxes, 那怎么用anchor boxes对真值进行 编码呢?

 九、anchor boxes对真值bounding box编码的步骤

         a. 对每一个anchor box,算出其和哪一个真值bounding box的交并比 (intersection over union score)最大

        b. 如果交并比>50%,则当前anchor box负责当前真值bounding box对应 物体的检测,求真值bounding box对该anchor box的偏移

        c. 如果交并比介于40%与50%之间,不能确定该anchor是不是包含该物 体,属于含糊框。

        d. 如果交并比则认为该anchor框到的都是背景,将该anchor划分为 背景类。

        除了被分配物体的锚框外,对只含背景的锚框和含糊框,偏移赋0,分类赋 背景。

十、所有的锚框是训练时的样本

        编码之后,物体检测类网络的回归目标变成回归编码好的偏移量了。网络 的输入为图片,输出为每一锚框的分类和偏移量。网络最终输出的特征图上的 每一个像素都有一组锚框(假如一组锚框的数量为6个,宽高比为2:1和1:1, 尺度为0.15625, 0.234375, 0.3125,如Fig.3所示),设网络最终输出的特诊图 分辨率为7*7,则该回归网络中的锚框数量总数为7x7x6=296个。网络接收到的 真值为这296个anchor box是否为背景的分类信息(如果包含物体,则分离为 物体类别)和每个anchor到目标物体bounding box的偏移量(含糊框和背景框 的偏移量为0),网络的输出为296个框的偏移量和分类信息。

        对一个训练好的网络,其输出中,只包含背景的锚框的分类为背景,偏移 为0;包含物体的锚框,其分类为物体的类别,偏移为锚框与物体真实边框之间 的偏移。

十一、为什么要回归偏移量而不是绝对坐标

        神经网络的特性之一是位移不变性,对一张包含树的照片,不管树在这张 图片的左上角还是右下角,网络输出的分类都是树,分类结果不会因为树在照 片中位置的变化而变化。所以,对于一棵树,不管它在图片中的位置是什么, 回归网络都偏向于为它输出相同的位置坐标,可见位移不变性和我们需要的位 置坐标变化是冲突的,这显然是不行的。转而回归偏移的话,不管树在图像中 的什么位置,其对它所在的锚框的偏移量基本是一致的,更加适合神经网络回归。

        输出特征图和锚框有什么关系呢?锚框不是应该放在输入图上吗,为什么 说输出特征图上的每一个点一组锚框

        如Fig.5所示,输出特征图(最右边3 x 3的小特征图)上的任何一个点都可以 映射到输入图片上(感受野的意思),也就是说按照比例和网络的下采样,对 输出特征图上的任意一点,在输入图片上都可以成比例找到它的对应位置。例 如,在输出特征图上(0, 0)的点在输入图片上的对应位置为(2, 2), 网络的输 出特征维度为3 * 3 * 84 ( = 3 * 3 * 6 * 14),则输出特征图上点(0, 0)处的 84个通道对应的值为输入图(2, 2)位置上6个锚框的偏移量和分类值。3 * 3 * 84 = 3 * 3 * 6 * 14中的6为6个anchor box, 14中的4为(x,y,w,h)的偏移量,14 中的10为类别数。

        通过这样的隐式映射关系,将所有的anchor box都放在了输入图片上。

        Fig.5 网络输出的最终的特征图(图中3 x 3的特征图)上(0,0)的点对应输入 图片上(2,2)的点,则最终输出特征图上点(0,0)对应的所有通道的值则为输 入图点(2,2)上的一组锚框的偏移和分类回归值  

十二、Anchor的机制

        以每个anchor为中心点,人为设置不同的尺度(scale)和长宽比(aspect ratio),即可得到基于anchor的多个anchor box,用以框定图像中的目标,这 就是所谓的anchor 机制。如下图所示,左侧显示了基于一个anchor点生成的9 个anchor boxes(红、绿、蓝三种颜色),右侧显示了该特征图上密集分布的所 有anchor boxes。

 十三、Anchor的优缺点

        在知道了Anchor的原理和机制之后,下面我们就来讲讲Anchor的优缺点 了:

13.1 Anchor的优点:

        ① 使用anchor机制产生密集的anchor boxes,使得网络可直接在此基础 上进行目标分类及边界框坐标回归;

        ② 密集的anchor boxes可有效提高网络目标召回能力,对于小目标检测来说 提升非常明显。

13.2 Anchor的缺点:

        ① anchor机制中,需要设定的超参:尺度(scale)和长宽比( aspect ratio) 是比较难设计的。这需要较强的先验知识。

        ②冗余框非常之多:一张图像内的目标毕竟是有限的,基于每个anchor设定 大量anchor boxes会产生大量的easy-sample,即完全不包含目标的背景框。 这会造成正负样本严重不平衡问题,也是one-stage算法难以赶超two-stage算 法的原因之一。

        ③网络实质上是看不见anchor boxes的,在anchor boxes的基础上进行边界 回归更像是一种在范围比较小时候的强行记忆。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Druid 参数配置详解

简介 Java 程序很大一部分要操作数据库,为了提高性能操作数据库的时候,又不得不使用数据库连接池。 Druid 是阿里巴巴开源平台上一个数据库连接池实现,结合了 C3P0、DBCP 等 DB 池的优点,同时加入了日志监控。 Druid 可以很好的…

【设计模式】行为型设计模式之 迭代器模式

介绍 迭代器模式(Iterator Pattern) 是行为设计模式之一,它提供了一种访问集合对象(如列表、数组或其他集合结构)中元素的方式,而不需要暴露集合的内部结构。迭代器模式定义了一个迭代器接口,该…

大数据学习——安装hive

一. 安装准备 1. 打开虚拟机,启动配置了NameNode节点的虚拟机(一般和mysql在同一台虚拟机)并连接shell 二. 安装 1. 上传hive安装包 hive安装包 提取码:6666 切换到/opt/install_packages目录下 可以将之前解压的rpm文件删除…

Adaboost集成学习 | Matlab实现基于CNN-LSTM-Adaboost集成学习时间序列预测(股票价格预测)

目录 效果一览基本介绍模型设计程序设计参考资料 效果一览 基本介绍 Adaboost集成学习 | Matlab实现基于CNN-LSTM-Adaboost集成学习时间序列预测(股票价格预测) 模型设计 融合Adaboost的CNN-LSTM模型的时间序列预测,下面是一个基本的框架。 …

渗透测试工具NMAP

nmap是一个网络连接端扫描软件,用来扫描网上电脑开放的网络连接端。确定哪些服务运行在哪些连接端,并且推断计算机运行哪个操作系统(这是亦称 fingerprinting)。它是网络管理员必用的软件之一,以及用以评估网络系统安全…

linux安装jdk + docker+dockercompose+aliyunACR

下载安装包 链接:https://pan.baidu.com/s/1AyFvPA5qwy4IxfZoTQohrQ 提取码:6666 安装jdk jdk-8u411-linux-x64.tar.gz 链接:https://pan.baidu.com/s/1BZ7J4L5PY-9nuQyxBMDGTA 提取码:6666 1、解压jdk tar -xvf jdk-8u411-li…

HTML静态网页成品作业(HTML+CSS+JS)—— 美食企业曹氏鸭脖介绍网页(4个页面)

🎉不定期分享源码,关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 🏷️本套采用HTMLCSS,使用Javacsript代码实现 图片轮播切换,共有4个页面。 二、…

SylixOS下UDP组播测试程序

SylixOS下UDP组播测试 测试效果截图如下: udp组播发送测试程序。 /********************************************************************************************************* ** ** 中国软件开源组织 ** ** …

即插即用!CVD:第一个生成具有相机控制的多视图一致视频方案!(斯坦福港中文)

论文链接:https://arxiv.org/abs/2405.17414 项目链接:https://collaborativevideodiffusion.github.io/ 最近对视频生成的研究取得了巨大进展,使得可以从文本提示或图像生成高质量的视频。在视频生成过程中添加控制是未来的重要目标&#x…

算法:模拟题目练习

目录 题目一:替换所有的问号 题目二:提莫攻击 题目三:N字形变换 题目四:外观数列 题目五:数青蛙 首先先解释一下模拟算法是什么,其实模拟算法就是题目让我们干什么我们就干什么,思路比较简…

【数据库设计】宠物商店管理系统

目录 🌊1 问题的提出 🌊2 需求分析 🌍2.1 系统目的 🌍2.2 用户需求 🌻2.2.1 我国宠物行业作为新兴市场,潜力巨大 🌻2.2.2 我国宠物产品消费规模逐年增大 🌻2.2.3 我国宠物主选…

YOLOv5改进 | Head | 将yolov5的检测头替换为ASFF_Detect

💡💡💡本专栏所有程序均经过测试,可成功执行💡💡💡 在目标检测中,为了解决尺度变化的问题,通常采用金字塔特征表示。然而,对于基于特征金字塔的单次检测器来…

凡尔码来访登记卡助力来访安全

来访登记制度是指为了加强对来访人员的管理和安全控制,确保组织内部秩序和安全的一项制度。通过来访登记制度,可以对来访人员的身份进行核实,了解来访目的,并采取相应的安全措施,为组织内部的工作和人员安全提供保障。…

Sass实战运用,如何利用好Sass

Sass(Syntactically Awesome Stylesheets)是一种CSS预处理器,它提供了许多强大的功能,如变量、嵌套规则、混合(Mixins)、函数等,使得CSS的编写更加高效、灵活和易于维护。以下是关于Sass实战运用…

Go基础编程 - 05 - 数组与切片

目录 1. 数组2. 切片2.1. slice 声明、初始化2.2. slice 操作2.3. append() 追加切片、扩容2.4. 字符串和切片 3. Copy4. Array、Slice 内存布局 上一篇:基本类型、常量和变量 1. 数组 数组是同一种类型固定长度的序列(有长度、类型构成)。…

Postgres 正在吞噬数据库世界

Postgres 正在吞噬数据库世界 作者:Ruohang Feng(Vonng)|微信| Medium | 2024-03-04 标签: PostgreSQL生态系统 PostgreSQL 不仅仅是一个简单的关系型数据库,它还是一个数据管理框架,具有席卷整个数据库领…

基于WPF技术的换热站智能监控系统04--实现左侧历史曲线

1、区域划分 左侧分5行,第一行信息标题,第二行历史曲线 2、安装livecharts图表控件 3、引入图表控件命名空间 4、使用控件 5、运行效果 走过路过不要错过,点赞关注收藏又圈粉,共同致富,为财务自由作出贡献

IP地址乱成一团?用Shell一键搞定!

在日常的运维工作中,我们经常需要对各种数据进行处理和分析,其中包括对IP地址的管理和排序。排序后的IP地址列表可以帮助我们更好地进行日志分析、网络流量监控和故障排除。 本文将模拟一个运维场景,展示如何对IP地址进行排序,并探…

Mongodb使用$pop删除数组中的元素

学习mongodb,体会mongodb的每一个使用细节,欢迎阅读威赞的文章。这是威赞发布的第67篇mongodb技术文章,欢迎浏览本专栏威赞发布的其他文章。如果您认为我的文章对您有帮助或者解决您的问题,欢迎在文章下面点个赞,或者关…

编译和连接

目录1. 翻译环境和运行环境2. 翻译环境:预编译编译汇编链接1. 翻译环境和运行环境 在ANSI C 的任何一种实现中,存在两个不同环境。 (1) 翻译环境,在这种环境中源代码被转换为可执行的机器指令(二进制指令)。 (2) 执行环境,它用于实际执行的代…