Python极简实现IoU

IOU计算Python代码实现 文章目录一、目标检测中的IOU代码实现二、代码总结 一、目标检测中的IOU代码实现 目标检测中会用IOU大小的值来衡量检测结果与准确结果之间的差距,IOU的计算公式: IOU=A∩B/A∪B,式中A,B为检测结果和准确结果(groundtruth)检测框的面积大小。 二、代码 代码如下(示例): def compute_iou(rec_1,rec_2): ''' rec_1:左上角(rec_1[0],rec_1[1]) 右下角:(rec_1[2],rec_1[3]) r. 阅读详情

IoU概念

交并比(Intersection-over-Union,IoU),就是交集与并集的比值,是在目标检测中常用的算法。

IoU简图

分子部分就是Box1与Box2交集的面积,先设为A1。分母部分是Box1与Box2并集集的面积,设为A2,其实也是Box1面积S1加上Box2面积S2再减去一个A1,即:
I o U = A 1 A 2 A 2 = S 1 + S 2 − A 1 I o U = A 1 S 1 + S 2 − A 1 IoU = \frac{A1}{A2}\\[5pt] A2 = S1 + S2 - A1\\[5pt] IoU = \frac{A1}{S1+S2-A1} IoU=A2A1​A2=S1+S2−A1IoU=S1+S2−A1A1​
问题就转化为对Box与A1的求解。

交集的坐标系表示
如上图,为了求交集面积,只要知道上图中两个蓝色点的坐标(或另外两个角坐标)即可。

Box的表示与计算

Box有常用的两种表达方式:

COCO与VOC数据集: b o x a = ( x m i n , y m i n , x m a x , y m a x ) box_a = (x_{min},y_{min},x_{max},y_{max}) boxa​=(xmin​,ymin​,xmax​,ymax​)

YOLO格式: b o x b = ( x c e n t e r , y c e n t e r , w , h ) box_b = (x_{center},y_{center},w,h) boxb​=(xcenter​,ycenter​,w,h)

两种格式的转换关系如下:
x m i n , y m i n , x m a x , y m a x = r o u n d ( x c e n t e r − ( w / 2.0 ) ) , r o u n d ( y c e n t e r − ( h / 2.0 ) ) , r o u n d ( x c e n t e r + ( w / 2.0 ) ) , r o u n d ( y c e n t e r + ( h / 2.0 ) ) x c e n t e r , y c e n t e r , w , h = r o u n d ( ( x m i n + x m a x ) / 2.0 ) , r o u n d ( ( y m i n + y m a x ) / 2.0 ) , r o u n d ( x m a x − x m i n ) , r o u n d ( y m a x − y m i n ) b o x a = ( r o u n d ( b o x b [ 0 ] − ( b o x b [ 2 ] / 2.0 ) ) , r o u n d ( b o x b [ 1 ] − ( b o x b [ 3 ] / 2.0 ) , r o u n d ( b o x b [ 0 ] + ( b o x b [ 2 ] / 2.0 ) , r o u n d ( b o x b [ 1 ] + ( b o x b [ 3 ] / 2.0 ) ) x_{min},y_{min},x_{max},y_{max} = round(x_{center}-(w/2.0)),round(y_{center}-(h/2.0)),round(x_{center}+(w/2.0)),round(y_{center}+(h/2.0))\\[5pt] x_{center},y_{center},w,h = round((x_{min}+x_{max})/2.0),round((y_{min}+y_{max})/2.0),round(x_{max}-x_{min}),round(y_{max}-y_{min})\\[5pt] box_a = (round(box_b[0]-(box_b[2]/2.0)) ,round(box_b[1]-(box_b[3]/2.0),round(box_b[0]+(box_b[2]/2.0),round(box_b[1]+(box_b[3]/2.0)) xmin​,ymin​,xmax​,ymax​=round(xcenter​−(w/2.0)),round(ycenter​−(h/2.0)),round(xcenter​+(w/2.0)),round(ycenter​+(h/2.0))xcenter​,ycenter​,w,h=round((xmin​+xmax​)/2.0),round((ymin​+ymax​)/2.0),round(xmax​−xmin​),round(ymax​−ymin​)boxa​=(round(boxb​[0]−(boxb​[2]/2.0)),round(boxb​[1]−(boxb​[3]/2.0),round(boxb​[0]+(boxb​[2]/2.0),round(boxb​[1]+(boxb​[3]/2.0))
box的面积计算:
S a = ( x m a x − x m i n ) ∗ ( y m a x − y m i n ) = ( b o x a [ 2 ] − b o x a [ 0 ] ) ∗ ( b o x a [ 3 ] − b o x a [ 1 ] ) S b = w ∗ h = b o x b [ 2 ] ∗ b o x b [ 3 ] S_a = (x_{max}-x_{min})*(y_{max}-y_{min}) = (box_a[2]-box_a[0])*(box_a[3]-box_a[1])\\[5pt] S_b = w*h = box_b[2]*box_b[3] Sa​=(xmax​−xmin​)∗(ymax​−ymin​)=(boxa​[2]−boxa​[0])∗(boxa​[3]−boxa​[1])Sb​=w∗h=boxb​[2]∗boxb​[3]

A1交集情况

A1交集的多种情况
计算相交的面积只需计算出相交框的w与h。相交时有:

left = max(left1, left2)#相交框left是两个框的左上角x坐标的最大值
top = max(top1, top2)#相交框top是两个框的左上角y坐标的最大值
right =min(right1, right2)#相交框right是两个框的右下角x坐标的最大值
bottom =min(bottom1, bottom2)#相交框bottom是两个框的右下角y坐标的最大值

不相交时如情况5和6,w、h中至少有一个值等于0,使得计算面积A1也为0。即可表示为:

w = max(0, right - left)
h = max(0, bottom - top)

所以,计算IoU的代码可以如下:

def cal_iou(box1, box2):
    """
    :param box1: = [left1, top1, right1, bottom1]
    :param box2: = [left2, top2, right2, bottom2]
    :return: 
    """
    left1, top1, right1, bottom1 = box1
    left2, top2, right2, bottom2 = box2
    # 计算每个矩形的面积
    s1 = (right1 - left1) * (bottom1 - top1)  # b1的面积
    s2 = (right2 - left2) * (bottom2 - top2)  # b2的面积
 
    # 计算相交矩形
    left = max(left1, left2)
    top = max(top1, top2)
    right = min(right1, right2)
    bottom = min(bottom1, bottom2)
 
    # 相交框的w,h
    w = max(0, right - left)
    h = max(0, bottom - top)
    a1 = w * h  # C∩G的面积
    a2 = s1 + s2 - a1
    iou = a1 / a2 #iou = a1/ (s1 + s2 - a1)
    return iou

参考:
Python极简实现IoU

目标检测之 IoU IoU 作为目标检测算法性能 mAP 计算的一个非常重要的函数。 但纵观 IoU 计算的介绍知识,都是直接给出代码,给出计算方法,没有人彻底地分析过其中的逻辑,故本人书写该篇博客来介绍下其中的逻辑。 IoU 的全称为交并比(Intersection over Union),通过这个名称我们大概可以猜到 IoU 的计算方法。IoU 计算的是 “预测的边框” 和 “真实的边框” 的交集和并集的比值。 ... 阅读详情

相关推荐

基于Python实现的IOU算法---最简单易懂的代码实现

概念介绍: 交并比:(Intersection over Union) 如上图所示,IOU值定位为两个矩形框面积的交集和并集的比值。即: IOU=A∪BA∩B IOU = \frac{A \cup B} {A \cap B} IOU=A∩BA∪B​ 交并比的实现也是非常简单的,执行过程如下: 1. 交集形状的宽度计算为: IOU_W = min(x1,x2,x3,x4)...

Kellbook的博客 1万+

IOU原理详解代码复现 python numpy/pytorch

IOU就是两个图像的交并比,这是一个图像检测中很重要的概念,想要构建YOLO系列的目标检测对应函数,就必须要先写一个计算交并比的程序,什么是交并比,就是两个图像交集的面积比上并集的面积,如果用下面的图来举例子的话。IOU=S1​+S2​−S3​S3​​由于目标检测的过程中我们大部分用的都是矩形框,根据算法我们都是知道两个矩形的左上角点的坐标和矩形的高和宽。

一个学长的博客 3024

IoU、GIoU、DIoU、CIoU详解及python代码实现

一、IoU、GIoU、DIoU、CIoU详解: (1)IoU IoU 的全称为交并比(Intersection over Union),其计算是 “预测的边框” 和 “真实的边框” 的交集和并集的比值。计算过程可以由下图表示: 由图可知IoU的值域为[0, 1]。 IoU的优点: 1、IOU可以作为损失函数,IoU loss=1-IOU。但是当两个物体不相交时无回传梯度。 2、 IOU对尺度变化具有不变性,即不受两个物体尺度大小的影响。 IoU的缺点: 1、当预测框和真实框不相交时,IoU(A,B)=0时

m0_53114462的博客 4171

IoU(交并比)的理解及python实现

交并比(Intersection over Union, IoU)是目标检测、语义分割、追踪等任务最常用的评估指标。

WonderThink的博客 1万+

聊聊图像分割的DICE和IOU指标

dice 和 iou 都是衡量两个集合之间相似性的度量dice计算公式:iou计算公式:iou的集合理解:iou 其实就是两个区域的 overlap 部分和 union 部分的比值,也就是两个集合的交集/并集dice 的分母不是并集,因为dice的分母是两个区域的和,A+B = A + B - A∩B,所以dice的分母其实是少减去了一个A∩B,所以就让分子的A∩B扩大2倍。

Henry的博客 1万+

目标检测基本概念理解之IoU(交并比)以及Python代码实现

目标检测基本概念理解之IoU(交并比)交并比理解Python代码实现计算IoU,矩形框的坐标形式为xyxy计算IoU,矩形框的坐标形式为xywh 交并比理解 在检测任务中,使用交并比(Intersection of Union,IoU)作为衡量指标。这一概念来源于数学中的集合,用来描述两个集合A和B之间的关系,它等于两个集合的交集里面所包含的元素个数,除以它们的并集里面所包含的元素个数,具体计算公式如下:IoU=A∩BA∪BIoU={{A\cap B}\over{A\cup B}}IoU=A∪BA∩B​ 我

紫芝的博客 5666

chatgpt赋能python:Python计算IoU——准确、快速、简单实现交并比

本文由chatgpt生成,文章没有在chatgpt生成的基础上进行任何的修改。以上只是chatgpt能力的冰山一角。作为通用的Aigc大模型,只是展现它原本的实力。对于颠覆工作方式的ChatGPT,应该选择拥抱而不是抗拒,未来属于“会用”AI的人。🧡AI职场汇报智能办公文案写作效率提升教程 🧡专注于AI+职场+办公方向。下图是课程的整体大纲下图是AI职场汇报智能办公文案写作效率提升教程中用到的ai工具。

xuhss_com的博客 1188

计算IOU算法的Python实现

本文将详细介绍如何使用Python实现计算IOU的算法,并提供相应的源代码。的函数,该函数接受两个边界框的坐标信息作为输入,并返回它们的IOU值。首先,我们提取两个边界框的坐标信息,并计算它们的交集面积。然后,利用交集面积和两个边界框的面积信息计算并集面积。这是一个简单的计算IOU的Python实现示例。IOU是通过计算两个边界框的交集面积与并集面积的比值来衡量二者的重叠程度。其中,Intersection(A, B)表示边界框A和B的交集面积,Union(A, B)表示边界框A和B的并集面积。

PixelEnigma的博客 603

python 图像iou_Python极简实现IoU

如果你不知道自己要驶向哪个港口,那么无论是东南风还是西北风,对你都无所谓的。--《极简主义》范式二:弄明白要做什么,那就成功一半了0.引子IOU中文名叫交并比,见名知意就是交集与并集的比值。是在目标检测中常用的算法 IoU原理如上图所示,就是计算上面阴影部分与下面阴影部分的比值。我们来拆分一下任务,分子部分就是Box1与Box2交集的面积,先设为A1。分母部分是Box1与Box2并集集的面积,设...

weixin_34125314的博客 980

『算法动手学』Python极简实现IoU

首发地址:https://zhuanlan.zhihu.com/p/197895548 如果你不知道自己要驶向哪个港口,那么无论是东南风还是西北风,对你都无所谓的。 --《极简主义》范式二:弄明白要做什么,那就成功一半了 0.引子 IOU中文名叫交并比,见名知意就是交集与并集的比值。是在目标检测中常用的算法 IoU原理 如上图所示,就是计算上面阴影部分与下面阴影部分的比值。 我们来拆分一下任务,分子部分就是Box1与Box2交集的面积,先设为A1。分母部分是Box1与Box2并...

简明AI工作室 907

在Docker中集成GPU监控体系

先上效果图 等文档整理出来再更

tamako0v0的博客 2470

Python 极简实现 IoU

来源 | 简明AI头图 | 下载于视觉中国出品 | AI 科技大本营(ID:rgznai100)IOU中文名叫交并比,见名知意就是交集与并集的比值。是在目标检测中常用的算法。IoU原理如上...

AI科技大本营 630

单细胞测序避坑指南:为什么你的免疫组库数据总出问题?5‘转录组7个关键细节

本文深度解析了5'端单细胞测序技术在免疫组库研究中的应用与常见问题。文章从5'端建库的分子机制入手,重点剖析了其在捕获TCR/BCR序列上的独特优势,并系统梳理了从样本处理、文库构建到数据质控全流程中7个最易出错的细节,为研究者提供了一份实用的避坑指南,旨在帮助提升免疫组库数据的质量和可靠性。

weixin_29208327的博客 482

python极简主义pdf_『算法动手学』Python极简实现IoU

如果你不知道自己要驶向哪个港口,那么无论是东南风还是西北风,对你都无所谓的。--《极简主义》范式二:弄明白要做什么,那就成功一半了0.引子IOU中文名叫交并比,见名知意就是交集与并集的比值。是在目标检测中常用的算法IoU原理如上图所示,就是计算上面阴影部分与下面阴影部分的比值。我们来拆分一下任务,分子部分就是Box1与Box2交集的面积,先设为A1。分母部分是Box1与Box2并集集的面积,设为A...

weixin_39612720的博客 243

飞书组织架构同步至LDAP:实现企业应用统一身份认证的实战指南

本文详细介绍了如何将飞书组织架构同步至LDAP,实现企业应用统一身份认证的实战方案。通过飞书开放平台API与LDAP服务的集成,企业可以大幅减少账号管理工作量,提升IT效率。文章涵盖技术架构设计、密码策略、详细配置步骤及自动化同步实现,特别适合需要统一认证体系的中大型企业。

weixin_29172201的博客 332

liquibase扩展支持达梦数据库

近期项目中需要支持国产数据库,需要liquibase底层支持达梦数据库,记录下操作的详细步骤以便分享。 1.liquibase支持的数据库很多如MySQL, PostgreSQL, Oracle, Sql Server, DB2。但是达梦数据库并不支持,所以需要新建DMDatabase类来适配达梦数据库。达梦语法和Oracle很像所以只需要复制liquibase-core下的Oracle Database做些修改就可了。以下为需要修改的地方 public class DMDatabase extends A

qq_43677719的博客 5472

python numpy极简版代码实现IOU和NMS

【代码】python极简洁版本实现iou和nms。

xiangxianghehe的博客 622

Dify实战:智能邮件工作流配置全解析

本文详细解析了如何利用Dify平台配置智能邮件工作流,实现邮件处理的自动化与智能化。内容涵盖从获取邮箱授权、安装插件、安全配置环境变量,到构建邮件发送工作流、创建调用该工作流的智能体(Agent)的完整步骤,并分享了连接知识库实现智能客服、定时发送日报等进阶自动化场景,旨在帮助用户显著提升邮件处理效率。

t8u9v0w1x的博客 795

YOLOv12快速调用指南:Python脚本预测的简单方法

本文介绍了如何在星图GPU平台上自动化部署YOLOv12官版镜像,快速实现目标检测应用。该镜像预置了完整的运行环境,用户无需配置即可通过简洁的Python脚本,对图片、视频或摄像头实时画面进行高效的目标识别与定位,适用于安防监控、内容分析等多种场景。

weixin_31938351的博客 44

Silvaco TCAD 半导体器件仿真全攻略:从入门到精通

本文介绍了Silvaco TCAD半导体器件仿真平台的核心功能与应用方法。主要内容包括: Silvaco TCAD的核心模块组成(ATHENA工艺仿真和ATLAS器件仿真)及其在半导体研发中的重要作用,能够通过数值仿真预测器件电学特性,显著降低研发成本。 环境配置要点,包括内存分配、文件目录管理和许可证验证,为仿真工作提供基础保障。 仿真核心概念:详细讲解了网格划分策略和物理模型选择原则,强调基于物理直觉的自适应加密网格方法。 以PN结二极管为例,提供了完整的仿真代码示例,涵盖从网格定义、掺杂设置到结果分析

huanghm88的专栏 199

用 CL_ABAP_PARALLEL 把批量处理跑进并行对话进程:资源配额、超时治理与可复制的落地模板

文章摘要: CL_ABAP_PARALLEL是SAP推荐的并行处理工具,适用于时间窗口受限的批量任务处理。它基于aRFC/pRFC机制,通过对话进程实现并行,能将小时级任务压缩到分钟级。使用时需注意版本兼容性(可能需要Note 2791374)、资源限制(会话数、进程数)和任务切片策略。提供两种实现方式:继承式(重定义do方法)和接口式(实现IF_ABAP_PARALLEL)。关键参数包括并发控制(p_percentage)、超时设置(p_timeout)和调试开关(p_debug)。最佳实践建议按业务维度

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 240

python实现交并比IOU

交并比(Intersection-over-Union,IoU),目标检测中使用的一个概念,是产生的候选框(candidate bound)与原标记框(ground truth bound)的交叠率,即它们的交集与并集的比值。最理想情况是完全重叠,即比值为1。 计算公式: Python实现代码: 参考:https://blog.youkuaiyun.com/qq_30622831/...

AI吃大瓜的博客 1万+

Qt/C++ 音视频开发: 共享解码线程/重复利用解码/极低CPU占用/画面同步/进度同步

通过共享解码线程和重复利用解码技术,可以显著降低CPU占用,提高多媒体应用的性能。同时,画面和进度同步技术保证了视频播放过程的平滑体验。

走向CTO的路上... 987

python 图像iou_python实现IOU计算

计算两个矩形的交并比,通常在检测任务里面可以作为一个检测指标。你的预测bbox和groundtruth之间的差异,就可以通过IOU来体现。#!/usr/bin/env python# encoding: utf-8import numpy as np'''函数说明:计算两个框的重叠面积输入:rec1 第一个框xmin ymin xmax ymaxrec2 第二个框xmin ymin xmax ...

weixin_34394074的博客 1242

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

目标检测系列之iou的计算(python实现)

1.IOU IOU(Intersection over Union)即交并比,是目标检测中衡量目标检测算法准确度的一个重要指标,顾名思义,即交集与并集的比值,那所谓的交集和并集分别指代什么呢? 目标检测是一个有监督学习的过程,它常常需要大量的有标签数据进行训练学习。目标检测实际要解决的问题有两个,一个是目标分类,还有一个就是目标定位,这里我把目标的位置信息也当作是一种标签...

weixin_42631693的博客 7286

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

python实现的Iou与Giou

最近看了网上很多博主写的iou实现方法,但Giou的代码似乎比较少,于是便自己写了一个,新手上路,如有错误请指正,话不多说,上代码: def Iou(rec1,rec2): x1,x2,y1,y2 = rec1 #分别是第一个矩形左右上下的坐标 x3,x4,y3,y4 = rec2 #分别是第二个矩形左右上下的坐标 area_1 = (x2-x1)*(y1-y2) ...

小小小菜鸟 1350

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

上一篇: 使用Python API实现TRT版BN/hswish/Silu等算子
下一篇: Leetcode #328:奇偶链表
wq_0708
博客等级 码龄6年 2万+粉丝 95原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值