当前位置: 首页 > news >正文

【目标检测01】真实框、预测框、锚框和交并比IoU

文章目录

    • 1. 任务定义
    • 2. 基本概念
      • 2.1 边界框(bounding box)
      • 2.2 真实框、预测框和锚框
      • 2.3 交并比 (IoU)
      • 2.4 代码实现

1. 任务定义

目标检测的主要目的是让计算机可以自动识别图片或者视频帧中所有目标的类别,并在该目标周围绘制边界框,标示出每个目标的位置,如图所示。
在这里插入图片描述

2. 基本概念

2.1 边界框(bounding box)

检测任务需要同时预测物体的类别和位置,因此需要引入一些跟位置相关的概念。通常使用边界框(bounding box,bbox)来表示物体的位置,边界框是正好能包含物体的矩形框,如下图所示,图中3个人分别对应3个边界框。
在这里插入图片描述
一般有两种表示边界框位置的格式:

(1) x y x y xyxy xyxy,即 ( x 1 , y 1 , x 2 , y 2 ) (x1, y1, x2, y2) (x1,y1,x2,y2),其中 ( x 1 , y 1 ) (x1, y1) (x1,y1) 是矩形框左上角的坐标, ( x 2 , y 2 ) (x2, y2) (x2,y2) 是矩形框右下角的坐标。

(2) x y w h xywh xywh,即 ( x , y , w , h ) (x, y, w, h) (x,y,w,h), 其中 ( x , y ) (x, y) (x,y) 是矩形框的中心坐标, w w w 是 矩形框的宽度, h h h 是矩形框的高度。

因此,在阅读代码的时候,要注意使用的是哪一种格式的表示方式。

2.2 真实框、预测框和锚框

训练数据集的标签里给出目标物体边界框所对应的位置叫真实框

模型预测出目标物体边界框所对应的位置叫预测框

不同于真实框和预测框,锚框是人为预先设定好的矩形框,模型在这种锚框的基础上预测偏移量才能得到预测框

2.3 交并比 (IoU)

如何衡量预测框和真实框之间的关系呢?在检测任务中是使用交并比(Intersection of Union,IoU)作为衡量指标。这一概念来源于数学中的集合,用来描述两个集合A和B之间的关系,它等于两个集合的交集里面所包含的元素个数,除以它们的并集里面所包含的元素个数,具体计算公式如下:
I O U = A ∩ B A ∪ B IOU = \frac{A \cap B}{A \cup B} IOU=ABAB我们将用这个概念来描述两个框之间的重合度。两个框可以看成是两个像素的集合,它们的交并比等于两个框重合部分的面积除以它们合并起来的面积。下图“交集”中青色区域是两个框的重合面积,图“并集”中蓝色区域是两个框的相并面积。用这两个面积相除即可得到它们之间的交并比。
在这里插入图片描述
假设两个矩形框A和B的位置分别为:
A : [ x a 1 , y a 1 , x a 2 , y a 2 ] A : [ x b 1 , y b 1 , x b 2 , y b 2 ] A: [x_{a1}, y_{a1}, x_{a2}, y_{a2}] \\ A: [x_{b1}, y_{b1}, x_{b2}, y_{b2}] A:[xa1,ya1,xa2,ya2]A:[xb1,yb1,xb2,yb2]它们之间的位置关系如图所示:
在这里插入图片描述
A和B相交部分左上角坐标为:
x 1 = m a x ( x a 1 , x b 1 ) y 1 = m a x ( y a 1 , y b 1 ) x1 = max(x_{a1}, x_{b1})\\ y1 = max(y_{a1}, y_{b1}) x1=max(xa1,xb1)y1=max(ya1,yb1) 相交部分右下角坐标为:
x 2 = m i n ( x a 2 , x b 2 ) y 2 = m i n ( y a 2 , y b 2 ) x2 = min(x_{a2}, x_{b2})\\ y2 = min(y_{a2}, y_{b2}) x2=min(xa2,xb2)y2=min(ya2,yb2)相交部分面积为:
i n t e r s e c t i o n = m a x ( x 2 − x 1 + 1.0 , 0 ) ⋅ m a x ( y 2 − y 1 + 1.0 , 0 ) intersection = max(x_2 - x_1 + 1.0, 0) \cdot max(y_2 - y_1 + 1.0, 0) intersection=max(x2x1+1.0,0)max(y2y1+1.0,0)分别计算A和B的面积:
S A = ( x a 2 − x a 1 + 1.0 ) ⋅ ( y a 2 − y a 1 + 1.0 ) S B = ( x b 2 − x b 1 + 1.0 ) ⋅ ( y b 2 − y b 1 + 1.0 ) S_A = (x_{a2} - x_{a1} + 1.0) \cdot (y_{a2} - y_{a1} + 1.0) \\ S_B = (x_{b2} - x_{b1} + 1.0) \cdot (y_{b2} - y_{b1} + 1.0) SA=(xa2xa1+1.0)(ya2ya1+1.0)SB=(xb2xb1+1.0)(yb2yb1+1.0)计算相并部分:
u n i o n = S A + S B − i n t e r s e c t i o n union = S_A + S_B - intersection union=SA+SBintersection 计算交并比:
I o U = i n t e r s e c t i o n u n i o n IoU = \frac{intersection}{union} IoU=unionintersection

