如何计算 PyTorch 语义分割模型的真负例 (TN)
如何计算 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_
代码解释:
- 创建 TN 张量:
TN = torch.zeros(14).cuda()创建一个大小为 14 的零张量TN,用于存储每个类别的 TN 值。 - 计算 TN:
(premasks == 0).sum(1)计算预测为负例的像素数量。(truemasks == 0).sum(1)计算真实值为负例的像素数量。(premasks + truemasks == 0).sum(1)计算预测和真实值都为负例的像素数量。- 通过以上三个值的加减运算,我们可以得到每个类别的 TN 值。
- 计算特异性:
specificity_ = TN / (TN + FP)使用计算得到的 TN 和 FP 值计算每个类别的特异性。
注意:
- 以上代码片段假设您的模型有 14 个类别。请根据您的实际情况修改代码。
- 您需要将计算得到的
specificity_返回值添加到eval_net函数的返回值中。
通过计算 TN 并将其用于特异性计算,您可以更全面地评估语义分割模型的性能。
原文地址: http://www.cveoy.top/t/topic/fR2z 著作权归作者所有。请勿转载和采集!