Python计算语义分割模型的评价指标

这篇具有很好参考价值的文章主要介绍了Python计算语义分割模型的评价指标。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、混淆矩阵

二、分类指标

1、Accuracy(准确率)

2、Precision(查准率)

3、Recall (查全率)

4、F1-score 

三、语义分割的评价指标

1、MPA(类别平均像素准确率)

2、IoU(交并比)

3、MIoU(平均交并比)

4、CPA(类别像素准确率)

5、PA(像素准确率)

四、代码实现(基于混淆矩阵) 


一、混淆矩阵

混淆矩阵(confusion matrix)是一种特定的矩阵用来呈现算法性能的可视化效果,其每一列代表预测值,每一行代表的是实际的类别。这个名字来源于它可以非常容易的表明多个类别是否有混淆(也就是一个class被预测成另一个class)。下面是二分类的混淆矩阵:

Python计算语义分割模型的评价指标

预测值与真实值相同为True,反之则为False。混淆矩阵的对角线是判断正确的,期望TP和TN越大越好,FN和FP越小越好。 

二、分类指标

1、Accuracy(准确率)

表示预测正确的样本数量占全部样本的百分比。

Python计算语义分割模型的评价指标

缺点:当数据类别分布不平衡时,不能评价模型的好坏。

2、Precision(查准率)

表示模型预测为正例的所有样本中,预测正确(真实标签为正)样本的占比:

Python计算语义分割模型的评价指标

3、Recall (查全率)

表示所有真实标签为正的样本,有多大百分比被预测出来

Python计算语义分割模型的评价指标

4、F1-score 

表示precision和recall的调和平均数,具体公式如下:

Python计算语义分割模型的评价指标

三、语义分割的评价指标

1、MPA(类别平均像素准确率)

所有类别像素准确率之和的平均。首先求得每个类别的像素准确率,然后对它们求和再平均。

Python计算语义分割模型的评价指标

2、IoU(交并比)

​IoU(Intersection-over-Union)即是预测样本和实际样本的交并比,表达式如下:

Python计算语义分割模型的评价指标

Python计算语义分割模型的评价指标

3、MIoU(平均交并比)

Mean IoU是在所有类别的IoU上取平均值。

Python计算语义分割模型的评价指标

4、CPA(类别像素准确率)

类别像素准确率,是一种衡量每个类别中正确分类像素占该类别总像素数的比例。CPA等于混淆矩阵中第i行第i列元素除以混淆矩阵中第i行所有元素之和。

5、PA(像素准确率)

像素准确率,是一种衡量分割结果中正确分类像素占总像素数的比例。PA等于混淆矩阵中对角线元素之和除以混淆矩阵中所有元素之和。

四、代码实现(基于混淆矩阵) 

import numpy as np
from collections import Counter

# 计算混淆矩阵
def cal_confu_matrix(label, predict, class_num):
    confu_list = []
    for i in range(class_num):
        c = Counter(predict[np.where(label == i)])
        single_row = []
        for j in range(class_num):
            single_row.append(c[j])
        confu_list.append(single_row)
    return np.array(confu_list).astype(np.int32)

# 计算指标
def metrics(confu_mat_total, save_path=None):
    '''
    :param confu_mat: 总的混淆矩阵
    save_path:保存txt的路径
    :return: txt写出指标
    '''
    class_num = confu_mat_total.shape[0]
    confu_mat = confu_mat_total.astype(np.float32)
    col_sum = np.sum(confu_mat, axis=1)  # 按行求和
    raw_sum = np.sum(confu_mat, axis=0)  # 每一列的数量

    pe_fz = 0
    PA = 0 # 像素准确率
    CPA = [] # 类别像素准确率
    TP = []  # 识别中每类分类正确的个数
    for i in range(class_num):
        pe_fz += col_sum[i] * raw_sum[i]
        PA = PA + confu_mat[i, i]
        CPA.append(confu_mat[i, i]/col_sum[i])
        TP.append(confu_mat[i, i])

    pe = pe_fz / (np.sum(confu_mat) * np.sum(confu_mat))
    kappa = (PA - pe) / (1 - pe) # Kappa系数
    PA = PA / confu_mat.sum()
    CPA = np.array(CPA)
    MPA = np.mean(CPA) # 类别平均像素准确率

    # 计算f1-score
    TP = np.array(TP)
    FN = col_sum - TP
    FP = raw_sum - TP

    # 计算并写出f1_score,IOU,Mf1,MIOU
    f1_score = [] # 每个类别的f1_score
    IOU = [] # 每个类别的IOU
    for i in range(class_num):
        # 写出f1-score
        f1 = TP[i] * 2 / (TP[i] * 2 + FP[i] + FN[i])
        f1_score.append(f1)
        iou = TP[i] / (TP[i] + FP[i] + FN[i])
        IOU.append(iou)

    f1_score = np.array(f1_score)
    Mf1 = np.mean(f1_score) # f1_score的平均值
    IOU = np.array(IOU)
    MIOU = np.mean(IOU) # IOU的平均值

    if save_path is not None:
        with open(save_path + 'accuracy.txt', 'w') as f:
            f.write('PA:\t%.4f\n' % (PA * 100))
            f.write('kappa:\t%.4f\n' % (kappa * 100))
            f.write('Mf1-score:\t%.4f\n' % (Mf1 * 100))
            f.write('MIOU:\t%.4f\n' % (MIOU * 100))

            # 写出f1-score
            f.write('f1-score:\n')
            for i in range(class_num):
                f.write('%.4f\t' % (float(f1_score[i]) * 100))
            f.write('\n')

            # 写出 IOU
            f.write('Iou:\n')
            for i in range(class_num):
                f.write('%.4f\t' % (float(IOU[i]) * 100))
            f.write('\n')
            
            # 写出MPA
            f.write('MPA:\n')
            for i in range(class_num):
                f.write('%.4f\t' % (float(MPA[i]) * 100))
            f.write('\n')

            # 写出precision
            f.write('precision:\n')
            for i in range(class_num):
                f.write('%.4f\t' % (float(TP[i] / raw_sum[i]) * 100))
            f.write('\n')

            # 写出recall
            f.write('recall:\n')
            for i in range(class_num):
                f.write('%.4f\t' % (float(TP[i] / col_sum[i]) * 100))
            f.write('\n')

if __name__ == '__main__':
    y_test = np.array([0, 1, 1, 2, 2, 0, 0, 1, 2, 3, 3, 2, 3, 1, 0, 3, 1, 2, 3, 3, 2, 0, ])
    y_predict = np.array([1, 1, 0, 2, 2, 2, 0, 2, 0, 3, 0, 2, 3, 1, 0, 2, 1, 2, 1, 3, 1, 3, ])
    ma = cal_confu_matrix(y_test,y_predict,4)
    metrics(ma,save_path="")

 文章来源地址https://www.toymoban.com/news/detail-439502.html

