python不使用for计算两组、多个矩形两两间的iou方式


Posted in Python onJanuary 18, 2020

解决问题: 不使用for计算两组、多个矩形两两间的iou

使用numpy广播的方法,在python程序中并不建议使用for语句,python中的for语句耗时较多,如果使用numpy广播的思想将会提速不少。

代码:

def calc_iou(bbox1, bbox2):
 if not isinstance(bbox1, np.ndarray):
  bbox1 = np.array(bbox1)
 if not isinstance(bbox2, np.ndarray):
  bbox2 = np.array(bbox2)
 xmin1, ymin1, xmax1, ymax1, = np.split(bbox1, 4, axis=-1)
 xmin2, ymin2, xmax2, ymax2, = np.split(bbox2, 4, axis=-1)
 
 area1 = (xmax1 - xmin1) * (ymax1 - ymin1)
 area2 = (xmax2 - xmin2) * (ymax2 - ymin2)
 
 ymin = np.maximum(ymin1, np.squeeze(ymin2, axis=-1))
 xmin = np.maximum(xmin1, np.squeeze(xmin2, axis=-1))
 ymax = np.minimum(ymax1, np.squeeze(ymax2, axis=-1))
 xmax = np.minimum(xmax1, np.squeeze(xmax2, axis=-1))
 
 h = np.maximum(ymax - ymin, 0)
 w = np.maximum(xmax - xmin, 0)
 intersect = h * w
 
 union = area1 + np.squeeze(area2, axis=-1) - intersect
 return intersect / union

程序中输入为多个矩形[xmin, ymin, xmax,ymax]格式的数组或者list,输出为numpy格式,例:输入的shape为(3, 4)、(5,4)则输出为(3, 5)各个位置为boxes间相互的iou值。后面会卡一个iou的阈值,然后就可以将满足条件的索引取出。如:

def delete_bbox(bbox1, bbox2, roi_bbox1, roi_bbox2, class1, class2, idx1, idx2, iou_value):
 idx = np.where(iou_value > 0.4)
 left_idx = idx[0]
 right_idx = idx[1]
 left = roi_bbox1[left_idx]
 right = roi_bbox2[right_idx]
 xmin1, ymin1, xmax1, ymax1, = np.split(left, 4, axis=-1)
 xmin2, ymin2, xmax2, ymax2, = np.split(right, 4, axis=-1)
 left_area = (xmax1 - xmin1) * (ymax1 - ymin1)
 right_area = (xmax2 - xmin2) * (ymax2 - ymin2)
 left_idx = left_idx[np.squeeze(left_area < right_area, axis=-1)]#小的被删
 right_idx = right_idx[np.squeeze(left_area > right_area, axis=-1)]
 
 bbox1 = np.delete(bbox1, idx1[left_idx], 0)
 class1 = np.delete(class1, idx1[left_idx])
 bbox2 = np.delete(bbox2, idx2[right_idx], 0)
 class2 = np.delete(class2, idx2[right_idx])
 
 return bbox1, bbox2, class1, class2

IOU计算原理:

python不使用for计算两组、多个矩形两两间的iou方式

ymin = np.maximum(ymin1, np.squeeze(ymin2, axis=-1))

xmin = np.maximum(xmin1, np.squeeze(xmin2, axis=-1))

ymax = np.minimum(ymax1, np.squeeze(ymax2, axis=-1))

xmax = np.minimum(xmax1, np.squeeze(xmax2, axis=-1))

h = np.maximum(ymax - ymin, 0)

w = np.maximum(xmax - xmin, 0)

intersect = h * w

计算矩形间min的最大值,max的最小值,如果ymax-ymin值大于0则如左图所示,如果小于0则如右图所示

