目标检测之 IoU

2023-11-17

转载自:https://blog.csdn.net/u014061630/article/details/82818112
IoU 作为目标检测算法性能 mAP 计算的一个非常重要的函数。

但纵观 IoU 计算的介绍知识,都是直接给出代码,给出计算方法,没有人彻底地分析过其中的逻辑,故本人书写该篇博客来介绍下其中的逻辑。

1. IoU的简介及原理解析

IoU 的全称为交并比(Intersection over Union),通过这个名称我们大概可以猜到 IoU 的计算方法。IoU 计算的是 “预测的边框” 和 “真实的边框” 的交集和并集的比值。
在这里插入图片描述
开始计算之前,我们首先进行分析下交集和并集到底应该怎么计算:我们首先需要计算交集,然后并集通过两个边框的面积的和减去交集部分即为并集,因此 IoU 的计算的难点在于交集的计算。

为了计算交集,你脑子里首先想到的方法应该是:考虑两个边框的相对位置,然后按照相对位置(左上,左下,右上,右下,包含,互不相交)分情况讨论,来计算交集。
在这里插入图片描述
上图就是你的直觉,这样想没有错。但计算一个交集,就要分多种情况讨论,要是程序真的按照这逻辑编写就太搞笑了。因此对这个问题进行进一步地研究显得十分有必要。

让我们重新思考一下两个框交集的计算。两个框交集的计算的实质是两个集合交集的计算,因此我们可以将两个框的交集的计算简化为:
在这里插入图片描述
通过简化,我们可以清晰地看到,交集计算的关键是交集上下界点(图中蓝点)的计算。

我们假设集合 A 为 [ x 1 , x 2 ] [x_1,x_2] [x1,x2],集合 B 为 [ y 1 , y 2 ] [y_1,y_2] [y1,y2]。然后我们来求AB交集的上下界限。
交集计算的逻辑

  • 交集下界 z 1 z_1 z1 m a x [ x 1 , y 1 ] max[x_1,y_1] max[x1,y1]
  • 交集上界 z 2 z_2 z2 m i n [ x 2 , y 2 ] min[x_2,y_2] min[x2,y2]
  • 如果 z 2 − z 1 z_2-z_1 z2z1小于0,则说明集合 A 和集合 B 没有交集。

下面使用Python来实现两个一维集合的 IoU 的计算:

def iou(set_a, set_b):
    '''
    一维 iou 的计算
    '''
    x1, x2 = set_a # (left, right)
    y1, y2 = set_b # (left, right)
    
    low = max(x1, y1)
    high = min(x2, y2)
    # intersection
    if high-low<0:
        inter = 0
    else:
        inter = high-low
    # union
    union = (x2 - x1) + (y2 - y1) - inter
    # iou
    iou = inter / union
    return iou

上面,我们计算了两个一维集合的 iou,将上面的程序进行扩展,即可得到两个框 IoU 计算的程序。

def iou(box1, box2):
    '''
    两个框(二维)的 iou 计算
    
    注意:边框以左上为原点
    
    box:[top, left, bottom, right]
    '''
    in_h = min(box1[2], box2[2]) - max(box1[0], box2[0])
    in_w = min(box1[3], box2[3]) - max(box1[1], box2[1])
    inter = 0 if in_h<0 or in_w<0 else in_h*in_w
    union = (box1[2] - box1[0]) * (box1[3] - box1[1]) + \
            (box2[2] - box2[0]) * (box2[3] - box2[1]) - inter
    iou = inter / union
    return iou

2. 基于TensorFlow的IoU实现

上节介绍了IoU,及其的计算,下面我们给出其在 TensorFlow 上的实现:

import tensorflow as tf

def IoU_calculator(x, y, w, h, l_x, l_y, l_w, l_h):
    """calaulate IoU
    Args:
      x: net predicted x
      y: net predicted y
      w: net predicted width
      h: net predicted height
      l_x: label x
      l_y: label y
      l_w: label width
      l_h: label height
    
    Returns:
      IoU
    """
    
    # convert to coner
    x_max = x + w/2
    y_max = y + h/2
    x_min = x - w/2
    y_min = y - h/2
 
    l_x_max = l_x + l_w/2
    l_y_max = l_y + l_h/2
    l_x_min = l_x - l_w/2
    l_y_min = l_y - l_h/2
    # calculate the inter
    inter_x_max = tf.minimum(x_max, l_x_max)
    inter_x_min = tf.maximum(x_min, l_x_min)
 
    inter_y_max = tf.minimum(y_max, l_y_max)
    inter_y_min = tf.maximum(y_min, l_y_min)
 
    inter_w = inter_x_max - inter_x_min
    inter_h = inter_y_max - inter_y_min
    
    inter = tf.cond(tf.logical_or(tf.less_equal(inter_w,0), tf.less_equal(inter_h,0)), 
                    lambda:tf.cast(0,tf.float32), 
                    lambda:tf.multiply(inter_w,inter_h))
    # calculate the union
    union = w*h + l_w*l_h - inter
    
    IoU = inter / union
    return IoU

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

