目标检测及锚框、IoU

news2024/12/16 8:05:42

1. 目标检测

物体检测(目标检测)是计算机视觉和数字图像处理的热门方向,意在判断一幅图像上是否存在感兴趣物体,并给出物体分类及位置等(What and Where)。本文主要进行物体检测研究背景、发展脉络、相关算法及评价指标的概述。

我们要识别中所有我们感兴趣的物体,并且找出每个物体的位置。

边缘框

边缘框是图片中物体的真实位置和范围,有两种表示方式,一种是边角坐标表示法,通过物体左上和右下两个角的坐标表示一个矩形框,还有一种是中心表示法,用物体的中心和宽高表示矩形框。

  • 一个边缘框可以通过4个数字定义
    • (左上x,左上y,右下x,右下y)
    • (左上x,左上y,宽,高)

在这里插入图片描述

目标检测数据集

  • 每行表示一个物体
    • 图片文件名、物体类别、边缘框
  • COCO数据集
    • 80物体,330K图片,1.5M物体

定义两种边缘框之间的转换函数

import torch
def box_corner_to_center(boxes):
    """ 从(左上,右下)转换到(中间,宽度,高度) """
    x1,y1,x2,y2 = boxes[:,0],boxes[:,1],boxes[:,2],boxes[:,3]
    cx = (x1+x2)/2
    cy = (y1+y2)/2
    w = x2-x1
    h = y2-y1
    boxes = torch.stack((cx,cy,w,h),dim=1)
    return boxes

def box_center_to_corner(boxes):
    """从(中间,宽度,高度)转换到(左上,右下)"""
    cx,cy,w,h = boxes[:,0],boxes[:,1],boxes[:,2],boxes[:,3]
    x1 = cx - 0.5 * w
    y1 = cy - 0.5 * h
    x2 = cx + 0.5 * w
    y2 = cy + 0.5 * h
    boxes = torch.stack((x1, y1, x2, y2), dim=1)
    return boxes

边缘框实现

from matplotlib import pyplot as plt

# 将边界框在图中画出
def bbox_to_rect(bbox,color):
    return plt.Rectangle(
        xy=(bbox[0], bbox[1]), width=bbox[2] - bbox[0], height=bbox[3] - bbox[1],
        fill=False, edgecolor=color, linewidth=2)

dog_bbox, cat_bbox = [60.0, 45.0, 378.0, 516.0], [400.0, 112.0, 655.0, 493.0]

fig = plt.figure(figsize=(5,8),dpi=100)
ax1 = fig.add_subplot(1,1,1)
image= plt.imread("code/images/catdog.jpg")
ax1.imshow(image)

ax1.axes.add_patch(bbox_to_rect(dog_bbox, 'blue'))
ax1.axes.add_patch(bbox_to_rect(cat_bbox, 'red'));
plt.show()

2. 锚框

在众多经典的目标检测模型中,均有先验框的说法,有的paper(如Faster RCNN)中称之为anchor(锚点),有的paper(如SSD)称之为prior bounding box(先验框),实际上是一个概念。

锚框的作用:

对于目标检测任务,有这样一种经典解决方案:遍历输入图像上所有可能的像素框,然后选出正确的目标框,并对位置和大小进行调整就可以完成目标检测任务。这些进行预测的像素框就叫锚框。这些锚框通常都是方形的。

同时,为了增加任务成功的几率,通常会在同一位置设置不同宽高比的锚框。锚框的设置形式有很多种。

  • 一类目标检测算法是基于锚框
    • 提出多个被称为锚框的区域(边缘框)
    • 预测每个锚框里是否含有关注的物体
    • 如果是,预测从这个锚框到真实边缘的偏移

在这里插入图片描述


3. IoU - 交并比

IoU用来计算两个框之间的相似度

在这里插入图片描述

  • 0表示无重叠,1表示重合

这是Jacquard指数的一个特殊情况

给定两个集合$\ A\ 和 和 \ B\ $
J ( A , B ) = ∣ A ∩ B ∣ ∣ A ∪ B ∣ J(A,B)=\frac{|A \cap B|}{|A \cup B|} J(A,B)=ABAB


4. 赋予锚框标号

  • 每个锚框是一个训练样本

  • 将每个锚框,要么标注成背景,要么关联上一个真实边缘框

  • 我们可能会生成大量的锚框

    • 这个导致大量的负类样本