2.4 代码实现

(1)矩形框坐标形式为 x y x y xyxy xyxy 形式时:

def box_iou_xyxy(box1, box2):# 获取box1左上角和右下角的坐标x1min, y1min, x1max, y1max = box1[0], box1[1], box1[2], box1[3]# 计算box1的面积s1 = (y1max - y1min + 1.) * (x1max - x1min + 1.)# 获取box2左上角和右下角的坐标x2min, y2min, x2max, y2max = box2[0], box2[1], box2[2], box2[3]# 计算box2的面积s2 = (y2max - y2min + 1.) * (x2max - x2min + 1.)# 计算相交矩形框的坐标xmin = np.maximum(x1min, x2min)ymin = np.maximum(y1min, y2min)xmax = np.minimum(x1max, x2max)ymax = np.minimum(y1max, y2max)# 计算相交矩形行的高度、宽度、面积inter_h = np.maximum(ymax - ymin + 1., 0.)inter_w = np.maximum(xmax - xmin + 1., 0.)intersection = inter_h * inter_w# 计算相并面积union = s1 + s2 - intersection# 计算交并比iou = intersection / unionreturn iou

1)矩形框坐标形式为 x y w h xywh xywh 形式时:

def box_iou_xywh(box1, box2):# 获取box1左上角和右下角的坐标x1min, y1min = box1[0] - box1[2]/2.0, box1[1] - box1[3]/2.0x1max, y1max = box1[0] + box1[2]/2.0, box1[1] + box1[3]/2.0# 计算box1的面积s1 = box1[2] * box1[3]# 获取box2左上角和右下角的坐标x2min, y2min = box2[0] - box2[2]/2.0, box2[1] - box2[3]/2.0x2max, y2max = box2[0] + box2[2]/2.0, box2[1] + box2[3]/2.0# 计算box2的面积s2 = box2[2] * box2[3]xmin = np.maximum(x1min, x2min)ymin = np.maximum(y1min, y2min)xmax = np.minimum(x1max, x2max)ymax = np.minimum(y1max, y2max)inter_h = np.maximum(ymax - ymin, 0.)inter_w = np.maximum(xmax - xmin, 0.)intersection = inter_h * inter_wunion = s1 + s2 - intersectioniou = intersection / unionreturn iou

相关文章:

【目标检测01】真实框、预测框、锚框和交并比IoU

文章目录 1. 任务定义2. 基本概念2.1 边界框(bounding box)2.2 真实框、预测框和锚框2.3 交并比 (IoU)2.4 代码实现 1. 任务定义 目标检测的主要目的是让计算机可以自动识别图片或者视频帧中所有目标的类别,并在该目标周围绘制边界框&#x…...

青少年编程能力等级测评CPA C++五级试卷(2)

青少年编程能力等级测评CPA C++五级试卷(2) 一、单项选择题(共15题,每题3分,共45分) CP5_2_1.下列有关类的重用方法的叙述中,不正确的是( )。 A.类的继承可以实现类的重用 B.类的组合可以实现类的重用 C.类的封装可以实现类的重用 D.类的继承和类的组合都可…...

