锚框(anchor box)

目标检测算法通常会在输入图像中抽样大量的区域,然后判断这些区域中是否包含我们感兴趣的目标,并调整区域边界,从而更准确地预测目标的真实边界框(ground-truth bounding box)。不同的模型所使用的区域抽样方法可能不同。这里我们介绍其中的一种方法:以每个像素为中心,生成多个缩放比和宽高比不同的边界框,这些边界框被称为锚框(anchor box)。

1. 生成多个锚框

假设输入图像的高度为h,宽度为w。我们以图像的每个像素为中心生成不同形状的锚框:缩放比(scale)为s \in (0, 1],宽高比(aspect ratio)为r>0。那么锚框的宽度和高度分别为hs \sqrt{r}hs / \sqrt{r}。注意,当中心位置给定时,宽度和高度已知的锚框是确定的。

要生成多个不同形状的锚框,我们设置许多缩放比取值s_1, \hdots, s_n和许多宽高比取值r_1, \hdots, r_m。以每个像素为中心使用这些缩放比和宽高比的所有组合时,输入图像将总共有w·h·n·m个锚框。尽管这些锚框可能会覆盖所有真实边界框,但计算复杂性很容易过高。在实践中,我们只考虑包含s1或r1的组合:

(s_1, r_1),(s_1, r_2),\hdots,(s_1, r_m),(s_2, r_1),(s_3, r_1),\hdots,(s_n, r_1)

也就是说,以同一像素为中心的锚框的数量是n+m-1。对于整个输入图像,将共生成wh(n+m-1)个锚框。

上述生成锚框的方法在下面的multibox_prior 函数中实现。我们指定输入图像、缩放比列表和宽高比列表,然后此函数将返回所有的锚框。

 

2. 交并比(IoU)

我们刚才提到某个锚框“较好地”覆盖了图像中的狗。如果已知目标的真实边界框,那么这里的“好”该如何量化呢?直观地说,就是可以度量锚框和真实边界框之间的相似性。杰卡德指数(Jaccard index),也称杰卡德相似系数(Jaccard similarity coefficient)可以度量两组的相似性。给定集合A和B,它们的杰卡德指数是它们交集的大小除以它们并集的大小:

J(A, B) = \frac{A \cap B}{A \cup B}

事实上,我们可以将任何边界框的像素区域视为一组像素。通过这种方式,我们可以通过其像素集的杰卡德指数来度量两个边界框的相似性。对于两个边界框,它们的杰卡德指数通常称为交并比(intersection over union,IoU),即两个边界框相交面积与相并面积之比,如图所示。交并比的取值范围在0和1之间,0表示两个边界框无重合像素,1表示两个边界框完全重合。接下来将使用交并比来度量锚框和真实边界框之间,以及不同锚框之间的相似性。给定两个锚框或边界框的列表,以下box_iou函数将对于这两个列表计算它们成对的交并比。

3. 在训练数据中标注锚框

在训练集中,我们将每个锚框视为一个训练样本。为了训练目标检测模型,我们需要每个锚框的类别(class)和偏移量(ofiset)标签,其中前者是与锚框相关的目标的类别,后者是真实边界框相对于锚框的偏移量。在预测时,我们为每张图像生成多个锚框,预测所有锚框的类别和偏移量,根据预测的偏移量调整它们的位置以获得预测的边界框,最后只输出符合特定条件的预测边界框。

目标检测训练集带有真实边界框的位置及其包围目标的类别的标签。要标注任何生成的锚框,我们可以参考分配到的最接近此锚框的真实边界框的位置和类别标签。下面将介绍一个算法,它能够把最接近的真实边界框分配给锚框。

3.1. 将真实边界框分配给锚框

给定图像,假设锚框是A_1, A_2, \hdots, A_{n_a},真实边界框是B_1, B_2, \hdots, B_{n_b},其中n_a \geqslant n_b。我们定义一个矩阵X \in R^{n_a \times n_b},其中第i行、第j列的元素x_{ij},是锚框A,和真实边界框B_j,的IoU。该算法包含以下步骤。