以上这篇python不使用for计算两组、多个矩形两两间的iou方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
利用Psyco提升Python运行速度
Dec 24 Python
用PyQt进行Python图形界面的程序的开发的入门指引
Apr 14 Python
python 根据pid杀死相应进程的方法
Jan 16 Python
几种实用的pythonic语法实例代码
Feb 24 Python
python+POP3实现批量下载邮件附件
Jun 19 Python
nginx黑名单和django限速,最简单的防恶意请求方法分享
Aug 09 Python
python读取Excel表格文件的方法
Sep 02 Python
Python 实现一个手机号码获取妹子名字的功能
Sep 25 Python
Python拆分大型CSV文件代码实例
Oct 07 Python
python神经网络编程实现手写数字识别
May 27 Python
解决Tkinter中button按钮未按却主动执行command函数的问题
May 23 Python
Python如何导出导入所有依赖包详解
Jun 08 Python
浅谈Python3实现两个矩形的交并比(IoU)
Jan 18 #Python
利用setuptools打包python程序的方法步骤
Jan 18 #Python
python计算二维矩形IOU实例
Jan 18 #Python
解决python replace函数替换无效问题
Jan 18 #Python
使用Python来做一个屏幕录制工具的操作代码
Jan 18 #Python
pytorch 状态字典:state_dict使用详解
Jan 17 #Python
Python标准库itertools的使用方法
Jan 17 #Python
You might like
基于initPHP的框架介绍
2013/04/18 PHP
探讨PHP使用eAccelerator的API开发详解
2013/06/09 PHP
浅析PHP substr,mb_substr以及mb_strcut的区别和用法
2013/06/21 PHP
php获得客户端浏览器名称及版本的方法(基于ECShop函数)
2015/12/23 PHP
JQuery 常用操作代码
2010/03/14 Javascript
JavaScript高级程序设计(第3版)学习笔记2 js基础语法
2012/10/11 Javascript
javascript 全选与全取消功能的实现代码
2012/12/23 Javascript
Javascript全局变量var与不var的区别深入解析
2013/12/09 Javascript
Javascript的严格模式strict mode详细介绍
2014/06/06 Javascript
yepnope.js使用详解及示例分享
2014/06/23 Javascript
jQuery实现鼠标单击网页文字后在文本框显示的方法
2015/05/06 Javascript
ECMAScript6块级作用域及新变量声明(let)
2015/06/12 Javascript
JS实现的5级联动Select下拉选择框实例
2015/08/17 Javascript
JS+CSS实现仿支付宝菜单选中效果代码
2015/09/25 Javascript
Hammer.js+轮播原理实现简洁的滑屏功能
2016/02/02 Javascript
bootstrap提示标签、提示框实现代码
2016/12/28 Javascript
JS实现获取图片大小和预览的方法完整实例【兼容IE和其它浏览器】
2017/04/24 Javascript
小程序实现展开/收起的效果示例
2018/09/22 Javascript
node.js中fs文件系统模块的使用方法实例详解
2020/02/13 Javascript
JS+CSS+HTML实现“代码雨”类似黑客帝国文字下落效果
2020/03/17 Javascript
[02:36]DOTA2英雄基础教程 帕格纳
2014/01/20 DOTA
[50:48]LGD vs CHAOS 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
[04:40]DOTA2-DPC中国联赛1月26日Recap集锦
2021/03/11 DOTA
python在windows下创建隐藏窗口子进程的方法
2015/06/04 Python
jupyter安装小结
2016/03/13 Python
对PyTorch torch.stack的实例讲解
2018/07/30 Python
Python定时任务APScheduler的实例实例详解
2019/07/22 Python
python+selenium定时爬取丁香园的新型冠状病毒数据并制作出类似的地图(部署到云服务器)
2020/02/09 Python
Python Switch Case三种实现方法代码实例
2020/06/18 Python
PyQt5中QSpinBox计数器的实现
2021/01/18 Python
matplotlib部件之套索Lasso的使用
2021/02/24 Python
水果花束:Fruit Bouquets
2017/12/20 全球购物
文明家庭先进事迹材
2014/01/27 职场文书
学校四群教育实施方案
2014/06/12 职场文书
关于社会实践的心得体会(2016最新版)
2016/01/25 职场文书
读后感怎么写?书写读后感的基本技巧!
2019/12/10 职场文书