语义分割混淆矩阵、 mIoU、mPA计算

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

语义分割混淆矩阵、 mIoU、mPA计算,windows,服务器,linux

一、操作

import cv2 
img_gray = cv2.imread("nezha.jpg",cv2.IMREAD_GRAYSCALE)
for i in range(22):
    dst = cv2.applyColorMap(img_gray,i) 
    cv2.imshow('map',dst) 
    cv2.waitKey(500)
    cv2.imwrite("map-"+str(i)+".jpg",dst)

需要会调试代码的人自己改,小白直接运行会出错

这是我从自己的大文件里摘取的一部分代码,可以运行,只是要改的文件地址path比较多,遇到双引号“”的地址注意一下,不然地址不对容易出错

 把 calculate.py和 utiles_metrics.py放在同一文件夹下,然后运行 calculate.py。

二、理解

test_mIou,test_mPA,test_miou,test_mpa=compute_mIoU(gt_dir, pred_dir, image_ids, num_classes, name_classes,weight_name)  # 执行计算mIoU的函数

gt_dir 真实标签文件夹

pred_dir 预测结果文件夹

主要是这两个变量设置,后面的可以选择性修改

image_ids 文件名称 dirList(pred_dir,path_list) saveList(path_list) 这两个函数得到

num_classes 类别数

name_classes 类别名称

weight_name 权重名称

hist为混淆矩阵,mIoU为交并比

三、代码 

 calculate.py

# -*- coding: utf-8 -*-
import torch
import os

from time import time
# from PIL import Image
from utils_metrics import compute_mIoU
def saveList(pathName):
    for file_name in pathName:
        #f=open("C:/Users/Administrator/Desktop/DeepGlobe-Road-Extraction-link34-py3/dataset/real/gt.txt", "x")
        with open("./dataset/gt.txt", "a") as f:
            f.write(file_name.split(".")[0] + "\n")
        f.close

def dirList(gt_dir,path_list):
    for i in range(0, len(path_list)):
        path = os.path.join(gt_dir, path_list[i])
    if os.path.isdir(path):
        saveList(os.listdir(path))

data_path  = './dataset/'


f=open("./dataset/gt.txt", 'w')
gt_dir      = os.path.join(data_path, "real/")
pred_dir    = "./submits/log01_Dink101_five_100/test_iou/iou_60u/"
path_list = os.listdir(pred_dir)
path_list.sort()
dirList(pred_dir,path_list)
saveList(path_list)
num_classes=2
name_classes    = ["nontarget","target"]
weight_name='log01_Dink101_five_100'
image_ids   = open(os.path.join(data_path, "gt.txt"),'r').read().splitlines() 

test_mIou,test_mPA,test_miou,test_mpa=compute_mIoU(gt_dir, pred_dir, image_ids, num_classes, name_classes,weight_name)  # 执行计算mIoU的函数
print('  test_mIoU:  '+str(test_miou))

 utiles_metrics.py

from os.path import join

import numpy as np
import torch
import torch.nn.functional as F
from PIL import Image
import os
import cv2

# from matplotlib import pyplot as plt
import shutil
import numpy as np
# from matplotlib.pyplot import MultipleLocator

def f_score(inputs, target, beta=1, smooth = 1e-5, threhold = 0.5):
    n, c, h, w = inputs.size()
    nt, ht, wt, ct = target.size()
    if h != ht and w != wt:
        inputs = F.interpolate(inputs, size=(ht, wt), mode="bilinear", align_corners=True)
        
    temp_inputs = torch.softmax(inputs.transpose(1, 2).transpose(2, 3).contiguous().view(n, -1, c),-1)
    temp_target = target.view(n, -1, ct)

    #--------------------------------------------#
    #   计算dice系数
    #--------------------------------------------#
    temp_inputs = torch.gt(temp_inputs, threhold).float()
    tp = torch.sum(temp_target[...,:-1] * temp_inputs, axis=[0,1])
    fp = torch.sum(temp_inputs                       , axis=[0,1]) - tp
    fn = torch.sum(temp_target[...,:-1]              , axis=[0,1]) - tp

    score = ((1 + beta ** 2) * tp + smooth) / ((1 + beta ** 2) * tp + beta ** 2 * fn + fp + smooth)
    score = torch.mean(score)
    return score

