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

2023-11-18

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

注意事项

这是针对重构了的语义分割网络,而不是之前的那个,所以不要询问原来的网络计算miou要怎么做,因为整个文件构架差距过大,建议使用新构架。
新版的PSPnethttps://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表示预测值 , p i j p_{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的示意图与公式,可以算出来
I O U 类 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 IOU1=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了。

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • UE4右键菜单(上篇ContentBrowser的补充)

    在上篇中我们讲到拓展我们的ContentBrowser的文件夹右键菜单 看回上篇代码可以发现其实真正起实现拓展 看到效果 的代码就只有一行 在代码中我们可以看到 MenuBuilder 这个东西是可以为我们创建一个菜单的 今天我们继续来改造

随机推荐

  • VOC格式数据集转适用YOLOv8格式

    直接设置VOC数据集的文件夹目录 生成的v8格式数据集存放目录以及标签的名字就行了 直接执行后就会是下面这图这样重新创建一个文件夹存放符合yolov8格式的数据集 yolov8直接加载那个yaml文件就行 我下边只有一类 注意最后的yaml
  • 计算机网络物联网论文,物联网对计算机网络技术发展分析

    摘要 随着科学技术和计算机网络技术的快速发展 物联网行业呈现出了巨大的发展潜力并且不断完善 这几年在物联网概念的强力刺激下 很多的公共服务和商业服务也加入到这一技术的应用当中 计算机网络是构成物联网的基础 所以计算机网络技术的发展和物联网是
  • 前端学习之常见标签的使用(2)

    目录 h标签 p标签 br标签 字符实体 img标签 a标签 mailto链接 base标签 锚点 div span video H5新增 audio H5新增 h标签 h标签 标题标签 在HTML中 一共有六级标题标签 h1 h6 在显示
  • 类的分文件编写

    类的分文件编写 point h 1 在开头加上以下代码 pragma once 防止头文件重复包含 include
  • 【Cadence】virtuoso Layout复制版图链接到新的原理图

    稍微记录一下备忘 需求描述 1 假设cell1中含有schematic1和layout1 2 现复制cell1到cell2 3 修改cell2中的schematic2后 需要相应地修改layout2 4 如果打开layout2 会发现链接到
  • 【操作系统】王道考研 p59-60 减少延迟时间的方法、磁盘的管理

    减少延迟时间的方法 磁盘的管理 以下是减少延迟时间的方法的内容 前情回顾 简而言之 如果要读写逻辑上相邻的盘片会延长时间 因为读写完一个盘片后要处理一段时间 处理完已经转过想要读的下一个盘片了 磁盘地址结构的设计 减少寻道时间的方法 物理地
  • mac上使用IntelliJ IDEA运行项目

    一 Mac OSX系统下安装Tomcat 1 下载Tomcat官方下载地址 2 解压Tomcat到目录 Library 中 并把文件夹名由 apache tomcat 6 0 16 改为 Tomcat 3 打开 应用程序 Applicati
  • vue3 中的 toRefs 是什么? 什么时候用?

    定义 toRefs可以将对象 只能接收rective对象 中的属性变成响应式 正常reactive对象数据也是响应式的 如果用toRefs解构出去会更加方便 什么时候用 数据量如果很多 我们一般会用解构来简化代码 那么在vue3 中如果使用
  • 数字电路的时钟(1)-- 时钟抖动和分类

    时钟抖动通常分为时间间隔误差 Time Interval Error 简称TIE 又叫相位抖动 周期抖动 Period Jitter 和相邻周期抖动 cycle to cycle jitter 三种抖动 TIE又称为phase jitter
  • 华为OD机试 - 生日礼物(Java)

    题目描述 小牛的孩子生日快要到了 他打算给孩子买蛋糕和小礼物 蛋糕和小礼物各买一个 他的预算不超过x元 蛋糕cake和小礼物gift都有多种价位的可供选择 请返回小牛共有多少种购买方案 输入描述 第一行表示cake的单价 以逗号分隔 第二行
  • IDEA类和方法的模板注释

    2 1 修改类注释模板 在File gt Settings gt Editor gt File and Code Templates下分别修改Class Interface Enum等注释模板 Class模板部分修改如下 其余的举一反三进行
  • Java字符串左移右移动

    public class MoveTheKnumber public static void main String args String startStr ABCDEF System out println getKnumber lef
  • python plt 绘图详解(plt.版本)

    文章目录 一 plt介绍 二 安装与导入 三 使用说明 1 使用plt plot与plt show绘制并显示图像 1 曲线颜色 color 简写为 c 2 点型 标记marker 3 线型 linestyle 简写为 ls 4 剩余参数说明
  • 基于matlab轴的优化设计,基于MATLAB的转轴可靠性优化设计

    科 技 天 地 56 INTELLIGENCE 基于 MATLAB 的转轴可靠性优化设计 上海理工大学管理学院 郑 红 摘 要 基于 MATLAB 的可靠性优化设计是应用 MATLAB 软件 在优化设计中将设计参数作为随机变量 以产品的可靠
  • 整理了60个 Python 实战例子,拿来即用!

    人生苦短 我用 Python 大家好 最近有一些朋友问我有没有一些 Python 实战小案例 今天我整理排版了一遍 给大家分享一下 喜欢记得点赞 收藏 关注 整理了60个Python小例子 拿来即用 整理了60个 Python 实战例子 拿
  • Ubuntu系统下安装微信

    安装微信实现截图发送图片功能 1 打开终端输入命令 更新软件源 sudo apt get update 2 输入以下命令 一定注意 O 中间是大写字母O 不是0也不是小写o wget O https deepin wine i m dev
  • verilog之状态机详细解释(二)

    一 有限状态机设计的一般步骤 1 逻辑抽象 得出状态转换图 就是把给出的一个实际逻辑关系表示为时序逻辑函数 可以用状态转换表来描述 也可以用状态转换图来描述 这就需要 分析给定的逻辑问题 确定输入变量 输出变量以及电路的状态数 通常是取原因
  • Effective C++ - Implementations

    前言 实现中需要注意的一些问题 尽可能延后变量的定义 尽量少做转型动作 转型语法 尽量避免使用dynamic cast 避免返回handles指向对象内部成分 为异常安全而努力是值得的 透彻了解inlining的里里外外 将文件间的编译依存
  • LaTex将表格居于文档中间

    导入booktabs包 usepackage booktabs 插入表格处 begin table htbp table环境 中换成h 效果相同 centering 表示居中 begin tabular cc 表示两列 toprule 添加
  • 憨批的语义分割重制版2——语义分割评价指标mIOU的计算

    憨批的语义分割重制版2 语义分割评价指标mIOU的计算 注意事项 学习前言 什么是mIOU mIOU的计算 1 计算混淆矩阵 2 计算IOU 3 计算mIOU 计算miou 注意事项 这是针对重构了的语义分割网络 而不是之前的那个 所以不要