Python 极简实现 IoU
来源 | 简明AI
头图 | 下载于视觉中国
出品 | AI 科技大本营(ID:rgznai100)
IOU中文名叫交并比,见名知意就是交集与并集的比值。是在目标检测中常用的算法。
IoU原理
如上图所示,就是计算上面阴影部分与下面阴影部分的比值。
我们来拆分一下任务,分子部分就是Box1与Box2交集的面积,先设为A1。分母部分是Box1与Box2并集集的面积,设为A2,其实也是Box1面积S1加上Box2面积S2再减去一个A1(为什么要减去A1呢,因为Box1与Box2重合了A1部分,需要减去一个,没想通的童鞋去面壁0.1秒钟去:)
IoU = A1 / A2
A2 = S1 + S2 -A1
IoU = A1 / (S1 + S2 -A1)
S1是Box1的面积,S2是Box2的面积。其实问题就转化为了对Box与A1求解。
下面我们继续拆解任务
1、坐标轴的定义
OpenCV坐标器
首先先看下在OpenCV中,坐标轴的定义。原点位于图片左上角,向右为X轴正方向,向下为Y轴正方向(这一点不同于数学中定义)。
2、Box表示与计算
Box有常用的两种表达方式:
1:Boxa = (xmin,ymin,xmax,ymax)(coco与voc格式);2:Boxb = (xcenter,ycenter,w,h)(yolo格式)。
其实就是根据一个事物的不同表达方式,本质上是一样的。
下面给出对应转换关系:
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的面积计算为 w*h
S_Boxa = (xmax-xmin)*(ymax-ymin) = (Boxa[2]-Boxa[0])*(Boxa[3]-Boxa[1])
S_Boxb = w*h = Boxb[2]*Boxb[3]
3、A1的表示与计算
box相交的一些情况
计算相交的面积和上个问题类似,只需计算出相交框的w与h如果没有相交,就是0。由上图可以发现以下规律:如果相交时
xmin =max(xmin1, xmin2)#相交框xmin是两个框的左上角x坐标的最大值:
ymin =max(ymin1, ymin2)#相交框ymin是两个框的左上角y坐标的最大值:
xmax =min(xmax1, xmax2)#相交框xmax是两个框的右下角x坐标的最大值:
ymax =min(ymax1, ymax2)#相交框ymax是两个框的右下角y坐标的最大值:
最后处理一下不想交的情况即可,可以发现当不想交时,就会至少出现一下情况的一种:
xmax<=xmin or ymax<ymin
所以处理方法很简单:出现任一情况,w or h就会有一个等于0,使得计算出的面积也为0
w =max(0, xmax - xmin)
h =max(0, ymax - ymin)
所以整体代码就挥之欲出了,是不是也挺简单的:)
代码
def cal_iou(box1, box2):""":param box1: = [xmin1, ymin1, xmax1, ymax1]:param box2: = [xmin2, ymin2, xmax2, ymax2]:return:"""xmin1, ymin1, xmax1, ymax1 = box1xmin2, ymin2, xmax2, ymax2 = box2# 计算每个矩形的面积s1 = (xmax1 - xmin1) * (ymax1 - ymin1) # b1的面积s2 = (xmax2 - xmin2) * (ymax2 - ymin2) # b2的面积# 计算相交矩形xmin = max(xmin1, xmin2)ymin = max(ymin1, ymin2)xmax = min(xmax1, xmax2)ymax = min(ymax1, ymax2)w = max(0, xmax - xmin)h = max(0, ymax - ymin)a1 = w * h # C∩G的面积a2 = s1 + s2 - a1iou = a1 / a2 #iou = a1/ (s1 + s2 - a1)return iou
参考链接:
https://blog.csdn.net/guyuealian/article/details/86488008#commentBox
https://blog.csdn.net/weixin_40922744/article/details/102988751
文章来源:https://xiaosongshine.blog.csdn.net/article/details/108244497
60+专家,13个技术领域,CSDN 《IT 人才成长路线图》重磅来袭!
直接扫码或微信搜索「CSDN」公众号,后台回复关键词「路线图」,即可获取完整路线图!更多精彩推荐
☞赠书 | VR 设备装备指南☞微软每年豪砸安全研发 10 亿美元,聊聊背后的技术密码☞3D 建模费时费力,Python 让照片秒变模型点分享点收藏点点赞点在看
相关文章:

静态页htm传参数
//从转向过来的URL中截取参数 开始function SplitUrl(key){var fstrkey;var getstr;var urldocument.URL.toString();urlurl.toLowerCase();//转为小写var locurl.indexOf(fstr);if(loc>0){getstrurl.substring(locfstr.length,url.length);return getstr;}else{return &quo…

vue router 入门笔记
vue router 入门笔记 tips: components优先级大于component,即当一个route对象里同时配置了component和components时component视为无效即使route对象有name属性,也要配置一个path属性。name属性只是配对用的,path是要直接打到url上…