# 设标签宽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):
    return np.diag(hist) / np.maximum((hist.sum(1) + hist.sum(0) - np.diag(hist)), 1) 

def per_class_PA(hist):
    return np.diag(hist) / np.maximum(hist.sum(1), 1) 

def compute_mIoU(gt_dir, pred_dir, png_name_list, num_classes, name_classes,weight_name):  
    # print('Num classes', num_classes)  
    #-----------------------------------------#
    #   创建一个全是0的矩阵,是一个混淆矩阵
    #-----------------------------------------#
    hist = np.zeros((num_classes, num_classes))
    
    #------------------------------------------------#
    #   获得验证集标签路径列表,方便直接读取
    #   获得验证集图像分割结果路径列表,方便直接读取
    #------------------------------------------------#
    gt_imgs     = [join(gt_dir, x + ".png") for x in png_name_list]  
    pred_imgs   = [join(pred_dir, x + ".png") for x in png_name_list]  
    # building_iou=[]
    # background_iou=[]
    m_iou=[]
    # building_pa=[]
    # background_pa=[]
    m_pa=[]

    #------------------------------------------------#
    #   读取每一个(图片-标签)对
    #------------------------------------------------#
    for ind in range(len(gt_imgs)): 
        #------------------------------------------------#
        #   读取一张图像分割结果,转化成numpy数组
        #------------------------------------------------#
        pred = np.array(Image.open(pred_imgs[ind]))
        
        #------------------------------------------------#
        #   读取一张对应的标签,转化成numpy数组
        #------------------------------------------------#
        label = np.array(Image.open(gt_imgs[ind]))  
        
        # 如果图像分割结果与标签的大小不一样,这张图片就不计算
        if len(label.flatten()) != len(pred.flatten()):  
            print(
                'Skipping: len(gt) = {:d}, len(pred) = {:d}, {:s}, {:s}'.format(
                    len(label.flatten()), len(pred.flatten()), gt_imgs[ind],
                    pred_imgs[ind]))
            continue

        #------------------------------------------------#
        #   对一张图片计算21×21的hist矩阵,并累加
        #------------------------------------------------#
        a=label.flatten()
        a//=254
       
        b=pred.flatten()
        b//=254
        hist += fast_hist(a, b,num_classes)  
        # # 每计算10张就输出一下目前已计算的图片中所有类别平均的mIoU值
        # mIoUs   = per_class_iu(hist)
        # mPA     = per_class_PA(hist)
        # m_iou.append(100 * np.nanmean(mIoUs[1]))
        # m_pa.append(100 * np.nanmean(mPA[1]))
        # # if ind > 0 and ind % 10 == 0:  
        # #     print('{:d} / {:d}: mIou-{:0.2f}; mPA-{:0.2f}'.format(ind, len(gt_imgs),
        # #                                             100 * np.nanmean(mIoUs[1]),
        # #                                             100 * np.nanmean(mPA[1])))
    mIoUs   = per_class_iu(hist)
    mPA     = per_class_PA(hist)
    print(mIoUs)

    # plt.figure()
    # x=np.arange(len(m_iou))
    # plt.plot(x,m_iou)
    # plt.plot(x,m_pa)
    # plt.grid(True)
    # y_major_locator=MultipleLocator(10)#把y轴的刻度间隔设置为10,并存在变量里
    # ax = plt.gca()
    # ax.yaxis.set_major_locator(y_major_locator)
    # ax.set_ylim(0,100)
    # plt.xlabel('Order')
    # plt.ylabel('mIOU & mPA')
    # plt.legend(['mIOU','mPA'],loc="upper right")

    # targ=os.path.join(pred_dir,os.path.pardir)
    

    # plt.savefig(os.path.join(targ, weight_name[:-3]+"_sin_miou.png"))

    return m_iou,m_pa,str(round(mIoUs[1] * 100, 2)),str(round(mPA[1] * 100, 2))

