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 相关文章推荐
pycharm 使用心得(五)断点调试
Jun 06 Python
python统计一个文本中重复行数的方法
Nov 19 Python
利用pyinstaller或virtualenv将python程序打包详解
Mar 22 Python
python网络爬虫之如何伪装逃过反爬虫程序的方法
Nov 23 Python
PyTorch上搭建简单神经网络实现回归和分类的示例
Apr 28 Python
tensorflow: 查看 tensor详细数值方法
Jun 13 Python
使用TensorFlow实现SVM
Sep 06 Python
python3实现钉钉消息推送的方法示例
Mar 14 Python
Python Opencv实现图像轮廓识别功能
Mar 23 Python
python两种获取剪贴板内容的方法
Nov 06 Python
python gui开发——制作抖音无水印视频下载工具(附源码)
Feb 07 Python
深入理解pytorch库的dockerfile
Jun 10 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
mysql_fetch_assoc和mysql_fetch_row的功能加起来就是mysql_fetch_array
2007/01/15 PHP
ThinkPHP实现多数据库连接的解决方法
2014/07/01 PHP
php创建多级目录与级联删除文件的方法示例
2019/09/12 PHP
浏览器脚本兼容 文本框中,回车键触发事件的兼容
2010/06/21 Javascript
深入理解JavaScript系列(3) 全面解析Module模式
2012/01/15 Javascript
关于jquery css的使用介绍
2013/04/18 Javascript
jquery仿京东导航/仿淘宝商城左侧分类导航下拉菜单效果
2013/04/24 Javascript
javascript实现日期格式转换
2014/12/16 Javascript
node.js中的fs.readlink方法使用说明
2014/12/17 Javascript
javascript每日必学之基础入门
2016/02/16 Javascript
Bootstrap前端开发案例一
2016/06/17 Javascript
bootstrap下拉列表与输入框组结合的样式调整
2016/10/08 Javascript
如何学JavaScript?前辈的经验之谈
2016/12/28 Javascript
手机端js和html5刮刮卡效果
2020/09/29 Javascript
彻底揭秘keep-alive原理(小结)
2019/05/05 Javascript
js简单的分页器插件代码实例
2019/09/11 Javascript
Vue+elementui 实现复杂表头和动态增加列的二维表格功能
2019/09/23 Javascript
[01:13]这,就是刀塔
2014/07/16 DOTA
Django中login_required装饰器的深入介绍
2017/11/24 Python
pandas基于时间序列的固定时间间隔求均值的方法
2019/07/04 Python
Flask配置Cors跨域的实现
2019/07/12 Python
django中related_name的用法说明
2020/05/20 Python
Python工程师必考的6个经典面试题
2020/06/28 Python
Python利用pip安装tar.gz格式的离线资源包
2020/09/14 Python
HTML5+CSS3模仿优酷视频截图功能示例
2017/01/05 HTML / CSS
Expedia英国:全球最大的在线旅游公司
2017/09/07 全球购物
草莓网化妆品澳大利亚站:Strawberrynet AU
2017/12/18 全球购物
NYX Professional Makeup官方网站:专业彩妆和美容产品
2019/10/29 全球购物
销售个人求职信范文
2014/04/28 职场文书
党建工作先进材料
2014/05/02 职场文书
应届毕业生求职信范文
2014/07/07 职场文书
2014年最新党员对照检查材料汇总
2014/09/15 职场文书
2014年小学教师工作自我评价
2014/09/22 职场文书
2015年党员公开承诺书范文
2015/01/22 职场文书
刑事附带民事上诉状
2015/05/23 职场文书
php远程请求CURL案例(爬虫、保存登录状态)
2021/04/01 PHP