(1)在矩阵X中找到最大的元素,并将它的行索引和列索引分别表示为i_1j_1。然后将真实边界框 B_{j_1},分配给锚框A_{i_1}。这很直观,因为A_{i_1}B_{j_1},是所有锚框中与真实边界框最相近的。在第一个分配完成后,丢弃矩阵中第行和第列中的所有元素。

(2)在矩阵X中找到剩余元素中的最大元素,并将它的行素引和列索引分别表示为i_2j_2。我们将真实边界框B_{j_2}分配给锚框A_{i_2},并丢弃矩阵中第i_2行和第j_2列中的所有元素。

(3)此时,矩阵X中两行和两列中的元素已被丢弃。我们继续,直到丢弃矩阵X中n_b列中的所有元素。此时已经为这n_b个锚框各自分配了一个真实边界框。

(4)只遍历剩余的n_a-n_b个锚框。例如,给定任何锚框A_i,在矩阵X的第i行中找到与A_i的IoU最大的真实边界框B_j,只有当此IoU大于预定义的阈值时,才将B_j分配给A_i

 下面用一个具体的例子来说明上述算法。首先,如图(a)所示,假设矩阵X中的最大值为x_{23},我们将真实边界框B_3分配给锚框A_2。丢弃矩阵第2行和第3列中的所有元素,在剩余元素(阴影区域)中找到最大的元素x_{71},将真实边界框B_1分配给锚框A_7。接下来,如图(b)所示,丢弃矩阵第7行和第1列中的所有元素,在剩余元素(阴影区域)中找到最大的元素x_{54},将真实边界框B_4分配给锚框A_5。最后,如图(c)所示,丢弃矩阵第5行和第4列中的所有元素,在剩余元素(阴影区域)中找到最大的元素x_{92},将真实边界框B_2分配给锚框A_9。之后,我们只需要遍历剩余的锚框 A1、A3、A4、A6、A8,然后根据阈值确定是否为它们分配真实边界框。

3.2. 标注类别和偏移量

现在我们可以为每个锚框标注类别和偏移量了。假设一个锚框A 被分配了一个真实边界框B。一方面,锚框A 的类别将被标注为与B相同。另一方面,锚框 A 的偏移量将根据B和A中心坐标的相对位置以及这两个框的相对大小进行标注。鉴于数据集内不同的框的位置和大小不同,我们可以对那些相对位置和大小应用变换,使其获得分布更均匀且易于拟合的偏移量。这里介绍一种常见的转换。给定框A和B,中心坐标分别为(x_a, y_a)(x_b, y_b),宽度分别为w_aw_b,高度分别为h_ah_b,可以将A的偏移量标注为

其中,常量的默认值为\mu_x=\mu_y=\mu_w=\mu_h=0\sigma_x=\sigma_y=0.1\sigma_w=\sigma_h=0.2

如果一个锚框没有被分配真实边界框,我们只需将锚框的类别标注为背景(background)。背景类别的锚框通常被称为负类锚框,其余的锚框被称为正类锚框。我们使用真实边界框(labels参数)实现以下multibox_target 函数,来标注锚框的类别和偏移量(anchors参数)。此函数将背景类别的索引设置为零,然后将新类别的整数索引递增一。

4. 使用非极大值抑制预测边界框

在预测时,我们先为图像生成多个锚框,再为这些锚框一一预测类别和偏移量。一个预测好的边界框则根据其中某个带有预测偏移量的锚框而生成。下面我们实现offset_inverse函数,该函数将锚框和偏移量预测作为输入,并应用逆偏移变换来返回预测的边界框坐标。

当有许多锚框时,可能会输出许多相似的具有明显重叠的预测边界框,它们都围绕着同一目标。为了简化输出,我们可以使用非极大值抑制(non-maximum suppression,NMS)合并属于同一目标的相似的预测边界框。 以下是非极大值抑制的工作原理。对于一个预测边界框B,目标检测模型会计算每个类别的预测概率。假设最大的预测概率为p,则该概率所对应的类别B即为预测的类别。具体来说,我们将p称为预测边界框B的置信度(confidence)。在同一张图像中,所有预测的非背景边界框都按置信度按降序排序,以生成列表L。然后我们通过以下步骤的操作排序列表L。(1)从工中选取置信度最高的预测边界框B作为基准,然后将所有与B_1的IoU超过预定阀值\epsilon的非基准预测边界框从L中移除。这时,L保留了置信度最高的预测边界框,移除了与其过于相似的其他预测边界框。简而言之,那些具有非极大值置信度的边界框被抑制了。