调试

语义分割混淆矩阵、 mIoU、mPA计算,windows,服务器,linux

个人使用文章来源地址https://www.toymoban.com/news/detail-579263.html

import os
import shutil
data_path='./submits/log01_Dink101_five_100/test_iou/'
data=open(os.path.join(data_path, "log01_Dink101_five_100_excel.txt"),'r').read().splitlines()
valid_path='./dataset/valid/'
real_path='./dataset/real/'
 
iou_100=os.path.join(data_path,'iou_60u/')
iou_80=os.path.join(data_path,'iou_60d/')

if not os.path.exists(iou_100):
    os.mkdir(iou_100)
    os.mkdir(iou_80)

for n in data:
    name=n.split()[1]
    iou=float(n.split()[2])
    if iou>=65:
        img_path=os.path.join(data_path,'87.650/'+name+'.png')

        
        shutil.copy(img_path,iou_100)

        
        print(name,iou)
        continue
    else :
        img_path=os.path.join(data_path,'87.650/'+name+'.png')
        
        shutil.copy(img_path,iou_80)
       
        print(name,iou)
        continue
 
print('Finish')

# -*- coding: utf-8 -*-
import torch
import os

from time import time
# from PIL import Image
from utils.utils_metrics import compute_mIoU
from utils.utils_metrics import compute_IoU
def saveList(pathName):
    for file_name in pathName:
        #f=open("C:/Users/Administrator/Desktop/DeepGlobe-Road-Extraction-link34-py3/dataset/real/gt.txt", "x")
        with open("./dataset/gt.txt", "a") as f:
            f.write(file_name.split(".")[0] + "\n")
        f.close

def dirList(gt_dir,path_list):
    for i in range(0, len(path_list)):
        path = os.path.join(gt_dir, path_list[i])
    if os.path.isdir(path):
        saveList(os.listdir(path))

data_path  = './dataset/'


f=open("./dataset/gt.txt", 'w')
gt_dir      = os.path.join(data_path, "real/")
pred_dir    = "./submits/log01_Dink101_five_100/test_iou/iou_60u/"
path_list = os.listdir(pred_dir)
path_list.sort()
dirList(pred_dir,path_list)
saveList(path_list)
num_classes=2
name_classes    = ["nontarget","target"]
weight_name='log01_Dink101_five_100'
image_ids   = open(os.path.join(data_path, "gt.txt"),'r').read().splitlines() 

# compute_IoU(gt_dir, pred_dir, image_ids, num_classes, weight_name)
test_mIou,test_mPA,test_miou,test_mpa=compute_mIoU(gt_dir, pred_dir, image_ids, num_classes, name_classes,weight_name)  # 执行计算mIoU的函数
print('  test_mIoU:  '+str(test_miou))
from os.path import join

import numpy as np
import torch
import torch.nn.functional as F
from PIL import Image
import os
import cv2

# from matplotlib import pyplot as plt
import shutil
import numpy as np
# from matplotlib.pyplot import MultipleLocator

def f_score(inputs, target, beta=1, smooth = 1e-5, threhold = 0.5):
    n, c, h, w = inputs.size()
    nt, ht, wt, ct = target.size()
    if h != ht and w != wt:
        inputs = F.interpolate(inputs, size=(ht, wt), mode="bilinear", align_corners=True)
        
    temp_inputs = torch.softmax(inputs.transpose(1, 2).transpose(2, 3).contiguous().view(n, -1, c),-1)
    temp_target = target.view(n, -1, ct)

    #--------------------------------------------#
    #   计算dice系数
    #--------------------------------------------#
    temp_inputs = torch.gt(temp_inputs, threhold).float()
    tp = torch.sum(temp_target[...,:-1] * temp_inputs, axis=[0,1])
    fp = torch.sum(temp_inputs                       , axis=[0,1]) - tp
    fn = torch.sum(temp_target[...,:-1]              , axis=[0,1]) - tp

    score = ((1 + beta ** 2) * tp + smooth) / ((1 + beta ** 2) * tp + beta ** 2 * fn + fp + smooth)
    score = torch.mean(score)
    return score

