目标检测:IOU

IOU(Intersection over Union)交并比:

它计算的是“预测的边框”和“真实的边框”的交叠率,即它们的交集和并集的比值。这个比值用于衡量预测边框与真实边框的重叠程度,从而评估目标检测的准确性。

在目标检测任务中,通常使用bounding box与ground truth之间的IoU值大小来判断预测结果的好坏。一般情况下,认为IoU>0.5就是一个不错的预测结果。

两个box区域的交集除以并集

总的来说:IOU是一个在目标检测中非常重要的评估指标,用于量化预测边框与真实边框的匹配程度。

常规重叠框

代码示例

import cv2
import numpy as npimg = np.zeros((300,300,3),dtype=np.uint8)
img[:,:,:] = 255# 下方红色框
x1,y1,x2,y2 = 20,20,180,180
# 下方蓝色框
x3,y3,x4,y4 = 90,90,280,280cv2.rectangle(img, (x1, y1), (x2, y2), (0,0,255), 2)
cv2.rectangle(img, (x3, y3), (x4, y4), (255,0,0), 2)cv2.imshow('img',img)
cv2.waitKey(10000)
cv2.destroyAllWindows()

当前 一个框 由 左上角 + 右下角 共 2 个坐标点 组成

如果 2 个 框 有交集 ,如下

交集 也是一个 矩形框,由 左上角 + 右下角 2个 坐标点 组成

已知 红框 和 篮框 的 左上角 + 右下角 如何 计算 交集 绿色框 的 左上角 + 右下角 坐标

计算方法

绿色区域 (交集) 左上角 与 右下角

左上角:取 红框 和 篮框 左上角点的 横坐标 (x) 与 纵坐标 (y) 最大值

# 红框
a = [x1, y1, x2, y2]
# 蓝框
b = [x3, y3, x4, y4]c = np.array([a,b])
l_x1,l_y1 = np.max(c[:,0:2],axis=0)

右下角:取 红框 和 篮框 右下角点的 横坐标 (x) 与 纵坐标 (y) 最小值

# 红框
a = [x1, y1, x2, y2]
# 蓝框
b = [x3, y3, x4, y4]c = np.array([a,b])
r_x2,r_y2 = np.min(c[:,2:],axis=0)

 代码实现

import cv2
import numpy as npimg = np.zeros((300,300,3),dtype=np.uint8)
img[:,:,:] = 255def inter(a,b):c = np.array([a,b])l_x1,l_y1 = np.max(c[:,0:2],axis=0)r_x2,r_y2 = np.min(c[:,2:],axis=0)return l_x1,l_y1,r_x2,r_y2x1,y1,x2,y2 = 20,20,180,180
x3,y3,x4,y4 = 90,90,280,280up_x,up_y,bo_x,bo_y = inter([x1,y1,x2,y2],[x3,y3,x4,y4])
cv2.rectangle(img, (up_x, up_y), (bo_x, bo_y), (0,255,0), -1)
cv2.rectangle(img, (x1, y1), (x2, y2), (0,0,255), 2)
cv2.rectangle(img, (x3, y3), (x4, y4), (255,0,0), 2)cv2.imshow('img',img)
cv2.waitKey(10000)
cv2.destroyAllWindows()
cv2.imwrite('iou.jpg',img)

方法验证

实验不同的重叠形式

x1,y1,x2,y2 = 20,20,180,180
x3,y3,x4,y4 = 90,10,280,280

 

x1,y1,x2,y2 = 20,20,180,180
x3,y3,x4,y4 = 40,10,150,200

 

x1,y1,x2,y2 = 20,20,180,180
x3,y3,x4,y4 = 40,10,280,150

 

 

x1,y1,x2,y2 = 20,20,180,180
x3,y3,x4,y4 = 40,50,150,200

x1,y1,x2,y2 = 20,20,180,180
x3,y3,x4,y4 = 40,10,150,150

 

x1,y1,x2,y2 = 20,20,180,180
x3,y3,x4,y4 = 40,50,150,150

 

x1,y1,x2,y2 = 20,20,180,180
x3,y3,x4,y4 = 40,50,200,150

计算IoU

先计算 重叠 区域面积,再计算 红/蓝 框的 并集,最后 计算 占比

 

代码实现

