anchor box只是先验知识,bounding box是一种过程,ground truth才是标准答案,
-
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 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个,如下图所示,即有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
相关文章:
anchor box只是先验知识,bounding box是一种过程,ground truth才是标准答案,
anchor boxes是一组提前预定义的边框,这些框的宽高和数据集中目标物体的宽高大体是一致的,换句话说,数据集中的绝大多数物体都能找到与其大小一致的anchor box。 举例来说,如果数据集中包含苹果、猫,那么这组anchor bo…...
带你轻松实现通讯录(C语言版)
文章目录前言通讯录初始化通讯录运行的基本框架和菜单增添联系人删除联系人查找联系人修改联系人信息展示通讯录通讯录联系人个数排序通讯录文件操作储存通讯录信息销毁通讯录整体代码Contacts.hContacts.ctest.c写在最后前言 学习C语言的小伙伴,相信都要经历实现通…...
渗透测试之交换式网络嗅探实验
渗透测试之交换式网络嗅探实验实验目的一、实验原理1.1 网络嗅探器Sniffer的工作原理1.2 网络嗅探器的分类1.3 网络嗅探器Sniffer的作用二、实验环境2.1 操作机器2.2 实验工具Sniffer2.3 安装工具Sniffer三、实验步骤1. 熟悉Sniffer工具的启动2. 进行监听3. 熟悉Sniffer工具的介…...
rust 安装
rust 安装一、需要一个c的环境二、配置环境变量三、开始安装一、需要一个c的环境 安装Visual Studio 二、配置环境变量 Rust需要安装两个东西,一个是rustup,一个是cargo。所以你需要设置两个环境变量来分别指定他们的安装目录。 通过RUSTUP_HOME指定…...
机器学习和深度学习综述
机器学习和深度学习综述 1. 人工智能、机器学习、深度学习的关系 近些年人工智能、机器学习和深度学习的概念十分火热,但很多从业者却很难说清它们之间的关系,外行人更是雾里看花。在研究深度学习之前,先从三个概念的正本清源开始。概括来说…...
SQL零基础入门学习(八)
SQL零基础入门学习(七) SQL 连接(JOIN) SQL join 用于把来自两个或多个表的行结合起来。 下图展示了 LEFT JOIN、RIGHT JOIN、INNER JOIN、OUTER JOIN 相关的 7 种用法。 SQL JOIN SQL JOIN 子句用于把来自两个或多个表的行结合起来,基…...
若依系统如何集成qq邮件发送【超详细,建议收藏】
若依系统的部署博主就不在这儿阐述了,默认大家的电脑已经部署好了若依系统,这里直接开始集成邮件系统,首先我们得需要对qq邮箱进行配置;一套学不会你来打我😀; 一、开启我们的qq邮箱发送邮件的配置 1、先进…...
前端-CSS-zxst
CSS 层叠样式表,为了定义HTML标签的样式 内联样式 在标签内部通过 style 属性设置样式值样式名:样式值;样式名:样式值; 内部样式 在 head 标签内通过 style 标签选择器设置样式,供这个网页上的元素使用 外部样式 在 head 标签内通过 link 标签引入外部…...
合宙Air105|fonts库|mcu.ticks()|LuatOS-SOC接口|官方demo|学习(19):fonts库
基础资料 基于Air105开发板:Air105 - LuatOS 文档 上手:开发上手 - LuatOS 文档 探讨重点 官方fonts库函数介绍以及利用mcu.ticks()计算程序运行周期相关内容的学习及探讨。 软件版本 AIR105:LuatOSAIR105 base 22.12 bsp V0014 32bit …...
成都欢蓬电商:抖音直播卖药灰度测试通告
据报道,近日有MCN机构透露,目前抖音直播卖药为“测试项目,谨慎试跑中”; “仍处于灰度测试,至于测试多久,抖音官方确实没有答复,需要看第一阶段数据,然后定夺,预计4月份会纳入更多机…...
1.1计算机和编成语言
一、C 语言简介历史C 语言最初是作为 Unix 系统的开发工具而发明的。1969年,美国贝尔实验室的肯汤普森(Ken Thompson)与丹尼斯里奇(Dennis Ritchie)一起开发了Unix 操作系统。Unix 是用汇编语言写的,无法移…...
解析 xml 文件 - xml.etree ElementTree
目录1、导入模块 →\rightarrow→ 读取文件 →\rightarrow→ 获取根节点 →\rightarrow→ 获取根节点的标签与属性2、遍历一级子节点、获取子节点的标签 与 属性3、通过索引 获取数据4、Element.findall()、Element.find() - 按照 tag 值查找 子节点5、Element.iter() - 循环迭…...
LeetCode Cookbook 哈希表(collections.Counter()和collections.defaultdict())
好久不更了,这次一鼓作气,学完它! 文章目录LeetCode Cookbook 哈希表30. 串联所有单词的子串36. 有效的数独(很不错的循环题目)49. 字母异位词分组290. 单词规律447. 回旋镖的数量575. 分糖果594. 最长和谐子序列599. …...
spring boot项目中i18n和META-INF.spring下的文件的作用
目录标题一、resource下的文件二、i18n下messages_zh_CN.properties三、spring.factories文件四、org.springframework.boot.autoconfigure.AutoConfiguration.imports一、resource下的文件 org.springframework.boot.autoconfigure.AutoConfiguration.imports ; - …...
3年自动化测试经验,面试连20K都拿不到,现在都这么卷了吗····
我的情况 大概介绍一下个人情况,女,本科,三年多测试工作经验,懂python,会写脚本,会selenium,会性能,会自动化,然而到今天都没有收到一份offer!从2022年11月1…...
Python数据结构与算法篇(四)-- 链表的实现
实现线性表的另一种常用方式就是基于链接结构,用链接关系显式表示元素之间的顺序关联。基于链接技术实现的线性表称为链接表或者链表。 采用链接方式实现线性表的基本想法如下: 把表中的元素分别存储在一批独立的存储块(称为表的结点)里。保…...
【java基础】循环语句、中断控制语句
文章目录循环while循环for循环for each循环中断控制语句breakcontinue带标签的break(相当于goto)循环 在java中有3种循环,分别是while循环,for循环,for each循环 while循环 while循环的形式是 while(condition) statement int i 5;while …...
万字长文带你实战 Elasticsearch 搜索
ES 高级实战 前言 上篇我们讲到了 Elasticsearch 全文检索的原理《别只会搜日志了,求你懂点原理吧》,通过在本地搭建一套 ES 服务,以多个案例来分析了 ES 的原理以及基础使用。这次我们来讲下 Spring Boot 中如何整合 ES,以及如何在 Spring Cloud 微服务项目中使用 ES 来…...
Web网页测试全流程解析论Web自动化测试
1、功能测试 web网页测试中的功能测试,主要测试网页中的所有链接、数据库连接、用于在网页中提交或获取用户信息的表单、Cookie 测试等。 (1)查看所有链接: 测试从所有页面到被测特定域的传出链接。 测试所有内部链接。 测试链…...
初识Python——“Python”
各位CSDN的uu们你们好呀,今天进入到了我们的新专栏噢,Python是小雅兰的专业课,那么现在,就让我们进入Python的世界吧 计算机基础概念 什么是计算机? 什么是编程? 编程语言有哪些? Python背景知…...
React hook之useRef
React useRef 详解 useRef 是 React 提供的一个 Hook,用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途,下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...
抖音增长新引擎:品融电商,一站式全案代运营领跑者
抖音增长新引擎:品融电商,一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中,品牌如何破浪前行?自建团队成本高、效果难控;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...
拉力测试cuda pytorch 把 4070显卡拉满
import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试,通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小,增大可提高计算复杂度duration: 测试持续时间(秒&…...
python执行测试用例,allure报乱码且未成功生成报告
allure执行测试用例时显示乱码:‘allure’ �����ڲ����ⲿ���Ҳ���ǿ�&am…...
CSS设置元素的宽度根据其内容自动调整
width: fit-content 是 CSS 中的一个属性值,用于设置元素的宽度根据其内容自动调整,确保宽度刚好容纳内容而不会超出。 效果对比 默认情况(width: auto): 块级元素(如 <div>)会占满父容器…...
前端中slice和splic的区别
1. slice slice 用于从数组中提取一部分元素,返回一个新的数组。 特点: 不修改原数组:slice 不会改变原数组,而是返回一个新的数组。提取数组的部分:slice 会根据指定的开始索引和结束索引提取数组的一部分。不包含…...
Python 训练营打卡 Day 47
注意力热力图可视化 在day 46代码的基础上,对比不同卷积层热力图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pypl…...
【Post-process】【VBA】ETABS VBA FrameObj.GetNameList and write to EXCEL
ETABS API实战:导出框架元素数据到Excel 在结构工程师的日常工作中,经常需要从ETABS模型中提取框架元素信息进行后续分析。手动复制粘贴不仅耗时,还容易出错。今天我们来用简单的VBA代码实现自动化导出。 🎯 我们要实现什么? 一键点击,就能将ETABS中所有框架元素的基…...
倒装芯片凸点成型工艺
UBM(Under Bump Metallization)与Bump(焊球)形成工艺流程。我们可以将整张流程图分为三大阶段来理解: 🔧 一、UBM(Under Bump Metallization)工艺流程(黄色区域ÿ…...
使用ch340继电器完成随机断电测试
前言 如图所示是市面上常见的OTA压测继电器,通过ch340串口模块完成对继电器的分路控制,这里我编写了一个脚本方便对4路继电器的控制,可以设置开启时间,关闭时间,复位等功能 软件界面 在设备管理器查看串口号后&…...
