pytorch 如何从分段掩码中找到IoU?

siotufzp  于 2022-11-09  发布在  其他
关注(0)|答案(2)|浏览(125)

我正在执行一个图像分割任务,我使用的数据集只有地面真实值,但没有边界框或多边形。
我有2个类(忽略0作为背景),输出和地面真实值标签位于一个数组中,如
预测--/---标签
0|0|0|1|2 0|0|0|1|2 0|2|1|0|0 0|2|1|0|0 0|0|1|1|1 0|0|1|1|1 0|0|0|0|1 0|0|0|0|1
我怎么用这些来算欠钱?
PS:我使用的是python3和pytorch API

p3rjfoxz

p3rjfoxz1#

所以我才发现jaccard_similarity_score被认为是IOU。
所以解决方法很简单,
from sklearn.metrics import jaccard_similarity_score jac = jaccard_similarity_score(predictions, label, Normalize = True/False)
来源链接:http://scikit-learn.org/stable/modules/generated/sklearn.metrics.jaccard_score.html#sklearn.metrics.jaccard_score

am46iovg

am46iovg2#

您可以为给定类创建二进制Map。

def calculate_iou(self, gt_mask, pred_mask, class=1):
    if threshold:
        pred_mask = (pred_mask == class) * 1
        gt_mask = (gt_mask == class) * 1

    overlap = pred_mask * gt_mask  # Logical AND
    union = (pred_mask + gt_mask)>0  # Logical OR
    iou = overlap.sum() / float(union.sum())
    return iou

请注意,这种表示是通过为每个类创建二进制概率来创建的。因此,模型为4个类创建4个概率图。然后,每个像素的最大概率被视为最大概率类。

相关问题