PyTorch语义分割中TN(真阴性)计算及代码实现

在语义分割任务中,评估指标对于模型性能的衡量至关重要。除了常用的Dice系数、IoU等指标外,了解如何计算TN(真阴性)也非常重要,特别是在医学图像分割等领域。

TN(真阴性) 表示模型预测为负类且实际标签也为负类的像素数量。

以下代码片段展示了在PyTorch语义分割任务中如何计算TN:pythonimport torchimport numpy as np

with 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 = (1 - premasks - truemasks).sum(1)  # 真阴性

        # ...其他代码...

代码解释:

  1. premasks和truemasks: 分别代表预测的mask和真实的mask,这两个变量都是二维的,每一行代表一张图片,每一列代表一个像素点。2. (1 - premasks - truemasks): 这部分代码是为了计算出预测为负类且真实标签也为负类的像素点。其中,1代表所有像素点,premasks代表预测为正类的像素点,truemasks代表真实标签为正类的像素点。因此,(1 - premasks - truemasks)就代表了预测为负类且真实标签也为负类的像素点。3. .sum(1): 对每一行进行求和,得到每张图片的TN值。

总结:

通过以上代码,我们可以方便地计算出语义分割任务中的TN(真阴性)指标。TN作为评估模型性能的重要指标之一,可以帮助我们更全面地了解模型的预测能力。

PyTorch语义分割中TN(真阴性)计算及代码实现

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

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