文章目录

  • 语义分割的评价指标
    • IoU or IU(intersection over union)
    • pixcal-accuracy (PA,像素精度)
    • 参考资料

语义分割的评价指标

在整理评价指标之前,先补充一下预备知识。
我们在进行语义分割结果评价的时候,常常将预测出来的结果分为四个部分:true positive,false positive,true negative,false negative,其中negative就是指非物体标签的部分(可以直接理解为背景),那么显而易见的,positive就是指有标签的部分。下图显示了四个部分的区别:

在图上可以清晰的看到,prediction图被分成四个部分,其中大块的白色斜线标记的是true negative(TN,预测中真实的背景部分),红色线部分标记是false negative(FN,预测中被预测为背景,但实际上并不是背景的部分),蓝色的斜线是false positive(FP,预测中分割为某标签的部分,但是实际上并不是该标签所属的部分),中间荧光黄色块就是true positive(TP,预测的某标签部分,符合真值)。
在评价的时候常用的指标有:IOU(交并比,也有叫做IU的),像素准确率(pixel-accuracy),有的时候还有平均准确率(mean-accuracy)。

IoU or IU(intersection over union)

IoU指标就是大家常说的交并比,在语义分割中作为标准度量一直被人使用。交并比不仅仅在语义分割中使用,在目标检测等方向也是常用的指标之一。
计算公式为:
IoU=target⋀predictiontarget⋃predictionIoU =target\bigwedge prediction \over target\bigcup predictiontarget⋃predictionIoU=target⋀prediction​
如图所示:

IoU一般都是基于类进行计算的,也有基于图片计算的。一定要看清数据集的评价标准,这里我吃过大亏,特意标注提醒。
基于类进行计算的IoU就是将每一类的IoU计算之后累加,再进行平均,得到的就是基于全局的评价,所以我们求的IoU其实是取了均值的IoU,也就是均交并比(mean IoU)

实现代码也很简单:intersection = np.logical_and(target, prediction) union = np.logical_or(target, prediction) iou_score = np.sum(intersection) / np.sum(union)
更具体的一些的如下所示:

import torch
import pandas as pd  # For filelist reading
from torch.utils.data import Dataset
import myPytorchDatasetClass  # Custom dataset class, inherited from torch.utils.data.datasetdef iou(pred, target, n_classes = 37):
#n_classes :the number of classes in your datasetious = []pred = pred.view(-1)target = target.view(-1)# Ignore IoU for background class ("0")for cls in xrange(1, n_classes):  # This goes from 1:n_classes-1 -> class "0" is ignoredpred_inds = pred == clstarget_inds = target == clsintersection = (pred_inds[target_inds]).long().sum().data.cpu()[0]  # Cast to long to prevent overflowsunion = pred_inds.long().sum().data.cpu()[0] + target_inds.long().sum().data.cpu()[0] - intersectionif union == 0:ious.append(float('nan'))  # If there is no ground truth, do not include in evaluationelse:ious.append(float(intersection) / float(max(union, 1)))return np.array(ious)def evaluate_performance(net):Dataloader for test databatch_size = 1  filelist_name_test = '/path/to/my/test/filelist.txt'data_root_test = '/path/to/my/data/'dset_test = myPytorchDatasetClass.CustomDataset(filelist_name_test, data_root_test)test_loader = torch.utils.data.DataLoader(dataset=dset_test,  batch_size=batch_size,shuffle=False,pin_memory=True)data_info = pd.read_csv(filelist_name_test, header=None)num_test_files = data_info.shape[0]  #reture data.info's hangshu that means dots in dataset sample_size = num_test_files# Containers for resultspreds = torch.FloatTensor(sample_size, opt.imageSizeH, opt.imageSizeW)preds = Variable(seg,volatile=True)gts = torch.FloatTensor(sample_size, 1, opt.imageSizeH, opt.imageSizeW)gts = Variable(gts,volatile=True)dataiter = iter(test_loader) for i in xrange(sample_size):images, labels, filename = dataiter.next()images = Variable(images).cuda()labels = Variable(labels)gts[i:i+batch_size, :, :, :] = labelsoutputs = net(images)outputs = outputs.permute(0, 2, 3, 4, 1).contiguous()val, pred = torch.max(outputs, 4)preds[i:i+batch_size, :, :, :] = pred.cpu()acc = iou(preds, gts)return acc