到了这里,关于Python计算语义分割模型的评价指标的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 图像分割评价指标:Dice和MIoU

    Dice用来衡量预测结果pred和标签label的相似度,公式如下图所示,即两个集合的交集/并集。 注意:对于多分类的分割任务,网络的输出结果是多通道的,使用Dice计算准确度需要将标签转换为多通道的one_hot形式。 如果需要计算 dice loss ,只需要 1- dice_acc 即可。 可以借助 torc

    2024年02月02日
    浏览(47)
  • Python计算分类问题的评价指标(准确率、精确度、召回率和F1值,Kappa指标)

    机器学习的分类问题常用评论指标有:准确率、精确度、召回率和F1值,还有kappa指标 。 每次调包去找他们的计算代码很麻烦,所以这里一次性定义一个函数,直接计算所有的评价指标。 每次输入预测值和真实值就可以得到上面的指标值,很方便。 下面是这些指标的计算公

    2024年01月21日
    浏览(55)
  • 【计算机视觉 | 语义分割】OVSeg:分割一切后,SAM又能分辨类别了,Meta/UTAustin提出全新开放类分割模型

    前几日,Meta 推出了「分割一切」AI 模型 Segment Anything,令网友直呼 CV 不存在了?! 而在另一篇被 CVPR 2023 收录的论文中,Meta、UTAustin 联合提出了新的开放语言风格模型(open-vocabulary segmentation, OVSeg),它能让 Segment Anything 模型知道所要分隔的类别。 论文地址: 从效果上来看

    2024年02月12日
    浏览(54)
  • 【Python&语义分割】Segment Anything(SAM)模型介绍&安装教程

    1.1 概况         Meta AI 公司的 Segment Anything 模型是一项革命性的技术,该模型能够根据文本指令或图像识别,实现对任意物体的识别和分割。这一模型的推出,将极大地推动计算机视觉领域的发展,并使得图像分割技术进一步普及化。         论文地址:https://arxiv.org/

    2024年02月05日
    浏览(52)
  • 【Python&语义分割】Segment Anything(SAM)模型详细使用教程+代码解释(一)

    1.1 概况         Meta AI 公司的 Segment Anything 模型是一项革命性的技术,该模型能够根据文本指令或图像识别,实现对任意物体的识别和分割。这一模型的推出,将极大地推动计算机视觉领域的发展,并使得图像分割技术进一步普及化。         论文地址:https://arxiv.org/

    2024年02月05日
    浏览(49)
  • 计算机设计大赛 深度学习人体语义分割在弹幕防遮挡上的实现 - python

    🔥 优质竞赛项目系列,今天要分享的是 🚩 深度学习人体语义分割在弹幕防遮挡上的应用 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🥇学长这里给一个题目综合评分(每项满分5分) 难度系数:3分 工作量:3分 创新点:3分 🧿 更多资料, 项目分享: https://gi

    2024年02月20日
    浏览(128)
  • 图像分类 图像分割的评价指标(混淆矩阵 正确率 精准率 召回率 F1分数 IOU dice系数)

             在图像分类或者图像分割中,为 评价模型的预测效果 ,在训练过程中通常需要比较预测值与真实标签值的差距,即误差。 目录 图像分类过程的评价指标 混淆矩阵 正确率/准确率 精准率 召回率 F1分数 图像分割过程的评价指标 混淆矩阵 混淆矩阵的生成代码 IO

    2024年01月22日
    浏览(42)
  • 模型评价指标—F1值

    最近空余时间在参加数字中国创新大赛,比赛规则是根据模型的F1值对参赛者进行排名。为了更深刻地理解这个指标,我最近对它做了一些梳理,现在把它分享给更多有需要的人图片。最近在参赛时也发现了一个问题,就是算法在训练集上完全拟合(KS=1),但是到测试集上衰退

    2024年02月08日
    浏览(40)
  • 目标检测常用评价指标及其计算方法

    前传耗时(ms) :从输入一张图像到输出最终结果所消耗的时间,包括前处理耗时(如图像归一化)、网络前传耗时、后处理耗时(如非极大值抑制); 每秒帧数FPS(Frames Per Second) :每秒中能处理的图像数量; 浮点运算量(FLOPS) :处理一张图像所需要的浮点运算数量,跟具体软

    2024年02月06日
    浏览(47)
  • 机器学习回归任务指标评价及Sklearn神经网络模型评价实践

    机器学习回归模型评价是指对回归模型的性能进行评估,以便选择最佳的回归模型。其中,MAE、MSE、RMSE 用于衡量模型预测值与真实值之间的误差大小,R² 用于衡量模型对数据的拟合程度。在实际应用中,我们可以使用这些指标来评估回归模型的性能,并对模型进行优化。

    2024年02月05日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包