用C#的Raw Socket实现网络封包监视
<script language"javascript" src"/ad/js/edu_left_300-300.js" type"text/javascript"></script> 谈起socket编程,大家也许会想起QQ和IE,没错。还有许多网络工具如P2P、NetMeeting等在应用层实现的应用程序…

人工智能是否能开启人类世界新纪元?
想必许多人都不止一次地幻想过,当人工智能发展到极限时,它将为我们的生活带来多少触手可及的便捷,或是意想不到的惊喜呢?试想一下我们身处英剧《黑镜》的世界中,人类的生活里充斥着人工智能对社交行为的各种评分机制&a…

1月国内操作系统市场:Windows XP份额高达60.84%
IDC评述网(idcps.com)02月21日报道:据CNZZ数据,在国内操作系统市场上,2014年1月份,微软Windows系统依旧称霸市场,份额为90.63%,环比去年末下滑0.57%。对于市场份额下滑一事ÿ…

17.08.17
控制文件 丢失部分控制文件: SQL> select * from v$controlfile; $ >/u01/app/oracle/oradata/orcl/control01.ctl SQL> select * from v$tablespace; 报错 SQL> alter system checkpoint; 报错 $ vi /u01/app/oracle/diag/rd…

用C#实现基于TCP协议的网络通讯
TCP协议是一个基本的网络协议,基本上所有的网络服务都是基于TCP协议的,如HTTP,FTP等等,所以要了解网络编程就必须了解基于TCP协议的编程。然而TCP协议是一个庞杂的体系,要彻底的弄清楚它的实现不是一天两天的功夫,所幸…

Java NIO系列教程(二) Channel
为什么80%的码农都做不了架构师?>>> Java NIO的通道类似流,但又有些不同: 既可以从通道中读取数据,又可以写数据到通道。但流的读写通常是单向的。通道可以异步地读写。通道中的数据总是要先读到一个Buffer࿰…

百度CTO王海峰博鳌解读AI“融合创新”,算力算法数据发挥综合作用
4月18至21日,博鳌亚洲论坛2021年年会在海南博鳌举行。19日下午,百度CTO王海峰受邀参加本届博鳌年会“后疫情时代的人工智能”为主题的圆桌论坛。与公钥加密技术之父、图灵奖得主惠特菲尔德迪菲,阿斯利康公司董事长雷夫约翰森等多位专家和企业…

Java开发工具(Eclipse中内容辅助键的使用)
* A:Alt/ 起提示作用* B:mainalt/,sysoalt/,给出其他提示* C:补充输出语句,选中需要输出的部分,alt/选择最后一项即可* C:定义自己的alt / * windows--perference-Java-Editor-Templates--New * A:新建 ctrl n(new)* B:格式化 ctrlshiftf(format)* C:导入包 ctrlshifto *…

常用的css3的新属性
2019独角兽企业重金招聘Python工程师标准>>> 作为前端开发人员,如果你还不知道或还没有接触过CSS3,那么你真的OUT了!就像蒸汽机的发明标志工业革命的开始一样,CSS3和HTML5的出现,将会带来WEB前端开发以及互…

高效分页存储过程
存储过程与页面调用如下: CREATE PROCEDURE search_sptblName varchar(255), -- 表名 strGetFields varchar(1000) *, -- 需要返回的列 fldName varchar(255), -- 排序的字段名 PageSize int 10, -- 页尺寸 PageIndex int , -- 页码 doCount bit 0, -- 返回记录…

2020年企业业务营收同比增长23.0%,华为的数字化转型实践之道
近日,在华为分析师大会期间,华为举办“共创行业新价值”主题峰会,与来自全球的400多名行业分析师、财经分析师、各行业意见领袖及媒体现场参会,分享了对行业趋势的洞察,解决方案在具体行业场景中的实践与探索ÿ…

Neo4j - CQL简介
CQL代表Cypher查询语言。 像Oracle数据库具有查询语言SQL,Neo4j具有CQL作为查询语言。 Neo4j CQL - 它是Neo4j图形数据库的查询语言。它是一种声明性模式匹配语言它遵循SQL语法。它的语法是非常简单且人性化、可读的格式。常用的Neo4j CQL命令: NO.CQL…

String.Format格式说明
C#格式化数值结果表 字符 说明 示例 输出 C货币string.Format("{0:C3}", 2)$2.000D十进制string.Format("{0:D3}", 2)002E科学计数法1.20E0011.20E001G常规string.Format("{0:G}", 2)2N用分号隔开的数字string.Format("{…

Azure 中国四年扩容 12 倍还不够,微软放话:全球每年新建 50-100 数据中心!
作者 | 伍杏玲出品 | AI科技大本营(ID:rgznai100)数据已渗透到我们生活和工作的方方面面,如今全球正处于经济发展转型与变革的关键时期,数据作为数字经济的核心生产要素,无疑建设先进的数据中心是科技企业的硬核 IT 实…

