anchor box只是先验知识,bounding box是一种过程,ground truth才是标准答案,

news2024/9/27 17:33:17
  • anchor boxes是一组提前预定义的边框,这些框的宽高和数据集中目标物体的宽高大体是一致的,换句话说,数据集中的绝大多数物体都能找到与其大小一致的anchor box。

    • 举例来说,如果数据集中包含苹果、猫,那么这组anchor boxes中就需要有和苹果、猫大小相仿的边框。为了尽可能多的覆盖数据集中可能出现的目标推的宽高,这些边框具有不同的宽高比(aspect ratio)和尺度(scale)

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

  • anchor box +/-/×/÷偏移量所得到的框是bounding box,然而bounding box会生成很多,这些bounding box经过非极大值抑制(NMS)之后就是我们传统意义上的预测值bounding box了。Ground truth box是真实标注框,也就是人工标注,一般被看作“真值”。

  • 为什么需要anchor boxes

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

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

    • 这种方法容易理解并且确实有效,但是缺点也是突出的----计算量太大了。假如一张图片大小为640*640,在图像中每一个像素上取10个不同宽高比不同大小的框做检测,则需要检测的框就会有640 x 640 x 10 = 4096000,太多了。

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

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

  • anchor boxes是怎么生成的

    • 举例来说明:假如要在一个数据集上做物体检测, 该数据集的图片分辨率均为256 pixel * 256 pixel, 数据集里绝大多数数目标物体的尺寸为 40 pixel * 40 pixel80 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个,如下图所示,即有3种大小的,每一种大小都有两种高宽比。按照以上方法所说,锚点是指256*256图像中的每一个像素,按基于anchor的神经网络目标检测来讲,锚点为网络最终输出特征图上的每一个点。

      • 在这里插入图片描述

      • 一个锚点对应的一组锚框,同一种颜色的框为一种尺度下两种高宽比对应的锚框​。在检测任务中,输入图像经过骨干网络提取得到特征图,该图上的每个像素点,即为anchor锚点

    • 使用绝对坐标的(xmin,ymin,xmax,ymax)。 但是这种绝对坐标的表示方式,是以原始图像的像素值为基础的,这就需要知道图像的实际尺度,如果图像进行缩放,这种表示就无法准确的进行定位了。对图像的尺寸进行归一化,使用归一化后的坐标矩形框。坐标进行归一化,这样只要知道图像的scale就能够很容易在当前尺度下使用矩形框定位。

  • 在目标检测中,训练数据的标签通常是基于绝对坐标的表示方式的,而在训练的过程中通常会有尺度的变换这就需要将边框坐标转换为归一化后的形式。 在计算损失值时,为了平衡尺寸大的目标和尺寸小的目标对损失值的影响,就需要将矩形框表示为中心坐标的方式,以方便对矩形框的宽和高添加权重。 最后,要将归一化后的中心坐标形式转换为检测图像的原始尺度上

  • Anchor boxes的用途

    • 在网络中anchor boxes被用来编码目标物体的位置。目标检测一般是不会直接检测物体边框的绝对坐标的,取而代之的是检测其相对某一个锚框的偏移量,如下图中黑色真值框对蓝色边框的偏移。数据集中所有的目标均会被编码成对anchor boxes的偏移。

    • 在这里插入图片描述

    • 对一张图片来说,可能包含多个物体,有非常多个anchor boxes, 那怎么用anchor boxes对真值进行编码呢?

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

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

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

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

    • 如果交并比<40%,则认为该anchor框到的都是背景,将该anchor划分为背景类。

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

  • 编码之后,物体检测类网络的回归目标变成回归编码好的偏移量了。网络的输入为图片,输出为每一锚框的分类和偏移量。网络最终输出的特征图上的每一个像素都有一组锚框(假如一组锚框的数量为6个,宽高比为2:1和1:1, 尺度为0.15625, 0.234375, 0.3125),设网络最终输出的特诊图分辨率为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+10,其中的4为(x,y,w,h)的偏移量,其中的10为类别数。

    • 在这里插入图片描述

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

  • Anchor机制的优缺点

    • 使用anchor机制,使得网络可直接在此基础上进行目标分类及边界框坐标回归,适当设置anchor box能够提升检测效率,降低计算量;

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

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

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

  • https://zhuanlan.zhihu.com/p/484555425

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

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

相关文章

