博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
目标检测——IoU 计算
阅读量:4338 次
发布时间:2019-06-07

本文共 1893 字,大约阅读时间需要 6 分钟。

Iou 的计算

我们先考虑一维的情况:令 \(A = [x_1,x_2], B = [y_1, y_2]\),若想要 \(A\)\(B\) 有交集,需要满足如下情况:

685754-20190328230226115-1099323701.jpg

简言之,要保证 \(A\)\(B\) 的最大值中最小的那个减去它们中的最小值中最大的那个即可获得公共部分,代码实现如下:

class Anchor:    def __init__(self, base_size=16):        self.base_size = base_size  # 滑动窗口的大小        if not base_size:            raise ValueError("Invalid base_size: {}.".format(base_size))        self._anchor = np.array([1, 1, self.base_size, self.base_size]) - 1    @property    def anchor(self):        return self._anchor    @anchor.setter    def anchor(self, new_anchor):        self._anchor = new_anchor    @property    def w(self):        '''        锚框的宽度        '''        return self.anchor[2] - self.anchor[0] + 1    @property    def h(self):        '''        锚框的高度        '''        return self.anchor[3] - self.anchor[1] + 1    @property    def size(self):        '''        锚框的面积        '''        return self.w * self.h    @property    def _whctrs(self):        """        Return x center, and y center for an anchor (window). 锚框的中心坐标        """        x_ctr = self.anchor[0] + 0.5 * (self.w - 1)        y_ctr = self.anchor[1] + 0.5 * (self.h - 1)        return np.array([x_ctr, y_ctr])    @staticmethod    def _coordinate(aspect, ctr):        '''        依据宽高组合计算锚框的坐标        '''        k = (aspect - 1) / 2        return np.concatenate([ctr - k, ctr + k], axis=1)

先创建一个可以用来做运算的计算器,然后在此基础上计算二维的 IoU,即

def iou(anchor, anchor1):    A = Anchor()    B = Anchor()    A.anchor = anchor    B.anchor = anchor1    T = np.stack([A.anchor, B.anchor])    xmin, ymin, xmax, ymax = np.split(T, 4, axis=1)    w = xmax.min() - xmin.max()    h = ymax.min() - ymin.max()    I = w * h    U = A.size + B.size - I    return I / U

下面举一例子,并可视化:

685754-20190328232423448-1369894650.png

img = np.ones((128 ,300, 3))  # 图片anchor = [ 12.,   8., 195., 103.]anchor1 = [ 28.,   8., 211., 103.]iou(anchor, anchor1)

最终结果为:

0.8151364126804707

转载于:https://www.cnblogs.com/q735613050/p/10618558.html

你可能感兴趣的文章
阶段3 3.SpringMVC·_07.SSM整合案例_08.ssm整合之Spring整合MyBatis框架
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第2节 SpringBoot接口Http协议开发实战_9、SpringBoot基础HTTP其他提交方法请求实战...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第2节 SpringBoot接口Http协议开发实战_12、SpringBoot2.x文件上传实战...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第4节 Springboot2.0单元测试进阶实战和自定义异常处理_19、SpringBoot个性化启动banner设置debug日志...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第4节 Springboot2.0单元测试进阶实战和自定义异常处理_20、SpringBoot2.x配置全局异常实战...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第5节 SpringBoot部署war项目到tomcat9和启动原理讲解_23、SpringBoot2.x启动原理概述...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第4节 Springboot2.0单元测试进阶实战和自定义异常处理_21、SpringBoot2.x配置全局异常返回自定义页面...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第8节 数据库操作之整合Mybaties和事务讲解_32..SpringBoot2.x持久化数据方式介绍...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第8节 数据库操作之整合Mybaties和事务讲解_34、SpringBoot整合Mybatis实操和打印SQL语句...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第8节 数据库操作之整合Mybaties和事务讲解_35、事务介绍和常见的隔离级别,传播行为...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第9节 SpringBoot2.x整合Redis实战_40、Redis工具类封装讲解和实战...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第9节 SpringBoot2.x整合Redis实战_37、分布式缓存Redis介绍...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第10节 SpringBoot整合定时任务和异步任务处理_42、SpringBoot常用定时任务配置实战...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第9节 SpringBoot2.x整合Redis实战_39、SpringBoot2.x整合redis实战讲解...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第14节 高级篇幅之SpringBoot多环境配置_59、SpringBoot多环境配置介绍和项目实战...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第10节 SpringBoot整合定时任务和异步任务处理_41、SpringBoot定时任务schedule讲解...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第10节 SpringBoot整合定时任务和异步任务处理_43、SpringBoot2.x异步任务实战(核心知识)...
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_1_01课程简介
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第11节 Logback日志框架介绍和SpringBoot整合实战_45、SpringBoot2.x日志讲解和Logback配置实战...
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_1_02技术选型
查看>>