SATA数据线

SATA 数据线(Serial ATA 数据线)是一种用于连接计算机主板与存储设备(如硬盘、固态硬盘和光驱)的线缆。它的主要作用是传输数据,允许计算机与这些设备之间进行高效的数据交换。 主要作用 数据传输:SATA 数…...

《云原生安全攻防》-- K8s攻击案例:权限维持的攻击手法

在本节课程中,我们将一起深入了解K8s权限维持的攻击手法,通过研究这些攻击手法的技术细节,来更好地认识K8s权限维持所带来的安全风险。 在这个课程中,我们将学习以下内容: K8s权限维持:简单介绍K8s权限维持…...

回溯算法-Java【力扣】【算法学习day.14】

前言 ###我做这类文档一个重要的目的还是给正在学习的大家提供方向(例如想要掌握基础用法,该刷哪些题?)我的解析也不会做的非常详细,只会提供思路和一些关键点,力扣上的大佬们的题解质量是非常非常高滴&am…...

从本地到云端:跨用户请求问题的完美解决方案

对于某些单个请求或响应中含有多个用户信息的服务,SDK提供了一套基于统一的UCS拆分和聚合的解决方案供开发者使用。 请求拆分 对于跨用户服务的请求,我们提供了两个处理方案: 【1】根据用户信息拆分请求: 场景:请求内…...

leetcode day4 409+5

409 最长回文串 给定一个包含大写字母和小写字母的字符串 s ,返回 通过这些字母构造成的 最长的 回文串 的长度。 在构造过程中,请注意 区分大小写 。比如 "Aa" 不能当做一个回文字符串。 示例 1: 输入:s "abccccdd" 输出:7 解…...

英语语法学习框架(考研)

一、简单句 英语都是由简单句构成,简单句共有五种基本句型:①主谓;②主谓宾;③主谓宾宾补;④主谓宾间宾(间接宾语);⑤主系表; 其中谓语是句子最重要的部分,谓…...

基于neo4j的学术论文关系管理系统

正在为毕业设计头疼?又或者在学术研究中总是找不到像样的工具来管理浩瀚的文献资料?今天给大家介绍一款超实用的工具——基于Neo4j的学术论文关系管理系统,让你轻松搞定学术文献的管理与展示!🎉 系统的核心是什么呢&a…...

C#中的委托、匿名方法、Lambda、Action和Func

委托 委托概述 委托是存有对某个方法的引用的一种引用类型变量。定义方法的类型,可以把一个方法当作另一方法的参数。所有的委托(Delegate)都派生自 System.Delegate 类。委托声明决定了可由该委托引用的方法。 # 声明委托类型 委托类型声…...

IDEA关联Tomcat——最新版本IDEA 2024