# 设标签宽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):
    return np.diag(hist) / np.maximum((hist.sum(1) + hist.sum(0) - np.diag(hist)), 1) 

def per_class_PA(hist):
    return np.diag(hist) / np.maximum(hist.sum(1), 1) 

def compute_IoU(gt_dir, pred_dir, png_name_list, num_classes,weight_name):  
    # print('Num classes')  
    #-----------------------------------------#
    #   创建一个全是0的矩阵,是一个混淆矩阵
    #-----------------------------------------#
    # hist = np.zeros((num_classes, num_classes))
    
    #------------------------------------------------#
    #   获得验证集标签路径列表,方便直接读取
    #   获得验证集图像分割结果路径列表,方便直接读取
    #------------------------------------------------#
    gt_imgs     = [join(gt_dir, x + "_mask.png") for x in png_name_list]  
    pred_imgs   = [join(pred_dir, x + ".png") for x in png_name_list]  

    m_iou=[]
    m_pa=[]
    hist_save=[] 
    
    #------------------------------------------------#
    #   读取每一个(图片-标签)对
    #------------------------------------------------#
    for ind in range(len(gt_imgs)): 

        #------------------------------------------------#
        #   读取一张图像分割结果,转化成numpy数组
        #------------------------------------------------#
        pred = np.array(Image.open(pred_imgs[ind]).convert('L'))
        # pred = pred/255
        #------------------------------------------------#
        #   读取一张对应的标签,转化成numpy数组
        #------------------------------------------------#
        label = np.array(Image.open(gt_imgs[ind]).convert('L'))  
        # label = label/255
        # 如果图像分割结果与标签的大小不一样,这张图片就不计算
        if len(label.flatten()) != len(pred.flatten()):  
            print(
                'Skipping: len(gt) = {:d}, len(pred) = {:d}, {:s}, {:s}'.format(
                    len(label.flatten()), len(pred.flatten()), gt_imgs[ind],
                    pred_imgs[ind]))
            continue

        #------------------------------------------------#
        #   对一张图片计算21×21的hist矩阵,并累加
        #------------------------------------------------#
        a=label.flatten()
        a//=254
        # for i in range(len(a)):
        #     a[i]=a[i]/255
        
        b=pred.flatten()
        b//=254
        # for i in range(len(b)):
        #     b[i]=b[i]/255
        hist = fast_hist(a, b,num_classes)  
        # 每计算10张就输出一下目前已计算的图片中所有类别平均的mIoU值
        mIoUs   = per_class_iu(hist)
        mPA     = per_class_PA(hist)
        mIoU_one = 100 * np.nanmean(mIoUs[1])
        mPA_one = 100 * np.nanmean(mPA[1])
        # if mIoU_one<80:
        #     shutil.copy(pred_imgs[ind],lower_iou)
        #     count=count+1
        # else:
        #     shutil.copy(pred_imgs[ind],higher_iou)
        img_name= png_name_list[ind]
        # if ind > 0 and ind % 10 == 0:  
        #print('{:d}  {}: Iou-{:0.2f}; PA-{:0.2f}'.format(ind,img_name,mIoU_one,mPA_one))
        #print(hist)
        m_iou.append(100 * np.nanmean(mIoUs[1]))
        m_pa.append(100 * np.nanmean(mPA[1]))
        hist_save.append(hist)
        targ=os.path.join(pred_dir,os.path.pardir)
        if ind==0:
            with open(os.path.join(targ, weight_name[:-3]+'.txt'),'w') as f:
                f.write(str(ind) +'  '+ str(img_name) +'   ')
                f.write('Iou:'+str(round(mIoU_one,2))+'  '+'PA:'+str(round(mPA_one,2))+'\n')
                f.write('                   '+'['+str(hist[0,0])+'   '+str(hist[0,1])+'\n')
                f.write('                   '+' '+str(hist[1,0])+'   '+str(hist[1,1])+']'+'\n')
            with open(os.path.join(targ, weight_name[:-3]+'_excel.txt'),'w') as f:
                f.write(str(ind) +'  '+ str(img_name) +'   ')
                f.write(str(round(mIoU_one,2))+'  '+str(round(mPA_one,2))+'\n')
        else:
            with open(os.path.join(targ, weight_name[:-3]+'.txt'),'a') as f:
                f.write(str(ind) +'  '+ str(img_name) +'   ')
                f.write('Iou:'+str(round(mIoU_one,2))+'  '+'PA:'+str(round(mPA_one,2))+'\n')
                f.write('                   '+'['+str(hist[0,0])+'   '+str(hist[0,1])+'\n')
                f.write('                   '+' '+str(hist[1,0])+'   '+str(hist[1,1])+']'+'\n')
            with open(os.path.join(targ, weight_name[:-3]+'_excel.txt'),'a') as f:
                f.write(str(ind) +'  '+ str(img_name) +'   ')
                f.write(str(round(mIoU_one,2))+'  '+str(round(mPA_one,2))+'\n')
    '''
    plt.figure()
    x=np.arange(len(m_iou))
    plt.plot(x,m_iou)
    plt.plot(x,m_pa)
    plt.grid(True)
    plt.xlabel('Order')
    plt.ylabel('test mIOU & mPA')
    plt.legend(['mIOU','mPA'],loc="upper right")

    plt.savefig(os.path.join(pred_dir[0:-13], weight_name[:-3]+"_test_iou.png"))
    '''

