IOU,全称为intersection of union, 中文名“交并比”。这个概念理解起来不难,本文将从原理以及代码实践来解读IOU。

首先要说明的是,IOU在检测领域和分割领域都有应用,但这两个领域的IOU计算方式是不一样的。所以本文就分为两个部分。分别讲解在分割和检测两个领域的IOU计算方式。

分割领域的IOU计算方式


假设白色区域为1,黑色区域为0。
根据IOU计算公式:
iou=A∩BA∪Biou = \frac{A \cap B}{A \cup B}iou=A∪BA∩B​
假设网络输出为A,GT为B。
那么A交B非常好算。

intersection = (A * B).sum()

A并B的计算方式,就是A的白色面积+B的白色面积, 减去A和B的交集。

union = A.sum() + B.sum() - intersection

最终的IOU就是:

IOU = intersection / union

对于多类的语义分割任务计算IOU

上面讲解的例子属于二类分割,语义分割所要处理的数据集往往都是很多类的。网络输出的map的shape是[Batchsize, N, H, W], N是数据集的类别。这个时候我们如何计算IOU呢。
假设label的shape是[Batchsize , H, W], 值的范围是[0-N-1]

A = net(X) # A是网络输出,shape为[Batchsize, N, H, W]
A = np.argmax(A, axis=1)  # A的shape现在为 [Batchsize, H, W],和Gt一致
A += 1
Gt += 1
intersection = A * (A == Gt)
area_inter, _ = np.histogram(intersection, bins= NUMCLASS, range=(1, NUMCLASS))
area_pred, _ = np.histogram(A, bins= NUMCLASS, range=(1, NUMCLASS))
area_label, _ = np.histogram(Gt, bins= NUMCLASS, range=(1, NUMCLASS))
area_union = area_pred + area_label - area_inter
iou = area_inter / area_union
miou = iou.mean()

做一下解释。np.histogram是统计直方图的函数,通过该函数,

  • 我们得知交集中每一个类别的像素值数目是多少

area_inter, _ = np.histogram(intersection, bins= NUMCLASS, range=(1, NUMCLASS))

  • 得知预测结果的每一类别的像素值数目是多少

area_pred, _ = np.histogram(A, bins= NUMCLASS, range=(1, NUMCLASS))

  • 得知label中每一个类别的像素值数目是多少

area_label, _ = np.histogram(Gt, bins= NUMCLASS, range=(1, NUMCLASS))

然后还是利用了两个集合的并集等于两个集合相加减去公共的部分

area_union = area_pred + area_label - area_inter

这里得到了每一个类的IOU,Miou就是求均值,这就是最后两句代码的含义。

检测任务中的IOU计算方式

依然是根据IOU的计算公式:
iou=A∩BA∪Biou = \frac{A \cap B}{A \cup B}iou=A∪BA∩B​
假设A是预测,B是GT。
先求交集。

我这里仅分析如何获得X轴上的交集区域的宽。另一个维度的分析类似的。
问号所指的长度使我们想求的。
W?=WA+WB−(Bxmax−Axmin)W_? = WA+WB - (Bxmax - Axmin)W?​=WA+WB−(Bxmax−Axmin)

然后我们使用相同的分析方法,得到H?H_?H?​。交集区域的面积就是
Sinter=W?∗H?S_{inter} = W_? * H_?Sinter​=W?​∗H?​

知道了交集,并集就好求了。
还是根据并集定理,A和B的并集是A和B的相加减去A和B的交集。
Sunion=SA+SB−SinterS_{union} = S_A + S_B - S_{inter}Sunion​=SA​+SB​−Sinter​

代码实践:

def iou(axmin,aymin,axmax,aymax, bxmin,bymin, bxmax, bymax):width = min(axmin,bxmin) + (axmax-axmin) + (bxmax-bxmin) - max(axmax,bxmax)height = min(aymin,bymin) + (aymax-aymin) + (bymax-bymin) - max(aymax,bymax)return max(width*height/((ymax-ymin)*(xmax-xmin) + (aymax-aymin)*(axmax-axmin) - width*height), 0)

最后结果的结果要和0比较,因为如果得到的IOU小于0,说明没有交集,iou为0.但是分子的面积仍然是非0数字,是负数。所以最后需要和0比较。

