2

我实现了一个 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)

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

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

1 回答 1

0

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

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

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

  • 第一堂课的借条: iou_0 = conf_mat[0,0] / (sum(conf_mat[0,:]) + sum(conf_mat[:,0]) - conf_mat[0,0])
  • 第二课的借条: iou_1 = conf_mat[1,1] / (sum(conf_mat[1,:]) + sum(conf_mat[:,1]) - conf_mat[1,1])
  • ...
  • 一般来说,对于班级jiou_j = conf_matrix[j,j] / (sum(conf_mat[j,:]) + sum(conf_mat[:,j]) - conf_mat[j,j])

最后,对每个班级 的所有这些进行求和并平均iou得到miou.

于 2020-03-19T18:36:38.043 回答