憨批的语义分割重制版2——语义分割评价指标mIOU的计算

  • 注意事项
  • 学习前言
  • 什么是mIOU
  • mIOU的计算
    • 1、计算混淆矩阵:
    • 2、计算IOU:
    • 3、计算mIOU:
  • 计算miou

注意事项

这是针对重构了的语义分割网络,而不是之前的那个,所以不要询问原来的网络计算miou要怎么做,因为整个文件构架差距过大,建议使用新构架。
新版的PSPnet:https://blog.csdn.net/weixin_44791964/article/details/106933112

学习前言

算一下语义分割的mIOU,做好生态链。

什么是mIOU

Mean Intersection over Union(MIoU,均交并比):其是语义分割的标准度量。

在了解mIOU之前,首先先了解一下IOU是什么,IOU的英文全称为Intersection over Union,中文简称为交并比,也就是交和并的比值。

在语义分割的问题中,单类的交并比就是该类的真实标签和预测值的交和并的比值。示意图如下:

在图中,A为真实标签,占据了图像的一定区域;B为预测结果,占据了图像的一定区域。中间的TP部分就是真实标签和预测值的交,图像整个有颜色的部分就是真实标签和预测值的并

而mIOU就是该数据集中的每一个类的交并比的平均。

计算公式如下:
i表示真实值,j表示预测值 ,pijp_{ij}pij​表示将i预测为j

mIOU的计算

1、计算混淆矩阵:

混淆矩阵听起来很牛逼,其实实际上的实现非常简单。
假设我们现在有一百个样本,分别属于1、2、3、4类,每个类都有二十五个样本。

我们利用网络去进行分类,此时我们可以通过一个矩阵去表现出最终的预测效果,就是混淆矩阵。

每一行之和是该类的真实样本数量,每一列之和是预测为该类的样本数量。

我们来看第一行,第一行意味着,有20个实际为类1的样本被分为类1,有2个实际为类1的样本被分为类2,有1个实际为类1的样本被分为类3,有1个实际为类1的样本被分为类4。

2、计算IOU:

混淆矩阵的对角线上的值是该类的交。
混淆矩阵的每一行再加上每一列,最后减去对角线上的值就是该类的并。

比如对于类1而言,一行一列是True Positive也就是,一行二列、三列、四列都是False Negative,二行一列、三行一列、四行一列都是False Positive。
按照IOU的示意图与公式,可以算出来
IOU类1=20/((20+2+1+2)+(20+3+1+1)−20)=2/3IOU_{类1} = 20 / ((20+2+1+2) + (20 + 3 + 1+ 1) - 20) = 2/3 IOU类1​=20/((20+2+1+2)+(20+3+1+1)−20)=2/3
计算代码如下:

# 设标签宽W,长H
def fast_hist(a, b, n):# a是转化成一维数组的标签,形状(H×W,);b是转化成一维数组的标签,形状(H×W,)k = (a >= 0) & (a < n)# np.bincount计算了从0到n**2-1这n**2个数中每个数出现的次数,返回值形状(n, n)# 返回中,写对角线上的为分类正确的像素点return np.bincount(n * a[k].astype(int) + b[k], minlength=n ** 2).reshape(n, n)  def per_class_iu(hist):# 矩阵的对角线上的值组成的一维数组/矩阵的所有元素之和,返回值形状(n,)return np.diag(hist) / (hist.sum(1) + hist.sum(0) - np.diag(hist))

3、计算mIOU:

mIOU就是每一个类的IOU的平均,所以只需要对每一个类都按照第二步的公式计算IOU,再求平均获得mIOU就行了。

