Iou 的计算

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

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

  1. class Anchor:
  2. def __init__(self, base_size=16):
  3. self.base_size = base_size # 滑动窗口的大小
  4. if not base_size:
  5. raise ValueError("Invalid base_size: {}.".format(base_size))
  6. self._anchor = np.array([1, 1, self.base_size, self.base_size]) - 1
  7. @property
  8. def anchor(self):
  9. return self._anchor
  10. @anchor.setter
  11. def anchor(self, new_anchor):
  12. self._anchor = new_anchor
  13. @property
  14. def w(self):
  15. '''
  16. 锚框的宽度
  17. '''
  18. return self.anchor[2] - self.anchor[0] + 1
  19. @property
  20. def h(self):
  21. '''
  22. 锚框的高度
  23. '''
  24. return self.anchor[3] - self.anchor[1] + 1
  25. @property
  26. def size(self):
  27. '''
  28. 锚框的面积
  29. '''
  30. return self.w * self.h
  31. @property
  32. def _whctrs(self):
  33. """
  34. Return x center, and y center for an anchor (window). 锚框的中心坐标
  35. """
  36. x_ctr = self.anchor[0] + 0.5 * (self.w - 1)
  37. y_ctr = self.anchor[1] + 0.5 * (self.h - 1)
  38. return np.array([x_ctr, y_ctr])
  39. @staticmethod
  40. def _coordinate(aspect, ctr):
  41. '''
  42. 依据宽高组合计算锚框的坐标
  43. '''
  44. k = (aspect - 1) / 2
  45. return np.concatenate([ctr - k, ctr + k], axis=1)

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

  1. def iou(anchor, anchor1):
  2. A = Anchor()
  3. B = Anchor()
  4. A.anchor = anchor
  5. B.anchor = anchor1
  6. T = np.stack([A.anchor, B.anchor])
  7. xmin, ymin, xmax, ymax = np.split(T, 4, axis=1)
  8. w = xmax.min() - xmin.max()
  9. h = ymax.min() - ymin.max()
  10. I = w * h
  11. U = A.size + B.size - I
  12. return I / U

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

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

最终结果为:

  1. 0.8151364126804707

目标检测——IoU 计算的更多相关文章

  1. 目标检测 IOU(交并比) 理解笔记

    交并比(Intersection-over-Union,IoU): 目标检测中使用的一个概念 是产生的候选框(candidate bound)与原标记框(ground truth bound)的交叠率 ...

  2. CVPR2019目标检测论文看点:并域上的广义交

    CVPR2019目标检测论文看点:并域上的广义交 Generalized Intersection over Union Generalized Intersection over Union: A ...

  3. 目标检测中常提到的IoU和mAP究竟是什么?

    看完这篇就懂了. IoU intersect over union,中文:交并比.指目标预测框和真实框的交集和并集的比例. mAP mean average precision.是指每个类别的平均查准 ...

  4. 评价目标检测(object detection)模型的参数:IOU,AP,mAP

    首先我们为什么要使用这些呢? 举个简单的例子,假设我们图像里面只有1个目标,但是定位出来10个框,1个正确的,9个错误的,那么你要按(识别出来的正确的目标/总的正确目标)来算,正确率100%,但是其实 ...

  5. 目标检测评价标准(mAP, 精准度(Precision), 召回率(Recall), 准确率(Accuracy),交除并(IoU))

    1. TP , FP , TN , FN定义 TP(True Positive)是正样本预测为正样本的数量,即与Ground truth区域的IoU>=threshold的预测框 FP(Fals ...

  6. AAAI 2020 | DIoU和CIoU:IoU在目标检测中的正确打开方式

    论文提出了IoU-based的DIoU loss和CIoU loss,以及建议使用DIoU-NMS替换经典的NMS方法,充分地利用IoU的特性进行优化.并且方法能够简单地迁移到现有的算法中带来性能的提 ...

  7. ECCV 2018 目标检测 | IoU-Net:将IoU的作用发挥到极致

    常见的目标检测算法缺少了定位效果的学习,IoU-Net提出IoU predictor.IoU-guided NMS和Optimization-based bounding box refinement ...

  8. 目标检测中的IOU和CIOU原理讲解以及应用(附测试代码)

    上期讲解了目标检测中的三种数据增强的方法,这期我们讲讲目标检测中用来评估对象检测算法的IOU和CIOU的原理应用以及代码实现. 交并比IOU(Intersection over union) 在目标检 ...

  9. 目标检测性能评价——关于mAP计算的思考

    1. 基本要求 从直观理解,一个目标检测网络性能好,主要有以下表现: 把画面中的目标都检测到--漏检少 背景不被检测为目标--误检少 目标类别符合实际--分类准 目标框与物体的边缘贴合度高-- 定位准 ...

随机推荐

  1. mvc小技巧

    1.从Controller后台赋值的html标签显示在前台不起作用的问题?比如后台:ViewData["Message"]="<span  style=\" ...

  2. 当WebView运行在特权进程时抛出安全异常,Hook方式解决方案(包含对Android 8.0的处理)

    1.问题起源报错语句是:java.lang.UnsupportedOperationException: For security reasons, WebView is not allowed in ...

  3. 2017/05/02 java 基础 随笔

    1.PrtSc键是截屏键   打开画图软件  ctrl+v就可以复制到 2.win7以上可以  在当前目录下shift+右键 3.junit和javaweb应用的main函数在哪里? java程序跑起 ...

  4. SpringBoot整合Jdbc

    (1).添加相关依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId ...

  5. Java的初始化执行顺序(父类static变量->子类static变量->父类成员变量->父类构造器->成员变量->构造器->main函数)

    1. 引言 了解Java初始化的顺序,有助于理解Java的初始化机制和内存机制. 顺序:父类static变量->子类static变量->父类成员变量->父类构造器->成员变量- ...

  6. Go语言规格说明书 之 通道 发送语句(send) 和 接收操作符(receive)

    go version go1.11 windows/amd64 本文为阅读Go语言中文官网的规则说明书(https://golang.google.cn/ref/spec)而做的笔记,介绍Go语言的 ...

  7. mpVue小程序全栈开发

    1.微信小程序,mpVue和wepy的对比 2. 3.es6中关于数组的一些方法 <script> let arr = [,,,] // 遍历 arr.forEach(v => { ...

  8. 5个php实例,细致说明传值与传引用的区别

    传值:是把实参的值赋值给行参 ,那么对行参的修改,不会影响实参的值 传引用 :真正的以地址的方式传递参数传递以后,行参和实参都是同一个对象,只是他们名字不同而已对行参的修改将影响实参的值 说明: 传值 ...

  9. PHP常见错误提示含义解释

    1.Notice: Undefined variable: 变量名 in 注:使用了一个没有被定义的变量 2.Parse error: syntax error, unexpected T_ELSE ...

  10. OI中坑点总结

    以下是我个人OI生涯中遇到的坑点的一个小总结,可能是我太菜了,总是掉坑里,请大佬勿喷 1,多重背包的转移的循环顺序 //默认每个物品体积为一(不想打码……) //dp[i]表示占用背包容量i所能获得的 ...