import cv2
import numpy as npimg = np.zeros((300,300,3),dtype=np.uint8)
img[:,:,:] = 255def inter(a,b):c = np.array([a,b])l_x1,l_y1 = np.max(c[:,0:2],axis=0)r_x2,r_y2 = np.min(c[:,2:],axis=0)return l_x1,l_y1,r_x2,r_y2x1,y1,x2,y2 = 20,20,180,180
x3,y3,x4,y4 = 40,50,200,150up_x,up_y,bo_x,bo_y = inter([x1,y1,x2,y2],[x3,y3,x4,y4])# 红框 / 蓝框 / 重叠-绿色区域 面积
S_red = (x2-x1) * (y2-y1)
S_blue = (x4-x3) * (y4-y3)
S_green = (bo_x-up_x) * (bo_y-up_y)
print('面积-红框:',S_red,', 面积-蓝框:',S_blue,', 面积-绿色:',S_green)# 红框 与 蓝框 的 并集
S_union = S_red + S_blue - S_green
print('红框与蓝框的并集-面积:',S_union)iou = S_green / S_union
print('交集 / 并集: ',iou)cv2.rectangle(img, (up_x, up_y), (bo_x, bo_y), (0,255,0), -1)
cv2.rectangle(img, (x1, y1), (x2, y2), (0,0,255), 2)
cv2.rectangle(img, (x3, y3), (x4, y4), (255,0,0), 2)cv2.imshow('img',img)
cv2.waitKey(10000)
cv2.destroyAllWindows()
cv2.imwrite('iou.jpg',img)

 结果

面积-红框: 25600 , 面积-蓝框: 16000 , 面积-绿色: 14000
红框与蓝框的并集-面积: 27600
交集 / 并集:  0.5072463768115942
无重叠情况

 

import cv2
import numpy as npimg = np.zeros((300,300,3),dtype=np.uint8)
img[:,:,:] = 255def inter(a,b):c = np.array([a,b])l_x1,l_y1 = np.max(c[:,0:2],axis=0)r_x2,r_y2 = np.min(c[:,2:],axis=0)return l_x1,l_y1,r_x2,r_y2x1,y1,x2,y2 = 20,20,120,120
x3,y3,x4,y4 = 140,150,260,240up_x,up_y,bo_x,bo_y = inter([x1,y1,x2,y2],[x3,y3,x4,y4])print(up_x,up_y,bo_x,bo_y)cv2.rectangle(img, (x1, y1), (x2, y2), (0,0,255), 2)
cv2.rectangle(img, (x3, y3), (x4, y4), (255,0,0), 2)cv2.imshow('img',img)
cv2.waitKey(10000)
cv2.destroyAllWindows()

结果

140 150 120 120

左上角:(140, 150)

右下角:(120, 120)

按照上面计算方式,在 2框 无交集的情况的下,也能 算出 重叠区域的 坐标

无交集 计算的 坐标特点:左上角 > 右下角

代码实现

import cv2
import numpy as npimg = np.zeros((300,300,3),dtype=np.uint8)
img[:,:,:] = 255def inter(a,b):c = np.array([a,b])l_x1,l_y1 = np.max(c[:,0:2],axis=0)r_x2,r_y2 = np.min(c[:,2:],axis=0)return l_x1,l_y1,r_x2,r_y2x1,y1,x2,y2 = 20,20,120,120
x3,y3,x4,y4 = 140,150,260,240
# x1,y1,x2,y2 = 20,20,180,180
# x3,y3,x4,y4 = 40,50,200,150up_x,up_y,bo_x,bo_y = inter([x1,y1,x2,y2],[x3,y3,x4,y4])print(up_x,up_y,bo_x,bo_y)# 红框 / 蓝框 / 重叠-绿色区域 面积
S_red = (x2-x1) * (y2-y1)
S_blue = (x4-x3) * (y4-y3)if bo_x > up_x and bo_y > up_y: S_green = (bo_x-up_x) * (bo_y-up_y)
else: S_green = 0print('面积-红框:',S_red,', 面积-蓝框:',S_blue,', 面积-绿色:',S_green)# 红框 与 蓝框 的 并集
S_union = S_red + S_blue - S_green
print('红框与蓝框的并集-面积:',S_union)iou = S_green / S_union
print('交集 / 并集: ',iou)if bo_x > up_x and bo_y > up_y: cv2.rectangle(img, (up_x, up_y), (bo_x, bo_y), (0,255,0), -1)cv2.rectangle(img, (x1, y1), (x2, y2), (0,0,255), 2)
cv2.rectangle(img, (x3, y3), (x4, y4), (255,0,0), 2)cv2.imshow('img',img)
cv2.waitKey(10000)
cv2.destroyAllWindows()
cv2.imwrite('iou.jpg',img)