(2)从L中选取置信度次高的预测边界框B_2作为又一个基准,然后将所有与B_2的IoU大于\epsilon的非基准预测边界框从L中移除。

(3)重复上述过程,直到L中的所有预测边界框都曾被用作基准。此时,L中任意一对预 测边界框的IoU都小于阈值\epsilon,因此,没有一对边界框过于相似。

(4)输出列表L中的所有预测边界框。

参考文献

动手学深度学习之锚框-CSDN博客

42 锚框【动手学深度学习v2】_哔哩哔哩_bilibili

动手学深度学习PyTorch版

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

三小时零基础入门微信扫码点餐小程序 手把手带你开发一款云开发版点餐软件,店铺地图导航,外卖小程序,用户端和后厨端都有

从今天开始带领大家实现一款云开发版的点餐小程序 视频讲解:《云开发后台微信扫码点餐小程序cms网页管理后台》 技术选型 1,前端 微信小程序原生框架cssJavaScript 2,管理后台 云开发Cms内容管理系统web网页 3,数据后台 小…

【STL】list

目录 1. list的使用 1.1 list的构造 1.2 list iterator的使用 1.3 list capacity 1.4 list element access 1.5 list modifiers 1.6 list的迭代器失效 2. list的模拟实现 3. list与vector的对比 1. list的使用 1.1 list的构造 1.2 list iterator的使用 1. begin与end为…

MySQL前缀索引(3/16)

