语义分割的评价指标——MIoU

  • 前言
    • 代码

前言

MIoU(Mean Intersection over Union)是语义分割的一个评价指标,表示平均交并比,即数据集上每一个类别的IoU值的平均。
那么什么是IoU呢,以下面这张图直观地说一下:

图中,左边的圆表示某个类的真实标签,右边的圆表示其预测结果,

  • TP表示真实值为Positive,预测为Positive,称作是正确的Positive(True Positive=TP)
  • FN表示真实值为Positive,预测为Negative,称作是错误的Negative(False Negative=FN)
  • FP表示真实值为Negative,预测为Positive,称作是错误的Positive(False Positive=FP)
  • TN表示真实值为Negative,预测为Negative,称作是正确的Negative(True Negative=TN)

中间的TP部分即为真实值和预测值的交,FN+FP+TP部分即为真实值和预测值的并,IoU就是交与并的比值:IoU=TPFN+FP+TPIoU = \frac{TP}{FN+FP+TP}IoU=FN+FP+TPTP​。

MIoU的具体计算公式如下:
设i表示真实值,j表示预测值,pijp_{i j}pij​表示将i预测为j,
MIoU=1k+1∑i=0kpii∑j=0kpij+∑j=0kpji−piiM I o U=\frac{1}{k+1} \sum_{i=0}^{k} \frac{p_{i i}}{\sum_{j=0}^{k} p_{i j}+\sum_{j=0}^{k} p_{j i}-p_{i i}} MIoU=k+11​i=0∑k​∑j=0k​pij​+∑j=0k​pji​−pii​pii​​这个公式和
MIoU=1k+1∑i=0kTPFN+FP+TPM I o U=\frac{1}{k+1} \sum_{i=0}^{k} \frac{TP}{FN+FP+TP} MIoU=k+11​i=0∑k​FN+FP+TPTP​是等价的,实际上,分母中∑j=0kpij\sum_{j=0}^{k} p_{i j}∑j=0k​pij​表示i的所有预测结果,即FN+TP,∑j=0kpji\sum_{j=0}^{k} p_{j i}∑j=0k​pji​表示所有预测为i的值,即FP+TP,最后减去一个重合的piip_{i i}pii​即TP。
那么TP、FN、FP怎么计算呢?这就涉及到混淆矩阵了。

假设有一张图片,其所有的像素分属于4个类别。在预测分割之后,我们可以根据真实值和预测值获得一个混淆矩阵,形如:

每一行表示某一类真实值,每一列表示预测为某一类,pijp_{i j}pij​表示将i预测为j的像素数量。以类1为例,p11p_{1 1}p11​表示实际为类1且预测为类1,即TP;p12+p13+p14p_{1 2}+p_{1 3}+p_{1 4}p12​+p13​+p14​表示实际为类1却预测为其他类,即FN;p21+p31+p41p_{2 1}+p_{3 1}+p_{4 1}p21​+p31​+p41​表示错误地预测为类1,即FP;其余为TN。其他的类别可以类比。
所以,IoU的交就是混淆矩阵对角线上的值,
IoU的并就是将混淆矩阵的每一行的和(∑j=0kpij\sum_{j=0}^{k} p_{i j}∑j=0k​pij​)加上每一列的和(∑j=0kpji\sum_{j=0}^{k} p_{j i}∑j=0k​pji​),再减去对角线上的值(piip_{i i}pii​)。

总结一下,计算MIoU的三个步骤:

  1. 计算混淆矩阵
  2. 计算每个类别的IoU
  3. 对每个类别的IoU取平均

代码

下面给出计算MIoU的代码:
首先是计算混淆矩阵:

def _fast_hist(label_true, label_pred, n_class):"""label_true是转化为一维数组的真实标签,label_pred是转化为一维数组的预测结果,n_class是类别数hist是一个混淆矩阵hist是一个二维数组,可以写成hist[label_true][label_pred]的形式最后得到的这个数组的意义就是行下标表示的类别预测成列下标类别的数量"""# mask在和label_true相对应的索引的位置上填入true或者false# label_true[mask]会把mask中索引为true的元素输出mask = (label_true >= 0) & (label_true < n_class)# n_class * label_true[mask].astype(int) + label_pred[mask]计算得到的是二维数组元素# 变成一位数组元素的时候的地址取值(每个元素大小为1),返回的是一个numpy的list# np.bincount()会给出索引对应的元素个数hist = np.bincount(n_class * label_true[mask].astype(int) + label_pred[mask],minlength=n_class ** 2).reshape(n_class, n_class)return hist

接着是每个类别的IoU:

def per_class_iu(hist):# 矩阵的对角线上的值组成的一维数组/(矩阵的每行求和+每列求和-对角线上的值),返回值形状(n,)return np.diag(hist) / (hist.sum(1) + hist.sum(0) - np.diag(hist))

然后对每个类别的IoU取平均,得到mIoU:

np.mean(per_class_iu(hist))

Reference
https://blog.csdn.net/weixin_44791964/article/details/107687970

语义分割的评价指标——MIoU相关推荐

  1. 语义分割之评价指标MIoU介绍

    预备知识 我们在进行语义分割结果评价的时候,常常将预测出来的结果分为四个部分:True Positive,False Positive,True Negative,False Negative,其中n ...

  2. 【语义分割】评价指标:PA、CPA、MPA、IoU、MIoU详细总结和代码实现(零基础从入门到精通系列!)

    文章目录 引言 1 混淆矩阵 2 语义分割 PA:像素准确率 CPA:类别像素准确率 MPA:类别平均像素准确率 IoU:交并比 MIoU:平均交并比 3 综合实例 步骤一:输入真实.预测图片 步骤二 ...

  3. 【语义分割】评价指标代码函数:np.sum()、np.nansum()、np.nanmean()、np.diag()、np.bincount()

    引言 本文针对: [语义分割]评价指标:PA.CPA.MPA.IoU.MIoU详细总结和代码实现(零基础从入门到精通系列!)中实现评价指标代码里相关函数进行补充说明,包括:np.sum().np.na ...

  4. 语义分割各种评价指标实现

    前言 现存其实已经有很多博客实现了这个代码,但是可能不完整或者不能直接用于测试集的指标计算,这里简单概括一下. 一些概念.代码参考: [1] 憨批的语义分割9--语义分割评价指标mIOU的计算 [2] ...

  5. 语义分割评估指标MIOU

    1.MIOU定义 Mean Intersection over Union(MIoU,均交并比):为语义分割的标准度量.其计算两个集合的交集和并集之比,在语义分割的问题中,这两个集合为真实值和预测值. ...

  6. 语义分割中的mIoU计算函数解读

    代码来自于CVPR2018的一篇文章Context Encoding for Semantic Segmentation. github工程地址为:https://github.com/zhangha ...

  7. 语义分割的评价指标(OA, F1 score)计算(不使用sklearn)

    混淆矩阵(confusion_matrix)是由预测值和标签值组成的二维矩阵,共n行n列.n表示class类别数. 二分类 图片源自https://blog.csdn.net/Orange_Spott ...

  8. 语义分割MIoU代码解析

    1. MIoU 源码解析TensorFlow 和 PyTorch 源码解析 2.[语义分割]语义分割评估指标mIOU 3. 语义分割代码阅读-评价指标mIoU的计算 4. 深度学习计算机视觉图像分割领 ...

  9. 图像语义分割及常用评价指标

    语义分割学习记录 语义分割概述 图像分类(image classification) 目标检测(object detection) 语义分割(semantic segmentation) 实例分割(i ...

最新文章

  1. 人脸检测识别文献代码
  2. 牛!开创交互式电脑绘图先河,虚拟现实之父传奇
  3. 模拟一个连接来自搜索引擎
  4. python装饰器简单理解的小demo
  5. LeetCode 343. Integer Break
  6. python import出错_python – ImportError:无法导入名称’app’
  7. 商业智能BI的数据价值
  8. mysql 不同服务器数据库表同步_mysql 不同服务器数据库表同步
  9. 生日快乐代码_祝这位兄弟(?)生日快乐?
  10. kux格式怎么转换成mp3_优酷kux1080转码工具 1080p kux格式转换mp4|优酷kux格式转换成MP4格式...
  11. oracle删库语句,oracle删除表语句是什么?_数据库
  12. 学豆网学计算机,出题优学生版电脑版
  13. Java对接苹果账号授权登录
  14. 创可贴温度计,0排放温室气体:提前领略冬奥会的科技看点
  15. react全局状态管理_Recoil - Facebook 官方 React 状态管理器
  16. Nginx失败重试中的HTTP协议幂等问题: non_idempotent
  17. linux内核Kmalloc - GFP_ATOMIC - GFP_KERNEL - GFP_USER
  18. Oracle EBS R12 AP模块主要表结构整理
  19. linux下查找文件的命令
  20. 工业智能网关BL110详解之九十: 实现西门子S7-1200 PLC接入金鸽modbus云平台

热门文章

  1. 开店经验|如何开一家精品咖啡馆
  2. 2022极米投影和米家投影哪个好 家用智能投影仪对比
  3. MySQL下载安装 完美卸载
  4. pytorch中num_workers详解
  5. 苹果x与苹果xs的区别_苹果Xs相比苹果X,两者谁更值得入手?用户:苹果X宝刀未老!...
  6. 雷电3菊链功能_简单说说雷电接口有哪些用途?
  7. 关于Fortify 代码安全扫描常见问题
  8. 各种标点符号的英文怎么说
  9. 【万里征程——Windows App开发】使用Toast通知
  10. 与安装应用签名不同怎么解决_手动签名安装掉证书应用、多开任意应用教程