首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >用于多类的mIoU

用于多类的mIoU
EN

Stack Overflow用户
提问于 2020-05-19 16:28:00
回答 1查看 552关注 0票数 0

我想了解多类分类的mIoU是如何计算的。每个类的公式为

IoU formula

然后对这些类进行平均,以获得mIoU。但是,我不明白没有表示的类会发生什么。公式变成了除以0,所以我忽略了它们,并且只计算所表示的类的平均值。

问题是,当预测错误时,准确率就会真正降低。它添加了另一个类来计算平均值。例如:在语义分割中,图像的地面真实由4个类别(0,1,2,3)组成,并在数据集上表示6个类别。预测也是由4个类别(0,1,4,5)进行的,但分类为2和3(在地面真实中)的所有项目都被分类为4和5(在预测中)。在这种情况下,我们应该计算6个类的mIoU吗?即使4个类是完全错误的,并且它们各自的IoU是0?所以问题是,如果只预测了一个不在ground_truth中的类中的一个像素,我们必须除以一个更高的分母,这会大大降低得分。

这是计算多类(和语义分割)的mIoU的正确方法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-27 16:08:09

我没有计算每个图像的miou,然后计算所有图像的“均值”miou,而是将miou计算为一个大图像。如果一个类不在图像中,并且没有被预测,我将相应的iou设置为1。

从头开始:

代码语言:javascript
复制
def miou(gt,pred,nbr_mask):
    intersection = np.zeros(nbr_mask) # int = (A and B)
    den = np.zeros(nbr_mask) # den = A + B = (A or B) + (A and B)
    for i in range(len(gt)):
        for j in range(height):
            for k in range(width):
                if pred[i][j][k]==gt[i][j][k]:
                    intersection[gt[i][j][k]]+=1
                den[pred[i][j][k]] += 1
                den[gt[i][j][k]] += 1
    mIoU = 0
    for i in range(nbr_mask):
        if den[i]!=0:
            mIoU+=intersection[i]/(den[i]-intersection[i])
        else:
            mIoU+=1
    mIoU=mIoU/nbr_mask
    return mIoU

使用gt表示地面实况标签的数组,使用pred表示关联图像的预测(数组中必须对应且大小相同)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61886539

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档