目标检测基本概念理解之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​

我们将用这个概念来描述两个框之间的重合度。两个框可以看成是两个像素的集合,它们的交并比等于两个框重合部分的面积除以它们合并起来的面积。下图“交集”中青色区域是两个框的重合面积,图“并集”中蓝色区域是两个框的相并面积。用这两个面积相除即可得到它们之间的交并比,如图所示。

假设两个矩形框A和B的位置分别为:
A:[xa1,ya1,xa2,ya2]A:[x_{a1},y_{a1},x_{a2},y_{a2}]A:[xa1​,ya1​,xa2​,ya2​]
A:[xb1,yb1,xb2,yb2]A:[x_{b1},y_{b1},x_{b2},y_{b2}]A:[xb1​,yb1​,xb2​,yb2​]

假如位置关系如 图 所示:

如果二者有相交部分,则相交部分左上角坐标为:
x1=max(xa1,xb1),y1=max(ya1,yb1)x_1=max(x_{a1},x_{b1}),y1=max(y_{a1},y_{b1})x1​=max(xa1​,xb1​),y1=max(ya1​,yb1​)

相交部分右下角坐标为:
x2=min(xa2,xb2),y2=min(ya2,yb2)x_2=min(x_{a2},x_{b2}),y2=min(y_{a2},y_{b2})x2​=min(xa2​,xb2​),y2=min(ya2​,yb2​)

计算先交部分面积:
intersetion=max(x2−x1+1.0)∗(y2−y1+1.0)intersetion=max(x_2-x_1+1.0)*(y_2-y_1+1.0)intersetion=max(x2​−x1​+1.0)∗(y2​−y1​+1.0)

矩形框A和B的面积分别是:
SA=(xa2−xa1+1.0)∗(ya2−ya1+1.0)S_A=(x_{a2}-x_{a1}+1.0)*(y_{a2}-y_{a1}+1.0)SA​=(xa2​−xa1​+1.0)∗(ya2​−ya1​+1.0)
SB=(xb2−xb1+1.0)∗(yb2−yb1+1.0)S_B=(x_{b2}-x_{b1}+1.0)*(y_{b2}-y_{b1}+1.0)SB​=(xb2​−xb1​+1.0)∗(yb2​−yb1​+1.0)

计算相并部分面积:
union=SA+SB−intersetionunion=S_A+S_B-intersetionunion=SA​+SB​−intersetion

计算交并比:
IoU=intersetionunionIoU={{intersetion}\over{union}}IoU=unionintersetion​

为了直观的展示交并比的大小跟重合程度之间的关系,示意了不同交并比下两个框之间的相对位置关系,从 IoU = 0.95 到 IoU = 0.

Python代码实现

计算IoU,矩形框的坐标形式为xyxy

# 计算IoU,矩形框的坐标形式为xyxy
# (x1,y1)是矩形框左上角的坐标,(x2,y2)是矩形框右下角的坐标
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 ioubbox1 = [100., 100., 200., 200.]
bbox2 = [120., 120., 220., 220.]
iou = box_iou_xyxy(bbox1, bbox2)
print('IoU is {}'.format(iou))

IoU is 0.47402644317607107

计算IoU,矩形框的坐标形式为xywh

# 计算IoU,矩形框的坐标形式为xywh
# (x,y)(x, y)(x,y)是矩形框中心点的坐标,www是矩形框的宽度,hhh是矩形框的高度。
def box_iou_xywh(box1, box2):# 获取box1左上角的坐标x1min, y1min = box1[0] - box1[2] / 2.0, box1[1] - box1[3] / 2.0# 获取box1右下角的坐标x1max, 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[0] - box2[2] / 2.0# 获取box2右下角的坐标x2max, y2max = box2[0] + box2[2] / 2.0, box2[0] + box2[2] / 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 ioubbox1 = [100., 100., 200., 200.]
bbox2 = [120., 120., 220., 220.]
iou = box_iou_xywh(bbox1, bbox2)
print('IoU is {}'.format(iou))