前缀索引 前缀索引:MySQL支持前缀索引,允许定义字符串的一部分作为索引。如果不指定前缀长度,索引将包含整个字符串。前缀索引可以节省空间,但可能会增加查询时的记录扫描次数(因为会查询到多个前缀相同的数据&#x…

4.9QT

完善对话框,点击登录对话框,如果账号和密码匹配,则弹出信息对话框,给出提示”登录成功“,提供一个Ok按钮,用户点击Ok后,关闭登录界面,跳转到其他界面 如果账号和密码不匹配&#xf…

Redis数据持久化 AOF RDB

Redis数据持久化 AOF RDB 1、单点 redis 的问题2、主从复制2.1 命令传播 3、Redis的持久化3.1 AOF写回策略重写机制后台重写 3.2 RDB(默认方式)RDB 方式:执行快照时,数据能被修改吗?RDB 方式总结 3.3 RDB 和 AOF 组合&…

【springboot开发】MVC和SSM

前言:关于MVC和SSM基本内容的梳理,以及两者之间的关系。 文章目录 1. 三层架构2. MVC3. SSM 1. 三层架构 三层架构是指: 视图层view(表现层): 用于显示数据和接收用户输入的数据,为用户提供一种交互式操作…

684. 冗余连接

684. 冗余连接 原题链接:完成情况:解题思路:参考代码:错误经验吸取 原题链接: 684. 冗余连接 https://leetcode.cn/problems/redundant-connection/description/ 完成情况: 解题思路: 这段…

[react优化] 避免组件或数据多次渲染/计算

代码如下 点击视图x➕1,导致视图更新, 视图更细导致a也重新大量计算!!这很浪费时间 function App() {const [x, setX] useState(3)const y x 2console.log(重新渲染, x, y);console.time(timer)let a 0for (let index 0; index < 1000000000; index) {a}console.timeE…

论文阅读AI工具链

文献检索 可以利用智谱清言来生成合适的文献检索式&#xff0c;并根据需要不断调整。 谷歌学术 在Google Scholar中进行检索时&#xff0c;您可以使用类似的逻辑来构建您的搜索式&#xff0c;但是语法会有所不同。Google Scholar的搜索框接受普通的文本搜索&#xff0c;但是…

面试-数据库基础以及MySql、ClickHost、Redis简介

面试-数据库基础以及MySql、ClickHost、Redis简介 0.数据完整性1.数据库并发控制1.1事物1.2 并发读写错误1.3 锁1.3.1 乐观锁与悲观锁1.3.2 共享锁和排他锁1.3.3 行锁与表锁1.3.4 意向锁 1.4 封锁协议与隔离级别1.5 MVCC1.5.1 概念1.5.2 当前读与快照读1.5.3 MVCC in InnoDB 2.…

基于 RisingWave 和 ScyllaDB 构建事件驱动应用

概览 在构建事件驱动应用时&#xff0c;人们面临着两大挑战&#xff1a;1&#xff09;低延迟处理大量数据&#xff1b;2&#xff09;实现流数据的实时摄取和转换。 结合 RisingWave 的流处理功能和 ScyllaDB 的高性能 NoSQL 数据库&#xff0c;可为构建事件驱动应用和数据管道…

数字乡村探索:引领农村未来发展新方向——科技创新赋能乡村现代化与农民生活品质提升之旅

目录 一、数字乡村的内涵与特点 二、数字乡村的探索进展 三、数字乡村面临的挑战与机遇 四、数字乡村的未来发展方向与路径 五、数字乡村助力农村产业升级 六、数字乡村促进城乡融合发展 七、数字乡村激发农民创新创业活力 八、数字乡村提升农民获得感和幸福感 九、展…

操作系统(第四周 第二堂)

目录 回顾 进程运行 进程的创建 进程的工作 举例 进程的删除 举例1&#xff08;走到return 0结束&#xff09; 举例2&#xff08;利用exit&#xff08;1&#xff09;结束&#xff09; 进程通信 共享内存 生产者算法 消费者算法 消息传递 定义 算法实现 总结 回顾…

Redis:发布和订阅

文章目录 一、介绍二、发布订阅命令 一、介绍 Redis的发布和订阅功能是一种消息通信模式&#xff0c;发送者&#xff08;pub&#xff09;发送消息&#xff0c;订阅者&#xff08;sub&#xff09;接收消息。这种功能使得消息发送者和接收者不需要直接建立连接&#xff0c;而是通…

《前端防坑》- JS基础 - 你觉得typeof nullValue === null 么?

问题 JS原始类型有6种Undefined, Null, Number, String, Boolean, Symbol共6种。 在对原始类型使用typeof进行判断时, typeof stringValue string typeof numberValue number 如果一个变量(nullValue)的值为null&#xff0c;那么typeof nullValue "?" const u …

商标没有去注册有哪些不好的影响!

有些商家咨询普推知产老杨&#xff0c;商标没有去注册有哪些不好的影响&#xff0c;其实对企业来说还有许多实际不利的影响&#xff0c;有时代价比注册一个商标要大很多。 想的商标名称没去注册商标&#xff0c;如果别人抢注拿下商标注册证&#xff0c;那就会涉及侵权&#xf…

树上启发式合并(dsu on tree)学习

声明&#xff1a;本文部分内容摘自OI Wiki网站。详情可自行查看学习。 洛谷 P9233 题目实际上是蓝桥杯 2023 年 A 组省赛的一道题。题干大致的意思是&#xff0c;给定一个含有 n n n 个结点&#xff0c;并且以 1 1 1 为根的一棵树&#xff0c;每个节点 i i i 都有一个颜色 …

springcloud第4季 springcloud-alibaba之nacos篇

一 nacos 1.1 nacos作用介绍 nacos是一个分布式的配置中心和注册发现中心。 nacos是 dynamic naming configuration service nacosconfigbus 实现动态刷新&#xff1b;nacosconsul 1.2 各个注册中心对比 注册中心CAP模型控制台管理社区活跃度EureakaAp支持低zkcp不支持中…

将Visio绘图导出PDF文件,使其自适应大小,并去掉导入Latex的边框显示

问题描述 将Visio绘图导成pdf文件&#xff0c;首先在Visio绘图如下&#xff1a; 如果直接导出或者另存为pdf文件&#xff0c;则会发现pdf文件是整个页面大小&#xff0c;而不是图片大小。而且在导入latex等排版工具现实时&#xff0c;会显示边框。 问题解决 1.调整Visio中的页…

【攻防世界】题目名称-文件包含

看到 include()&#xff0c;想到文件包含&#xff0c;用php伪协议。 知识点 看到 include()&#xff0c;require()&#xff0c;include_once()&#xff0c;require_once() &#xff0c;想到文件包含&#xff0c;用php伪协议 ?filenamephp://filter/readconvert.base64-encode/…