首页 > 其他分享 >语义分割评价指标计算

语义分割评价指标计算

时间:2023-05-20 16:12:58浏览次数:36  
标签:分割 target sum 语义 TP TN input 评价 FN

评价指标的计算代码,需要注意传入路径需要加上后缀,下面示例为计算255*255的影像

 

  1 import numpy as np
  2 import glob
  3 import tqdm
  4 from PIL import Image
  5 import cv2 as cv
  6 import os
  7 from sklearn.metrics import confusion_matrix,cohen_kappa_score
  8 # from skimage import io
  9 # from skimage import measure
 10 from scipy import ndimage
 11 from sklearn.metrics import f1_score
 12 from tqdm import tqdm
 13 
 14 def mean_iou(input, target, classes = 2):
 15     """  compute the value of mean iou
 16     :param input:  2d array, int, prediction
 17     :param target: 2d array, int, ground truth
 18     :param classes: int, the number of class
 19     :return:
 20         miou: float, the value of miou
 21     """
 22     miou = 0
 23     for i in range(classes):
 24         intersection = np.logical_and(target == i, input == i)
 25         # print(intersection.any())
 26         union = np.logical_or(target == i, input == i)
 27         print(union)
 28         temp = np.sum(intersection) / np.sum(union)
 29         miou += temp
 30     return miou/classes
 31 
 32 def compute_f1(prediction, target):
 33     """
 34     :param prediction: 2d array, int,
 35             estimated targets as returned by a classifier
 36     :param target: 2d array, int,
 37             ground truth
 38     :return:
 39         f1: float
 40     """
 41     prediction.tolist(), target.tolist()
 42     img, target = np.array(prediction).flatten(), np.array(target).flatten()
 43     f1 = f1_score(y_true=target, y_pred=img, average='micro')
 44     return f1
 45 
 46 
 47 def compute_kappa(prediction, target):
 48     """
 49     :param prediction: 2d array, int,
 50             estimated targets as returned by a classifier
 51     :param target: 2d array, int,
 52             ground truth
 53     :return:
 54         kappa: float
 55     """
 56     prediction.tolist(), target.tolist()
 57     img, target = np.array(prediction).flatten(), np.array(target).flatten()
 58     kappa = cohen_kappa_score(target, img)
 59     return kappa
 60 
 61 def calculateTP(GT, PRE):
 62     TP = 0
 63     for y in range(0, 256):
 64         for x in range(0, 256):
 65             if GT[y, x] == 255 and PRE[y, x] == 255:
 66                 TP += 1
 67             else:
 68                 continue
 69     return TP
 70 def calculateTN(GT, PRE):
 71     TN = 0
 72     for y in range(0,256):
 73         for x in range(0,256):
 74             if GT[y,x] == 0 and PRE[y,x] == 0:
 75                 TN += 1
 76             else:
 77                 continue
 78     return TN
 79 
 80 def calculateFP(GT, PRE):
 81     FP = 0
 82     for y in range(0,256):
 83         for x in range(0,256):
 84             if GT[y,x] == 0 and PRE[y,x] == 255:
 85                 FP+=1
 86             else:
 87                 continue
 88     return FP
 89 
 90 def calculateFN(GT,PRE):
 91     FN = 0
 92     for y in range(0,256):
 93         for x in range(0,256):
 94             if GT[y,x] == 255 and PRE[y,x] == 0:
 95                 FN += 1
 96             else:
 97                 continue
 98     return FN
100 
101 all_targets = glob.glob(r'OUT0_255\*.png')
102 #print(len(all_targets))
103 all_inputs = glob.glob(r'result0_255\*.png')   # 读取所有图像文件
106 sum_mean_IoU = 0
107 sum_F1 = 0
108 sum_kappa = 0
109 TP_sum = 0
110 TN_sum = 0
111 FP_sum = 0
112 FN_sum = 0
113 
114 for i in tqdm(range(len(all_inputs))):
115     target = all_targets[i]
116     input = all_inputs[i]
117     # print(target)
118     target = Image.open(target)
119     #target = target.convert('L')
120     target = np.array(target)  # 将pillow对象转换为np数据
121     input = Image.open(input)
122     input= np.array(input)
123     # input = cv.resize(input, (500, 500), interpolation=cv.INTER_CUBIC)
124     #input[input == 255 ] = 255  # 对np_img做处理,像素大于0置为1,像素二值化
125     #input = cv.cvtColor(input, cv.COLOR_BGR2GRAY)
126     # print(target.shape)
127 
128     # meanIoU = mean_iou(input, target)
129     #F1 = compute_f1(input, target)
130     #kappa = compute_kappa(input, target)
131 
132 
133     TP = calculateTP(target, input)
134     TN = calculateTN(target, input)
135     FP = calculateFP(target, input)
136     FN = calculateFN(target, input)
137     TP_sum += TP
138     TN_sum += TN
139     FP_sum += FP
140     FN_sum += FN
141 
142 
143 
144 presion = TP_sum / (TP_sum + FP_sum)
145 recall1 = TP_sum / (TP_sum + FN_sum)
146 #recall2 = TN_sum / (TP_sum + FN_sum)
147 Accuracy = (TP_sum + TN_sum) / (TP_sum + TN_sum + FP_sum + FN_sum)
148 F1 = (2 * recall1 * presion) / (recall1 + presion)
149 # 预测结果前景iou
150 IOU1 = TP_sum / (TP_sum + FP_sum + FN_sum)
151 # 预测结果背景iou
152 IOU2 = TN_sum / (TN_sum + FP_sum + FN_sum)
153 # MIoU = (IoU正例p + IoU反例n) / 2 = [ TP / (TP + FP + FN) + TN / (TN + FN + FP) ] / 2
154 IOU = (IOU1 + IOU2) / 2
155 
156 print("presion: ", presion)
157 print("recall: ", recall1)
158 print("Accuracy: ", Accuracy)
159 print("F1: ", F1)
160 print("mIou: ", IOU)

 