Python|Leetcode刷题日寄Part03

Python|Leetcode刷题日寄Part0301&#xff1a;买卖股票的最佳时机02&#xff1a;合并两个有序数组03&#xff1a;三数之和04&#xff1a;找出字符串中第一个匹配项的下标05&#xff1a;全排列06&#xff1a;用队列实现栈07&#xff1a;加一08&#xff1a;电话号码的字母组合09&…

ubuntu 20.04 虚拟机和物理机之间无法拖动文件

相信kali大家总用过吧&#xff0c;在主机和虚拟机之间畅通无阻的拖动文件是一件很舒服的事情。 但是ubuntu不能这样很麻烦。 第一种方法 这是网上最多的方法&#xff0c;就是修改VMtools&#xff0c;但是这种方法不好用&#xff0c;只能让文件进来&#xff0c;而且还是比较麻烦…

HMM隐马尔可夫模型 | 关键原理+面试知识点

😄 HMM之前跟人生导师:李航学习过,这里结合自己的理解,精简一波HMM,总结一下面试中高频出现的要点。 文章目录 1、何为HMM?2、HMM三要素:3、HMM两大强假设4、HMM三个基本问题 :5、HMM中涉及的算法6、HMM缺点7、面试高频题7.1、HMM中为何引入维特比算法作为预测算法?…

嵌入式开发:在嵌入式应用程序中混合C和C++

许多嵌入式应用程序仍使用c语言编写&#xff0c;但越来越多的嵌入式开发人员现在使用C语言编写程序。某些应用程序甚至共享这两种语言。这有意义吗?C是嵌入式应用中最常用的编程语言。多年来&#xff0c;人们一直期待着向C过渡&#xff0c;但过渡速度相当缓慢。但是&#xff0…

【项目精选】JSP企业电子投票系统(视频+论文+源码)

点击下载源码 javaEE健康管理系统主要功能包括&#xff1a;投票、查看投票结果、隐藏/公布投票结果、编辑投票主题等等。本系统结构如下&#xff1a; 1.普通用户模块&#xff1a; 1).实现登录功能 2).实现用户登录的退出 3).投票 用户可以对已经开放的主题投票 4).查看投票结果…

Unity中画2D图表(5)——给定一系列散点,拟合出一条曲线

一、散点数据、拟合直线、拟合曲线 蓝色圆点是数据样本直线为拟合的直线曲线是拟合出来的曲线 二、C#中曲线拟合的实现 0、曲线拟合的一般步骤&#xff08;以平面坐标XY为例&#xff09; 【1】给定计算拟合的阶数k&#xff0c;k的取值最大为【样本个数-1】 【2】计算出拟合…

GoLang 协程池

Goroutine 1.Goroutine 是 Golang 提供的一种轻量级线程&#xff0c;我们通常称之为「协程」&#xff0c;相比较线程&#xff0c;创建一个协程的成本是很低的。所以你会经常看到 Golang 开发的应用出现上千个协程并发的场景。 Goroutine 的优势&#xff1a; 与线程相比&#xf…

Spring Security+jwt+redis+自定义认证逻辑 权限控制

Spring Securityjwtredis自定义认证逻辑 权限控制 1.拦截访问基本思路 2.创建数据库表&#xff1a;角色表&#xff08;应该6个表&#xff0c;这里只用用户表代替角色表&#xff09;、权限表、路径表、角色-权限表、权限-路径表 /* SQLyog Professional v12.14 (64 bit) MySQL…

Leetcode第450题删除二叉搜索树中的结点|C语言

题目&#xff1a; 给定一个二叉搜索树的根节点 root 和一个值 key&#xff0c;删除二叉搜索树中的 key 对应的节点&#xff0c;并保证二叉搜索树的性质不变。返回二叉搜索树&#xff08;有可能被更新&#xff09;的根节点的引用。 一般来说&#xff0c;删除节点可分为两个步骤…

一个跟蘑菇结缘的企业老板

记得那是一个很久以前的一家公司了董事长办公室里中的大型盆栽里面长了一个蘑菇董事长认为是祥瑞每天都会浇水后来一个新来的保洁阿姨以为杂草啥的给他掰掉扔垃圾桶了董事长第二天来浇水的时候发现没了就问谁动了他的蘑菇问道之后就跑到楼道大垃圾桶那里把蘑菇找回来种在花盆里…

