我实现了一个 FCN 网络来进行语义分割。我使用 Cityscapes 作为我的数据集。如您所知,Cityscapes 中有一些您在训练过程中忽略的类,它们被标记为 255。我使用加权损失来忽略未知类的损失(将未知类的损失设置为零)。现在我想从我的评估指标中排除未知类(平均交集(mIOU))。目前我不清楚如何排除未知类。
目前我正在考虑使用张量流方法的所有类,包括像这样的未知类:
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 计算过程中忽略一个类,并且你可以访问混淆矩阵,那么你可以这样做:
- 忽略
miou
由张量流计算(因为它考虑了所有类,但这不是你想要的)
- 从混淆矩阵中删除与要忽略的类相对应的行和列
- 重新计算
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
to get miou
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)