Intersection over Union(IoU) algorithms

  IoU算法可用与评估两个多维度数据的相似度,举一个实际应用,做CV,对象检测,我们需要评估模型的识别准确率,不同于二元类问题,普通的评估算法不合适,于是用到了这个算法,这个算法简单易懂,评估效果也不错。

  这里主要讨论如何计算并评估两个矩形相交程度。有空再训练一个对象检测器,来试试水。。

  第一种对于数据形状是这样的 $ (x_{top-left}, y_{top-left}, w, h) $,意思是:给出了起始坐标,矩形沿着 $ w, h $ 扩展开。

  算法实现:

double IoU(int*a, int*b)
{
    int overlap_w = min(a[0] + a[2], b[0] + b[2]) - max(a[0], b[0]);
    int overlap_h = min(a[1] + a[3], b[1] + b[3]) - max(a[1], b[1]);
    int overlap_s = overlap_w*overlap_h;
    return overlap_s / double(a[2]*a[3] + b[2]*b[3] - overlap_s);
}

  第二种数据形状是这样的 $ (x_{top-left}, y_{top-left}, x_{right-down}, y_{right-down}) $,意思是:给出了起始坐标和终点坐标,如图:

  

  算法实现:

double IoU_2(int*a, int*b)
{
    int overlap_w = min(a[2], b[2]) - max(a[0], b[0]);
    int overlap_h = min(a[3], b[3]) - max(a[1], b[1]);
    int overlap_s = overlap_w*overlap_h;
    return overlap_s / double((a[2] - a[0])*(a[3] - a[1]) + (b[2] - b[0])*(b[3] - b[1]) - overlap_s);
}

  用这几组数据测试一下:

1: [39, 63, 203, 112], [54, 66, 198, 114]
2: [49, 75, 203, 125], [42, 78, 186, 126]
3: [31, 69, 201, 125], [18, 63, 235, 135]
4: [50, 72, 197, 121], [54, 72, 198, 120]
5: [35, 51, 196, 110], [36, 60, 180, 108]

  output:

0.825758
0.795771
=====================
0.809624
0.787838
=====================
0.791962
0.609319
=====================
0.947743
0.946628
=====================
0.79667
0.727656
=====================

  参考文章:https://www.pyimagesearch.com/2016/11/07/intersection-over-union-iou-for-object-detection/

原文地址:https://www.cnblogs.com/darkchii/p/10079542.html

时间: 12-06

Intersection over Union(IoU) algorithms的相关文章

Analyzing The Papers Behind Facebook's Computer Vision Approach

Analyzing The Papers Behind Facebook's Computer Vision Approach Introduction You know that company called Facebook? Yeah, the one that has 1.6 billion people hooked on their website. Take all of the happy birthday posts, embarrassing pictures of you

[算法]A General Polygon Clipping Library

A General Polygon Clipping Library Version 2.32    http://www.cs.man.ac.uk/~toby/alan/software/gpc.html Alan Murta Advanced Interfaces Group Department of Computer Science University of Manchester Manchester M13 9PL, UK Abstract: This document descri

Sorted sets

Redis in Action JOSIAH L. CARLSON MANNING Shelter Island ZSETs offer the ability to store a mapping of members to scores (similar to the keys and values  of HASHes).  These  mappings  allow  us  to  manipulate  the  numeric  scores, and fetch and sca

Python入门一:基本数据类型

作为一个刚入门编程的大一狗,第一次写博客,希望能对自己学的知识进行巩固和提升,也希望记录自己成长的过程. 学习Python,一是因为暑假学的c++头疼,听说Python简单,那我就试试吧,二是因为Python形势一片大好,算是附和潮流吧! 一.初识Python 1.第一个Python代码 1 print("Hello World") 依然是熟悉的Hello World, 对于只学过c和c++的我来说,着实有点奇怪,怎么main()没了(其实是有的),头文件也没了,甚至连一句语句的末尾标

概率论与数理统计常用英文词汇对照

Probability Theory 概率论 Trial 试验 intersection交 union 并 frequency 频率 difference 差 additivity 可加性complementation 对立 contain 包含 equivalent 等价 mean 均值 convolution [,k?nv?'lu:??n] 卷积variance 方差 covariance 协方差 correlated 相关 standard deviation 标准差Random expe

GPU方法做倒排压缩和交集计算

之前一直想读这篇,今天读了一下,颇有收获: 1.对文档按相似term聚类之后,delta较小,可以提高压缩率(similarity graph) 1.GPU一般可以有几百个核,有shared memory和global memory,shared memory相当于寄存器的速度,global memory速度较慢 2.有序数组上的搜索算法除了binary search还有interplation search(插值搜索),平均复杂度是O(loglogn),但memory access是binar

[从头学数学] 第214节 带着计算机去高考(六)

剧情提要: [机器小伟]在[工程师阿伟]的陪同下进入了[九转金丹]之第八转的修炼.设想一个场景: 如果允许你带一台不连网的计算机去参加高考,你会放弃选择一个手拿计算器和草稿本吗 ?阿伟决定和小伟来尝试一下用计算机算高考题会是怎样的感觉. 正剧开始: 星历2016年05月20日 11:40:58, 银河系厄尔斯星球中华帝国江南行省. [工程师阿伟]正在和[机器小伟]一起做着2005年的江苏省数学高考题]. 总体来说,这次的难度和上一年持平,都是很厚道的那种, 不过上一年的好多题都像闹着玩似的,这次

Papers about DL

Reading some papers about DL Reading some papers about DL SegNet A Deep Convolutional Encoder-Decoder Architecture for Image Segmentation Encoder network Decoder network Training Analysis 个人想法 Do Convnets learn Correspondence Ideas Methods 1 Method 2

spark 教程三 spark Map filter flatMap union distinct intersection操作

RDD的创建 spark 所有的操作都围绕着弹性分布式数据集(RDD)进行,这是一个有容错机制的并可以被并行操作的元素集合,具有只读.分区.容错.高效.无需物化.可以缓存.RDD依赖等特征 RDD的创建基础RDD 1.并行集合(Parallelized Collections):接收一个已经存在的Scala集合,然后进行各种并行运算 var sc=new SparkContext(conf) var rdd=sc.parallelize(Array(2,4,9,3,5,7,8,1,6)); rd

哈希(4) - 求两个链表的交集(intersection)以及并集(union)

给定两个链表,求它们的交集以及并集.用于输出的list中的元素顺序可不予考虑. 例子: 输入下面两个链表: list1: 10->15->4->20 list2: 8->4->2->10 输出链表: 交集list: 4->10 并集list: 2->8->20->4->15->10 方法1 (简单方法) 可以参考链表系列中的"链表操作 - 求两个链表的交集(intersection)以及并集(union)" 方法2