目标检测之 IoU 的相关文章

  • 基于复杂环境下的雷达目标检测技术(Matlab代码实现)

    欢迎关注 个人主页 我爱Matlab 点赞 评论 收藏 养成习惯 一键三连 希望大家多多支持 一起加油 语录 将来的我一定会感谢现在奋斗的自己 摘要 随着雷达技术的迅速发展 其应用领域不断拓展 现代雷达面临着更复杂的检测环境以及更多样的目标
  • 图像目标检测之cascade-rcnn实践

    最近一直在调试目标检测方面的模型 其中mmdetection中就集成了许多的目标检测模型 其中表现比较好的模型中有cascade rcnn 因此也趁这个机会具体了解一下这个模型的发展脉络 1 模型原理 在two stage模型中 常见都会预
  • 目标检测算法之YOLOV3

    本博客中YOLO系列均为个人理解笔记 欢迎评论指出理解有误或者要讨论的地方 YOLOV3模型相比于v2来说 实质性的改进并不大 更多的是一些技术的堆叠 其并不像yolov2对于v1一样 由巨大的改变和提升 其相对于yolov2 改变在于 1
  • [YOLO专题-16]:YOLO V5 - 如何把labelme json训练数据集批量转换成yolo数据集

    作者主页 文火冰糖的硅基工坊 文火冰糖 王文兵 的博客 文火冰糖的硅基工坊 CSDN博客 本文网址 https blog csdn net HiWangWenBing article details 122334367 目录 前言 第1章
  • 睿智的目标检测24——Keras搭建Mobilenet-SSD目标检测平台

    睿智的目标检测24 Keras搭建Mobilenet SSD目标检测平台 更新说明 学习前言 什么是SSD目标检测算法 源码下载 SSD实现思路 一 预测部分 1 主干网络介绍 2 从特征获取预测结果 3 预测结果的解码 4 在原图上进行绘
  • 目标检测入坑指南3:VGGNet神经网络

    学了蛮久的目标检测了 但是有好多细节总是忘或者模棱两可 感觉有必要写博客记录一下学习笔记和一些心得 既可以加深印象又可以方便他人 博客内容集成自各大学习资源 所以图片也就不加水印了 需要自取 本专栏会详细记录本人在研究目标检测过程中的所学所
  • 【计算机视觉

    文章目录 一 检测相关 8篇 1 1 Impact of Image Context for Single Deep Learning Face Morphing Attack Detection 1 2 A Theoretical and
  • IA-YOLO项目中DIP模块的初级解读

    IA YOLO项目源自论文Image Adaptive YOLO for Object Detection in Adverse Weather Conditions 其提出端到端方式联合学习CNN PP和YOLOv3 这确保了CNN PP
  • 使用Stable Diffusion图像修复来生成自己的目标检测数据集

    点击上方 AI公园 关注公众号 选择加 星标 或 置顶 作者 R dig par Gabriel Guerin 编译 ronghuaiyang 导读 有些情况下 收集各种场景下的数据很困难 本文给出了一种方法 深度学习模型需要大量的数据才能
  • [YOLO专题-27]:YOLO V5 小目标检测遇到的问题与常见解决办法

    作者主页 文火冰糖的硅基工坊 文火冰糖 王文兵 的博客 文火冰糖的硅基工坊 CSDN博客 本文网址 YOLO专题 27 YOLO V5 小目标检测遇到的问题与常见解决办法 文火冰糖 王文兵 的博客 CSDN博客 目录 第1章 前言 第2章
  • YOLOV5加速之TensorRT篇

    之前写过一篇Android版本yolov5s的博客 最近工作搞了下TensorRT 也遇到几个坑不过最终还是实现了 做一下小小的分享 这里直接上github上大牛的连接 我的代码是在他的基础上改的 里面有很多模型的加速直接看里面的yolov
  • [人工智能-深度学习-77]:目标检测 - 常见项目、应用

    作者主页 文火冰糖的硅基工坊 文火冰糖 王文兵 的博客 文火冰糖的硅基工坊 CSDN博客 本文网址 https blog csdn net HiWangWenBing article details 122307915 目录 前言 场景一
  • 注意力机制的分类

    目录 1 什么是注意力机制 2 注意力机制分类 3 代表算法 1 空间域代表算法 2 通道域代表算法 3 混合域代表算法 DANet CBAM 4 注意力机制的应用 1 什么是注意力机制 注意力机制通俗的讲就是把注意力集中放在重要的点上 而
  • 项目设计:基于YOLO目标检测算法的安全帽/口罩/汽车/行人/交通标志...检测

    本文将详细介绍YOLO目标检测算法 该算法支持各种目标检测 包括 安全帽 汽车 造价 交通标志 等 其他毕业设计题目推荐参考 毕业设计 电子 通信 计算机 物联网专业毕业设计选题参考 嵌入式linux 单片机STM32 web 图像 htt
  • 目标检测中的损失函数:IOU_Loss、GIOU_Loss、DIOU_Loss和CIOU_Loss

    文章目录 前言 1 IOU Loss Intersection over Union Loss 2 GIOU Loss Generalized Intersection over Union Loss 3 DIOU Loss Distanc
  • 机器翻译:跨越语言边界的智能大使

    导言 机器翻译作为人工智能领域的瑰宝 正在以前所未有的速度和精度 为全球沟通拓展新的可能性 本文将深入研究机器翻译的技术原理 应用场景以及对语言交流未来的影响 1 简介 机器翻译是一项致力于通过计算机自动将一种语言的文本翻译成另一种语言的技
  • 目标检测YOLO实战应用案例100讲-自动驾驶复杂场景下目标检测(续)

    目录 3 2 YOLOv5框架的分析 3 3改进算法的基本思想 3 4改进聚类算法 3 5重构损失函数模型和NMS算法 lt
  • 多目标跟踪使用较多的数据集

    MOT change网站 MOT Challenge
  • 基于改进RoI Transformer的遥感图像多尺度旋转目标检测

    源自 应用光学 作者 刘敏豪 王堃 金睿蛟 卢天 李璋 人工智能技术与咨询 发布 摘 要 旋转目标检测是遥感图像处理领域中的重要任务 其存在的目标尺度变化大和目标方向任意等问题给自动目标检测带来了挑战 针对上述问题 提出了一种改进的RoI
  • 基于改进RoI Transformer的遥感图像多尺度旋转目标检测

    源自 应用光学 作者 刘敏豪 王堃 金睿蛟 卢天 李璋 人工智能技术与咨询 发布 摘 要 旋转目标检测是遥感图像处理领域中的重要任务 其存在的目标尺度变化大和目标方向任意等问题给自动目标检测带来了挑战 针对上述问题 提出了一种改进的RoI

