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中使用百度音乐搜索的api下载指定歌曲的lrc歌词
Jul 18 Python
Python随机生成一个6位的验证码代码分享
Mar 24 Python
Python学习小技巧之列表项的拼接
May 20 Python
python 递归遍历文件夹,并打印满足条件的文件路径实例
Aug 30 Python
Python代码实现KNN算法
Dec 20 Python
python读取图片任意范围区域
Jan 23 Python
Python3.6.x中内置函数总结及讲解
Feb 22 Python
torch 中各种图像格式转换的实现方法
Dec 26 Python
Django如何在不停机的情况下创建索引
Aug 02 Python
python生成随机数、随机字符、随机字符串
Apr 06 Python
手把手教你实现PyTorch的MNIST数据集
Jun 28 Python
Python探索生命起源 matplotlib细胞自动机动画演示
Apr 21 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生成静态页面的简单示例
2014/04/17 PHP
PHP redis实现超迷你全文检索
2017/03/04 PHP
JS操作XML中DTD介绍及使用方法分析
2019/07/04 PHP
如何在centos8自定义目录安装php7.3
2019/11/28 PHP
在浏览器窗口上添加遮罩层的方法
2012/11/12 Javascript
javascript通过class来获取元素实现代码
2013/02/20 Javascript
jquery 单引号和双引号的区别及使用注意
2013/07/31 Javascript
JSF中confirm弹出框的用法示例介绍
2014/01/07 Javascript
ie8本地图片上传预览示例代码
2014/01/12 Javascript
使用typeof判断function是否存在于上下文
2014/08/14 Javascript
深入理解javascript构造函数和原型对象
2014/09/23 Javascript
jQuery UI设置固定日期选择特效代码分享
2015/08/27 Javascript
JavaScript观察者模式(经典)
2015/12/09 Javascript
jQuery实现页面点击后退弹出提示框的方法
2016/08/24 Javascript
初探nodeJS
2017/01/24 NodeJs
Nuxt.js踩坑总结分享
2018/01/18 Javascript
vue-cli 3.0 自定义vue.config.js文件,多页构建的方法
2018/09/19 Javascript
vue 组件开发原理与实现方法详解
2019/11/29 Javascript
python解析基于xml格式的日志文件
2017/02/25 Python
ubuntu环境下python虚拟环境的安装过程
2018/01/07 Python
基于tensorflow加载部分层的方法
2018/07/26 Python
Django 路由控制的实现代码
2018/11/08 Python
python3使用pandas获取股票数据的方法
2018/12/22 Python
python 使用turtule绘制递归图形(螺旋、二叉树、谢尔宾斯基三角形)
2019/05/30 Python
详解django中Template语言
2020/02/22 Python
Python 字典一个键对应多个值的方法
2020/09/29 Python
Ubuntu 20.04安装Pycharm2020.2及锁定到任务栏的问题(小白级操作)
2020/10/29 Python
Python如何利用Har文件进行遍历指定字典替换提交的数据详解
2020/11/05 Python
CSS Grid布局教程之浏览器开启CSS Grid Layout汇总
2014/12/30 HTML / CSS
英国在线房屋中介网站:Yopa
2018/01/09 全球购物
办公室打字员岗位职责
2014/04/16 职场文书
四风问题对照检查材料整改措施
2014/09/27 职场文书
2014年客户经理工作总结
2014/11/20 职场文书
给老婆的保证书怎么写
2015/05/08 职场文书
道歉情书大全
2015/05/12 职场文书
Vue中foreach数组与js中遍历数组的写法说明
2021/06/05 Vue.js