目标检测中的anchor机制

2024-06-13 08:36
文章标签 anchor 检测 机制 目标

本文主要是介绍目标检测中的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的基础上进行边界 回归更像是一种在范围比较小时候的强行记忆。

这篇关于目标检测中的anchor机制的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1056797

相关文章

Linux系统稳定性的奥秘:探究其背后的机制与哲学

在计算机操作系统的世界里,Linux以其卓越的稳定性和可靠性著称,成为服务器、嵌入式系统乃至个人电脑用户的首选。那么,是什么造就了Linux如此之高的稳定性呢?本文将深入解析Linux系统稳定性的几个关键因素,揭示其背后的技术哲学与实践。 1. 开源协作的力量Linux是一个开源项目,意味着任何人都可以查看、修改和贡献其源代码。这种开放性吸引了全球成千上万的开发者参与到内核的维护与优化中,形成了

Spring中事务的传播机制

一、前言 首先事务传播机制解决了什么问题 Spring 事务传播机制是包含多个事务的方法在相互调用时,事务是如何在这些方法间传播的。 事务的传播级别有 7 个,支持当前事务的:REQUIRED、SUPPORTS、MANDATORY; 不支持当前事务的:REQUIRES_NEW、NOT_SUPPORTED、NEVER,以及嵌套事务 NESTED,其中 REQUIRED 是默认的事务传播级别。

基于CTPN(tensorflow)+CRNN(pytorch)+CTC的不定长文本检测和识别

转发来源:https://swift.ctolib.com/ooooverflow-chinese-ocr.html chinese-ocr 基于CTPN(tensorflow)+CRNN(pytorch)+CTC的不定长文本检测和识别 环境部署 sh setup.sh 使用环境: python 3.6 + tensorflow 1.10 +pytorch 0.4.1 注:CPU环境

3月份目标——刷完乙级真题

https://www.patest.cn/contests/pat-b-practisePAT (Basic Level) Practice (中文) 标号标题通过提交通过率1001害死人不偿命的(3n+1)猜想 (15)31858792260.41002写出这个数 (20)21702664840.331003我要通过!(20)11071447060.251004成绩排名 (20)159644

基于深度学习的轮廓检测

基于深度学习的轮廓检测 轮廓检测是计算机视觉中的一项关键任务,旨在识别图像中物体的边界或轮廓。传统的轮廓检测方法如Canny边缘检测和Sobel算子依赖于梯度计算和阈值分割。而基于深度学习的方法通过训练神经网络来自动学习图像中的轮廓特征,能够在复杂背景和噪声条件下实现更精确和鲁棒的检测效果。 深度学习在轮廓检测中的优势 自动特征提取:深度学习模型能够自动从数据中学习多层次的特征表示,而不需要

自动驾驶---Perception之Lidar点云3D检测

1 背景         Lidar点云技术的出现是基于摄影测量技术的发展、计算机及高新技术的推动以及全球定位系统和惯性导航系统的发展,使得通过激光束获取高精度的三维数据成为可能。随着技术的不断进步和应用领域的拓展,Lidar点云技术将在测绘、遥感、环境监测、机器人等领域发挥越来越重要的作用。         目前全球范围内纯视觉方案的车企主要包括特斯拉和集越,在达到同等性能的前提下,纯视觉方

多头注意力机制(Multi-Head Attention)

文章目录 多头注意力机制的作用多头注意力机制的工作原理为什么使用多头注意力机制?代码示例 多头注意力机制(Multi-Head Attention)是Transformer架构中的一个核心组件。它在机器翻译、自然语言处理(NLP)等领域取得了显著的成功。多头注意力机制的引入是为了增强模型的能力,使其能够从不同的角度关注输入序列的不同部分,从而捕捉更多层次的信息。 多头注意力机

Linux-笔记 线程同步机制

目录 前言 实现 信号量(Semaphore) 计数型信号量 二值信号量  信号量的原语操作 无名信号量的操作函数 例子 互斥锁(mutex) 互斥锁的操作函数 例子 自旋锁 (Spinlock) 自旋锁与互斥锁的区别 自旋锁的操作函数 例子 前言         线程同步是为了对共享资源的访问进行保护,确保数据的一致性,由于进程中会有多个线程的存在,

Spring 集成 RabbitMQ 与其概念,消息持久化,ACK机制

目录 RabbitMQ 概念exchange交换机机制 什么是交换机binding?Direct Exchange交换机Topic Exchange交换机Fanout Exchange交换机Header Exchange交换机RabbitMQ 的 Hello - Demo(springboot实现)RabbitMQ 的 Hello Demo(spring xml实现)RabbitMQ 在生产环境

Rust:Future、async 异步代码机制示例与分析

0. 异步、并发、并行、进程、协程概念梳理 Rust 的异步机制不是多线程或多进程,而是基于协程(或称为轻量级线程、微线程)的模型,这些协程可以在单个线程内并发执行。这种模型允许在单个线程中通过非阻塞的方式处理多个任务,从而实现高效的并发。 关于“并发”和“并行”的区别,这是两个经常被提及但含义不同的概念: 并发(Concurrency):指的是同时处理多个任务的能力,这些任务可能在同一时