在蓝色格子里面寻求IoU的最高值,选中,比如:

第一个最大值为$\ x_{23}\ $,那就用锚框2来预测边缘框3,去除锚框2边缘框3所对应的行列。

继续在剩下的格子里面寻找最大值,如$\ x_{71}\ $,那就用锚框7来预测边缘框1,去除锚框7边缘框1所对应的行列。

在这里插入图片描述

赋予标号的方式有很多种。


5. 使用非极大值抑制(NMS)输出

  • 每个锚框预测一个边缘框
  • NMS可以合并相似的预测
    • 选中的是非背景类的最大预测值
    • 去掉所有其它和它IoU值大于$\ \theta\ $的预测
    • 重复上诉过程直到所有预测要么被选中,要么被去掉

如:

在这里插入图片描述

首先选取狗类别的最大预测值,为0.9,然后去除该类别预测值小于0.9且IoU大于$\ \theta\ 的值。然后选取猫类别的最大预测值,为 0.9 ,然后去除该类别预测值小于 0.9 且 I o U 大于 的值。 然后选取猫类别的最大预测值,为0.9,然后去除该类别预测值小于0.9且IoU大于 的值。然后选取猫类别的最大预测值,为0.9,然后去除该类别预测值小于0.9IoU大于\ \theta\ $的值。
在这里插入图片描述

总结:

  • 一类目标检测算法基于锚框来预测
  • 首先生成大量锚框,并赋予标号,每个锚框作为一个样本进行训练
  • 在预测时,使用NMS来去掉冗余的预测

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

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

相关文章

MySQL的概念和sql语句