def compute_mIoU(gt_dir, pred_dir, png_name_list, num_classes, name_classes,weight_name):  
    # print('Num classes', num_classes)  
    #-----------------------------------------#
    #   创建一个全是0的矩阵,是一个混淆矩阵
    #-----------------------------------------#
    hist = np.zeros((num_classes, num_classes))
    
    #------------------------------------------------#
    #   获得验证集标签路径列表,方便直接读取
    #   获得验证集图像分割结果路径列表,方便直接读取
    #------------------------------------------------#
    gt_imgs     = [join(gt_dir, x + "_mask.png") for x in png_name_list]  
    pred_imgs   = [join(pred_dir, x + ".png") for x in png_name_list]  
    # building_iou=[]
    # background_iou=[]
    m_iou=[]
    # building_pa=[]
    # background_pa=[]
    m_pa=[]

    #------------------------------------------------#
    #   读取每一个(图片-标签)对
    #------------------------------------------------#
    for ind in range(len(gt_imgs)): 
        #------------------------------------------------#
        #   读取一张图像分割结果,转化成numpy数组
        #------------------------------------------------#
        pred = np.array(Image.open(pred_imgs[ind]).convert('L'))
        
        #------------------------------------------------#
        #   读取一张对应的标签,转化成numpy数组
        #------------------------------------------------#
        label = np.array(Image.open(gt_imgs[ind]).convert('L'))  
        
        # 如果图像分割结果与标签的大小不一样,这张图片就不计算
        if len(label.flatten()) != len(pred.flatten()):  
            print(
                'Skipping: len(gt) = {:d}, len(pred) = {:d}, {:s}, {:s}'.format(
                    len(label.flatten()), len(pred.flatten()), gt_imgs[ind],
                    pred_imgs[ind]))
            continue

        #------------------------------------------------#
        #   对一张图片计算21×21的hist矩阵,并累加
        #------------------------------------------------#
        a=label.flatten()
        a//=254
       
        b=pred.flatten()
        b//=254
        hist += fast_hist(a, b,num_classes)  
        # # 每计算10张就输出一下目前已计算的图片中所有类别平均的mIoU值
        # mIoUs   = per_class_iu(hist)
        # mPA     = per_class_PA(hist)
        # m_iou.append(100 * np.nanmean(mIoUs[1]))
        # m_pa.append(100 * np.nanmean(mPA[1]))
        # # if ind > 0 and ind % 10 == 0:  
        # #     print('{:d} / {:d}: mIou-{:0.2f}; mPA-{:0.2f}'.format(ind, len(gt_imgs),
        # #                                             100 * np.nanmean(mIoUs[1]),
        # #                                             100 * np.nanmean(mPA[1])))
    print(hist)
    mIoUs   = per_class_iu(hist)
    mPA     = per_class_PA(hist)
    print(mIoUs)

    # plt.figure()
    # x=np.arange(len(m_iou))
    # plt.plot(x,m_iou)
    # plt.plot(x,m_pa)
    # plt.grid(True)
    # y_major_locator=MultipleLocator(10)#把y轴的刻度间隔设置为10,并存在变量里
    # ax = plt.gca()
    # ax.yaxis.set_major_locator(y_major_locator)
    # ax.set_ylim(0,100)
    # plt.xlabel('Order')
    # plt.ylabel('mIOU & mPA')
    # plt.legend(['mIOU','mPA'],loc="upper right")

    # targ=os.path.join(pred_dir,os.path.pardir)
    

    # plt.savefig(os.path.join(targ, weight_name[:-3]+"_sin_miou.png"))

    return m_iou,m_pa,str(round(mIoUs[1] * 100, 2)),str(round(mPA[1] * 100, 2))

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

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

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

