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

2023-05-16

1. 概述

交并比(Intersection over Union, IoU)是目标检测、语义分割、追踪等任务最常用的评估指标。交并比,顾名思义是两区域交集与并集的比值,当两区域完全重叠时交并比最大,为1;当两区域完全不重叠时交并比最小,为0。

2. IoU计算公式

要计算候选框(candidate bound) A与真实框(ground truth bound) B的交并比。
在这里插入图片描述

B1框与B2框的IoU计算公式为:
I o U = ∣ A ∩ B ∣ ∣ A ∪ B ∣ IoU = \frac{\mid A\cap B\mid}{\mid A\cup B\mid} IoU=ABAB

A、B的坐标如下图:

img

交集的左上角坐标为:
x 1 = m a x ( x a 1 , x b 1 ) x_{1} = max\big(x_{a1}, x_{b1}) x1=max(xa1,xb1)

y 1 = m a x ( y a 1 , y b 1 ) y_{1} = max\big(y_{a1}, y_{b1}) y1=max(ya1,yb1)

交集的右下角坐标为:
x 2 = m i n ( x a 2 , x b 2 ) x_{2} = min\big(x_{a2}, x_{b2}) x2=min(xa2,xb2)

y 2 = m i n ( y a 2 , y b 2 ) y_{2} = min\big(y_{a2}, y_{b2}) y2=min(ya2,yb2)

交集部分的宽、高、面积:
w i d t h = m a x ( x 2 − x 1 , 0 ) width = max\big(x_{2}-x_{1}, 0) width=max(x2x1,0)

h e i g h t = m a x ( y 2 − y 1 , 0 ) height = max\big(y_{2}-y_{1}, 0) height=max(y2y1,0)

S A ∩ B = w i d t h ∗ h e i g h t S_{A \cap B} = width * height SAB=widthheight

A框的面积:
S A = ( x a 2 − x a 1 ) ⋅ ( y a 2 − y a 1 ) S_{A} = \big(x_{a2}-x_{a1})\cdot\big(y_{a2}-y_{a1}) SA=(xa2xa1)(ya2ya1)
B框的面积:
S B = ( x b 2 − x b 1 ) ⋅ ( y b 2 − y b 1 ) S_{B} = \big(x_{b2}-x_{b1})\cdot\big(y_{b2}-y_{b1}) SB=(xb2xb1)(yb2yb1)
并集部分:
S A ∪ B = S A + S B − S A ∩ B S_{A \cup B} = S_{A} + S_{B} - S_{A \cap B} SAB=SA+SBSAB
交并比为:

I o U = S A ∩ B S A ∪ B IoU = \frac{S_{A \cap B}}{S_{A \cup B}} IoU=SABSAB
3. IoU公式的python实现

def IoU(box1, box2) -> float:
    """
    IOU, Intersection over Union

    :param box1: list, 第一个框的两个坐标点位置 box1[x1, y1, x2, y2]
    :param box2: list, 第二个框的两个坐标点位置 box2[x1, y1, x2, y2]
    :return: float, 交并比
    """
    weight = max(min(box1[2], box2[2]) - max(box1[0], box2[0]), 0)
    height = max(min(box1[3], box2[3]) - max(box1[1], box2[1]), 0)
    s_inter = weight * height
    s_box1 = (box1[2] - box1[0]) * (box1[3] - box1[1])
    s_box2 = (box2[2] - box2[0]) * (box2[3] - box2[1])
    s_union = s_box1 + s_box2 - s_inter
    return s_inter / s_union


if __name__ == '__main__':
    box1 = [0, 0, 50, 50]
    box2 = [0, 0, 100, 100]
    print('IoU is %f' % IoU(box1, box2))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

