Python多类分割结果的IoU计算

写在前面

语义分割中,通常把多于一个目标类别的分割称为多类分割,单类分割也就是一般的只区分目标和背景的分割任务。目前博客中鲜有多类分割结果的评估代码,为此,本人专门写了一个。

代码

其实原理很简单,就是分别计算每一类的IoU

import numpy as np
import os
from skimage import io
'''
该脚本主要实现语义分割中多类结果的评估功能
要求:预测结果文件夹和真值文件夹中各个图像的文件名应该一样,对同一种类像素的灰度表示也应该一样
'''

pre_path = 'Prediction'                         #预测结果的文件夹
gt_path = 'Label'                               #ground truth文件夹
img_size = (384, 384)                           #图像的尺寸(只需要长宽)
classes = np.array([0, 1, 2, 3]).astype('uint8')#每一类的灰度值表示
files = os.listdir(pre_path)

res = []
for clas in classes:

    D = np.zeros([len(files), img_size[0], img_size[1], 2]).astype(bool)#存储每一类的二值数据
    # print(D.shape)
    for i, file in enumerate(files):
        img1 = io.imread(os.path.join(pre_path, file), as_gray=True)#以灰度值的形式读取
        img2 = io.imread(os.path.join(gt_path, file), as_gray=True)#以灰度值的形式读取
        D[i, :, :, 0] = img1 == clas
        D[i, :, :, 1] = img2 == clas
    res.append(np.sum(D[..., 0] & D[..., 1])/np.sum(D[..., 0] | D[..., 1])) #计算IOU
    # print(res)
#结果输出
for i, clas in enumerate(classes):
    print("Class "+str(clas)+' :'+str(res[i]))
  • 5
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 27
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 27
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值