结果

140 150 120 120
面积-红框: 10000 , 面积-蓝框: 10800 , 面积-绿色: 0
红框与蓝框的并集-面积: 20800
交集 / 并集:  0.0

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

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

相关文章

嵌入式操作系统_2.嵌入式操作系统的一般架构

1.嵌入式操作系统的概念 嵌入式操作系统通常由硬件驱动程序、调式代理、操作系统内核、文件系统和可配置组件等功能组成,并为应用软件提供标准的API(Application Programming Interface)接口服务。 2.一般嵌入式操作系统的体系结构 从嵌入…

深度神经网络——什么是NLP(自然语言处理)?

自然语言处理(NLP) 是对使计算机能够处理、分析、解释和推理人类语言的技术和工具的研究和应用。 NLP 是一个跨学科领域,它结合了语言学和计算机科学等领域已建立的技术。 这些技术与人工智能结合使用来创建聊天机器人和数字助理,…

海成蜘蛛池广州官网下载

baidu搜索:如何联系八爪鱼SEO? baidu搜索:如何联系八爪鱼SEO? baidu搜索:如何联系八爪鱼SEO? 当我们给自己的泛目录设置仅蜘蛛抓取生成缓存的时候,我们需要模拟蜘蛛抓取测试我们的设置是否成功。绝大部分时候我们都使用网页蜘蛛模拟抓取测…

2024.618到底买什么数码值得?带你一起来看看!

在618期间,这些新品可能会有特别的优惠活动,包括但不限于折扣、满减、赠品等。因此,如果你正在寻找一款适合自己的数码产品,不妨关注各大电商平台的618促销活动,把握机会,以优惠的价格购买到心仪的产品。 …

文件操作(1)(C语言版)

前言: 为什么要学习文件操作: 1、如果大家写过一些代码,当运行结束的时候,这些运行结果将不复存在,除非,再次运行时这些结果才能展现在屏幕上面,就比如之前写过的通讯录。 现实中的通讯录可以保…

【数据结构初阶】--- 堆

文章目录 一、什么是堆?树二叉树完全二叉树堆的分类堆的实现方法 二、堆的操作堆的定义初始化插入数据(包含向上调整详细讲解)向上调整删除堆顶元素(包含向下调整详细讲解)向下调整返回堆顶元素判断堆是否为空销毁 三、…

一个开源的快速准确地将 PDF 转换为 markdown工具

大家好,今天给大家分享的是一个开源的快速准确地将 PDF 转换为 markdown工具。 Marker是一款功能强大的PDF转换工具,它能够将PDF文件快速、准确地转换为Markdown格式。这款工具特别适合处理书籍和科学论文,支持所有语言的转换,并…

2024年最佳插电式混合动力电动汽车

对电动汽车充满好奇和环保意识的司机们还没有准备好跨入纯电动汽车,他们可以找到一个折衷方案,即插电式混合动力车。 在过去的16年里,我一直在把握汽车行业的脉搏。试驾数百辆汽车、电动汽车、插电式混合动力车,跟踪汽车行业的新闻…

DAY04 HTMLCSS

文章目录 一 表单(1) 数字控件(2) 颜色控件(3) 日期控件(4) 月份控件(5) 星期控件(6) 搜索控件(7) 范围控件 二 浮动框架三 结构化标签四 CSS1 CSS概述2 CSS的编写位置1. inline style 行内样式2. inner style 内部样式3. outer style 外部样式4. 小结 3 CSS选择器1. 通用选择器…

一个示例学习C语言到汇编层面

给出以下代码 #include<stdio.h> int main() {int x 0, y 0, z 0;while (1) {x 0;y 1;do {printf("%d\n", x);z x y;x y;y z;} while (x < 255);}return 0; }我们把这个程序编写成32位程序&#xff0c;然后我们放入IDA中进行分析 .text:0080187…