相关文章

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

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

    2024年02月02日
    浏览(49)
  • 语义分割准确率计算

    目录 pytorch版 pytorch准确率,miou: sklearn版

    2024年02月06日
    浏览(56)
  • 计算机视觉基础(11)——语义分割和实例分割

    在这节课,我们将学习 语义分割和实例分割 。在语义分割中,我们需要重点掌握语义分割的 概念、常用数据集、评价指标(IoU)以及经典的语义分割方法(Deeplab系列) ;在实例分割中,需要知道实力分割可以近似看为“ 目标检测+语义分割 ”,需要知道 Mask R-CNN方法的计算

    2024年01月23日
    浏览(68)
  • 图像分割与语义分割在计算机视觉中的应用

    计算机视觉(Computer Vision)是人工智能领域的一个重要分支,它旨在让计算机理解和解释人类世界中的视觉信息。图像分割(Image Segmentation)和语义分割(Semantic Segmentation)是计算机视觉中的两个重要技术,它们涉及将图像中的不同部分分为不同的类别,以便计算机更好地理解图像的

    2024年03月12日
    浏览(67)
  • 计算机视觉:语义分割理论及实战

    语义分割(Semantic Segmentation)是指将一张图像分割成若干个区域,并对每个区域赋予语义标签的任务。它是计算机视觉中的一种重要技术,被广泛应用于自动驾驶、医学图像分析、地理信息系统等领域。 与传统的图像分割任务不同,语义分割不仅需要将图像分割成若干个区域

    2024年02月08日
    浏览(56)
  • Python计算语义分割模型的评价指标

    目录 一、混淆矩阵 二、分类指标 1、Accuracy(准确率) 2、Precision(查准率) 3、Recall (查全率) 4、F1-score  三、语义分割的评价指标 1、MPA(类别平均像素准确率) 2、IoU(交并比) 3、MIoU(平均交并比) 4、CPA(类别像素准确率) 5、PA(像素准确率) 四、代码实现(基于混淆矩阵)  混淆

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

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

    2024年01月22日
    浏览(44)
  • pytorch 计算混淆矩阵

    混淆矩阵是评估模型结果的一种指标 用来判断分类模型的好坏  预测对了 为对角线  还可以通过矩阵的上下角发现哪些容易出错 从这个 矩阵出发 可以得到 acc != precision recall  特异度?    目标检测01笔记AP mAP recall precision是什么 查全率是什么 查准率是什么 什么是准确率

    2024年02月02日
    浏览(44)
  • 计算机视觉框架OpenMMLab(七):语义分割实战

    👨‍💻 作者简介: 大数据专业硕士在读,CSDN人工智能领域博客专家,阿里云专家博主,专注大数据与人工智能知识分享。 公众号: GoAI的学习小屋,免费分享书籍、简历、导图等资料,更有交流群分享AI和大数据,加群方式公众号回复“加群”或➡️点击链接。 🎉 专栏推

    2024年02月02日
    浏览(50)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包