.NET中多线程的使用
为什么80%的码农都做不了架构师?>>> 1、不需要传递参数,也不需要返回参数。启动一个线程最直观的办法是实用Thread类。 2、ThreadStart类型的委托,这个委托制定了线程需要执行的方法:method。ThreadStart这个委托定义…

[数位dp] spoj 10738 Ra-One Numbers
题意:给定x、y。为[x,y]之间有多少个数的偶数位和减去奇数位和等于一。个位是第一位。 样例: 101-01 所以10是这种数 思路:数位dp[i][sum][ok] i位和为sum 是否含有前导0. 然后就是由于有负数 所以依据范围把0设置为100 然后最后和等于101则为…

VML 画统计 柱状、饼图、折线
<!-- --><!-- 涉及文件 alt.js / function.asp--><!-- 必须包含页面所有代码 --><!-- 高度定义有待改进 chart_top --> <html xmlns:v"urn:schemas-microsoft-com:vml" xmlns:o"urn:schemas-microsoft-com:office:office">…

在Ubuntu下FFmpeg编译,支持x264和x265(HECV)
所有下载的源在Ubuntu下FFmpeg编译,支持x264和x265。Ubuntu 12.04FFmpeg 2.1 Release 注意:cmake要升级要2.8.8yasm要升级到1.2.00000. 资料:http://stackoverflow.com/questions/19634453/ffmpeg-how-to-generate-a-mp4-with-h-265-codecFF…

Java 程序员薪资这么高,取决于什么?
众多行业中,程序员当然属于高薪职业。无论是国内还是国外,IT行业的程序员、工程师,甚至连码农都要比其他行业的从业者的收入高很多!但是Java程序员拿多少钱跟有多少经验有关系,但经验的多少跟年限没有必然关系。工作以…

极品:蓝丽网 - Vml图像画板.2003 web上的PhotoShop
<HTML xmlns:v><HEAD><META http-equiv"Content-Type" content"text/html; Charsetgb2312"><META name"GENERATOR" content"网络程序员伴侣(Lshdic)2004"><META name"GENERATORDOWNLOADADDRESS"…

库克踏春而来,小而美的 iPhone 全新配件问世
整理 | 苏宓出品 | CSDN(ID:CSDNnews)从乔布斯时代的「不要问消费者想要什么,一个企业的目标就是去创造那些消费者需要但无法形容和表达的需求」,到库克心中的「创新不一定是改变,而是做得更好」࿰…

嵌入式实现 微信网页版 群发信息。
为什么80%的码农都做不了架构师?>>> webchatHelper 一个微信群发信息的chrome扩展 咦,动态图片发不出? http://github.com/think2011/webchatHelper/raw/master/img/demo.gif 杂乱的源码地址:https://github.com/thi…

linux 在执行命令过程中,反单引号(`)这个符号代表的意义为何?
在一串命令中,在之内的命令将会被先执行,而且执行出来的结果将作为外部的输入信息。例如:uname -r 会显示出目前的内核版本,而我们的内核版本在/lib/modules里面,因此。你可以先执行uname -r 找出内核版本,…
C#精髓【月儿原创】第二讲 WMI完美秀出CPU编号厂商主频百分比等全部信息
说明:准备出一个系列,所谓精髓讲C#语言要点。这个系列没有先后顺序,不过尽量做到精。可能会不断增删整理,本系列最原始出处是csdn博客,谢谢关注。 C#精髓 第二讲 WMI完美秀出CPU编号厂商主频电压等全部信息 作者:清…

联邦学习,为何而生?
隐私数据是否早已泄露,而我们却毫无察觉?随着大数据、边缘计算、大型云计算平台和各种开源框架的发展,机器学习等人工智能技术以前所未有的速度应用到各个行业,人工智能技术带来了新的挑战,数据的隐私和安全引起了全世…

css控制非固定文本自动换行
不知道为什么一直记不住这个属性,趁有时间整理了下下! 强制不换行p.www_52css_com { white-space:nowrap; } 自动换行p.www_52css_com { word-wrap: break-word; word-break: normal; } 强制英文单词断行p.www_52css_com { word-br…

认清Hadoop和Spark的这几点区别,学习时才能事半功倍
很多初学Hadoop开发的同学分不清Hadoop和Spark究竟有什么联系?搞不清Hadoop和Spark是两个独立的框架,还是必须相互依存才能完成工作?今天就给大家分析一下Hadoop和Spark几点区别。Hadoop和Spark各是什么?HadoopHadoop是一分布式系…
Visual Studio2005奇怪的bug及解决【月儿原创】
Visual Studio2005查看设计器打开失败的bug及解决 作者:清清月儿 主页:http://blog.csdn.net/21aspnet/ 时间:2007.3.23 在WinForm中报如下的错: Form1 可以进行设计,但不是文件中的第一个类。Visual …