语义分割的评价指标——IoU
文章目录
- 语义分割的评价指标
- 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相关推荐
- 【语义分割】评价指标:PA、CPA、MPA、IoU、MIoU详细总结和代码实现(零基础从入门到精通系列!)
文章目录 引言 1 混淆矩阵 2 语义分割 PA:像素准确率 CPA:类别像素准确率 MPA:类别平均像素准确率 IoU:交并比 MIoU:平均交并比 3 综合实例 步骤一:输入真实.预测图片 步骤二 ...
- 【语义分割】评价指标代码函数:np.sum()、np.nansum()、np.nanmean()、np.diag()、np.bincount()
引言 本文针对: [语义分割]评价指标:PA.CPA.MPA.IoU.MIoU详细总结和代码实现(零基础从入门到精通系列!)中实现评价指标代码里相关函数进行补充说明,包括:np.sum().np.na ...
- 语义分割的评价指标——MIoU
语义分割的评价指标--MIoU 前言 代码 前言 MIoU(Mean Intersection over Union)是语义分割的一个评价指标,表示平均交并比,即数据集上每一个类别的IoU值的平均. ...
- 语义分割各种评价指标实现
前言 现存其实已经有很多博客实现了这个代码,但是可能不完整或者不能直接用于测试集的指标计算,这里简单概括一下. 一些概念.代码参考: [1] 憨批的语义分割9--语义分割评价指标mIOU的计算 [2] ...
- 语义分割之评价指标MIoU介绍
预备知识 我们在进行语义分割结果评价的时候,常常将预测出来的结果分为四个部分:True Positive,False Positive,True Negative,False Negative,其中n ...
- 【计算点云语义分割中的iou】IoU Calculator
参考:https://github.com/mit-han-lab/spvnas/blob/master/core/callbacks.py ''' Description: Author: suyu ...
- 语义分割的评价指标(OA, F1 score)计算(不使用sklearn)
混淆矩阵(confusion_matrix)是由预测值和标签值组成的二维矩阵,共n行n列.n表示class类别数. 二分类 图片源自https://blog.csdn.net/Orange_Spott ...
- 【天池赛事】零基础入门语义分割-地表建筑物识别 Task4:评价函数与损失函数
[天池赛事]零基础入门语义分割-地表建筑物识别 Task1:赛题理解与 baseline(3 天) – 学习主题:理解赛题内容解题流程 – 学习内容:赛题理解.数据读取.比赛 baseline 构建 ...
- 【深度学习】医学图像自动分割的评价指标讲解
文章目录 1 ROC-AUC1.1 混淆矩阵1.2 AUC计算 2 Precision和Recall2.1 概述2.2 MAP2.3 P-R曲线深入理解 3 语义分割的评价指标--IoU 1 ROC- ...
- 语义分割 评价指标(global_acc, mean_acc, mean_iou)等numpy实现
语义分割常见评价指标global_acc, mean_acc, mean_iou计算,个人学习记录,仅供参考. 一.理论计算 假设真实标签为: 预测标签为: 则手动列出混淆矩阵可得: 1.1 全局准确 ...
最新文章
- Java冒泡排序【简】
- python的表达式3or5_Python 简明教程 --- 5,Python 表达式与运算符
- 【C语言深入】[001] static 关键字:
- Socket超时时间设置
- 江苏图采上传自定义证件照
- 大白菜U盘启动制作工具怎么用?
- 鼎信诺取数oracle,鼎信诺审计前端取数讲解(最新).ppt
- matlab实现S函数的五种方式
- 串口转usb驱动c语言程序,电脑中USB转串口如何正确安装对应的驱动程序
- idea git切换分支、拉取最新代码 自己的代码被覆盖怎么办
- 微信小程序 地图组件标记文字
- abs、fabs 用法
- 求函数最值(模拟退火算法C++实现)
- 常见的网站攻击与防御,道高一尺,魔高一丈
- 多个线程ThreadLocal中存的是什么
- 【C++/CPP】OpenCV丨2. 常用操作丨1. 创建Mat丨
- 嵌入式实时操作系统RTX5快速入门 (完结)
- MVVM模式原理与实现
- linux+安装xp系统下载,linux系统怎么安装xp系统
- 游戏自评——CF手游
热门文章
- cs1.5最新服务器地址,服务器地址
- 服务器word文档会是只读的,Word自动变只读模式怎么办? 这样可取消Word只读
- json转xml报[java.lang.NoClassDefFoundError: nu/xom/Serializer]
- 举个栗子!Tableau 技巧(109):用 LOD 计算产品销售周期
- 翟菜花:睡眠里的经济掘金
- eclipse中格式自动调整的问题
- 3个步骤+1个模型,「数据分析」才是「增长黑客」的核心技能
- [iOS] Windows 使用IPSW文件升级iOS 13 beta
- 数据库驱动程序是什么?
- coldfusion php,PHP加密代码转换为ColdFusion