如何在keras语义切分中获取单类的借据?

cl25kdpy  于 2022-11-13  发布在  其他
关注(0)|答案(2)|浏览(159)

我正在使用fchollet的图像分割指南来执行语义分割。我已经尝试修改该指南以适合我的数据集,方法是将8位img掩码值标记为1和2,就像Oxford Pets数据集一样。(在class OxfordPets(keras.utils.Sequence):中将减去0和1)

问题是如何获得单个类的IoU度量(例如1)?

我尝试了Stack Overflow建议的不同指标,但大多数都建议使用MeanIoU,我尝试过,但结果是nan loss。下面是使用自动对比后的遮罩示例。PIL.ImageOps.autocontrast(load_img(val_target_img_paths[i]))

该模型似乎训练良好,但准确性随着时间的推移而降低。
另外,有人能帮助**解释一下如何根据y_truey_pred计算指标得分吗?**我不太明白在IOU指标计算中何时使用标签值。

nszi6y05

nszi6y051#

我当时也遇到过类似的问题。我使用了jaccard_distance_lossdice_metric。它们都是基于IoU的。我的任务是二进制分割,所以我想如果你想用它来解决多标签分类问题,你可能需要修改代码。
第一个

rkttyhzu

rkttyhzu2#

您可以使用tf.keras.metrics.IoU方法,您可以在以下位置找到它的文档:https://www.tensorflow.org/api_docs/python/tf/keras/metrics/IoU
此处显示了如何使用它:

import tensorflow as tf

y_true = [0, 1]
y_pred = [0.5, 1.0]  # they must be the same shape

# target_class_ids indicates the class/classes you want to calculate IoU on
loss = tf.keras.metrics.IoU(num_classes=2, target_class_ids=[1])
loss.update_state(y_true, y_pred)
print(loss.result().numpy())

正如您在文档中所看到的,IoU的计算公式为:
true_positives / (true_positives + false_positives + false_negatives)

相关问题