深度学习中的IOU计算方式和代码实践相关推荐

  1. 总结 62 种在深度学习中的数据增强方式

    数据增强 数据增强通常是依赖从现有数据生成新的数据样本来人为地增加数据量的过程 这包括对数据进行不同方向的扰动处理 或使用深度学习模型在原始数据的潜在空间(latent space)中生成新数据点从而 ...

  2. 深度学习中的正则化技术(附Python代码)

    作者:SHUBHAM JAIN 翻译:和中华 校对:丁楠雅 本文约3500字,建议阅读20分钟. 本文简单介绍了什么是正则化以及在深度学习任务中可以采用哪些正则化技术,并以keras代码具体讲解了一个 ...

  3. 深度学习中的IoU概念理解

    1.什么是IoU(Intersection over Union) IoU是一种测量在特定数据集中检测相应物体准确度的一个标准.IoU是一个简单的测量标准,只要是在输出中得出一个预测范围(boundi ...

  4. 如何上手深度学习中的图像处理?有这个代码资源库就够了

    仙女为大家整理的代码资源库,收集了大量深度学习项目图像处理领域的代码链接.包括图像识别,图像生成,看图说话等等方向的代码,所有代码均按照所属技术领域建立索引,以便大家查阅使用. 2.1 图像生成  2 ...

  5. 深度学习中常见的LOSS函数及代码实现

    Introduction 训练深度学习模型地目的只有一个,尽可能的学习到训练数据的分布.像往常的考试一样,考试成绩会有一个分数作为评判标准,评价你对于知识点地掌握情况,以便后续针对性地去学习.深度学习 ...

  6. 深度学习中感受野的计算

    一直以来很奇怪感受野是怎么计算的,这里参考了两个博客总算是看懂了. http://blog.csdn.net/skying_li/article/details/70158924 http://blo ...

  7. pytorch深度学习中每个epoch运行时间的统计代码

    开头部分引入time模块, import time 然后在每个epoch循环中开始处加入: since = time.time() 结尾处加入以下代码: time_elapsed = time.tim ...

  8. 深度学习中的激活函数与梯度消失

    转载请注明出处:http://www.cnblogs.com/willnote/p/6912798.html 前言 深度学习的基本原理是基于人工神经网络,信号从一个神经元进入,经过非线性的激活函数,传 ...

  9. 深度学习中的随机数种子

    深度学习中的随机数种子 seed()函数的作用 解释 例子1 例子2 深度学习中的随机数种子 训练过程 测试过程 代码随机种子的设定 本文参考网络上对于seed函数的讲解,记录一下我对于这个函数作用的 ...

最新文章

  1. 《Programming WPF》翻译 目录
  2. es分词器错误分析_了解ElasticSearch分析器
  3. redis在mac上的安装
  4. Git 在推送(Push)信息的时候提示git did not exit cleanly (exit code 1)的解决办法
  5. 异星工厂 自动机器人_刚刚,ABB机器人全球最大机器人超级工厂在康桥动工! 投资10亿元,用机器人造机器人...
  6. 一个看似是系统问题的应用问题的解决过程
  7. JavaScript onmouseup 事件
  8. mapreduce工作流程_我要进大厂之大数据MapReduce知识点(2)
  9. 转载 敏捷教练,从A到Z
  10. Pronunciation Difference between /ʌ/ and /ɑ/
  11. Servlet接收JSP参数乱码问题解决办法
  12. vi编辑器编辑超大文件。
  13. 研发团队建设几点看法及建议
  14. tomcat7 安装和环境变量配置
  15. 2022年某市新型智慧城市一网统管顶层设计方案(WORD)
  16. 汉语拼音的5个声调该怎么学?
  17. 科班出身程序员和培训出来的程序员区别在哪?
  18. Redis系列教材 (四)- Jedis 教程
  19. 数据结构与算法python语言实现-第四章答案
  20. 电磁功率流和坡印廷矢量

热门文章

  1. docker mysql默认ip_Docker设置固定ip地址
  2. java-php-python-springboot智能推荐的卫生健康系统计算机毕业设计
  3. JVM GC日志分析
  4. Android学习|布局——TableLayout 表格布局
  5. linux系统跟踪路由命令,路由跟踪指令traceroute centos下路由追踪指令用法 跟踪IP路由链路...
  6. 《北京青年》 VS 《正者无敌》
  7. SharePoint:SharePoint 2013 with SP1 简易安装
  8. codeforces 1553C Penalty
  9. 卷积神经网络 - 车辆识别
  10. 安装完Anaconda后,在命令行输入python会出现warning