1.链接Tomcat到IDEA上 添加Tomcat到IDEA上有两种方式: 第一种: (1)首先,来到欢迎界面,找到左侧的Customize选项 (2)然后找到Build、Execution、Deployment选项 (3&am…...

【如何获取股票数据18】Python、Java等多种主流语言实例演示获取股票行情api接口之沪深A股解禁限售数据获取实例演示及接口API说明文档

最近一两年内,股票量化分析逐渐成为热门话题。而从事这一领域工作的第一步,就是获取全面且准确的股票数据。因为无论是实时交易数据、历史交易记录、财务数据还是基本面信息,这些数据都是我们进行量化分析时不可或缺的宝贵资源。我们的主要任…...

NVR小程序接入平台/设备EasyNVR多品牌NVR管理工具/设备的多维拓展与灵活应用

在数字化安防时代,NVR批量管理软件/平台EasyNVR作为一种先进的视频监控系统设备,正逐步成为各个领域监控解决方案的首选。NVR批量管理软件/平台EasyNVR作为一款基于端-边-云一体化架构的国标视频融合云平台,凭借其部署简单轻量、功能多样、兼…...

GPT-4o 和 GPT-4 Turbo 模型之间的对比

GPT-4o 和 GPT-4 Turbo 之间的对比 备注 要弄 AI ,不同模型之间的对比就比较重要。 GPT-4o 是 GPT-4 Turbo 的升级版本,能够提供比 GPT-4 Turbo 更多的内容和信息,但成功相对来说更高一些。 第三方引用 在 2024 年 5 月 13 日&#xff0…...

gin入门教程(10):实现jwt认证

使用 github.com/golang-jwt/jwt 实现 JWT(JSON Web Token)可以有效地进行用户身份验证,这个功能往往在接口前后端分离的应用中经常用到。以下是一个基本的示例,演示如何在 Gin 框架中实现 JWT 认证。 目录结构 /hello-gin │ ├── cmd/ …...

Python 基础语法 - 数据类型

顾名思义,计算机就是用来做数学计算的机器,因此,计算机程序理所当然的可以处理各种数值。但是,计算机能处理的远远不止数值,还可以处理文本,图形,音频,视频,网页等各种各…...

自托管无代码数据库Undb

什么是 Undb ? Undb 是一个无代码平台,也可以作为后端即服务 (BaaS)。它基于 SQLite,可以使用 Bun 打包成二进制文件用于后端服务。此外,它可以通过 Docker 部署为服务,提供表管理的 UI。 软件特点: ⚡ 无…...

正则的正向前瞻断言和负向前瞻断言

正则的正向前瞻断言和负向前瞻断言 一. 正向前瞻断言二. 负向前瞻断言三. 总结 这是我在这个网站整理的笔记,有错误的地方请指出,关注我,接下来还会持续更新。 作者:神的孩子都在歌唱 正向前瞻断言和负向前瞻断言是正则表达式中用于检查后续字…...

大厂物联网(IoT)高频面试题及参考答案

目录 解释物联网 (IoT) 的基本概念 物联网的主要组成部分有哪些? 描述物联网的基本架构。 IoT 与传统网络有什么区别? 物联网中常用的传感器类型有哪些? 描述物联网的三个主要层次。 简述物联网中数据安全的重要性 描述物联网安全的主要威胁 解释端到端加密在 IoT 中…...

react hook

react hook 最近实习有点忙,所以学习记录没来得及写。 HOC higher order components(HOC) 高阶组件是一个组件,接受一个参数作为组件,返回值也是一个组件的函数。高阶组件作用域强化组件,服用逻辑,提升渲染性能等。…...

Jetpack架构组件_LiveData组件

1.LiveData初识 LiveData:ViewModel管理要展示的数据(VM层类似于原MVP中的P层),处理业务逻辑,比如调用服务器的登陆接口业务。通过LiveData观察者模式,只要数据的值发生了改变,就会自动通知VIEW层&#xf…...

Etcd 可观测最佳实践

简介 Etcd 是一个高可用的分布式键值存储系统,它提供了一个可靠的、强一致性的存储服务,用于配置管理和服务发现。它最初由 CoreOS 开发,现在由 Cloud Native Computing Foundation (CNCF) 维护。Etcd 使用 Raft 算法来实现数据的一致性&…...

钉钉录播抓取视频

爬取钉钉视频 免责声明 此脚本仅供学习参考,切勿违法使用下载他人资源进行售卖,本人不但任何责任! 仓库地址: GItee 源码仓库 执行顺序 poxyM3u8开启代理getM3u8url用于获取m3u8文件userAgent随机请求头downVideo|downVideoThreadTqdm单线程下载和…...

centos下面的jdk17的安装配置

文章目录 1.基本指令回顾2.jdk17的安装到这个centos上面2.1首先切换到这个root下面去2.2查看系统jdk版本2.3首先到官网找到进行下载2.4安装包的上传2.5jdk17的安装包的解压过程2.6配置环境变量2.7是否设置成功,查看版本 1.基本指令回顾 ls:list也就是列出来这个目录…...

【操作系统】——调度

🌹😊🌹博客主页:【Hello_shuoCSDN博客】 ✨操作系统详见 【操作系统专项】 ✨C语言知识详见:【C语言专项】 目录 处理机调度的概念、层次 进程调度的时机、切换与过程、方式 调度器和闲逛进程 处理机调度的概念、层…...

基于Aspose依赖添加自定义文本水印——Word、Pdf、Cell

基于Aspose依赖添加自定义文本水印——Word、Pdf、Cell 所需依赖Word水印Pdf水印——&#xff08; 注意 pdf 存在找不到字体的问题&#xff09;Excel水印 所需依赖 <dependency><groupId>com.aspose</groupId><artifactId>aspose-pdf</artifactId&g…...

【C++】—掌握STL string类:字符串操作的得力助手

#1024程序员节&#xff5c;征文# 文章目录 繁星点点映夜空&#xff0c;晨曦微露照前程1.string的基本概念2.标准库中的string类2.1 string类2.2 auto和范围for2.3 string类常用的接口2.4 string类对象的容量操作2.5 string类对象的访问及遍历操作2.6 string类对象的修改操作2…...

【Java笔记】第十四章:异常

一、概念【理解即可】 1. 异常&#xff1a;程序运行过程中&#xff0c;出现的非正常情况。 2. 异常的处理&#xff1a;当异常出现时&#xff0c;执行一段预先准备好的代码。 3. 异常的处理的必要性&#xff1a;减少用户的损失、同时减小给用户带来麻烦&#xff0c;也可以对用…...

Python游戏开发超详细(基础理论知识篇)

一、引导&#xff1a; Python游戏开发是一个非常有趣且富有挑战性的领域。通过Python&#xff0c;你可以利用其强大的库和框架来创建各种类型的游戏&#xff0c;从简单的2D游戏到复杂的3D游戏。以下是第一课的基础理论知识&#xff0c;帮助你入门Python游戏开发。 二、理论知识…...

Python开发日记 -- 实现bin文件的签名

目录 1.数据的不同表现形式签名值不一样&#xff1f; 2.Binascii模块简介 3.问题定位 4.问题总结 1.数据的不同表现形式签名值不一样&#xff1f; Happy Muscle试运行了一段时间&#xff0c;组内同事再一次提出了新的需求&#xff1a;需要对bin文件签名。 PS&#xff1a;服…...

怎样开通app软件/上海seo公司哪个靠谱

本文是转载文章:原文网址http://blog.163.com/guaiguai_family/blog/static/20078414520141023103953705/ 这两天了解了一些 parallel file system 比如 PVFS2/OrangeFS, Lustre&#xff0c;它们都声称支持 InfiniBand 网络连接技术&#xff0c;好奇之下查了下&#xff0c;发…...

免费云主机网址/怎么seo快速排名

合并分支代码&#xff0c;简单操作&#xff1a; 1、切换到master主干代码 2、到git repositories 视图&#xff0c;点击需要合并的分支&#xff0c;例如v1.1.9 点击merge 进行合并 3、然后push to Upstream 进行提交 还有回退上个版本代码Reset 转载于:https://www.cnblogs.com…...

做软装找产品上哪个网站/知名网络推广

maven项目 update clean install 重启 服务消费者转载于:https://www.cnblogs.com/qingfengzhuimeng/p/7281885.html...

什么网站可以做私房菜外卖/网络优化的工作内容

目录 简略说明 详细说明 Yum apt-get dnf Homebrew 区别 YUM和DNF的区别 Yum和apt-get的区别 Yum和rpm的区别 常用命令 yum/dnf 常用命令 rpm命令 linux命令好玩的命令 简略说明 apt-get 是德班系&#xff08;Debian、Ubuntu等&#xff09;的软件管理命令 yum 是红帽系&#xf…...

网站建设 青海/seo外包公司专家

其实可以用存储过程&#xff0c;但想用另一种方法实现&#xff1a; 首先创建一个辅助表&#xff0c;可以设置CREATE TABLE t4 (id int(11) NOT NULL AUTO_INCREMENT,num int(11) DEFAULT NULL,PRIMARY KEY (id) )insert into t4(num) select id from xxx limit 31;(偷懒插入31条…...

门户网站建设周期/汕头网站建设方案维护

等待中的任务编辑 有一些任务只能由主节点去处理&#xff0c;比如创建一个新的 索引或者在集群中移动分片。由于一个集群中只能有一个主节点&#xff0c;所以只有这一节点可以处理集群级别的元数据变动。在 99.9999% 的时间里&#xff0c;这不会有什么问题。元数据变动的队列基…...