Класс MeanIoU
Класс MeanIoU вычисляет метрику среднего пересечения над объединением
для задач семантической сегментации. Метрика показывает, насколько
предсказанные области совпадают с истинными. Первым параметром
передаётся количество классов num_classes, вторым можно указать
имя метрики name, третьим - тип данных dtype. Класс
наследуется от tf.keras.metrics.Metric.
Синтаксис
tf.keras.metrics.MeanIoU(
num_classes,
[name],
[dtype]
)
Пример
Давайте создадим метрику MeanIoU для трёх классов
и вычислим её значение на простых данных:
import tensorflow as tf
metric = tf.keras.metrics.MeanIoU(num_classes=3)
y_true = tf.constant([0, 0, 1, 1, 2, 2])
y_pred = tf.constant([0, 0, 1, 2, 2, 2])
metric.update_state(y_true, y_pred)
res = metric.result()
print(res)
Результат выполнения кода:
tf.Tensor(0.7777778, shape=(), dtype=float32)
Пример
Давайте вычислим метрику для двумерных тензоров, что часто встречается в задачах сегментации изображений:
import tensorflow as tf
metric = tf.keras.metrics.MeanIoU(num_classes=2)
y_true = tf.constant([[0, 0, 1], [1, 1, 0]])
y_pred = tf.constant([[0, 1, 1], [1, 0, 0]])
metric.update_state(y_true, y_pred)
res = metric.result()
print(res)
Результат выполнения кода:
tf.Tensor(0.4, shape=(), dtype=float32)
Пример
Давайте посмотрим, как сбросить состояние метрики
методом reset_state и вычислить новое значение:
import tensorflow as tf
metric = tf.keras.metrics.MeanIoU(num_classes=3)
y_true = tf.constant([0, 1, 2, 0, 1, 2])
y_pred = tf.constant([0, 1, 2, 0, 1, 2])
metric.update_state(y_true, y_pred)
print(metric.result())
metric.reset_state()
y_pred_wrong = tf.constant([2, 2, 2, 2, 2, 2])
metric.update_state(y_true, y_pred_wrong)
res = metric.result()
print(res)
Результат выполнения кода:
tf.Tensor(1.0, shape=(), dtype=float32)
tf.Tensor(0.0, shape=(), dtype=float32)