PyTorch语义分割:计算TN (True Negative) 指标

在语义分割任务中,评估模型性能的关键指标之一是True Negative (TN)。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 = (premasks == 0) & (truemasks == 0)            TN = TN.sum(1)

        for bk in range(true_masks.shape[0]):                if TP[bk] == 0 and FP[bk] == 0 and FN[bk] == 0:                    NE[ak] += 1                    JNE[ak] += 1

代码解释:

  1. premasks == 0truemasks == 0: 这两个条件判断分别找到预测结果和真实标签中属于负样本的像素。2. &: 按位与操作符,将两个条件判断的结果合并,找到预测正确且真实标签也为负样本的像素。3. TN.sum(1): 对每个样本的TN进行求和,得到每个样本的TN值。

通过以上步骤,我们就可以在PyTorch语义分割任务中计算TN指标,并使用它来评估模型的性能。

PyTorch语义分割:计算TN (True Negative) 指标

原文地址: https://www.cveoy.top/t/topic/fRUl 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录