首页 > 其他分享 >目标检测中的anchor机制

目标检测中的anchor机制

时间:2024-06-12 14:57:22浏览次数:26  
标签:box 检测 物体 Anchor boxes 机制 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的基础上进行边界 回归更像是一种在范围比较小时候的强行记忆。

标签:box,检测,物体,Anchor,boxes,机制,anchor
From: https://blog.csdn.net/lbr15660656263/article/details/139613786

相关文章

  • 目标检测——铁轨表面裂纹数据集(三)
    铁轨裂纹检测:智慧守护下的安全之旅引言亲爱的读者们,您是否在寻找某个特定的数据集,用于研究或项目实践?欢迎您在评论区留言,或者通过公众号私信告诉我,您想要的数据集的类型主题。小编会竭尽全力为您寻找,并在找到后第一时间与您分享。一、背景在广袤无垠的大地上,铁轨如同一......
  • 数据预处理之基于聚类的TOD异常值检测#matlab
    1.基于聚类的异常值检测方法物以类聚——相似的对象聚合在一起,基于聚类的异常点检测方法有两个共同特点:(1)先采用特殊的聚类算法处理输入数据而得到聚类,再在聚类的基础上来检测异常。(2)只需要扫描数据集若干次,效率较高,适用于大规模数据集。2.检测方法计算步骤基于聚类的......
  • 机器学习课程设计,人工智能课程设计,深度学习课程设计--基于Transformer的家庭暴力情绪
    文章目录摘要第一章背景与意义1.1背景1.1.1家庭暴力发展现状1.1.2家庭暴力的危害1.2意义与目的第二章关键技术与方法2.1文本模态特征提取法2.2视频模态特征提取法2.3音频模态特征提取法2.4注意力机制(Attention)2.5多头注意力机制(Multi-Attention)2.6Transfor......
  • 已经解决: 未连接:有潜在的安全问题 Firefox 检测到潜在的安全威胁,并因 github.com 要求
    最近在访问github.com网站的时候,提示安全问题而不能访问,尝试添加例外网站地址后得以解决,分享给需要的朋友。访问github网站出现的问题解决未连接:有潜在的安全问题Firefox检测到潜在的安全威胁,并因github.com要求安全连接而没有继续。  把https://github.com添加到例......
  • Canny边缘检测算法
    一、概念Canny算法是一种经典的图像处理算法,用于图像中的边缘检测,其实现的步骤包括:高斯滤波;计算梯度和方向:对平滑后的图像使用Sobel算子计算水平方向和竖直方向的一阶导数,然后计算该点的梯度大小和方向;非极大值抑制:对梯度图上的每个像素,根据其梯度方向,确定在该方向上的两个......
  • 霍夫变换检测圆
    一、概念1.1标准霍夫变换检测圆与霍夫变换检测直线是非常类似的,只是将参数空间扩展到了三维,把问题转换为求解参数空间中相交最多的(a,b,r)参数对,其中(a,b)是圆心,r是半径,但这种方式增加了很多的计算量,所以在实际中并不常用。1.2OpenCV中的霍夫梯度检测圆OpenCV中霍夫变换圆......
  • 武汉凯迪正大电气对10KV架空绝缘电缆检测项目与技术规范经验分享
    架空绝缘电缆作为电力传输的重要组成部分,其安全性和可靠性对于电力系统的稳定运行至关重要。因此10kV架空绝缘电缆进行严格的检测与评估,确保其符合相关技术规范和安全标准是电力工程建设和运维的重要环节。本文将根据武汉凯迪正大的从业经验对10kV架空绝缘电缆的检测项目和技术......
  • OpenCV实战案例——直线检测[C++]
    0.前言本文以实战案例为背景,一步步讲述如何使用计算机图像处理相关知识提取图片中英语填空题答题线。1.需求背景某公司打算设计一款英语题目批改APP,要求学生上传英语填空题图片,然后该APP自动标注答题线位置(使用红线标注),方便后续定位和批改答案。下图(图1-1)为某一学生上传的......
  • r语言数据分析案例25-基于向量自回归模型的标准普尔 500 指数长期预测与机制分析
    一、背景介绍2007年的全球经济危机深刻改变了世界经济格局,引发了一系列连锁反应,波及各大洲。经济增长停滞不前,甚至在某些情况下出现负增长,给出口导向型发展中国家带来了不确定性。实体经济受到的冲击尤为严重,生产成本上升,利润下降,实际经济价值缩水。相比之下,金融部门的投资活......
  • 霍夫变换检测直线
    一、概念Hough直线检测的基本原理在于利用点与线的对偶性,即图像空间中的直线与参数空间中的点是一一对应的,因此将图像空间中的直线检测问题转换到参数空间中对点的检测问题,通过在参数空间里寻找峰值来完成直线检测任务。注意:参数空间是极坐标系,不是k和b组成的笛卡尔坐标系,目的......