当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python tf.keras.metrics.OneHotMeanIoU用法及代码示例


计算 one-hot 编码标签的平均 Intersection-Over-Union 指标。

继承自:MeanIoUIoUMetricLayerModule

用法

tf.keras.metrics.OneHotMeanIoU(
    num_classes:int,
    name=None,
    dtype=None
)

参数

  • num_classes 预测任务可能具有的标签数量。将分配形状为(num_classes, num_classes) 的混淆矩阵来累积预测,从中计算度量。
  • name (可选)指标实例的字符串名称。
  • dtype (可选)度量结果的数据类型。

一般定义和计算:

Intersection-Over-Union 是语义图像分割的常用评估指标。

对于单个类,IoU 指标定义如下:

iou = true_positives / (true_positives + false_positives + false_negatives)

为了计算 IoU,预测被累积在一个混淆矩阵中,由 sample_weight 加权,然后从中计算度量。

如果 sample_weightNone ,则权重默认为 1。使用 0 的 sample_weight 来屏蔽值。

此类可用于计算 multi-class 分类任务的平均 IoU,其中标签为 one-hot 编码(最后一个轴每个类应该有一个维度)。请注意,预测也应该具有相同的形状。为了计算平均 IoU,首先通过类轴上的 argmax 将标签和预测转换回整数格式。然后应用与基础MeanIoU 类相同的计算步骤。

请注意,如果标签和预测中只有一个通道,则此类与类 MeanIoU 相同。在这种情况下,请改用MeanIoU

此外,请确保 num_classes 等于数据中的类数,以避免在计算混淆矩阵时出现“标签越界”错误。

单机使用:

y_true = tf.constant([[0, 0, 1], [1, 0, 0], [0, 1, 0], [1, 0, 0]])
y_pred = tf.constant([[0.2, 0.3, 0.5], [0.1, 0.2, 0.7], [0.5, 0.3, 0.1],
                      [0.1, 0.4, 0.5]])
sample_weight = [0.1, 0.2, 0.3, 0.4]
m = metrics.OneHotMeanIoU(num_classes=3)
m.update_state(y_true=y_true, y_pred=y_pred, sample_weight=sample_weight)
# cm = [[0, 0, 0.2+0.4],
#       [0.3, 0, 0],
#       [0, 0, 0.1]]
# sum_row = [0.3, 0, 0.7], sum_col = [0.6, 0.3, 0.1]
# true_positives = [0, 0, 0.1]
# single_iou = true_positives / (sum_row + sum_col - true_positives))
# mean_iou = (0 + 0 + 0.1 / (0.7 + 0.1 - 0.1)) / 3
m.result().numpy()
0.048

compile() API 的用法:

model.compile(
  optimizer='sgd',
  loss='mse',
  metrics=[tf.keras.metrics.OneHotMeanIoU(num_classes=3)])

相关用法


注:本文由纯净天空筛选整理自tensorflow.org大神的英文原创作品 tf.keras.metrics.OneHotMeanIoU。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。