MeanIoU classtf_keras.metrics.MeanIoU(
num_classes: int,
name: Optional[str] = None,
dtype: Union[str, tensorflow.python.framework.dtypes.DType, NoneType] = None,
ignore_class: Optional[int] = None,
sparse_y_true: bool = True,
sparse_y_pred: bool = True,
axis: int = -1,
)
Computes the mean Intersection-Over-Union metric.
General definition and computation:
Intersection-Over-Union is a common evaluation metric for semantic image segmentation.
For an individual class, the IoU metric is defined as follows:
iou = true_positives / (true_positives + false_positives + false_negatives)
To compute IoUs, the predictions are accumulated in a confusion matrix,
weighted by sample_weight and the metric is then calculated from it.
If sample_weight is None, weights default to 1.
Use sample_weight of 0 to mask values.
Note that this class first computes IoUs for all individual classes, then returns the mean of these values.
Arguments
ignore_class=None), all classes are considered.False, the tf.argmax function
will be used to determine each sample's most likely associated label.False, the tf.argmax function
will be used to determine each sample's most likely associated label.-1.Standalone usage:
>>> # cm = [[1, 1],
>>> # [1, 1]]
>>> # sum_row = [2, 2], sum_col = [2, 2], true_positives = [1, 1]
>>> # iou = true_positives / (sum_row + sum_col - true_positives))
>>> # result = (1 / (2 + 2 - 1) + 1 / (2 + 2 - 1)) / 2 = 0.33
>>> m = tf.keras.metrics.MeanIoU(num_classes=2)
>>> m.update_state([0, 0, 1, 1], [0, 1, 0, 1])
>>> m.result().numpy()
0.33333334
>>> m.reset_state()
>>> m.update_state([0, 0, 1, 1], [0, 1, 0, 1],
... sample_weight=[0.3, 0.3, 0.3, 0.1])
>>> m.result().numpy()
0.23809525
Usage with compile() API:
model.compile(
optimizer='sgd',
loss='mse',
metrics=[tf.keras.metrics.MeanIoU(num_classes=2)])