Skip to contents

Formula:

iou <- true_positives / (true_positives + false_positives + false_negatives)

Intersection-Over-Union is a common evaluation metric for semantic image segmentation.

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 NULL, weights default to 1. Use sample_weight of 0 to mask values.

Note, this class first computes IoUs for all individual classes, then returns the mean of IoUs for the classes that are specified by target_class_ids. If target_class_ids has only one id value, the IoU of that specific class is returned.

Usage

metric_iou(
  ...,
  num_classes,
  target_class_ids,
  name = NULL,
  dtype = NULL,
  ignore_class = NULL,
  sparse_y_true = TRUE,
  sparse_y_pred = TRUE,
  axis = -1L
)

Arguments

...

For forward/backward compatability.

num_classes

The possible number of labels the prediction task can have.

target_class_ids

A list of target class ids for which the metric is returned. To compute IoU for a specific class, a list of a single id value should be provided.

name

(Optional) string name of the metric instance.

dtype

(Optional) data type of the metric result.

ignore_class

Optional integer. The ID of a class to be ignored during metric computation. This is useful, for example, in segmentation problems featuring a "void" class (commonly -1 or 255) in segmentation maps. By default (ignore_class=NULL), all classes are considered.

sparse_y_true

Whether labels are encoded using integers or dense floating point vectors. If FALSE, the argmax function is used to determine each sample's most likely associated label.

sparse_y_pred

Whether predictions are encoded using integers or dense floating point vectors. If FALSE, the argmax function is used to determine each sample's most likely associated label.

axis

(Optional) -1 is the dimension containing the logits. Defaults to -1.

Value

a Metric instance is returned. The Metric instance can be passed directly to compile(metrics = ), or used as a standalone object. See ?Metric for example usage.

Examples

Standalone usage:

m <- metric_iou(num_classes = 2L, target_class_ids = list(0L))
m$update_state(c(0, 0, 1, 1), c(0, 1, 0, 1))

## tf.Tensor(
## [[1. 1.]
##  [1. 1.]], shape=(2, 2), dtype=float32)

m$result()

## tf.Tensor(0.3333333, shape=(), dtype=float32)

m$reset_state()
m$update_state(c(0, 0, 1, 1), c(0, 1, 0, 1),
               sample_weight = c(0.3, 0.3, 0.3, 0.1))

## tf.Tensor(
## [[0.3 0.3]
##  [0.3 0.1]], shape=(2, 2), dtype=float32)

m$result()

## tf.Tensor(0.33333325, shape=(), dtype=float32)

Usage with compile() API:

model %>% compile(
  optimizer = 'sgd',
  loss = 'mse',
  metrics = list(metric_iou(num_classes = 2L, target_class_ids = list(0L))))