标签:分割,target,sum,语义,TP,TN,input,评价,FN
From: https://www.cnblogs.com/yokon/p/17417344.html

相关文章

  • 对输入法的评价
    本文将从用户界面、记住用户选择、短期刺激、长期使用的好处坏处、不要让用户犯简单的错误四个方面来评价目前市场上一些常见的输入法和搜索引擎产品。首先,从用户界面方面来看,一个好的输入法和搜索引擎应该具有清晰简洁、易于操作的特点。在使用过程中,用户应该能够直接找到需要的......
  • 评价淘宝
    用户界面:淘宝的用户界面设计直观、简洁,使得用户能够轻松浏览和搜索商品。它提供了清晰的分类和标签,方便用户快速找到所需的商品。此外,界面的排版和布局通常是一目了然的,使得购物体验更加愉快。然而,有时淘宝的用户界面可能过于拥挤,展示大量信息和广告,可能会给用户带来一定的干扰......
  • 评价软件产品
    我评价的软件产品是微信,微信是一款非常流行的社交软件,但是它也存在一些对用户不友好的设计。具体来说,以下是对微信不友好的设计的评价:隐私问题:微信在隐私问题上存在很多问题。例如,在用户同意微信的服务协议和隐私条款后,微信可以读取用户所有联系人,并上传到微信的服务器,用户的个......
  • 关于美团app的评价
     广告过多。在使用美团APP时,经常弹出推广广告,给用户使用带来不便。流量消耗大。美团使用了大量图片、视频和地图等资源,因此在使用时会耗费大量的流量,对用户的手机流量资费造成影响。频繁更新。为了不断改进体验和修复漏洞,美团APP经常需要更新,但是每次更新都需要消耗手机内存......
  • 对输入法软件产品的评价
    搜狐输入法在以下方面的评价如下:用户界面:好处:直观易用:搜狐输入法具有直观的用户界面设计,使用户可以轻松理解和操作该输入法。多样化输入方式:提供了中文、英文、拼音、手写等多种输入方式,满足不同用户的需求。坏处:复杂性:搜狐输入法界面在某些情况下可能会显得有些复杂,对于一些初次......
  • 关于百度产品的评价
    评价如下:用户界面:优点:百度APP的用户界面美观、简洁,操作方便,可一目了然地找到需要的功能。搜索框的字体和颜色搭配清晰明了,让用户快速输入搜索内容。缺点:对于一些主要功能,如地图和音乐,经常会在页面上强行显示广告或推荐信息,对用户体验造成干扰。记住用户选择:优点:百度APP能......
  • 用户评价
    百度搜索引擎是中国最大的搜索引擎之一,下面是从用户界面、记住用户选择、短期刺激、长期使用的好处坏处以及避免用户犯简单错误的角度来评价百度搜索引擎的优点和缺点。1.用户界面:百度搜索引擎的用户界面简洁明了,搜索框位于页面中央,使用户能够快速进行搜索。其搜索结果页面设计......
  • 用户体验评价——人机交互
    每个人评价一下大家手头正在使用输入法或者搜索类的软件产品。从用户界面、记住用户选择、短期刺激、长期使用的好处坏处、不要让用户犯简单的错误四个方面发表一篇博客。 我对所使用的“搜狗输入法”的看法: 用户界面:1、界面简约精美,可切换风格皮肤,给用户较好的外观......
  • 微信的评价
    微信具有零资费、跨平台沟通、显示实时输入状态等功能,与传统的短信沟通方式相比,更灵活、智能,且节省资费。①微信界面支持发送语音短信、视频、图片,表情和文字②支持多人群聊③支持查看所在位置附近使用微信的人④支持腾讯微博、QQ邮箱、漂流瓶、语音记事本、QQ同步助手等插......
  • 搜狗输入法用户体验评价
    用户界面:界面比较有好,可以根据自己的喜好去选择需要的图标,每个图标都具有相应的功能,可以根据自己的喜好更换皮肤,字不是用的时候就显示一个小横条,并且可以隐藏记住用户选择:他采用的是多选框的方式,当你续订图标后就会固定了短期刺激:当你输入时他会根据你输入的内容首先进行组词,根......