IoU(交并比)的理解及python实现 的相关文章

  • ROS2简介

    转载地址 ROS简介 ROS是Robot Operating System的缩写 xff0c 是一套开源的软件框架和工具集 xff0c 用来帮助开发人员建立机器人应用程序 xff0c 它提供了硬件抽象 设备驱动 函数库 可视化工具 消息传递
  • Task Parallel Library in C#

    文章目录 Task Parallel Library in C with Examples TPL in C Introduction to ParallelismWhat is Parallel Programming in C Why
  • C# winform事件执行顺序

    转载地址 https www cnblogs com luoyaoquan archive 2011 06 30 2094255 html 目录 Paint事件Load事件Refresh方法 进入控件时 xff1a 先激发OnEnter后激
  • 如何:在窗体一级处理键盘输入

    转载地址 https learn microsoft com zh cn dotnet desktop winforms how to handle keyboard input at the form level view 61 netf
  • 完美解决xhost +报错: unable to open display ""

    详细很多朋友在装oracle的时候总是在弹出安装界面的时候出错 xff0c 界面就是蹦不出来 oracle安装 先切换到root用户 xff0c 执行xhost 43 然后再切换到oracle用户 xff0c 执行export DISPLA
  • IEC104报文解读

    104规约大致有1997年和2002年 xff08 02版 xff09 两个版本 xff0c 在配置上没什么变化 xff0c 只是02版在97版上扩展了遥测 遥信等信息体起始地址 xff0c 区别如下 xff1a 类别 97 版 02 版
  • 单点要信双点遥信区别

  • log以2为底的对数

  • gdb几种设置断点的方式

    gdb几种设置断点的方式 方式1 根据函数名 xff0c 查找符号 xff08 symbol xff09 设置断电 此种方式最为简单 xff0c 阅读源代码 xff0c 了解函数如何调用 xff0c 在需要暂停运行的函数入口进行断点设置 但
  • Ubuntu常用命令

    一 创建新用户 1 创建用户testuser xff1a span class token variable sudo span adduser testuser 按照提示填写密码等信息 xff0c 可以一路回车默认 2 将用户添加到指定用
  • redis del与unlink命令用法及实现

    1 DEL 命令 DEL key key 删除指定的一批keys xff0c 如果删除中的某些key不存在 xff0c 则直接忽略 返回值 integer reply xff1a 被删除的keys的数量 例子 redis gt SET ke
  • ORA-01033错误解决方案

    今天在linux测试环境下登录sqlplus 不能正常登录报 xff1a ORA 01033错误 xff0c 捣鼓了半天 xff0c 参考网上的一些经验 xff0c 终于解决 xff0c 把心得总结一下 一 首先 xff1a 问题的产生原因
  • 四川麻将纯AI算法------最优拆牌

    ps 四川麻将AI算法已经开发完毕 xff0c 现已上线运营 xff0c 有需要交流的朋友请留言交流讨论 转载请说明出处 xff1a by wojiushi3344 我想现实生活中应该有很多朋友都在玩四川麻将 xff0c 不知道你有没有发现
  • Ubuntu 安装 HDF5 C++库

    HDF5 HDF5安装教程在源码包中的release docs文件夹中的INSTALL文件中有详细介绍 下载 根据系统选择下载源码包 xff0c 否则导致编译出错 xff1a https support hdfgroup org ftp H
  • C++和Windows平台的一些书籍

    从2010年学习编程以来 xff0c 到现在有差不多3年时间了 xff0c 过的真快啊 目前在深圳工作 xff0c 主要使用的是C 43 43 语言 xff0c 那么我就说说C 43 43 和Windows平台的书籍吧 1 C primer
  • Windows程序设计 截屏

    span style font family none span BLOWUP C Video Magnifier Program c Charles Petzold 1998 include lt windows h gt include
  • windows 程序设计 调色板

    调色板 这时就需要使用Windows调色盘管理器 xff08 在Windows 3 0中提出 xff09 了 Windows保留了256种颜色中的20种 xff0c 而允许应用程序修改其余的236种 xff08 在某些情况下 xff0c 应
  • windows程序设计 文字和字体

    文字和字体 简单的文字输出 让我们先来看看Windows为文字输出 影响文字的设备内容属性以及备用字体提供的各种函数 文字输出函数 我已经在许多范例程序中使用过最常用的文字输出函数 xff1a TextOut hdc xStart ySta
  • windows 网络编程 WinNet

    初始化 winNet 库 HINTERNET InternetOpen LPCTSTR lpszAgent DWORD dwAccessType LPCTSTR lpszProxyName LPCTSTR lpszProxyBypass D
  • Cocos 随写

    auto listenter 61 EventListenerTouchOneByOne create 设置单点触摸 listenter gt onTouchBegan 61 Touch pTouch Event event gt bool

