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 相关文章推荐
python杀死一个线程的方法
Sep 06 Python
TensorFlow深度学习之卷积神经网络CNN
Mar 09 Python
Django项目中model的数据处理以及页面交互方法
May 30 Python
python遍历文件夹,指定遍历深度与忽略目录的方法
Jul 11 Python
计算机二级python学习教程(1) 教大家如何学习python
May 16 Python
简单了解Django应用app及分布式路由
Jul 24 Python
python 利用jinja2模板生成html代码实例
Oct 10 Python
如何定义TensorFlow输入节点
Jan 23 Python
Python 面向对象之类class和对象基本用法示例
Feb 02 Python
python 装饰器重要在哪
Feb 14 Python
利用python调用摄像头的实例分析
Jun 07 Python
python标准库ElementTree处理xml
May 20 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
yii数据库的查询方法
2015/12/28 PHP
PHP url的pathinfo模式加载不同控制器的简单实现
2016/08/12 PHP
js获取RadioButtonList的Value/Text及选中值等信息实现代码
2013/03/05 Javascript
JS复制到剪贴板示例代码
2013/10/30 Javascript
js实现数组去重、判断数组以及对象中的内容是否相同
2013/11/29 Javascript
深入理解Javascript中this的作用域
2014/08/12 Javascript
在JS方法中返回多个值的方法汇总
2015/05/20 Javascript
Java Mybatis框架入门基础教程
2015/09/21 Javascript
基于jQuery Tipso插件实现消息提示框特效
2016/03/16 Javascript
JS简单设置下拉选择框默认值的方法
2016/08/20 Javascript
移动端刮刮乐的实现方式(js+HTML5)
2017/03/23 Javascript
利用JS如何获取form表单数据
2019/12/19 Javascript
ES6的循环与可迭代对象示例详解
2021/01/31 Javascript
python利用elaphe制作二维条形码实现代码
2012/05/25 Python
python使用PIL模块实现给图片打水印的方法
2015/05/22 Python
python装饰器实例大详解
2017/10/25 Python
Python生成器generator用法示例
2018/08/10 Python
在python中利用KNN实现对iris进行分类的方法
2018/12/11 Python
pyQT5 实现窗体之间传值的示例
2019/06/20 Python
手机使用python操作图片文件(pydroid3)过程详解
2019/09/25 Python
用python的turtle模块实现给女票画个小心心
2019/11/23 Python
pytorch 批次遍历数据集打印数据的例子
2019/12/30 Python
基于python实现监听Rabbitmq系统日志代码示例
2020/11/28 Python
python自动打开浏览器下载zip并提取内容写入excel
2021/01/04 Python
python实现经典排序算法的示例代码
2021/02/07 Python
新西兰网上购物,折扣店:BestDeals.co.nz
2019/03/20 全球购物
Coccinelle官网:意大利的著名皮具品牌
2019/05/15 全球购物
网上开商店的创业计划书
2014/01/19 职场文书
2014年社区学雷锋活动总结
2014/03/09 职场文书
工程质量承诺书范文
2014/03/27 职场文书
法学院毕业生求职信
2014/06/25 职场文书
2014年民主评议党员工作总结
2014/12/02 职场文书
医药公司开票员岗位职责
2015/04/15 职场文书
2015年政风行风工作总结
2015/04/21 职场文书
反腐倡廉影片观后感
2015/06/08 职场文书
win11无线投屏在哪设置? win11无线投屏功能的使用方法
2022/04/08 数码科技