Mysql开启查询日志(General Log)

1、增加配置&#xff1a; /etc/my.cnf [mysqld] general_log1 general_log_file/var/log/mysql/query.log 2、增加目录和文件&#xff0c;并且授权 可以使用以下命令修改权限&#xff1a; 创建目录&#xff1a;sudo mkdir -p /var/log/mysql 更改目录所有者&#xff1a;sudo…

【日常记录】【插件】prisma 链接MySQL数据库 简单入门

文章目录 1、新建项目&#xff0c;使用prisma链接数据库1.1、先创建一个项目1.2、初始化 npm 配置文件及下载依赖1.3、初始化TS配置文件1.4、初始化 prisma1.5、更改 prisma/schema.prisma1.6 更改.env 文件1.7 编写 prisma/schema.prisma1.8 将编写的 prisma/schema.prisma 映…

OSPF被动接口配置(华为)

#交换设备 OSPF被动接口配置 一、基本概念 OSPF被动接口&#xff0c;也称为抑制接口&#xff0c;即将路由器某一接口配置为被动接口后&#xff0c;该接口不会再接受和发送OSPF报文 二、使用场景 在路由器与终端相近或者直接相连的一侧配置被动接口 因为OSPF会定期发送报文…

ensp防火墙web密码重置(前提通过console可以登录)

客户电脑是命令行没有用户名直接输入密码就可以登录了&#xff0c;但是web端不知道admin的密码 前两天遇到运维单位的一台防火墙web网页不知道用户名密码&#xff0c;默认的登录不了&#xff0c;但是通过console可以登录命令行&#xff0c;今天就记录下如何通过命令行修改web页…

海康视觉算法平台VisionMaster 4.3.0 C# 二次开发01 加载方案并获取结果

前言 第一次使用海康视觉算法平台VisionMaster 4.3.0&#xff0c;项目中要使用这个平台进行视觉处理并获取结果。 运行效果 开发环境 C#&#xff0c; WPF&#xff0c; vs2022, 海康视觉算法平台VisionMaster 4.3.0 基本概念 上图这些.sol为后缀的是vm的方案文件。 打开方案文…

鸿蒙开发过程中出现很多.js或者.js.map怎么办

学习HarmonyOS应用开发已有几天了, 今天在打开DevEco Studio正常开发的过程中, 预览、修改、刷新, 然后就出现了大量的.js以及.js.map文件 这个虽然不影响开发&#xff0c;但是影响体验 问题原因&#xff1a; 编译/预览过程产生的缓存文件, 已反馈给鸿蒙的IDE团队 解决办法…

树莓派pico入坑笔记,快捷键键盘制作

使用usb_hid功能制作快捷键小键盘&#xff0c;定义了6个键&#xff0c;分别是 ctrlz ctrlv ctrlc ctrla ctrlw ctrln 对应引脚 board.GP4, board.GP8, board.GP13 board.GP28, board.GP20, board.GP17 需要用到的库&#xff0c;记得复制进单片机存储里面 然后是main主程…

3dmax2025能用云渲染吗?2025最新云渲染渲染100使用方法

3dmax2025还没用上云渲染&#xff1f;简单3步用上云渲染。 第一步&#xff0c;打开浏览器搜索渲染100&#xff0c;并进入下载客户端并安装 第二步&#xff0c;打开已安装的客户端进行安装&#xff0c;点击登录&#xff0c;未登录注册个账号即可&#xff08;注册账号时邀请码填…

Sermant标签路由能力在同城双活场景的应用

作者&#xff1a;聂子雄 华为云高级软件工程师 摘要&#xff1a;目前应用上云已成为趋势&#xff0c;用户也对应用在云上的高可靠方案有更高追求&#xff0c;目前同城双活场景作为应用高可靠方案中的一种常见实践方案&#xff0c;对微服务流量提出了数据中心亲和性的要求&…

浙江电信联合中兴通讯取得新突破,完成融合边缘商用验证

前不久&#xff0c;浙江电信联合中兴通讯在融合边缘方面取得新突破&#xff0c;在嘉兴完成了融合边缘的商用验证&#xff0c;并发布了商用版本。接下来&#xff0c;双方在融合边缘方面正式进入商用阶段&#xff0c;有效赋能新质生产力。    随着数字经济的快速发展&#xff0…