繁体   English   中英

如何处理语义分割中未知类的平均交集(mIOU)?

[英]How to handle the mean Intersection Over Union (mIOU) for unknown class in semantic segmentation?

我实现了一个 FCN 网络来进行语义分割。 我使用 Cityscapes 作为我的数据集。 如您所知,Cityscapes 中有一些您在训练过程中忽略的类,它被标记为 255。我使用加权损失来忽略未知类的损失(将未知类的损失设置为零)。 现在我想从我的评估指标中排除未知类(平均交叉联合(mIOU))。目前我不清楚如何排除未知类。

目前我正在考虑使用 tensorflow 方法的所有类,包括像这样的未知类:

 miou, confusion_mat = tf.metrics.mean_iou(labels=annotation, predictions=pred_annotation, num_classes=num_cls)

with tf.control_dependencies([tf.identity(confusion_mat)]):
    miou = tf.identity(miou)

我试过这个,但它给出了未绑定标签的错误(对于未知标签)

miou, confusion_mat = tf.metrics.mean_iou(labels=annotation, predictions=pred_annotation, num_classes=(num_cls-1))

如果您想在 mIoU 计算期间忽略一个类,并且您可以访问混淆矩阵,那么您可以这样做:

  1. 忽略miou计算的 miou(因为它考虑了所有类,这不是你想要的)
  2. 从混淆矩阵中删除与您要忽略的类对应的行和列
  3. 使用新的混淆矩阵重新计算miou度量

如何从混淆矩阵重新计算miou度量?

  • 第一类的 iou: iou_0 = conf_mat[0,0] / (sum(conf_mat[0,:]) + sum(conf_mat[:,0]) - conf_mat[0,0])
  • 第二类的iou: iou_1 = conf_mat[1,1] / (sum(conf_mat[1,:]) + sum(conf_mat[:,1]) - conf_mat[1,1])
  • ...
  • 一般对于j类: iou_j = conf_matrix[j,j] / (sum(conf_mat[j,:]) + sum(conf_mat[:,j]) - conf_mat[j,j])

最后,对每类iou所有这些求和求平均值,得到miou

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM