python中的axis轴及语义分割的mIoU理解

数组axis轴及语义分割的mIoU理解

一、axis

矩阵中axis理解
1、非运算(删除操作)
删除操作,axis=0时,直接沿着行方向删除行
2、运算
axis=0,沿着行方向计算,mean求列均值,max求列最值
axis=1,沿着列方向计算,mean求行均值,max求行最值

参考链接:https://www.jianshu.com/p/93317c0dca6a
https://zhuanlan.zhihu.com/p/110105054

二、语义分割评价指标mIoU

图像中语义分割序要区分每个pixels的类别
1、集合理解方式
集合
True和False表示是否预测正确(是否猜对)
Positive和Negative表示样本的类别是正类别还是负类别

Model预测结果预测是否正确
TP(True Positive)预测为正预测正确(猜对了)
FP(False Positive)预测为正预测错误(猜错了)
FN (False Negative)预测为负预测错误(猜错了)
TN(True Negative)预测为负预测正确(猜对了)

其中,IoU的计算公式为:
I o U = 真正 假负 + 假正 + 真正 IoU = \frac{真正}{假负+假正+真正} IoU=假负+假正+真正真正

参考链接:https://blog.csdn.net/qq_41731861/article/details/120683905

2、混淆矩阵理解方式
再具体计算IoU任务中,并不需要TN,预测为负且预测正确(不属于需要预测类别,不是类别真实值)
混淆啊矩阵理解
矩阵
令 k 表示类别, (k+1) 表示加上了背景类,i 表示真实值,j表示预测值,​ p i j p_{ij} pij表示将i预测为j, p i i p_{ii} pii表示预测正确的,相当于混淆矩阵的对角线。
m I o U = 1 k + 1 ∑ i = 0 k p i i ∑ i = 0 k p i j + ∑ i = 0 k p j i − p i i mIoU = \frac{1}{k+1} \sum_{i=0}^{k} \frac{p_{ii}}{ {\textstyle \sum_{i=0}^{k}p_{ij}+ \sum_{i=0}^{k}p_{ji}}-p_{ii} } mIoU=k+11i=0ki=0kpij+i=0kpjipiipii
计算代码为

import numpy as np
 
class IOUMetric:
    """
    Class to calculate mean-iou using fast_hist method
    """
 
    def __init__(self, num_classes):
        self.num_classes = num_classes
        self.hist = np.zeros((num_classes, num_classes))
 
    def _fast_hist(self, label_pred, label_true):
        # 找出标签中需要计算的类别,去掉了背景
        mask = (label_true >= 0) & (label_true < self.num_classes)
        # # np.bincount计算了从0到n**2-1这n**2个数中每个数出现的次数,返回值形状(n, n)
        hist = np.bincount(
            self.num_classes * label_true[mask].astype(int) +
            label_pred[mask], minlength=self.num_classes ** 2).reshape(self.num_classes, self.num_classes)
        return hist
 
    # 输入:预测值和真实值
    # 语义分割的任务是为每个像素点分配一个label
    def ev aluate(self, predictions, gts):
        for lp, lt in zip(predictions, gts):
            assert len(lp.flatten()) == len(lt.flatten())
            self.hist += self._fast_hist(lp.flatten(), lt.flatten())
            
        # miou
        iou = np.diag(self.hist) / (self.hist.sum(axis=1) + self.hist.sum(axis=0) - np.diag(self.hist))
        miou = np.nanmean(iou) 
        
        # -----------------其他指标------------------------------
        # mean acc
        acc = np.diag(self.hist).sum() / self.hist.sum()
        acc_cls = np.nanmean(np.diag(self.hist) / self.hist.sum(axis=1))
 
        freq = self.hist.sum(axis=1) / self.hist.sum()
        fwavacc = (freq[freq > 0] * iou[freq > 0]).sum()
 
        return acc, acc_cls, iou, miou, fwavacc

参考链接:https://blog.csdn.net/qq_41731861/article/details/120683905
https://blog.csdn.net/u012370185/article/details/94409933
语义分割和实例分割区别:https://zhuanlan.zhihu.com/p/303355997
图像检测mAP的计算:https://zhuanlan.zhihu.com/p/88896868

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值