语义分割指标体系Python实现:F-score/DICE、PA、CPA、MPA、IOU、MIOU

本文介绍了用于语义分割任务的评估指标的Python实现,包括F-score(Dice系数)、像素准确率(PA)、类别像素准确率(CPA)、类别平均像素准确率(MPA)、交并比(IOU)以及平均交并比(MIoU)。这些指标衡量了预测分割结果与实际标签的相似性和准确性。
摘要由CSDN通过智能技术生成

语义分割指标体系Python实现:F-score/DICE、PA、CPA、MPA、IOU、MIOU

引言

语义分割评价指标主要有三大类,分别是执行时间、内存占用和准确度。本文主要介绍几种指标和python代码实现:

F-score/DICE

F-score也称为Dice系数或QS(相似商),是一种衡量两个集合之间相似性的度量,对于语义分割任务而言即用来评估网络预测的分割结果与人为标注结果之间的相似度。F-score等于2倍的精确率和召回率的乘积除以精确率和召回率的和.
F 1 = 2 × P × R P + R F1 = \frac{2 \times P \times R}{P+R} F1=P+R2×P×R

# 计算F1-score(F1)
def f1_accuracy(pred, label):
    # pred和label都是二维数组,表示预测和真实的像素类别
    # 返回一个0~1之间的浮点数,表示像素准确率
    # 计算混淆矩阵
    cm = confusion_matrix(y_true.flatten(), y_pred.flatten())
    # 计算F1分数
    return f1_score(y_true.flatten(), y_pred.flatten())

PA:

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

# 计算像素准确率(PA)
def pixel_accuracy(pred, label):
    # pred和label都是二维数组,表示预测和真实的像素类别
    # 返回一个0~1之间的浮点数,表示像素准确率
    assert pred.shape == label.shape
    return (pred == label).mean()

CPA:

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

# 计算类别像素准确率(CPA)
def class_pixel_accuracy(pred, label, num_classes):
    # pred和label都是二维数组,表示预测和真实的像素类别
    # num_classes是一个整数,表示类别数目
    # 返回一个长度为num_classes的一维数组,表示每个类别的像素准确率
    assert pred.shape == label.shape
    cpa = np.zeros(num_classes)
    for i in range(num_classes):
        cpa[i] = (pred[label == i] == i).mean()
    return cpa

MPA:

类别平均像素准确率,是一种衡量所有类别的CPA的平均值。MPA等于所有类别CPA之和除以类别数。

# 计算类别平均像素准确率(MPA)
def mean_pixel_accuracy(pred, label, num_classes):
    # pred和label都是二维数组,表示预测和真实的像素类别
    # num_classes是一个整数,表示类别数目
    # 返回一个0~1之间的浮点数,表示类别平均像素准确率
    assert pred.shape == label.shape
    mpa = class_pixel_accuracy(pred, label, num_classes).mean()
    return mpa

IOU:

交并比,是一种衡量两个集合之间重叠程度的度量,对于语义分割任务而言即用来评估网络预测的分割结果与人为标注结果之间的重叠程度。IOU等于两个集合交集面积除以两个集合并集面积。

# 计算交并比(IoU)
def intersection_over_union(pred, label, num_classes):
    # pred和label都是二维数组,表示预测和真实的像素类别
    # num_classes是一个整数,表示类别数目
    # 返回一个长度为num_classes的一维数组,表示每个类别的交并比
    assert pred.shape == label.shape
    iou = np.zeros(num_classes)
    for i in range(num_classes):
        intersection = ((pred == i) & (label == i)).sum()
        union = ((pred == i) | (label == i)).sum()
        if union > 0:
            iou[i] = intersection / union
        else:
            iou[i] = np.nan
            # 表示该类别不存在于图像中
    return iou

MIOU

平均交并比,是一种衡量所有类别IOU的平均值。MIOU等于所有类别IOU之和除以类别数。

# 计算平均交并比(MIoU)
def mean_intersection_over_union(pred, label, num_classes):
    # pred和label都是二维数组,表示预测和真实的像素类别
    # num_classes是一个整数,表示类别数目
    # 返回一个0~1之间的浮点数,表示平均交并比
    assert pred.shape == label.shape
    miou = intersection_over_union(pred, label, num_classes).mean()
    return miou
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

早安不安

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值