随机推荐

  • 基于51单片机数字频率计的设计与实现

    目录 第一章 系统原理与总体设计 1 1系统组成 1 2系统原理 1 3测量原理 1 4频率测量与总体设计 第二章 硬件电路设计 2 1硬件电路框图 2 2数字频率计原理图 2 3硬件电路设计 第三章 软件程序设计 3 1程序流程图 3 2
  • 魔方机器人之下位机编程------下位机完整程序

    头文件包含 include Includes h 总头文件 在此添加全局变量定义 uint8 msg 14 Hello World void PWM Init void PWM0 上侧旋转舵机 PWME PWME0 0x00 Disable
  • 查找恢复密钥

    登陆自己的微软账号可查看恢复密钥 点击以下链接查找恢复密钥 https account microsoft com devices recoverykey 根据密钥ID 输入对应的恢复密钥
  • win10蓝牙无法连接,可以尝试在此Windows设备上打开蓝牙

    win10蓝牙无法连接 可以尝试在此Windows设备上打开蓝牙 笔记本右下角蓝牙图标消失不见 操作步骤 1 首先在打开电脑中 按下 Win R 打开运行窗口输入 services msc 并进入 2 2 打开服务列表后 不断的向下翻 找到
  • 【华为OD机试真题】对称字符串(python)100%通过率 超详细代码注释 代码解读

    华为OD机试真题 2022 2023 真题目录 点这里 华为OD机试真题 信号发射和接收 试读 点这里 华为OD机试真题 租车骑绿道 试读 点这里 对称字符串 时间限制 1s空间限制 256MB限定语言 不限 题目描述 对称就是最大的美学
  • 最长公共上升子序列(LCIS)

    前置知识 LCS LIS 注意 刚开始看这个问题的时候 第一反应是先求出LCS再求出LCS的LIS 事实上这是有问题的 我们并不能保证这么求出的LCIS是最长的 比如下面这个例子 Example a 7 1 5 6 4 2 7 b 7 1
  • 【python + opencv + pytorch】车牌提取、分割、识别 pro版

    老规矩 先看最后成果图 如果想要全部工程 文章最后我会把github链接放上 1 分割车牌 2 分割字符 3 识别字符 最终识别的车牌号码是 浙F99999 整个车牌识别分五步 1 一个分割车牌的语义分割模型 2 用训练好DeepLab V
  • 复旦微单片机FM33LG系列之GPIO操作(FL库)

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 一 引用文件 二 快速IO操作指南 1 GPIO位输出高电平 2 GPIO位输出低电平 3 GPIO位输出电平翻转 4 GPIO端口8位并口输出 5 GPIO端口1
  • 数据结构之快速排序算法

    文章目录 快速排序的思想 快速排序的递归实现 快速排序的非递归实现 快速排序的思想 设置两个变量i j 排序开始的时候 令i 0 j length 1 以第一个数组元素作为比较 赋值给temp 即temp nums 0 从j开始向前扫描 找
  • 一篇了解Containerd容器运行时及安装

    文章目录 一 Containerd简介 1 什么是Containerd 2 Containerd和Docker的区别是什么 二 使用yum仓库安装Containerd 三 使用源码安装Containerd 四 配置国内镜像加速地址 一 Co
  • 寻找第K大的数的方法总结

    寻找第K大的数的方法总结 今天看算法分析是 看到一个这样的问题 就是在一堆数据中查找到第k个大的值 名称是 设计一组N个数 确定其中第k个最大值 这是一个选择问题 当然 解决这个问题的方法很多 本人在网上搜索了一番 查找到以下的方式 决定很
  • vscode 跳转到指定的行数的快捷键

    在工作中 尤其是容易产生错误的 js 代码 报错之后会提示有错误代码的位置 也就是在哪一行出问题了 在vscode 编辑器中 可以使用快捷键 跳转到指定的行数 快捷键 Ctrl G 然后在弹出的框中输入行数就可以了
  • 业务风控思考:如何建立识别、防御和决策体系?

    导语 在疫情扰乱生活节奏的三年中 经常会看到企业 降本增效 的话题 如 让员工感受寒气 搬走办公室绿植 降低食堂伙食标准等等 就企业运作成本而言 降低黑灰产 羊毛党 打码平台等 盗夺的有限资源无疑是最有效的降本方式之一 据不完全统计 我国现
  • CSS高级篇——多背景&背景原点

    CSS 提供了很多处理背景的手段 多背景 background image 可以同时设置多个背景图片 background image url this jpg url that gif url theother png 效果如下 back
  • 深度学习-Tensorflow2.2-卷积神经网络{3}-卫星图像识别卷积综合实例(二分类)-13

    import tensorflow as tf import matplotlib pyplot as plt matplotlib inline import numpy as np import pathlib 数据读取及预处理 dat
  • imap服务器收缓存pst文件夹,Outlook 转移OST数据文件 IMAP账户

    问题 windows8系统 装了Outlook2013 占用了C盘大约10G空间 主要都是数据文件 OST文件 占用的 希望能够把数据文件从C盘移至其他盘 并且账户是IMAP账户 不是Exchange google一下 绝大多数解决方案是针
  • 儿童趣味编程是什么?如何启迪编程思维?

    从前在大多数人的认知里 编程是成年人才能接触和应用到的知识和技术 它好像很晦涩难懂 离小孩子们的世界非常远 但是身处互联网时代 编程已经面向所有人群 孩子们也不必等到大学才能接触到相关知识 而是在小学或者更早的学龄前阶段 就有了系统学习编程
  • 日志的管理

    日志介绍 1 日志文件是重要的系统信息文件 记录了许多的重要的系统事件 包括有用户的登录信息 系统的启动信息 系统的安全信息 邮件相关信息 各种服务相关信息等 2 日志对于安全来说非常的重要 它记录了系统每天发生的各种事情 通过日志来检查错
  • mysql_real_connect 连接失败 问题!

    mysql 的c函数mysql real connect 用localhost为参数进行连接 第一次会成功 但第二次就会抛出异常 本人遇到这个问题 查找了好久 最后才发现问题所在 解决办法 改用ip地址就可以 经验共享
  • 目标检测之 IoU

    转载自 https blog csdn net u014061630 article details 82818112 IoU 作为目标检测算法性能 mAP 计算的一个非常重要的函数 但纵观 IoU 计算的介绍知识 都是直接给出代码 给出计