IoU is 0.6902485659655831

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

  1. 【目标检测】概念理解:region proposal、bounding box、anchor box、ground truth、IoU、NMS、RoI Pooling

    最近刚接触图像识别,理解一些概念十分困难,尤其是动不动就冒出个看不懂的英语,让人抓狂.查了不少资料后做一个总结并加上一些自己的理解,理解若有误,烦请大家指出,相互学习. 本文主要对region pro ...

  2. 机器学习之信用卡欺诈检测(零基础,附数据及详细python代码2022年Tensorflow2)

    首先该数据参考:机器学习项目实战之信用卡欺诈检测(零基础,附数据及详细python代码) (4条消息) 机器学习项目实战之信用卡欺诈检测(零基础,附数据及详细python代码)_西南交大-Liu_z的 ...

  3. 目标检测中常提到的IoU和mAP究竟是什么?

    看完这篇就懂了. IoU intersect over union,中文:交并比.指目标预测框和真实框的交集和并集的比例. mAP mean average precision.是指每个类别的平均查准 ...

  4. 非极大值抑制_【计算机视觉——RCNN目标检测系列】三、IoU与非极大抑制

    写在前面 在上一篇博客:[计算机视觉-RCNN目标检测系列]二.边界框回归(Bounding-Box Regression)( 戴璞微:[计算机视觉-RCNN目标检测系列]二.边界框回归(Boundi ...

  5. 【R-CNN目标检测系列】三、IoU与非极大抑制

    写在前面 在上一篇博客:[计算机视觉--RCNN目标检测系列]二.边界框回归(Bounding-Box Regression)中我们主要讲解了R-CNN中边界框回归,接下来我们在这篇博客我们讲解R-C ...

  6. 目标检测入门之矩形框IOU计算

    1. 引言 在目标检测领域中,我们经常用IOU来衡量检测框和标注真实框之间的重叠程度,那么究竟该如何计算IOU呢? 闲话少说,我们直接进入今天的主题- 2. 什么是IOU? IOU(交并比 Inter ...

  7. 基础知识 | 对目标检测认识及理解

    本文分享自华为云社区<目标检测基础知识>,原文作者:lutianfei . 图片分类任务我们已经熟悉了,就是算法对其中的对象进行分类.而今天我们要了解构建神经网络的另一个问题,即目标检测问 ...

  8. 机器学习——概念理解之IoU

    IoU(Intersection over Union):交并比,在SSD的论文中也叫Jaccard Overlap,是一个意思.从字面意思上看是交集和并集的比值. 计算方式如下图所示: IoU在目标 ...

  9. 目标检测回归损失函数:SmoothL1/IoU/GIoU/DIoU/CIoU Loss

    文章目录 1. Smooth L1 Loss 1.1 假设x为预测框和真实框之间的数值差异,常用的L1和L2 Loss定义为: 1.2 上述的3个损失函数对x的导数分别为: 1.3 实际目标检测框回归 ...

最新文章

  1. pythonselenium实战 excel读取和写入_Python3.6+selenium2.53.6自动化测试_读取excel文件的方法...
  2. win10计算机无法启动mfc7450,解决联想M7650,7600,M7450,7400驱动WIN10系统下不能用固件...
  3. SQL SERVER 2008的错误日志太大的解决办法
  4. BZOJ 2073: [POI2004]PRZ( 状压dp )
  5. linux 导出io,Linux基础知识之IO重定向
  6. element-UI:el-table 表格排序
  7. Skype国际版下载方法
  8. Python——公司又双叒叕更新通讯录了,利用itchat实现微信速查公司通讯录
  9. 银行按揭借款合同范本
  10. 计算机网页的设计与应用的前言,网页设计前言.ppt
  11. word如何去掉标题前面的黑点
  12. xampp如何设置多虚拟主机访问
  13. 2020中国云计算行业研究报告 附下载地址
  14. 计算机毕业设计ssm校园招聘管理系统968b0系统+程序+源码+lw+远程部署
  15. 暴雪和黑客的战争四:暴雪的杀手锏-The Warden
  16. html实现学生成绩等级划分,【小学生成绩等级】_小学生成绩等级评价制度
  17. git color 让git有颜色
  18. C++及数据结构复习笔记(十二)(列表)
  19. 异步多线程之Thread详解
  20. 动力节点数据结构课堂笔记 2021.11.23-11.29

热门文章

  1. 题解报告:hdu 4907 Task schedule
  2. 用Python解决数据结构与算法问题
  3. C++学习(十七)(C语言部分)之 指针
  4. Android中应用安装分析
  5. python之知乎的正确打开方式
  6. 背包问题lingo求解
  7. codeforces 719C (复杂模拟-四舍五入-贪心)
  8. CTRL+SHIFT
  9. PID控制方法及C语言其实现
  10. 你可能不知道的switch