pixcal-accuracy (PA,像素精度)

基于像素的精度计算是评估指标中最为基本也最为简单的指标,从字面上理解就可以知道,PA是指预测正确的像素占总像素的比例,计算公式就不赘述了,大家都懂的。

本次主要想写的是IoU,在进行复现工作的时候,因为这个评估指标整整折腾了两个星期。以此纪念我辛酸的调bug历史。
另外,在查询相关资料的时候发现了一个好东西:

《A Review on Deep Learning Techniques Applied to Semantic Segmentation》
下载PDF请点击这里

我觉得这个应该作为语义分割的基本知识普及资料之一,这里盗一张图来:

参考资料

A Review on Deep Learning Techniques Applied to Semantic Segmentation
个人主页:https://www.jeremyjordan.me/evaluating-image-segmentation-models/
图片来源:https://blog.csdn.net/majinlei121/article/details/78965435

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

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

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

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

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

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

    语义分割的评价指标--MIoU 前言 代码 前言 MIoU(Mean Intersection over Union)是语义分割的一个评价指标,表示平均交并比,即数据集上每一个类别的IoU值的平均. ...

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

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

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

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

  6. 【计算点云语义分割中的iou】IoU Calculator

    参考:https://github.com/mit-han-lab/spvnas/blob/master/core/callbacks.py ''' Description: Author: suyu ...

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

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

  8. 【天池赛事】零基础入门语义分割-地表建筑物识别 Task4:评价函数与损失函数

    [天池赛事]零基础入门语义分割-地表建筑物识别 Task1:赛题理解与 baseline(3 天) – 学习主题:理解赛题内容解题流程 – 学习内容:赛题理解.数据读取.比赛 baseline 构建 ...

  9. 【深度学习】医学图像自动分割的评价指标讲解

    文章目录 1 ROC-AUC1.1 混淆矩阵1.2 AUC计算 2 Precision和Recall2.1 概述2.2 MAP2.3 P-R曲线深入理解 3 语义分割的评价指标--IoU 1 ROC- ...

  10. 语义分割 评价指标(global_acc, mean_acc, mean_iou)等numpy实现

    语义分割常见评价指标global_acc, mean_acc, mean_iou计算,个人学习记录,仅供参考. 一.理论计算 假设真实标签为: 预测标签为: 则手动列出混淆矩阵可得: 1.1 全局准确 ...

最新文章

  1. Java冒泡排序【简】
  2. python的表达式3or5_Python 简明教程 --- 5,Python 表达式与运算符
  3. 【C语言深入】[001] static 关键字:
  4. Socket超时时间设置
  5. 江苏图采上传自定义证件照
  6. 大白菜U盘启动制作工具怎么用?
  7. 鼎信诺取数oracle,鼎信诺审计前端取数讲解(最新).ppt
  8. matlab实现S函数的五种方式
  9. 串口转usb驱动c语言程序,电脑中USB转串口如何正确安装对应的驱动程序
  10. idea git切换分支、拉取最新代码 自己的代码被覆盖怎么办
  11. 微信小程序 地图组件标记文字
  12. abs、fabs 用法
  13. 求函数最值(模拟退火算法C++实现)
  14. 常见的网站攻击与防御,道高一尺,魔高一丈
  15. 多个线程ThreadLocal中存的是什么
  16. 【C++/CPP】OpenCV丨2. 常用操作丨1. 创建Mat丨
  17. 嵌入式实时操作系统RTX5快速入门 (完结)
  18. MVVM模式原理与实现
  19. linux+安装xp系统下载,linux系统怎么安装xp系统
  20. 游戏自评——CF手游

热门文章

  1. cs1.5最新服务器地址,服务器地址
  2. 服务器word文档会是只读的,Word自动变只读模式怎么办? 这样可取消Word只读
  3. json转xml报[java.lang.NoClassDefFoundError: nu/xom/Serializer]
  4. 举个栗子!Tableau 技巧(109):用 LOD 计算产品销售周期
  5. 翟菜花:睡眠里的经济掘金
  6. eclipse中格式自动调整的问题
  7. 3个步骤+1个模型,「数据分析」才是「增长黑客」的核心技能
  8. [iOS] Windows 使用IPSW文件升级iOS 13 beta
  9. 数据库驱动程序是什么?
  10. coldfusion php,PHP加密代码转换为ColdFusion