“点工”的觉悟,5年时间从7K到24K的转变,我的测试道路历程~

2015年7月我从一个90%以上的人都不知道的二本院校毕业&#xff08;新媒体专业&#xff09;&#xff0c;凭借自学的软件测试&#xff08;点点点&#xff09;在北京找到了一份月薪7000的工作&#xff0c;在当时其实还算不错&#xff0c;毕竟我的学校起点比较差&#xff0c;跟大部…

python学习笔记——csv文件

目录 一、csv文件和Excel文件区别 二、手动转换&#xff08;文本与列表&#xff09; ①普通的写(列表嵌套转成文本的表格形式) ②普通的读&#xff08;文本的表格形式转成列表嵌套&#xff09; 二、csv库-读 1、CSV库-读-reader() 2、CSV库-读-DictReader() 三、csv库-写 …

基于YOLO的酸枣病虫害检测识别实践

在我前面的博文中对于农作物病虫害的检测识别已经做过了&#xff0c;不过那个主要是针对水稻的&#xff0c;文章如下&#xff1a;《基于yolov5的轻量级水稻虫害目标检测项目实践》感兴趣的话可以自行移步阅读。这里主要是针对酸枣常见的几种病虫害检测检测识别&#xff0c;首先…

苹果电脑如何录屏?3个方法,轻松学会

苹果电脑是很多创作者、视频制作人和经常工作用户的选择&#xff0c;但是如何在苹果电脑上录制高质量的屏幕视频呢&#xff1f;苹果电脑如何录屏&#xff1f;本文将介绍3种不同的方法&#xff0c;帮助小伙伴轻松学会如何在苹果电脑上录制屏幕视频。 方法一&#xff1a;使用Mac自…

假设检验的基本思想

假设检验 首先了解参数估计&#xff0c;比如有服从正态分布的数据集X∼N(μ,σ2)X\sim N(\mu,\sigma^{2})X∼N(μ,σ2)&#xff0c;我们希望根据样本x1,...xnx_{1},...x_{n}x1​,...xn​估计出参数μ,σ\mu,\sigmaμ,σ&#xff0c;这些参数可以是一个具体值&#xff0c;也可以…

【C++】Windows动态库【.DLL文件】制作方法总结

如题&#xff0c;我们本篇介绍如何制作DLL&#xff0c;将代码类中的方法以接口的形式暴露出来给exe程序使用。会涉及类厂创建方法实例、声明DLL接口、.def文件的使用等。 目录 一、DLL介绍 二、C制作DLL文件 2.1 DLL端 2.2 调用端 三、DLL导出类方法 四、COM技术制作DLL…

扎心话题 | 设计院背后的潜规则你知道吗?

大家好&#xff0c;我是建模助手。 大家都知道&#xff0c;在过去的2022年经济是真难&#xff01;以小编所在的广东为例&#xff0c;全年GDP增长仅1.9%。 这个数据足以呈现一个社会现象——不仅消费力咔咔下降&#xff0c;各行各业更有不同程度地嗝屁。这其中也包括一些设计院…

只要一直向前定能到达远方,社科院与杜兰大学金融管理硕士项目为你注入动力

在人生这条道路上&#xff0c;我们很远的路要走&#xff0c;不管前方是否平坦&#xff0c;我们只要坚持前向&#xff0c;终将抵达远方。一路上我们付出很多&#xff0c;也收获很多。想要变得更强大&#xff0c;就要不断优化自身&#xff0c;积攒更多的能量&#xff0c;社科院与…

Flask入门(10):Flask使用SQLAlchemy

目录11.SQLAlchemy11.1 简介11.2 安装11.3 基本使用11.4 连接11.5 数据类型11.6 执行原生sql11.7 插入数据11. 8 删改操作11.9 查询11.SQLAlchemy 11.1 简介 SQLAlchemy的是Python的SQL工具包和对象关系映射&#xff0c;给应用程序开发者提供SQL的强大功能和灵活性。它提供了…

浅析无人值守+智慧巡检变电站安全管控系统设计方案

一、项目背景 安全是电力生产的基石&#xff0c;确保电网安全和人身安全&#xff0c;是电网企业安全工作的出发点和落脚点。 随着智能信息化技术应用越来越广泛&#xff0c;智能信息化现场安全管理是近年来基于智能安全巡检技术下发展起来的现场作业安全管理新技术。 变电站运…