如何计算 PyTorch 语义分割模型的真负例 (TN)

在评估语义分割模型的性能时,除了常用的指标如 Dice 系数和 Jaccard 指数外,我们还需要计算真负例 (TN) 来评估模型的特异性

以下代码片段展示了如何在 PyTorch 语义分割模型评估代码中计算 TN,并使用 TN 计算特异性值:

def eval_net(net, dataset, slicetotal, batch_size=12, gpu=True):
    # ... (现有代码) ...

    TN = torch.zeros(14).cuda()
    for ak in range(14):
        if ak == 0:
            continue
        premasks = pre_masks_eval[:,ak].view(true_masks.shape[0],-1)
        truemasks = true_masks_eval[:,ak].view(true_masks.shape[0],-1)

        TN[ak] = (premasks == 0).sum(1) + (truemasks == 0).sum(1) - (premasks + truemasks == 0).sum(1)

    specificity_ = TN / (TN + FP)
    
    # ... (现有代码) ...

    return dice_, jac_, specificity_ 

代码解释:

  1. 创建 TN 张量: TN = torch.zeros(14).cuda() 创建一个大小为 14 的零张量 TN,用于存储每个类别的 TN 值。
  2. 计算 TN:
    • (premasks == 0).sum(1) 计算预测为负例的像素数量。
    • (truemasks == 0).sum(1) 计算真实值为负例的像素数量。
    • (premasks + truemasks == 0).sum(1) 计算预测和真实值都为负例的像素数量。
    • 通过以上三个值的加减运算,我们可以得到每个类别的 TN 值。
  3. 计算特异性: specificity_ = TN / (TN + FP) 使用计算得到的 TN 和 FP 值计算每个类别的特异性。

注意:

  • 以上代码片段假设您的模型有 14 个类别。请根据您的实际情况修改代码。
  • 您需要将计算得到的 specificity_ 返回值添加到 eval_net 函数的返回值中。

通过计算 TN 并将其用于特异性计算,您可以更全面地评估语义分割模型的性能。

如何计算 PyTorch 语义分割模型的真负例 (TN)

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

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