数据库的概念 数据库的概念:数据库是用来组织(各个数据之间是有关联,是按规则组织起来的),存储和管理(增,删,改,查)的仓库 数据库管理系统(DBMS&…

写保护设置——三、I2C EEPROM

三、I2C EEPROM I2C通讯的EEPROM只有硬保护,没有软保护。 以AT24C01A/02/04/16型EEPROM和AT24C02A/04A/08A/16A型EEPROM为例,管脚定义和写保护WP功能分别如下。 (1)AT24C01A/02/04/16型EEPROM 规格书: AT24C01A/02…

软件测试行情不好,我还是啃下了27K的offer

o “会代码吗?” o “会,Java、Python我都会一些!” o “有没有用代码开发过一些测试工具平台呢?” o “额。。。这个。。。没做过。。。” o “那你回去等消息吧” 软件测试行业发展到今天,测试人员会代码&#x…

Jtti:Apache服务的反向代理及负载均衡怎么配置

配置Apache服务的反向代理和负载均衡可以帮助您分散负载并提高应用程序的可用性和性能。下面是一些通用的步骤,以配置Apache反向代理和负载均衡。 1. 安装和配置Apache: 确保您已经安装了Apache HTTP服务器。通常,Apache的配置文件位于/etc…

城中村智能水电表改造,提升居民生活品质

随着我国城市化进程的加快,城中村成为了城市发展的焦点。然而,由于历史原因,城中村的水电设施普遍存在老化、破损等问题,给居民生活带来诸多不便。为了提升城中村居民的生活品质,智能水电表的推广和改造已成为当务之急…

css:button实现el-radio效果

先看最终效果&#xff1a; ​​​ 思路&#xff1a; 一、 首先准备好按钮内容&#xff1a;const a [one,two,three] 将按钮循环展示出来&#xff0c;并设置一些样式&#xff0c;将按钮背景透明&#xff1a; <button v-for"(item,index) in a" :key"in…

创造健康、造福一方,强强联合共筑新疆妇幼健康梦

改善优生优育全程服务&#xff0c;提供优质生育全程医疗保健服务&#xff0c;强化孕前优生健康检查、产前筛查以及不孕不育诊治服务等&#xff0c;是国家《“十四五”国民健康规划》的重要内容。为向全疆群众提供国内一流的妇幼保健诊疗服务&#xff0c;满足群众“生的出、生的…

【威联通】共享文件夹设置

1. 前期准备 下载 QNAPQsyncClient 然后安装此软件&#xff0c;安装的目标文件夹可以更换到其他盘&#xff0c;如下图所示 点击 确定 点击 完成 弹出框中选择 中国 然后点击 套用 点击 跳过 点击 完成 勾选方框&#xff0c;然后点击 确定 第一个框中输入需要同步的 NAS IP 地址…

MFA-Conformer

基于多尺度特征聚合Conformer说话人识别模型的创新与应用 论文&#xff1a;https://arxiv.org/abs/2203.15249 代码&#xff1a;GitHub - zyzisyz/mfa_conformer 收录于 INTERSPEECH 2022 1. 简介 本文由清华大学与腾讯科技&#xff08;北京&#xff09;有限公司、台湾大学…

Android intent的一些小使用

目录&#xff1a; 1. Test5.java2. activity_main5.xml3. Empty.java (这个是用来带参数打开Activity按钮用的)4. activity_empty.xml5. 总结 一些基本的问题就不进行说明了&#xff0c;直接上代码&#xff01;&#xff01;&#xff01; // 最后的隐形intent和带返回值没有解决…

2023最新短剧小程序搭建,短剧分销系统功能介绍

#短剧小程序# 基础功能最近新增功能 1.对接流量主变现 2.影视作品观看 3.支持创作者入驻 4.PC独立后台管理 5.壁纸&#xff0c;表情包下载 6.内容管理分类&#xff0c;专题分类 7.可单次付费或月会员 8.会员开通与支付功能 9.微信端使用 10.后台数据清晰明了 11.可定制搭建 新…

安装Redis使用make命令报异常

报错信息如下&#xff1a; 解决方案&#xff1a; 安装 gcc yum install gcc-c -y清空编译失败残留文件&#xff1a; make distclean使用 make 命令进行编译&#xff1a; make -j 2 PREFIX/usr/local/redis install

JAVA实现生活废品回收系统 开源

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、研究内容三、界面展示3.1 登录注册3.2 资源类型&资源品类模块3.3 回收机构模块3.4 资源求购/出售/交易单模块3.5 客服咨询模块 四、免责说明 一、摘要 1.1 项目介绍 生活废品回收系统是可持续发展的解决方案&#xff0c;旨在鼓…

缓解光纤激光切割机老化之如何保养光纤激光切割机的光学镜片

激光切割头具备极高的精密度和昂贵的价格&#xff0c;是光纤激光切割机最关键的运行部分之一。在日常的光纤激光切割机维修过程中频繁出现的关于切割头使用寿命的问题就是内部光学镜片的污染及损坏。 部分导致光纤激光切割机激光切割头光学镜片污染的原因主要包括&#xff1a;对…

安卓开发实例:随机数

点击按钮生成一个1-100之间的随机数 activity_random_number.xml <?xml version"1.0" encoding"utf-8"?> <androidx.constraintlayout.widget.ConstraintLayoutxmlns:android"http://schemas.android.com/apk/res/android"xmlns:a…

Java实现电子元器件管理系统

目录 一、摘要1.1 项目简介1.2 项目录屏 二、研究内容三、界面展示3.1 登录&注册&主页3.2 元器件单位模块3.3 元器件仓库模块3.4 元器件供应商模块3.5 元器件品类模块3.6 元器件明细模块3.7 元器件类型模块3.8 元器件采购模块3.9 元器件领用模块3.10 系统基础模块 四、…

javascript错误处理和调试工具

目录 错误处理 try-catch语句 throw语句 Promise错误处理 调试工具 控制台打印 断点调试器 错误堆栈追踪 结论 1. 错误处理 2. 调试工具 3. 最佳实践和注意事项 结论 错误处理 try-catch语句 try-catch语句是处理JavaScript错误的基本方法。它允许我们尝试执行可…

EdgeCloudSim官方Sample运行——Windows+IntelliJ IDEA+Matlab

简介 EdgeCloudSim是一个用于模拟边缘云计算环境的开源仿真工具。它基于CloudSim&#xff0c;一个广泛使用的云计算仿真工具&#xff0c;但专门设计用于模拟边缘计算场景。 下载地址&#xff1a;https://github.com/CagataySonmez/EdgeCloudSim 使用步骤 1.IntelliJ IDEA中…

Vuex 动态模块状态管理器

模块化思想 我们之前的博文已经讲述了Vuex怎么使用命名空间实现模块化状态管理。详情可以看&#xff1a; Vuex命名空间及如何获取根模块、兄弟模块状态管理器_AI3D_WebEngineer的博客-CSDN博客https://blog.csdn.net/weixin_42274805/article/details/133269196?ops_request_…