PyTorch语义分割: 计算混淆矩阵中的TN
PyTorch语义分割: 计算混淆矩阵中的TN
在语义分割任务中,评估模型性能的一个重要指标是混淆矩阵。混淆矩阵可以帮助我们理解模型在不同类别上的表现,包括真阳性(TP)、假阳性(FP)、假阴性(FN)和真阴性(TN)。
本篇博客将重点介绍如何在PyTorch语义分割代码中计算TN。
**代码示例:**pythonwith torch.no_grad(): for i, b in enumerate(batch(dataset, batch_size)):
imgs = np.array([k[0] for k in b]).astype(np.float32) true_masks = np.array([k[1] for k in b])
imgs = torch.from_numpy(imgs) imgs = imgs.unsqueeze(1) true_masks = torch.from_numpy(true_masks)
pre_masks_eval = torch.zeros(true_masks.shape[0],14,256,256) true_masks_eval = torch.zeros(true_masks.shape[0],14,256,256) batchshape = true_masks.shape[0]
batch_dice = torch.zeros(14).cuda() if gpu: imgs = imgs.cuda() true_masks = true_masks.cuda() net.cuda()
output_img = net(imgs) input = output_img.cuda() pre_masks = input.max(1)[1].float() #索引代表像素所属类别的数字 for ak in range(14): if ak == 0: continue pre_masks_eval[:,ak] = (pre_masks==ak) true_masks_eval[:,ak] = (true_masks==ak) premasks = pre_masks_eval[:,ak].view(true_masks.shape[0],-1) truemasks = true_masks_eval[:,ak].view(true_masks.shape[0],-1)
intersection = premasks * truemasks TP = intersection.sum(1) FP = premasks.sum(1) - TP FN = truemasks.sum(1) - TP
# 计算每个类别的TN TN = (batchshape - TP - FP - FN).sum()
# 可以将每个类别的TN存储在一个列表或张量中,例如: # TN_per_class[ak] = TN
计算所有类别的TNtotal_TN = TN.sum()
代码解释:
-
计算每个类别的TN: 在计算TP、FP和FN之后,我们可以使用以下公式计算每个类别的TN:
TN = (batchshape - TP - FP - FN).sum()其中batchshape是batch size,TP、FP和FN是对应类别的真阳性、假阳性 和 假阴性。 -
计算所有类别的TN: 要计算所有类别的TN,只需将每个类别的TN加起来即可:
python total_TN = TN.sum()
总结:
通过以上步骤,我们可以在PyTorch语义分割代码中轻松计算TN。这将有助于我们更全面地评估模型性能,并更好地理解模型在不同类别上的表现。
原文地址: https://www.cveoy.top/t/topic/fRUi 著作权归作者所有。请勿转载和采集!