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根据经纬度计算距离示例
Feb 16 Python
使用Python编写一个模仿CPU工作的程序
Apr 16 Python
Python使用urllib2模块抓取HTML页面资源的实例分享
May 03 Python
Python脚本实现Web漏洞扫描工具
Oct 25 Python
python去掉 unicode 字符串前面的u方法
Oct 21 Python
使用python绘制二元函数图像的实例
Feb 12 Python
Python实现蒙特卡洛算法小实验过程详解
Jul 12 Python
Python 实现自动获取种子磁力链接方式
Jan 16 Python
python实现opencv+scoket网络实时图传
Mar 20 Python
Flask中sqlalchemy模块的实例用法
Aug 02 Python
Python按顺序遍历并读取文件夹中文件
Apr 29 Python
Python如何快速找到多个字典中的公共键(key)
Apr 29 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
cakephp打印sql语句的方法
2015/02/13 PHP
Thinkphp结合ajaxFileUpload实现异步图片传输示例
2017/03/13 PHP
学习ExtJS(二) Button常用方法
2009/10/07 Javascript
jQuery 美元符冲突的解决方法
2010/03/28 Javascript
javascript学习笔记(二) js一些基本概念
2012/06/18 Javascript
jquery五角星评分插件示例分享
2014/02/21 Javascript
escape编码与unescape解码汉字出现乱码的解决方法
2014/07/02 Javascript
JavaScript分秒倒计时器实现方法
2015/02/02 Javascript
zTree插件下拉树使用入门教程
2016/04/11 Javascript
BootStrap.css 在手机端滑动时右侧出现空白的原因及解决办法
2016/06/07 Javascript
使用JS实现图片展示瀑布流效果的实例代码
2016/09/12 Javascript
jQuery中layer分页器的使用
2017/03/13 Javascript
深入理解AngularJs-scope的脏检查(一)
2017/06/19 Javascript
vue.js移动数组位置,同时更新视图的方法
2018/03/08 Javascript
Koa2 之文件上传下载的示例代码
2018/03/29 Javascript
基于Vue-Cli 打包自动生成/抽离相关配置文件的实现方法
2018/12/09 Javascript
如何利用node转发请求详解
2020/09/17 Javascript
数据挖掘之Apriori算法详解和Python实现代码分享
2014/11/07 Python
Python 列表(List) 的三种遍历方法实例 详解
2017/04/15 Python
查看django执行的sql语句及消耗时间的两种方法
2018/05/29 Python
Python查找数组中数值和下标相等的元素示例【二分查找】
2019/02/13 Python
浅谈keras中的Merge层(实现层的相加、相减、相乘实例)
2020/05/23 Python
keras使用Sequence类调用大规模数据集进行训练的实现
2020/06/22 Python
IE兼容css3圆角的实现代码
2011/07/21 HTML / CSS
法国和欧洲海边和滑雪度假:Pierre & Vacances
2017/01/04 全球购物
工商管理专业应届生求职信
2013/11/04 职场文书
药剂专业自荐信范文
2014/04/16 职场文书
自主招生推荐信范文
2014/05/10 职场文书
公证委托书格式
2014/09/13 职场文书
商场收银员岗位职责
2015/04/07 职场文书
因家庭原因离职的辞职信范文
2015/05/12 职场文书
西柏坡观后感
2015/06/08 职场文书
看上去很美观后感
2015/06/10 职场文书
python 如何执行控制台命令与操作剪切板
2021/05/20 Python
使用Ajax实现进度条的绘制
2022/04/07 Javascript
mysql全面解析json/数组
2022/07/07 MySQL