np.mean(per_class_iu(hist)

计算miou

注意哈!!!
注意哈!!!
注意哈!!!

由于voc数据集的测试集并没有公开标签,我们以验证集为例,进行演示。
由于现在只出了新版的PSPnet的库,所以以PSPnet的库为例,进行演示。

首先把数据集按照voc格式摆好。

由于我现在使用的是官方的voc验证集,所以val.txt是官方提供好的。

如果大家想要验证自己的数据集,可以在voc2pspnet.py中修改train_percent改变验证集的比例(train_percent=0.9表示验证集为10%)。

修改完成后运行voc2pspnet.py。

在完成val.txt的生成后,修改pspnet.py中的num_classes为自己分的类的个数、model_path为权值文件路径。

class PSPNet(object):#-----------------------------------------##   注意修改model_path和num_classes#   使其符合自己的模型#-----------------------------------------#_defaults = {"model_path"        :   'model_data/pspnet_mobilenetv2.pth',"model_image_size"  :   (473, 473, 3),"downsample_factor" :   16,"num_classes"       :   21,"backbone"          :   "mobilenet","cuda"              :   True,"blend"             :   True,}

运行根目录的get_miou_prediction.py。

此时会生成预测灰度图。

然后运行根目录下的miou.py就会开始计算miou了。

憨批的语义分割重制版2——语义分割评价指标mIOU的计算相关推荐

  1. 憨批的语义分割重制版11——Keras 搭建自己的HRNetV2语义分割平台

    憨批的语义分割重制版11--Keras 搭建自己的HRNetV2语义分割平台 学习前言 什么是HRNetV2模型 代码下载 HRNetV2实现思路 一.预测部分 1.主干网络介绍 a.Section- ...

  2. 憨批的语义分割重制版7——Tensorflow2 搭建自己的Unet语义分割平台

    憨批的语义分割重制版7--Tensorflow2 搭建自己的Unet语义分割平台 注意事项 学习前言 什么是Unet模型 代码下载 Unet实现思路 一.预测部分 1.主干网络介绍 2.加强特征提取结 ...

  3. 憨批的语义分割重制版9——Pytorch 搭建自己的DeeplabV3+语义分割平台

    憨批的语义分割重制版9--Pytorch 搭建自己的DeeplabV3+语义分割平台 注意事项 学习前言 什么是DeeplabV3+模型 代码下载 DeeplabV3+实现思路 一.预测部分 1.主干 ...

  4. 憨批的语义分割重制版6——Pytorch 搭建自己的Unet语义分割平台

    憨批的语义分割重制版6--Pytorch 搭建自己的Unet语义分割平台 注意事项 学习前言 什么是Unet模型 代码下载 Unet实现思路 一.预测部分 1.主干网络介绍 2.加强特征提取结构 3. ...

  5. 语义分割重制版1——Pytorch 搭建自己的Unet语义分割平台

    转载:https://blog.csdn.net/weixin_44791964/article/details/108866828?spm=1001.2014.3001.5501 对应b站视频:ht ...

  6. 憨批的语义分割6——制作语义分割数据标签

    憨批的语义分割6--制作语义分割数据集 学习前言 制作工具Labelme Labelme的使用 标签文件内容 学习前言 有些小伙伴问怎么制作数据集,其实我也没有去制作过--所以也要学学啦, 制作工具L ...

  7. 憨批的语义分割4——pspnet模型详解以及训练自己的pspnet模型(划分斑马线)

    憨批的语义分割4--pspnet模型详解以及训练自己的pspnet模型(划分斑马线) 注意事项 学习前言 模型部分 什么是pspnet模型 pspnet模型的代码实现 1.主干模型Mobilenet. ...

  8. 红警1开源放出源码,4K高清重制版登顶Steam畅销榜!网友:青春回来了

    大数据文摘出品 作者:笪洁琼 "Sir,yes sir." "You've got no place to hide!" "You'll be a s ...

  9. 无路可逃java攻略_生化危机2重制版无路可逃怎么过_100丧尸模式幽灵生还者无路可逃流程攻略_3DM单机...

    <生化危机2:重制版>的幽灵生还者DLC中,当玩家通关了前面的三章之后就能解锁第四章--无路可逃,这个关卡需要解决100个丧尸,难度十分之高,下面小编就为大家带来一篇"lu_mk ...

最新文章

  1. 2021年,作为算法工程师的你们会在CV业务落地上用Transformer吗?
  2. python编程有哪些-Python编程编译器有哪些比较好用
  3. 信息管理系统(Servlet+jsp+mvc+jdbc)
  4. 《漫画算法》源码整理-2 数组 链表 队列
  5. 互联网1分钟 |1224
  6. vue+axios天气查询——天知道效果展示及源码分析
  7. centos6.4 使用 HDFS C API
  8. WeihanLi.Npoi 1.18.0 Released
  9. sql长整型_SQL 性能优化梳理
  10. 工业和信息化部办公厅关于公布2021年产业技术基础公共服务平台复核结果的通知
  11. kettle 内存设置_Kettle性能调优汇总
  12. stl的multiset和set和priority_queue区别
  13. data spring 指定时区_听说过spring-data-jdbc么?来个最佳实践
  14. linux下增加宋体 仿宋 字体
  15. 计算机打不开网络邻居,打不开网上邻居的电脑是怎么回事
  16. 理解Java7和8里面HashMap+ConcurrentHashMap的扩容策略
  17. Excel分组最大级别为8(outlineLevel最大为7)
  18. 图的点连通度边连通度总结
  19. ae2018怎么打开2019_ae2018中英文切换的方法
  20. 几个学习Silverlight及Silverlight示例的网站

热门文章

  1. EasyPoi导出Excel实现标记颜色
  2. 麦克风声音太小别人听不到怎么办
  3. 作为一个应届生总结最近的面试技巧
  4. C/C++编译总结 (Linux下g++、makefile、automake)
  5. 家具销售管理系统/家具在线商城
  6. 苹果 M1 单核性能勇超 Intel 11 代 i7;经纬张颖:用户增长与保护隐私不矛盾;阿里云盘正式公测 | EA周报
  7. word删除空白页面
  8. 什么是加密?什么是md5加密算法?
  9. HTML+CSS大作业——二次元漫画(8页) 漫画网页设计制作 简单静态HTML网页作品 我的漫画网页作业成品 学生漫画网站模板
  10. HTML5+JS游戏开发模块----canvas打字游戏