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的id()函数解密过程
Dec 25 Python
python在控制台输出进度条的方法
Jun 20 Python
Python中Threading用法详解
Dec 27 Python
Flask框架响应、调度方法和蓝图操作实例分析
Jul 24 Python
Django时区详解
Jul 24 Python
Python assert关键字原理及实例解析
Dec 13 Python
Cython编译python为so 代码加密示例
Dec 23 Python
Pytorch转tflite方式
May 25 Python
tensorflow dataset.shuffle、dataset.batch、dataset.repeat顺序区别详解
Jun 03 Python
matplotlib基础绘图命令之errorbar的使用
Aug 13 Python
python实现逻辑回归的示例
Oct 09 Python
Python利用imshow制作自定义渐变填充柱状图(colorbar)
Dec 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
php单文件版在线代码编辑器
2015/03/12 PHP
PHP生成各种常见验证码和Ajax验证过程
2016/01/10 PHP
Laravel 不同生产环境服务器的判断实践
2019/10/15 PHP
PHP的图像处理实例小结【文字水印、图片水印、压缩图像等】
2019/12/20 PHP
javascript编程起步(第五课)
2007/02/27 Javascript
javascript HTMLEncode HTMLDecode的完整实例(兼容ie和火狐)
2009/06/02 Javascript
javascript 必知必会之closure
2009/09/21 Javascript
再谈javascript 动态添加样式规则 W3C校检
2009/12/25 Javascript
使用jQuery实现的掷色子游戏动画效果
2014/03/14 Javascript
如何书写高质量jQuery代码(使用jquery性能问题)
2014/06/30 Javascript
用js通过url传参把数据从一个页面传到另一个页面
2014/09/01 Javascript
基于jquery实现表格内容筛选功能实例解析
2016/05/09 Javascript
JS生成一维码(条形码)功能示例
2017/01/19 Javascript
利用node.js本地搭建HTTP服务器
2017/04/19 Javascript
详解vuejs之v-for列表渲染
2017/06/22 Javascript
JS 验证码功能的三种实现方式
2018/11/26 Javascript
Vue获取微博授权URL代码实例
2020/11/04 Javascript
[00:39]DOTA2上海特级锦标赛 Liquid战队宣传片
2016/03/04 DOTA
深入理解Python中变量赋值的问题
2017/01/12 Python
python基础教程之Filter使用方法
2017/01/17 Python
Python实现返回数组中第i小元素的方法示例
2017/12/04 Python
python 监听salt job状态,并任务数据推送到redis中的方法
2019/01/14 Python
Python使用mongodb保存爬取豆瓣电影的数据过程解析
2019/08/14 Python
python等差数列求和公式前 100 项的和实例
2020/02/25 Python
PyTorch加载自己的数据集实例详解
2020/03/18 Python
英国在线泳装店:Simply Swim
2019/05/05 全球购物
描述RIP和OSPF区别以及特点
2015/01/17 面试题
医务人员竞聘职务自我评价分享
2013/11/08 职场文书
护理专业大学生自我推荐信
2014/01/25 职场文书
责任书格式范文
2014/07/28 职场文书
个人先进事迹材料范文
2014/12/29 职场文书
新教师个人总结
2015/02/06 职场文书
广告业务员岗位职责
2015/02/13 职场文书
书法社团活动总结
2015/05/07 职场文书
2016年党员创先争优公开承诺书
2016/03/25 职场文书
​(迎国庆)作文之我爱我的祖国
2019/09/19 职场文书