随机推荐

  • android NDK崩溃信息调试

    android NDK崩溃 调试 主要利用 tombstones xff0c 可以看成是普通linux上利用core文件调试查问题类似 一 tombstones简介 1 什么是tombstone 当独立ndk bin方式或者jni方式开始运
  • 延迟加载DLL[转]

    问题来源 我的应用程序需要用到D3DX9 41 dll 程序里用的静态加载 xff0c 这个dll通常是把它放在根目录下 xff0c 否则应用程序找不到dll 但是有一天 xff0c 我需要把他放到别的目录 xff0c 那么下面就是一个解决
  • C++11 lambda 表达式

    lambda 表达式也是一种可调用对象 xff0c 那么可调用对象有哪些呢 xff1f 有函数 xff0c 函数指针 xff0c 重载了调用运算符的类 xff0c 还有lambda表达式 1个lambda表达式表示一个可调用的代码单元 xf
  • Windows核心编程之 2 字符和字符串

    1 包含新的安全是字符串处理头文件 StrSafe h counof 宏可以计算缓冲区的元素个数 StringCchCat StringCchCopy StringCchPrintf 34 Cch 34 表示 字符数 StringCbCat
  • Windows核心编程之 用户模式下的线程同步 读写锁和条件变量

    读写锁 include lt Windows h gt include lt tchar h gt include lt stdio h gt include lt process h gt include lt winbase h gt
  • 八戒常用之php时间戳strtotime前一天或后一天的日期

    date default timezone set 39 PRC 39 默认时区 今天 date 34 Y m d 34 time 昨天 date 34 Y m d 34 strtotime 34 1 day 34 明天 date 34 Y
  • 信号量和互斥锁的区别

    信号量和互斥锁 xff1a 信号量 xff08 semaphore sem f r xff09 用在多线程多任务同步的 xff0c 一个线程完成了某一个动作就通过信号量告诉别的线程 xff0c 别的线程再进行某些动作 而互斥锁 xff08
  • VLC生成流媒体实时流

    VLC生成实时流 xff0c 分为以下步骤 1 打开VLC xff0c 如果未下载可在官网下载 2 现在将要产生流的视频文件选中 3 开始产生流 4 检验流的生成 转载请注明出处 xff1a http www wolfnx com 2017
  • nmap 缺少module 'citrixxml'以及citrixxml.lua的修补

    当使用nmap的 script功能时 xff0c 可以参考nmap脚本使用总结 xff0c 但是在ubuntu12 04 LTS下使用默认下载安装的nmap xff08 版本为5 21 xff09 时 xff0c 当运行nmap scrip
  • 【ROS】Ubuntu18.04安装IntelRealsense D435

    参考文章 xff1a 文章一 文章二 这两篇文章多多少少和自己的有点不一样 xff0c 故在此记录 以实际为准 从官网https github com IntelRealSense librealsense下载安装包 xff08 用git的
  • 利用ROS同时采集激光雷达、摄像头数据并提取信息

    利用ROS同时采集激光雷达 摄像头数据并提取信息 在实际工程中 xff0c 往往需要采集lidar和camera的信息 xff0c 并进行同步 xff0c 而二者的频率往往不一致 xff0c 比如相机的采集频率为30HZ xff0c 而ve
  • C#连接SQLserver数据库

    导入命名空间 span class token keyword using span span class token namespace System span class token punctuation span Configura
  • MTK编译记录

    MTK编译记录 系统编译1 Q FAILED check kernel config 系统编译 1 Q FAILED check kernel config bin bash c python device mediatek build b
  • Git回退到指定版本

    Git版本回退 xff0c 在idea中不方便操作 xff0c 需进行强制提交 主要使用reset和push f进行强制回退 1 git 命令行回退到某个指定的版本 1 在开发过程中遇到合并别人的代码或者合并主分支的代码导致自己的分支代码冲
  • 四旋翼无人机crazepony烧写流程

    开源crazepony 自上而下 xff0c 从产品到底层的学习方法是效率比较高的 事前准备 xff1a 编译stm程序用的是Keil 5 xff0c 官方推荐用5不用4 4不支持Unicode8 xff0c 怕是不支持中文输入 在用官方包
  • deb 打包、安装、卸载

    deb 打包 安装 卸载 deb 格式是 Debian 系统 包含 Debian 和 Ubuntu 专属安装包格式 dpkg 是 Debian下的包管理工具 xff0c 用来执行软件包的打包 解包 安装 卸载等命令 运行环境 xff1a D
  • Kafka高可用 — KRaft集群搭建

    Apache Kafka Raft 是一种共识协议 xff0c 它的引入是为了消除 Kafka 对 ZooKeeper 的元数据管理的依赖 xff0c 被社区称之为 Kafka Raft metadata mode xff0c 简称 KRa
  • python线程池ThreadPoolExecutor的用法

    为了释放python GIL锁实现多个任务的并发运行 xff08 实际上并非真正的并行只是看起来并发 xff09 xff0c 往往采用多线程或者线程池的方式来实现 从Python3 2开始 xff0c concurrent futures模
  • 结构化数据、半结构化数据、非结构化数据的对比

    结构化数据 结构化数据是指可以使用关系型数据库表示和存储 xff0c 表现为二维形式的数据 一般特点是 xff1a 数据以行为单位 xff0c 一行数据表示一个实体的信息 xff0c 每一行数据的属性是相同的 举一个例子 xff1a idn
  • IoU(交并比)的理解及python实现

    1 概述 交并比 Intersection over Union IoU 是目标检测 语义分割 追踪等任务最常用的评估指标 交并比 xff0c 顾名思义是两区域交集与并集的比值 xff0c 当两区域完全重叠时交并比最大 xff0c 为1 x